这是我参与「第五届青训营 」伴学笔记创作活动的第8天
本节课重点内容
- 微服务架构介绍
- 微服务架构原理以及特征
- 核心服务治理功能
- 字节跳动服务治理实践
微服务架构介绍
- 系统架构的演进历史
- 单体架构
- 垂直应用架构
- 分布式架构
- SOA架构
- 微服务架构
该节的内容在前面的笔记中已经记过,这里就不再重新记录了。
微服务架构的基本概念:
对于单体服务,不同模块通信只是简单的函数调用,而对微服务,服务间通信意味着网络传输。
微服务架构的原理和基本特征
服务的注册与发现
在代码层面,如何指定一个目标服务的地址?
hardCode肯定是不行的。
- 服务的ip地址可能会变
- 不能指向多个域名
DNS方法可行吗?
不行。
- 本地DNS存在缓存,可能导致延时
- 负载均衡问题难以解决
- 不支持服务实例的探活检查(就是说服务可能挂掉)
- 域名无法配置端口
解决方案:用一个统一的服务注册中心,存储服务名到服务实例的映射。在我写JAVA的时候,一般是使用nacos来管理微服务的实例。
流量特征
- 统一了网关入口
- 内网通信多数采用RPC
- 网状的调用链路
- 外网进入内网后,先进行负载均衡
- 然后经过网关,根据网关跳转志相关服务,整体呈现一张网状
内网的通信多用RPC,因为RPC是直接传输二进制的,编解码速度都快很多。
核心服务治理功能
服务发布
指让一个服务升级运行新代码的过程。
在一体化服务中,很容易发布服务,点击运行就可以了,但对微服务来说不是这样
服务发布的难点
- 服务不可用
- 服务抖动
- 服务回滚
蓝绿部署: 集群分为两部分,一部分升级用另一部分。
简单 稳定 但需要双倍资源
灰度发布(金丝雀发布):少部分机器更新,试试有没有问题。如果没有问题,再推广。
难点:流量的切换比较难,回滚方案也比较难以实现。
流量治理
在微服务架构下,可以基于地区、集群、实例、请求等维度,对端对端的流量路径进行治理
负载均衡
负载均衡 负责分配请求在每个下游实例上的分布
常见的LB策略
- Round Robin
- Random
- Ring Hash
- Least Request
稳定性治理
线上服务总是会出问题的,和程序的正确性无关。
治理方法:
-
限流
限制速率
-
熔断
一个请求失败之后,过一段时间才能请求成功
-
过载保护
拒绝一部分请求
-
降级
允许重要事务访问,拒绝普通事务访问