http://www.infoq.com/cn/articles/the-evolution-of-distributed-systemshtml
分布式系统(确切地说应该是分布式计算机系统)从它诞生到如今已通过去了很长的时间。在好久之前,一台电脑一次只能完成一项特定的任务。若是咱们须要同时完成多项任务,则须要多台计算机并行运行。可是,并行运行并不足以构建真正的分布式系统,由于它须要一种机制来在不一样计算机或者那些运行在计算机上的程序之间进行通讯。这种在多台计算机之间交换/共享数据的需求催生了面向消息通讯的想法,即两台计算机使用包含了数据的消息来共享数据。文件共享、数据库共享等其余机制当时尚未出现。程序员
图片来源:https://dzone.com/articles/building-integration-solutions-a-rethinkweb
接着,咱们进入了多任务操做系统和我的电脑的时代。利用Windows、Unix、Linux等操做系统,咱们能够在同一台计算机上运行多个任务。这使得分布式系统开发人员可以在一台或者几台经过消息传递链接的计算机内构建和运行整个分布式系统。这催生了面向服务的架构(SOA),其中每一个分布式系统能够经过一组集成在一台计算机或多台计算机上运行的服务来构建。咱们经过WSDL(用于SOAP协议)或WADL(用于REST协议)等语言适当地定义服务接口。接着,服务的使用者将利用这些接口来进行客户端的实现。docker
图片来源:https://www.akuaroworld.com/telecom-oss-new-network-architecture/soa-model/数据库
随着计算能力和存储价格的下降,世界各地的组织都开始使用分布式系统和基于SOA的企业IT系统。可是,一旦服务或系统的数量增长,这些服务之间的点到点链接就再也不是可扩展和可维护的了。这催生了集中式“服务总线”概念的产生。服务总线经过相似集线器的架构将全部系统链接在一块儿。这个组件被称为ESB(企业服务总线)。它做为一个“语言”翻译者,就像一个中间人在帮助一群使用不一样“语言”但但愿相互通讯的人进行沟通。在企业应用中,“语言”表明着在通讯时不一样系统的消息传递协议和消息格式。编程
图片来源:http://ibmwebsphereenterpriseservicebus.blogspot.com/2015/09/enterprise-requirements-for-esb.htmlcentos
这种模式工做得很好,即便在今天也能正常工做。随着万维网的普及和模型的简化,基于REST的通讯比基于SOAP的通讯模型变得更加流行。这促进了基于应用程序编程接口(API)的REST模型通讯的发展。因为REST模型的简洁特性,咱们须要在标准REST API实现之上实现安全(身份验证和受权)、缓存、流控和监控等各类类型的功能。但咱们并不想独立地在每一个API上实现这些功能,而是须要一个公共组件将这些功能应用于这些API之上。这样的需求催生了API管理平台的发展。如今,它已经成为了任何分布式系统的核心功能之一。api
图片来源:https://www.infoq.com/presentations/api-management-architecture缓存
随后,咱们见证了分布式系统大爆炸的时代。Facebook、Google、Amazon、Netflix、LinkedIn、Twitter等互联网公司变得异常庞大。他们开始想要构建跨越多个地理区域和多个数据中心的分布式系统。这样的需求使他们的技术焦点转向了一切开始的地方。工程师们开始思考单台计算机和单个程序的概念。他们再也不把一台计算机看成一台计算机来看,而在同一台计算机内建立多台虚拟计算机。这催生了关于虚拟机的想法,即同一台计算机能够充当多台计算机而且所有并行运行。尽管这是一个还不错的主意,但在宿主计算机的资源利用方面,这并非最好的选择。运行多个操做系统须要更多的资源,但在同一个操做系统里运行多个程序并不须要这些资源。安全
这些问题最终催生了关于容器技术的想法。容器只使用一个宿主操做系统(Linux)的内核,就能够运行多个程序并分别依赖于相互独立的运行时。这个概念在Linux操做系统上已经有一段时间了。随着基于容器技术的应用程序部署的普及,它变得更加流行而且有了不少改进和提高。容器能够像虚拟机同样工做,却不须要多一个操做系统的开销。您能够将应用程序和全部相关的依赖项放入容器镜像中。它即可以被放在任何能够运行容器的宿主操做系统中运行。Docker和Rocket是两个热门的容器构建平台。
图片来源:https://techglimpse.com/docker-installation-tutorial-centos/
容器技术为Netflix、LinkedIn和Twitter等组织提供了底层框架,用于构建他们要求苛刻的永远在线的多区域、多数据中心应用平台。但这并不意味着利用容器技术没有任何难点。基于容器的部署带来的轻量特性让跨多个容器的平台维护和编排变得很是复杂。随着微服务架构(MSA)的出现,单体式应用程序被分红更小块的微服务。这些微服务可以完成整个服务里的某一个特定功能并部署在容器中(在大多数状况下均可以)。这给分布式系统生态系统带来了一系列新的需求。要让系统最终保持一致,而且彼此之间没有太多复杂的通讯。
图片来源:https://martinfowler.com/articles/microservices.html
这些新的需求最终帮助工程师们构建了一个容器编排系统。该系统可用于维护更大规模的容器部署的一致性。毋庸置疑的是,这个领域的顶尖技术来自Google。由于它们的规模很是大。他们构建了名为“Kubernetes”(又名k8s)的容器编排平台,并成为大规模容器编排需求的事实标准。k8s让工程师能够:
Kubernetes和Docker让应用程序员的生活更加轻松。他们不用再考虑他们的应用在不一样的环境(操做系统、开发环境、测试环境、生产环境等)下的不一样表现。他构建的容器镜像在全部环境中运行表现几乎彻底相同,由于全部依赖项都被打包到镜像中了。
图片来源:https://redmondmag.com/articles/2017/08/01/container-orchestration-with-kubernetes.aspx
可是,尽管咱们有了容器和编排框架,咱们仍然须要一个管理这些服务器的团队。这意味着数据中心须要使用像Docker和Kubernetes这样的技术进行管理,以确保它对于应用程序来讲就像一个单台计算机同样。若是不是你本身来作这些事情,而是别人来为你管理这部分工做,这正是serverless架构所带来的便利。您的服务器将由第三方云提供商(如Amazon(Lambda),Microsoft(Azure Functions)或Google(Cloud Functions))进行管理。如今,分布式系统将由应用程序员进行编程,而基础设施管理将由云提供商完成。这是分布式系统发展的最新状态,而且会不断地发展下去。
查看英文原文:https://medium.com/@chanakaudaya/the-evolution-of-distributed-systems-fec4d35beffd