这是我参与「第三届青训营 -后端场」笔记创作活动的的第 5 篇笔记 ~
从组件的维度看微服务架构的整体视角
微服务架构核心要素
- 服务治理
- 可观测性
- 安全
与dns类似,需要引入中间层 基于服务发现来实现服务实例上下线流程
假设要下线service B的实例3,不能直接下线,因为还有流量
微服务架构中的基本概念及组件
-
服务
- 一组具有相同逻辑的运行实体
-
实例
- 一个服务中的每个运行实体
-
实例与进程的关系
- 没有必然对应关系,一般一对一或者一对多
-
常见的实例承载形式
强调连接的概念、“请求”
api gateway可以作身份认证,进而将token附在请求上
服务、实例的概念;服务发现中间层;平滑无损的基于服务发现的实例上下线过程;基本流量特征
服务注册发现
- 新增一个统一的服务注册中心,用于存储服务名到服务实例之间的映射关系
- 旧服务实例下线前,从服务注册中心删除该实例,下线流量
- 新服务实例上线后,在服务注册中心注册该实例,上线流量
字节跳动实例
-
本地函数调用
- 通常没有重试意义
-
远程函数调用
- 网络抖动、下游负载高、下游机器宕机......
- 重试是有意义的,可以避免偶发性的错误,提高 SLA
-
重试的意义
- 降低错误率
- 降低长尾延时
- 容忍暂时性错误
- 避开下游故障实例
本地函数调用基本没有重试的必要
重试的意义
- 避免偶发的错误,提高sla(service-level agreement)
- 降低长尾延时
- 容忍暂时性错误
- 避开下游故障实例
重试的难点
-
幂等性
-
重试风暴
-
超时设置