写一点自己学习之后的理解,主要是为了加深理解以及作为日后回想的依据;
我并没有实际工业生产经验,写的不对的地方请多指教。
发展历史
从单机系统到分布式
应用程序开始时规模不大,单机就可以支持;但随着用户需求的不断增加,单一台服务器已经无法支撑;于是将一个大型的系统
拆分到多个服务器上,于是产生了分布式。
SOA
SOA是分布式的一种表现形式,全称是面向服务的架构(Service-oriented architecture)
主要解决的问题是,拆分后多个服务之间的复杂依赖关系,试想一种最坏的情况:每个服务要被其他所有服务依赖,每个服务也要
依赖其他所有服务,这样所有都强耦合在了一起,这该是多么糟糕。
SOA的实现方式是加入了一个帮观者,一个第三方——数据总线,所有的服务不再直接依赖服务,而是依赖于数据总线调用者需要调用某服务时,向数据总线发出请求,总线接受请求并转发到对应的服务去;而调用者不需要知道被调用服务的具体是怎样、在哪里,只需要想总线请求。
通过这样的方式便可以实现服务与服务之间的解藕
通过定义服务的接口规范,服务与服务的具体实现便可以完全解藕,每个服务只需遵从接口规范就可以实现依赖
微服务
微服务是在SOA出现之后才发展起来的,微服务的目的也是为将服务分割放到多个服务器上
微服务的实现方法是通过将服务注册到服务注册中心,需要调用服务时通过服务注册中心获取服务
SOA与微服务的区别
实现技术上
- SOA可以通过Dubbo等框架实现
- 微服务使用SpirngCloud等框架
传输协议及消息载体
- Dubbo用的rpc (远程过程调用)——服务消费者(comsumer)将要调用的方法及参数序列化后发送给服务提供者(provider),provider将消息反序列化,provider运行之后将结果序列化后再发回给consumer,consumer再反序列化得到想要的结果
- 微服务采用http协议——使用restful API进行传输
写到这其实有点迷惑,因为实现的技术以及采用的协议并不应该作为区分SOA和微服务的依据。
- 真正的区别:服务的划分
- SOA没有将服务完全划分,数据库没有分开
- 微服务每个服务都是可以独立运行的小系统
当然 分库之后就要面临分布式事物的问题,传统的单机数据库可以达到ACID的要求,而在分布式的情况下适用CAP理论以及BASE理论。