早期的分布式系统是基于面向服务的架构SOA。SOA是微服务的前身,主要是为了摆脱单体应用的问题,达到以下效果:
- 充分利用现有的基础设施;
- SOA体系结构依赖于消息传递(AMQP,MSMQ)和SOAP作为主要的远程访问协议。
- 快速响应业务变化;
根据一位印度小哥的介绍,我画了下面这张SOA的架构图:
也就是说,异构系统,也可以通过消息中间件的协议转换进行相互调用。一般这个消息中间件通常是用ESB企业总线实现的。ESB 是传统中间件技术与XML、Web服务等技术相互结合的产物,消除了不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。不同公司提供了不同的ESB中间件实现。
但是其表现并不佳,主要是其太重了,主要体现在:
- SOA更强调系统集成的规范与便利性,对业务服务本身没有过多要求,一般服务拆分粒度不够细,模块间仍然会有比较大的耦合,迭代困难;
- SOA服务之间的通信相对比较复杂,重量级。WebService中常用的SOAP通信协议,通常使用XML格式进行通信,数据冗余,协议过重;EBS通过总线隐藏内部复杂性,其中心化管理模式,系统变更,对系统的影响范围会扩大。
- 在SOA模型下通常只有一个数据库,限制了系统的扩展性;
- 服务化管理和治理设施不完善;
后来逐渐演变为了现在的MSA(Micro-Service Archeticture 微服务架构),从而实现了更加松耦合以及更加灵活的系统。