问题
我研究过微服务架构,尝试找出它与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本来的原则,我可以手动拷贝服务的二进制包到生产环境,但是在微服务里,服务的部署和管理都是全自动化的。