什么是SOA

SOA定义来讲:

  • 将支持企业的IT业务系统分解为多个组件,让每个组件都独立的提供离散、自治、可复用的服务能力;
  • 通过服务的组合和编排来实现上层的业务流程

总结起来就一句话,找到服务,组合和组装服务,实践原则:

  • 业务能力组件化
  • 组件能力服务化
  • 服务能力可编排化

SOA 示例

下面以新公司注册为例说明下SOA,你要完成一个新公司注册一定涉及到根工商,税务,银行多个政府部门和金融单位业务协同才能完成。要完成协同首先各个业务部门要将自己能力暴露为服务,即找到服务的过程。

找到服务

找到服务后,需要根据业务流程需要将服务组装起来,形成一个完整流程。

组装服务

单体应用(业务系统)的缺点

  • 单体应用虽然分了模块,但仍然是紧耦合,数据无法拆分,逻辑层代码包也无法拆;
  • 扩展困难,特别是DB的扩展能力,不是简单的RAC/HA集群可以解决的;

单体缺点

从运行态的视角:

  1. DB走HA或RAC集群,但是扩展性是大问题,很多应用后期即使走了RAC也无法解决性能问题。
  2. 部署的是一个大WAR包,无法分模块独立分开部署。
  3. WAR部署当前可以是物理机,也可以是虚拟机,但是WAR包偏重,很少直接部署到Docker容器的。
  4. Application Server层的性能可以通过负载均衡方式进行水平扩展。

从设计态的视角:

  1. DB本身是无法拆分的,各个模块的数据库,视图全在一个大的SID或Schema里面。
  2. 模块之间的交互除了通过逻辑层外,还有些是直接通过DB层的跨表连接完成的。
  3. 逻辑层的模块和模块之间往往是紧耦合的,相互间的调用随意,很多都是内部API或方法调用。

什么是微服务?

SOA的时候都是谈业务系统间的服务共享和集成,即最小管理单位是业务系统,如采购系统、ERP系统;但是如果进一步我们将管理最小单元变化为组件,即采购系统里面的采购订单组件,供应商组件,那这就是SOA思想进一步内化到业务系统内部。而正是由于此,引出了微服务架构。

微服务的优点 从运行态的视角:

  1. 数据库在部署的时候是可物理拆分的,即不同微服务模块的数据库可以独立部署。
  2. 微服务模块的应用组件包是独立部署的。
  3. WAR包由于已经按模块拆分为多个,因此每个WAR包相对来说更加轻,而容易部署到类似Docker容器上。
  4. 由于WAR包之间有接口交互和协同,需要增加微服务网关实现服务管理和治理。

从设计态的视角:

  1. 数据库,逻辑层和界面展现在设计的时候就是完全相对独立的一套。
  2. 逻辑层的各个组件之间只能通过Service API接口进行交互,微服务架构下推荐轻量Http Rest接口。
  3. 逻辑层各个模块之间彻底实现松耦合。各个模块本身也更加轻量。

参考

微服务与SOA之间差了一个ESB

我们为什么需要微服务架构

Comments