这是我参与「第五届青训营 」伴学笔记创作活动的第11天。
微服务架构原理及特征
微服务架构是当前大多数互联网公司的标准架构。
系统架构演变历史:单体架构->垂直应用架构->分布式架构->SOA架构->微服务架构->Service Mesh架构。
微服务架构核心要素:服务治理、可观测性、安全。
服务治理:服务注册、服务发现、负载均衡、扩缩容、流量治理、稳定性治理等。
测观测性:日志采集、日志分析、监控打点、监控大盘、异常报警、链路追踪等。
安全:身份验证、认证授权、访问令牌、审计、传输加密、黑产攻击等。
服务:一组具有相同逻辑的运行实体。
实例:一个服务中,每个运行实体即为一个实例。
集群:服务内部的逻辑划分,包含多个实例。
常见的实例承载形式:进程、VM、k8s pod等。、
对于单体服务,不同模块通信只是简单的函数调用。
对于微服务,服务间通信意味着网络传输。
在代码层面指定调用一个目标服务的地址可以新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。
流量特征:统一的网关接口、内网通信多数采用RPC、网状调用链路。
核心服务治理功能
服务发布:让一个服务升级运行新的代码的过程,个人开发环境一般不存在服务发布。
服务发布的难点:服务不可用、服务抖动(有些信息会短暂消失)、服务回滚。
蓝绿部署:将将要升级的服务分为蓝绿两部分,先将蓝色部分的流量转移到绿色部分,然后升级绿色,再将蓝色部分的流量转移到绿色部分,再升级蓝色部分。
蓝绿部署缺点:需要两倍资源,即需要保证部分服务就可以处理所有流量。
灰度发布:又称金丝雀发布,上线一部分新的代码,如果运行正常,就下线同样功能的老代码,如果运行出现问题,就下线新代码并修改。
灰度发布缺点:精细化流量控制挑战过大,精细化服务回滚挑战过大,发布越多回滚难度越大。
负载均衡:负责分配请求在每个下游实例上的分布。
常见负载均衡策略:Round Robin、Random、Ring Hash、Least Request等。
稳定性治理:线上服务总会出现问题,需要有一定的自我调节能力。
稳定性治理操作:限流、熔断、过载保护、降级。