SOA与微服务
SOA 全称(Service Oriented Architecture),中文意思为“面向服务的架构”。他是一种设计方法,其中包含多个服务,服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中。各个服务之间通过网络调用。
SOA就是一个包含多个服务,服务之间通过配合对外提供一系列功能的架构。每个服务独立部署,服务之前通过网络调用。
那么SOA的落地实现有哪些呢?
1、SOA是一种理念,它的主要特性–面向服务的分布式计算,服务间松散耦合,支持服务的封装,服务注册和自动发现,以服务契约方式定义服务交互方式。但是,SOA并没有定义出具体的实现方式,目前有两套SOA理念的实现方式:中心化和去中心化,这两套架构并没有优劣之分,还是要针对企业的根本诉求。
2、SOA中心化的实现方式就是ESB,ESB的根本诉求是为了解决异构系统之间的连通性,通过协议转换、消息解析、消息路由把服务提供者的数据传送到服务消费者。所以,ESB是中心化的,很重,有一定的逻辑,但它的确可以解决一些公用逻辑的问题。
(此处中心化指的是治理中心化)
3、SOA去中心化的实现方式的根本诉求是扩展性,实现方式就是微服务。
中心化实现
ESB(企业服务总线),简单 来说 ESB 就是一根管道,用来连接各个服务节点。为了集成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通;
服务需要先在ESB上注册,这样其他服务调用该服务时,需要先请求到ESB服务器,ESB从已注册的服务列表找到提供该服务的服务器地址完成转发,该服务接到请求处理完毕后,也先返回到ESB服务器上,再由ESB服务器返回到调用方。

典型系统: 腾讯里约智能网关、北京市总线、目录链
去中心化实现
微服务

典型系统: 京东、淘宝
但是微服务真的是去中心化吗?
微服务去中心化架构下为何还要用API网关?????
api网关(鉴权、日志、负载均衡、限流熔断、服务路由)、配置中心、注册中心、
限流、熔断、降级
API网关是内部微服务的统一对外出口,所有需要外部的应用或访问的接口都通过API网关暴露一个统一的地址给外部使用。因此API网关最基本的作用首先是要实现一次接口服务的代理,实现内部的微服务对外界透明。否则所有的内部微服务将全部暴露给外部应用,这个风险是相当大的。
在微服务架构里面的注册一定要将微服务注册和微服务API接口注册两个概念分开。
微服务注册中心只到微服务模块级注册,而API网关可以到API接口级别注册。
微服务架构
微服务架构其实和 SOA 架构类似,微服务是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。
微服务的特征
- 通过服务实现组件化
- 按业务能力来划分服务和开发团队
- 去中心化(此处中心化指的是去中心化数据管理和去中心化服务治理)
- 单一职责:微服务中每个服务都对应唯一的业务能力
- 微:微服务的拆分粒度很小,例如一个用户管理可以作为一个服务。每个服务很小,但是五脏俱全
- 面向服务:服务对外暴露Rest风格服务接口API,不限制
- 自治:
- 团队独立
- 技术独立:因为面向服务,不关心使用技术/语音,提供Restful接口即可
- 前后端分离:提供统一的Rest接口,后端不再为PC、移动端单独开发不同的接口
- 数据库分离:每个服务都使用自己的数据库,很少情况出现多数据源的情况
- 部署独立:每个服务都是独立的组件、可复用、可替换、低耦合,易维护。
组件表示一个可以独立更换和升级的单元,就像PC中的CPU、内存、显卡、硬盘一样,独立且可以更换升级而不影响其他单元。如果我们把PC作为组件以服务的方式构建,那么这台PC只需要维护主板和一些必要的外部设备。CPU、内存、硬盘都是以组件方式提供服务,PC 需要调用 CPU 做计算处理,只需要知道 CPU 这个组件的地址即可。
微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想
SOA架构和微服务架构的差别
微服务不再强调传统SOA架构里面比较重的 ESB 企业服务总线,同时 SOA 的思想进入到单个业务系统内部实现真正的组件化。
Docker 容器技术的出现,为微服务提供了更便利的条件,比如更小的部署单元,每个服务可以通过类似 Node或者 Spring Boot 等技术跑在自己的进程中。
SOA 注重的是系统集成方面,而微服务关注的是完全分离。
微服务机构和SOA架构都是对系统进行拆分;
微服务架构基于SOA架构
管理方面:SOA着重中央管理(ESB),微服务注重分散管理
功能 SOA(ESB) 微服务 组件大小 大块业务逻辑,粗粒度 单独任务或小块业务逻辑,细粒度 业务划分方式 水平多层 纵向业务划分 耦合 通常松耦合 总是松耦合 管理 着重中央管理 着重分散管理 通信方式 使用重量级通信方式,ESB充当服务之间通信的角色 使用轻量级通信方式,如HTTP RESTful 应用场景 庞大、复杂、异构的企业级系统 快速、轻量级系统