Spiga

构建高可用应用(一):架构分层

2017-06-29 23:06:29

什么是架构分层

架构的原理,分层的意义所在

富士康工厂10000人以上规模,目标:每天百万级的手机产出。如何实现呢?

角色分类,节点分离,在管理上面很常见。同理,架构也不外乎如此。

分层是表示将功能进行有序的分组:应用程序专用功能位于上层,跨越应用程序领域的功能位于中层,而配置环境专用功能位于低层。分层从逻辑上将子系统划分成许多集合,而层间关系的形成要遵循一定的规则。通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。子系统的分组标准包含以下几条规则可见度。各子系统只能与同一层及其下一层的子系统存在依赖关系

为什么要架构分层

分层为什么在高可用/高并发场景必不可少

  • 分层结构将应用系统正交地划分为若干层,每一层只解决问题的一部分,通过各层的协作提供整体解决方案。大的问题被分解为一系列相对独立的子问题,局部化在每一层中,这样就有效的降低了单个问题的规模和复杂度,实现了复杂系统的第一步也是最为关键的一步分解。
  • 分层结构具有良好的可扩展性,为应用系统的演化增长提供了一个灵活的框架,具有良好的可扩展性。增加新的功能时,无须对现有的代码做修改,业务逻辑可以得到最大限度的重用。同时,层与层之间可以方便地插入新的层来扩展应用。
  • 分层架构易于维护。在对系统进行分解后,不同的功能被封装在不同的层中,层与层之间的耦合显著降低。因此在修改某个层的代码时,只要不涉及层与层之间的接口,就不会对其他层造成严重影响。

反例,过度设计,分层会给我们带来哪些弊端

  • 功能上线后,用户不关心
  • 资源浪费
  • 迭代速度慢,失去业务拓展的好时机

使用场景

分层在高可用使用场景

  • 服务器架构keeolived
  • 服务器架构脑裂场景

分层在高并发使用场景

  • 服务器弹性伸缩
  • nginx反向代理

分层案例

反向代理同步架构

http://nginx.org

CQRS异步架构

http://liuy.com/files/NiuNiuCQRs.zip

微服务中台架构

经典服务器分层架构图