这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天。
微服务架构
基本概念
服务 Service
一组具有相同逻辑的运行实体
实例 Instance
一个服务中,每个运行实例即为一个实例
实例与进程的关系
实例与进程之间没有必然对应关系,一个实例可以对应一个或多个进程
集群 Cluster
通常指服务内部的逻辑划分,包含多个实例
常见的实例承载形式
进程、VM、k8s pod等
有状态/无状态服务
服务的实例是否存储了可持久化的数据
服务间通信
对于单体服务,不同模块通信只是简单的函数调用
对于微服务,服务间通信意味着网络传输
服务注册与发现
用一个统一的服务注册中心,用于存储服务名到服务实例的映射。
服务发布
让一个服务升级运行新的代码的过程
可能的问题
服务不可用 进程被占用导致无法发布
服务抖动 网络流量抖动导致难题
服务回滚 升级后的回滚操作存在难度
蓝绿部署
发布时先将所有实例分为蓝绿两个集群,先断开绿色部分的流量,完成升级,然后断开蓝色部分的流量,完成升级。这种升级方式简单且稳定,但是会需要两倍的资源才能完成发布。
灰度发布
先增加一个额外实例完成升级,如不存在问题则逐步升级各个实例。该方法需求容量小,也快捷,但是出现问题后回滚的难度较大
负载均衡
负责分配请求在每个下游实例上的分布
稳定性治理
首先明确 线上服务总是会出问题的,这与程序的正确性无关
功能
限流 减少流量
熔断 下游节点timeout等时直接熔断该链路
过载保护 核心负载过大时拒绝一部分流量
降级 拒绝部分低级链路的流量