[翻译] 设计模式-微服务架构与面向服务架构(SOA)的不同

原文链接

问题

我研究过微服务架构,尝试找出它与SOA(服务分离并独立部署)的不同。谁能告诉我它们的区别,还有微服务的优劣?

回答(投票第一)

我想你可以把微服务的架构风格看成SOA的一种特例。一个普遍被接受的观点(维基百科 面向服务)是,所有的SOA满足四点:

  • 界限明确
  • 服务独立自主
  • 服务间共享schema和协议,而不是共享类
  • 服务的兼容性是基于策略
    - Don Box, Microsoft (pre-.Net 3.0)

Lewis/Fowler带来了规范的定义(microservices):

简单来说,微服务的架构风格是把单一应用的开发,换成一系列小型的服务的方法,每个小服务运行在自己的进程上,它们之间通过轻量的机制进行通信,通常是HTTP API。这些服务围绕业务能力构建,可通过完全自动化的部署机制来独立部署。这些服务需要一个最低限度的集中管理,它可以用不用的编程语言和不同的数据存储技术。

从这个定义明显看出,微服务至少满足前两点(尤其是第二点),值得讨论的是第三点是否满足(我不理解第四点所以不对它做评论)。

微服务中的一个特点:他们一般暴露一个RESTful的API而不是暴露协议和schema(超过了正常HTTP的长度),所以微服务可能不满足第三点,Fowler在上面也提到了:

换成一系列小型的服务的方法,……它们之间通过轻量的机制进行通信,通常是HTTP API。

从下面这句话可以看出另一个微服务风格不同于SOA的方面:

这些服务围绕业务能力构建,可通过完全自动化的部署机制来独立部署。

根据SOA本来的原则,我可以手动拷贝服务的二进制包到生产环境,但是在微服务里,服务的部署和管理都是全自动化的。