这是我参与「第五届青训营 」伴学笔记创作活动的第8天
微服务
微服务架构介绍
架构演变
单体架构、垂直应用架构、分布式架构、soa架构、微服务架构
单体架构:性能最高,冗余最小 ;debug困难,模块相互影响,模块分工,开发流程复杂
垂直应用架构:业务独立开发维护;不同业务存在冗余
分布式架构:与业务无关的独立服务;服务模块bug导致全站崩溃 ,调用复杂,不同服务冗余
SOA:服务注册;中心化设计,需要从上至下,重构困难
微服务:开发效率高,业务独立,故障隔离;治理运维困难
微服务架构要素
服务:一组具有相同逻辑的运行实体
实例:一个服务中,每个运行实体即为一个实例
集群:服务内部的逻辑划分,包含多个实例
常见实例承载形式:
进程、vm、k8s
有状态/无状态服务:服务实例是否存储了可持久化数据
服务通信
对于单体服务,不同模块只是简单的函数调用
对于微服务,服务通信意味着网络传输
服务注册与发现
从固定ip:port=》DNS=》服务注册中心
解决思路:新增一个统一的服务注册中心,用于存储服务名到服务实例的映射
服务实例上线下线过程:
下线:先在注册中心删除服务注册记录,然后再关闭服务
上线:先启动,在健康检查,再往注册中心增加服务注册中心
流量特征: 内部使用grpc外部使用http
核心服务治理功能
服务发布
一个服务升级运行成新的代码
解决方案:
蓝绿部署,流量导蓝色,关并升级绿色,导来绿色,关并升级蓝色
缺点:某个时刻只有一半资源在运行,可以选择低量时间发布
灰度发布:
流量治理
基于地区、集群、实例、请求等维度
负载均衡
负责分配请求在每个下游实例上的分布
稳定性治理
解决方案:
字节跳动治理实践
重试
降低错误率
降低长尾延迟
容忍暂时性错误
避开下游故障实例
重试的难点
幂等性
重试风暴
链路深的话,容易在下游产生严重的风暴
超时设置
解决方案: