这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
微服务架构介绍
系统架构的演进历史:单体架构->垂直应用架构->分布式架构->SOA架构->微服务架构。
微服务架构的三大治理要素分别为服务治理、可观测性、安全。
- 服务治理
- 服务注册
- 服务发现
- 负载均衡
- 扩缩容
- 流量治理
- 稳定性治理
- 可观测性
- 日志采集
- 日志分析
- 监控打点
- 监控大盘
- 异常报警
- 链路追踪
- 安全
- 身份验证
- 认证授权
- 访问令牌
- 审计
- 传输加密
- 黑产攻击
微服务架构原理及特征
服务包含集群,集群包含实例,一个实例包含一个或多个进程,服务间的通信使用网络传输,架构中增加服务注册中心,来完成服务的注册和发现。
服务是一组具有相同逻辑的运行实体
实例是一个服务中的每个运行实体
实例与进程没有必然对应关系,一般一对一或者一对多
常见的实例承载形式,如进程、VM、k8s pod......
微服务之间通过网络进行通信,常见的通信协议包括 HTTP、RPC。
服务注册及服务发现存在服务间调用中,如何指定下游服务实例的地址的问题,简单的方案是直接指定 ip:port,但是没有任何动态能力且无法解决有多个实例下游实例的情况,另一个方案是使用DNS,但是本地DNS存在缓存,导致延迟、DNS没有负载均衡、不支持服务探活检查、DNS不能指定端口等问题。
服务注册发现是新增一个统一的服务注册中心,用于存储服务名到服务实例之间的映射关系,当旧服务实例下线前,从服务注册中心删除该实例,下线流量,而新服务实例上线后,在服务注册中心注册该实例,上线流量。
微服务流量特征有统一网关入口、外网通信多数采用 HTTP,内网通信多数采用 RPC(Thrift, gRPC)。
核心服务治理能力
服务发布就是让一个服务升级运行新代码的过程。
服务发布的难点在于:服务不可用,服务抖动(某几次不可用),服务回滚(升级的代码有问题,先用前一个版本)。
蓝绿部署:将服务分成两部分,先后分别发布,流量接入其中一个服务,都成功再接两个服务。简单稳定,但是需要两倍资源。
灰度发布:新代码先放到原来很多个实例中加一个新实例,观察一下,如果没问题再加新实例断掉旧实例,缺点是回滚难度大,基础设施要求高
流量治理,微服务架构中,可以根据地区,集群,实例,请求等维度,对端到端的流量在链路上进行精确控制。
负载均衡:一个服务多个实例,通过一些策略分配到各个实例上请求。
稳定性治理:面对网络攻击,流量突增等情形,保持微服务的稳定性。
稳定性治理功能:限流,熔断,过载保护,降级。
限流就是限制服务处理的最大QPS,拒绝过多请求。
熔断就是中断请求路径,增加冷却时间从而让故障实例尝试恢复。
过载保护就是在负载高的实例中,主动拒绝一部分请求,防止实例被打挂。
降级就是服务处理能力不足时,拒绝低级别的请求,只响应线上高优请求。