1 可扩展架构的基本思想和模式
架构可扩展模式:分层架构、SOA 架构、微服务和微内核等
所有的可扩展性架构设计,背后的基本思想都可以总结为:有建设性地拆;
将原本大一统的系统拆分成多个规模小的部分,使得软件系统变得更加优美(具备更好的可扩展性),在扩展时只修改其中一部分即可,无须整个系统到处都改,通过这种方式来减少改动范围,降低改动风险;
合理的拆分,还能够强制保证即使程序员出错,出错的范围也不会太广,影响也不会太大。
拆分思路:
面向流程拆分(数据移动的流程):将整个业务流程拆分为几个阶段,每个阶段作为一部分。
面向服务拆分:将系统提供的服务拆分,每个服务作为一部分。
面向功能拆分:将系统提供的功能拆分,每个功能作为一部分。
从范围上来看“流程”“服务”“功能”三者的联系和区别,从大到小依次为:流程 > 服务 > 功能
不同的拆分方式,本质上决定了系统的扩展方式:
- 面向流程拆分,对应分层架构
扩展时大部分情况只需要修改某一层,少部分情况可能修改关联的两层,不会出现所有层都同时要修改。
- 面向服务拆分,对应SOA、微服务架构
对某个服务扩展,或者要增加新的服务时,只需要扩展相关服务即可,无须修改所有的服务。
- 面向功能拆分,对应微内核架构
对某个功能扩展,或者要增加新的功能时,只需要扩展相关功能即可,无须修改所有的服务。
可以组合使用这几个系统架构
以学生管理系统为例:
- 整体系统采用面向服务拆分中的“微服务”架构,拆分为“注册服务”“登录服务”“信息管理服务”“安全服务”,每个服务是一个独立运行的子系统,有各自独立的数据库,缓存,服务器
- “注册服务”子系统可以采用面向流程拆分的分层架构
- “登录服务”子系统可以采用面向功能拆分的“微内核”架构,包括手机号登录、身份证登录、邮箱登录三个功能
2 传统的可扩展架构模式:分层架构和SOA
2.1 分层架构
也叫 N 层架构,通常情况下,N 至少是 2 层。
常见模式:C/S 架构、B/S 架构、逻辑分层架构。
常见的是 3 层架构(例如,MVC、MVP 架构)、4 层架构,5 层架构的比较少见,一般是比较复杂的系统才会达到或者超过 5 层,比如操作系统内核架构。
分层架构设计最核心的一点就是需要保证各层之间的差异足够清晰,边界足够明显,让人看到架构图后就能看懂整个架构,这也是分层不能分太多层的原因。
分层架构之所以能够较好地支撑系统扩展,本质在于隔离关注点(separation of concerns),即每个层中的组件只会处理本层的逻辑,分层时要保证层与层之间的依赖是稳定的,才能真正支撑快速扩展。
分层结构的另外一个特点就是层层传递,也就是说一旦分层确定,整个业务流程是按照层进行依次传递的,不能在层之间进行跳跃,这种约束的好处在于强制将分层依赖限定为两两依赖,降低了整体系统复杂度,缺点就是冗余了代码,性能也就相应地有所影响
2.2 SOA
SOA的出现主要是为了应对传统 IT 系统存在的问题:功能重复、系统来源不同、系统之间通信需要定制开发
SOA 提出了 3 个关键概念来处理这些问题:服务、ESB、松耦合
典型架构:
soa是集成的思想,是解决服务孤岛打通链条,是无奈之举。esb集中化的管理带来了性能不佳,厚重,复杂性高等问题。也无法快速扩展。不适合互联网的业务特点
SOA是把多个系统整合,而微服务是把单个系统拆开来,方向正好相反