这是我参与「第五届青训营 」伴学笔记创作活动的第11天
单体架构
-
应用开发采用单体架构,所有的代码在一个代码仓库中管理,最后打包成一个部署包,运行在一个进程上。
-
单体架有以下的好处:
- 应用开发简单,基本所有的代码都在一个仓库中管理;
- 非常方便进行大规模的更改;
- 容易测试,只需要写几个端对端的测试;
- 部署简单明了,横向扩展非常容易.
-
单体架构的弊端
- 复杂度不断提升,模块之间的耦合度越来越高,维护成本很高;
- 更新迭代周期变长,从代码提交到实际部署的周期会拉长,甚至有时都无法交付;
- 难以扩展与迭代演进,使用过时的技术栈或组件一直无法升级.
分布式架构
-
抽出业务无关的公共模块
-
优点:
- 业务无关的独立服务
-
缺点:
- 服务模块bug可导致全站瘫痪
- 调用关系复杂
- 不同服务冗余
SOA架构
-
面向服务
-
优点:
- 通过服务注册中心进行解耦
-
缺点:
- 整个系统设计是中心化、从上至下的,因此后期重构困难
微服务架构
-
彻底的服务化
-
优点:
- 开发效率高
- 业务独立设计
- 自上而下
- 故障隔离
-
缺点:
- 运维难度高
- 观测挑战
- 安全性
- 分布式系统
-
核心要素
- 服务治理
- 可观测性
- 安全
微服务架构中需要考虑决策模型由多个模式组成。从层次上大致可分为应用相关、应用基础相关、基础设施相关三大层。
-
应用相关模式: 服务拆分、数据库的架构、维护数据一致性问题、测试相关;
-
应用基础设施相关模式: 边界问题、安全性、事务性消息、通信风格、可靠性、可监测性;
-
基础设施相关模式: 应用/服务的部署、服务发现等.
微服务架构核心服务治理功能
- 服务发布:即让一个服务升级运行新代码的过程。
- 难点:服务不可用、服务抖动、服务回滚。
- 蓝绿部署--需要两倍资源--适用于流量低的时段。
- 灰度发布(金丝雀发布)
- 负载均衡:负责分配请求在每个下游实例上的分布。
- 流量治理:在微服务架构下,我们可以基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制。
- 稳定性治理
- 限流、熔断、过载保护、降级