与许多人认为的不同,微服务的概念已有相当长的历史,SOA(面向服务的体系架构)也不是 90 年代才被提出的。在最近举办的伦敦微服务大会上, Greg Young 就微服务核心概念的前世今生进行了演讲。其中他表示,在过去的50 年间,我们一直在使用服务这一概念背后的核心思想。
Young 引用了 Martin Fowler 对微服务主要特性的描述,最重要的是其独立替换系统中单个服务的能力、对业务能力的组织以及智能端点(smart endpoint)与哑管道(dumb pipes)的使用,Young 提到的这些特性SOA 也同样具备。
Young 提及,在 1970 年代最初提出的面向对象模型中,可以将一个对象理解为一个小型的计算机,用户通过向它发送信息使其工作。同时期的参与者(Actor)模式也是基于相似的概念,将参与者作为一个小计算机,用户向参与者的邮箱发送信息。它们都是微服务核心概念的前身,虽然使用的工具或消息传递方式不尽相同,但是内在的思想并没有改变。如今我们认为SOA 已经失败了,而微服务将会成功,但Young 表示SOA 的基础概念并没有任何错误,微服务的优点在SOA 架构中也早已存在。
回顾近50 年的经验教训,Young 引用了分布式计算第一定律来概括:如果不是真正需要就不要让系统分布式。将应用分成多个服务,再将它们部署在同一台服务器上,甚至在同一个进程上,这样做并没有不对。Young 表示,大部分系统,尤其是小型业务系统,并不需要分布式来提供可伸缩性,但是可以通过分布式来提升可用性。
我们真正需要的是服务间的隔离。当各个服务在同一服务器的各自进程中运行时,我们可以确保服务间遵循相互的协议。进一步隔离的方式是将各个服务运行在独立的Docker 容器中。这样减少了各服务间内容的共享,从而达到更好的隔离性。再进一步可以将每个服务运行在独立的节点上。
选择一定层级隔离的原因之一是为了处理相关的错误。当在同一个进程中运行所有的微服务时,如果进程重启,所有的服务会被停止。而将服务运行在各自的进程中的话,单个进程重启只会影响一个服务。当然重启服务器会停止所有服务,所以将各个服务部署在独立的服务器上或双服务器双实例,会大大减少重启给服务可用性带来的影响。
当然每一种隔离层级都伴随着相应的成本。使用一台服务器多个进程相对于每个服务一个节点更容易实现。这其中并没有谁对谁错,有的只是各因素间的权衡。在提升系统的隔离级别的同时,你也会相应增加系统的成本和复杂度。Young 同时引用 Simon Brown 的话:
如果你无法在单进程的独立应用上实现构建,那你如何确信在引入网络通信后问题可以得到解决?
Young 认为,使用不同的隔离策略的一个优势是我们不需要提前做出一些决定,我们也不需要保持生产环境和开发环境使用一样的隔离级别。他表示这也是使用微服务架构的一个主要好处。
明年的伦敦微服务大会将与2017 年11 月6 至7 日举办。
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论