一、引子
作为我们这一代软件开发者,特别庆幸亲身经历了从单体服务到SOA、到微服务、再到云原生的整个变迁,从本篇开始,总结归纳一些这些架构模式中的一些关键点,或者说中间的一些本质逻辑,或许并不准确,姑且作为个人的思考。
二、SOA的特征
SOA最早由 Gartner 公司在 1994 年提出,但此后一段时间并没有发展,直至 2006 年,由 IBM、Oracle、SAP 等公司共同成立了 OSOA 联盟(Open Service Oriented Architecture),用于联合制定和推进 SOA 相关行业标准。
回顾当年学习SOA概念时,一系列名称不断在眼前晃悠:SOAP、ESB、BPM,听着就如此复杂,再加上SCA、SDO等等,想要入门确实不简单。
EJB也是在这个阶段在企业应用中得到快速发展和广泛运用。但是依然显得很复杂,催生了spring和Hibernate这类十分流行的框架。
总结SOA特点:
- 解决大型单体应用的背景下产生,虽然拆分但有限
- 一般是共享数据库
- 共享数据总线,通信协议复杂,例如SOAP、其他WS*标准,看着都头大
- 从一个庞大单体拆分成多个较大单体
三、微服务
最早是2005年提出,是由 Peter Rodgers 博士在 2005 年度的云计算博览会(Web Services Edge 2005)上首次使用,当时的说法是“Micro-Web-Service”,一种专注于单一职责的、语言无关的、细粒度 Web 服务(Granular Web Services)。
微服务是在SOA的发展过程中催生出来。回顾一下,发现我们在构建复杂业务系统的时候,非常希望能拆小的,实现单一职责,满足康威定律,但为何没有一开始这么处理呢?主要是因为拆分后面临了RPC、数据一致性、服务治理、运维监控等诸多挑战,微服务也是在这些挑战在逐步被解决或者缓解的情况下才逐步得到广泛运用。
比如RPC框架层出不穷,并且非常简单易用,阿里的dubbo、thrift、rest、grpc等。
2012 年,在波兰克拉科夫举行的“33rd Degree Conference”大会上,Thoughtworks 首席咨询师 James Lewis 做了题为《Microservices - Java, the Unix Way》的主题演讲,其中提到了单一服务职责、康威定律、自动扩展、领域驱动设计等原则,却只字未提 SOA。微服务真正的崛起是在 2014 年,Martin Fowler 与 James Lewis 合写的文章《Microservices: A Definition of This New Architectural Term 》让大众首次了解到微服务。
微服务的架构基本上完全取代了SOA架构。
总结微服务特点:
- 围绕业务能力构建系统架构,领域驱动设计成为重要的设计思想
- 分散治理,独立自治,康威定律被更多人关注
- 基础设施自动化,运维、系统管理成本大大降低,资源动态扩缩容也成为可能
- 服务治理能力带来容错、高可用集群
文末彩蛋:这些Java界技术圈的名人你了解吗?