这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
了解学习微服务
为什么学习微服务架构?
- 微服务架构是当前大多数互联网公司的标准架构
微服务架构的由来及原理
- 系统架构演变原因
- 互联网的快速发展
- 硬件的快速发展
- 需求多样化
- 开发人员数量增加
- 计算机理论和技术的发展
- 系统架构的演变过程
单体 -> 分布式 -> SOA -> 微服务- 单体架构:所有逻辑放在一个项目里
- 优点:
- 性能最高
- 冗余小
- 缺点:
- debug困难
- 模块相互影响
- 模块分工、开发流程难以制定
- 优点:
- 分布式架构:抽出业务无关的公共模块
- 优点:
- 业务无关的独立服务
- 缺点:
- 服务模块bug可导致全站崩溃
- 调用关系复杂
- 不同服务冗余
- 优点:
- SOA架构:面向服务
- 优点:
- 服务注册
- 缺点:
- 整个系统设计是中心化的
- 需要从上至下设计
- 重构困难
- 优点:
- 微服务架构: 彻底的服务化
- 优点:
- 开发效率高
- 业务独立设计
- 自下而上
- 故障隔离:即不同微服务间互不影响
- 缺点:
- 治理、运维难度高
- 观测挑战
- 安全性
- 分布式系统
- 优点:
- 单体架构:所有逻辑放在一个项目里
- 微服务架构的核心要素
- 服务治理
- 可观测性
- 安全
服务治理功能是如何实现的
-
基本概念
- 服务:一组具有相同逻辑的运行实体
- 实例:一个服务中,每个运行实体即为一个实例
- 实例和进程的关系:没有必然对应关系,一对多,反之不常见
- 集群:异常按照服务内部逻辑划分,包含多个实例
- 常见实例承载形式: 进程、VM等
- 有状态/无状态服务:服务的实例是否存储可持久化数据
-
服务发布的难点
- 服务不可用
- 服务抖动
- 服务回滚
-
稳定性治理
- 限流
- 熔断
- 过载保护
- 降级
-
重试的意义
- 降低错误率: 连续错误的概率更低
- 降低长尾延时:对于偶尔出现的较长请求,重试可能提前成功返回
- 容忍暂时性错误: 某些暂时性异常,重试可以规避
- 避开下游故障实例:某些实例出现故障,重试其它实例可以成功
-
重试的难点
- 幂等性
- 重试风暴
- 超时设置