这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
微服务架构
认识系统架构
系统架构演进的原因:还联网发展迅速、硬件发展迅速、需求多样化、开发人员剧增、计算机理论的发展
系统架构发展历程
单体->垂直应用->分布式->SOA->微服务(上节课讲过)
各架构特点
单体:优势:性能最高、冗余小 劣势:debug困难、模块相互影响、分工和开发困难
垂直应用:优势:业务独立开发维护 劣势:不同业务存在冗余、各业务都是单体
分布式:优势:业务无关的独立服务 劣势:服务模块BUG可导致全站瘫痪、调用关系复杂、不同服务冗余
SOA:优势:祝福注册 劣势:系统设计是中心化的、需要自上而下设计、重构困难
微服务:优势:开发效率、业务独立设计、自下而上、故障隔离 劣势:治理运维困难、观测挑战、安全性、分布式系统
微服务核心要素
服务治理、可观测性、安全性
微服务架构原理
服务:一组、相同逻辑、运行实体
实例:运行实体
实例:包含一或多个进程
实例的形式:进程、VM、。。。。
服务间通信
单体:函数调用
微服务:网络传输
流量特征
统一网管入口、内网通信多数采用RPC(效率高,二进制)、网状调用链路
核心服务治理
服务发布
一个服务升级运行新代码的过程
存在的困难:服务不可用、服务抖动、服务回滚
蓝绿部署:无损升级,简单、稳定,但需要两倍资源
灰度发布(金丝雀发布):一个一个替换实例(流量切换问题、回滚问题)
流量治理
可以基于地区、集群、实例、亲求等维度进行分流
负载均衡
Round Robin、Random、Ring Hash、 Least Request
稳定性治理
限流(rate limit 超过限制的访问拒绝一部分)、熔断(多次连接无应答,取消连接)、过载保护(过载了则拒绝)、降级(优先级低的服务拒绝掉)
拓展
本地函数调用
程序的异常:参数非法、OOM、NPE、边界case、系统崩溃、死循环、程序异常退出
远程函数调用
网络抖动、下游负载高导致超时、下游机器宕机、本地机器负载高,调度超时、下游熔断或限流
重试的优势
可以避免偶发错误,提高SLA
降低长尾延迟(对于耗时较长的请求有机会提前返回)
容忍暂时性错误
避开下游故障实例
重试的劣势
幂等性、重试风暴、超时设置
重试策略
限制重试比例、防止链路重试、Hedged requests