分层架构和SOA

4,014 阅读4分钟
  • 注:文章来源:极客时间的专栏《从0开始学架构》

分层架构

  • 它也叫分层架构,通常情况下,N至少是2层。例如,C/S架构、B/S架架构、MVC、MVP、操作系统内核架构
1、C/S架构、B/S架构
  • 划分的对象是整个系统,划分的维度是用户交互,即将和用户交互的部分独立为一层,支撑用户交互的后台作为另外一层。
2、MVC架构、MVP架构
  • 划分的对象是单个业务子系统,划分的维度是职责,将不同的职责划分到独立层,但各层的依赖关系比较灵活

3、逻辑分层架构
  • 划分的对象可以是单个业务子系统,也可以是整个业务系统,划分的维度也职责
  • 逻辑分层架构中的层是自顶向下依赖的
  • 典型的有操作系统内核架构、TCP/IP架构
  • 下面是Android操作系统架构图
  • 下面是典型的J2EE系统架构图
  • 下面是针对整个业务系统进行逻辑分层的架构图
分层架构设计核心
  • 保证各层之间的差异足够清晰,边界足够明显,让人看到架构图后就能看懂整个架构
  • 较好地支撑系统扩展,本质在于隔离关注点,即每个层中的组件只会处理本层的逻辑
  • 例如,Linux内核为了支撑不同的文件系统格式,抽象了VFS文件系统接口

优势
  • 分层架构的优势就体现在通过分层强制约束两两依赖,一旦自由选择绕过分层,时间一长,架构就会变得混乱
缺点
  • 性能,因为每一次业务请求都需要穿越所有的架构分层

SOA

  • Service Oriented Architecture,面向服务架构
背景
  • 企业各部门有独立的IT系统,比如人力资源系统、财务系统、销售系统,这些系统可能都涉及人员管理,各IT系统都需要重复开发人员管理的功能。例如,某个员工离职后,需要分别到上述三个系统中删除员工的权限
  • 各个独立的IT系统可能采购于不同的供应商,实现技术不同,企业自己也不太可能基于这些系统进行重构
  • 随着业务的发展,复杂度越来越高,更多的流程和业务需要多个IT系统合作完成。由于各个独立的IT系统没有标准的实现方式(例如,人力资源系统用Java开发,对外提供RPC;财务系统用C#开发,对外提供SOAP协议),每次开发新的 流程和业务,都需要协调大量的IT系统,同时定制开发,效率很低。
SOA提出的3个关键概念
1、服务
  • 所有的业务功能都是一项服务,服务就意味着要对外提供开放的能力,当其他系统需要使用这项功能时,无须定制化开发
  • 服务可大可小,可简单也可复杂
2、ESB
  • Enterprise Service Bus,企业服务总线
  • ESB将企业中各个不同的服务连接在一起
  • SOA使用ESB来屏蔽异构系统对外提供各种不同的接口方式,以此达到服务间高校的互联互通
3、松耦合
  • 目的是减少各个服务间的依赖和互相影响
典型的SOA架构如下:

理念
  • SOA架构是比较高层级的架构设计理念,一般情况下说企业采用了SOA的架构来构建IT系统,但不会说某个独立的系统采用了SOA的架构。
  • 例如,某企业采用SOA架构,将系统分为“人力资源管理服务”“考勤服务”“财务服务”,但人力资源管理服务本身通常不会再按照SOA的架构拆分更多服务,也 不会再使用独立的一套ESB,因为这些系统本身可能就是采购的,ESB本身也是采购的,如果人力资源系统本身重构为多个子服务,再部署独立的ESB系统,成本也很高,也没什么收益

注:有兴趣了解极客时间专栏的同学,可以查看极客时间专栏—可提供返现服务