这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天,对前一个阶段学习的微服务架构的内容做一个总结。
第一课:微服务架构介绍
架构分类/发展
系统架构演进:互联网爆炸性发展\
- 单体架构:性能高,冗余小;模块分工困难,易耦合。
- 分布式架构:抽出业务无关公共模块;模块bug会导致全部崩溃
- SOA:多服务注册中心,但设计是中心化的
- 微服务:从下而上的业务独立设计;劣势在于治理难度变大。
核心要素
- 服务配置和治理
- 链路追踪和监控
- 安全性
第二课:微服务架构原理及特征
服务:相同逻辑(同一段代码)的运行实体,
实例:服务中的每个运行实体,承载形式如VM,进程
有状态服务:含有数据存储的服务
微服务就是本质是运行同一段代码的多个实体。
服务发现
场景:指定一个目标服务的地址,这个过程不能硬编码,因为服务端ip,port可变。
方案1:域名DNS,缺点是无法配置port,不支持探活检查。
方案2:服务注册中心:保存服务名到服务实例的映射。
无损上下线
服务实例下线,上线过程刚好相反
下线:先从服务注册中心删了,再关实例。
第三课:服务治理功能
服务发布:
服务升级带来一些问题:服务不可用,服务抖动,服务回滚
策略:
a)蓝绿部署,划分为两部分一一升级,但在升级一部分时,只有一半的资源可用。
b)灰度发布/金丝雀发布:先加一个,没问题就继续缓慢切换流量,但回滚很麻烦。
流量治理:
地区、集群、实例、请求维度端到端流量控制。
稳定性治理
线上服务一定会出问题,与程序正确性无关。
限流,熔断,过载保护,降级(只保障高优先级应用)
第四课:
重试
本地函数调用不建议重试 远程函数调用建议重试,可一定程度提高可用性SLA。
重试风暴
微服务调用链路n比较深,会导致系统重试次数的n指数次重试。
重试策略
限制重试比例、防止链路重试(末端服务返回特殊标记)、hedged request(对冲:多发几个请求,等一个成功就成功)。