这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
今天的主要内容如下:
- 微服务架构介绍
- 微服务架构原理及特征
- 核心服务治理功能
- 字节跳动服务治理实践
1、微服务架构介绍
1.1 系统架构演变历史
系统架构发展历史包括单体架构、垂直应用架构、分布式架构、SOA架构、微服务架构。
1.1.1 单体架构
单体架构是我们在学校中开发项目最常使用的一个架构。它的优势是性能高、冗余小,但是缺点也很明显:
- 调试困难
- 不同的模块间互相影响,非核心功能可能导致程序崩溃
- 不利于协同开发
1.1.2 垂直应用架构
垂直应用架构是按照业务线进行垂直划分,
优点:业务独立开发和维护
缺点:
- 不同业务存在冗余,无法复用
- 每个业务还是单体
1.1.3 分布式架构
分布式架构抽取出与业务无关的公共模块,独立部署运行,不同的业务系统可以复用公共模块。比如说图中的服务层就是与业务无关的公共模块。
优点:业务无关的服务是独立的,可以复用
缺点:
- 一个模块服务有问题,可能导致整个系统崩溃
- 服务之间调用关系错综复杂
- 不同服务间仍存在冗余
1.1.4 SOA架构
SOA架构引入了服务和服务注册的概念。
优点:可以进行服务注册
缺点:
- 整个系统从设计上依然是中心化的
- 需要从上至下,去设计划分
- 重构困难
1.1.5 微服务架构
微服务架构是彻底服务化,从下而上设计
优点:
- 提高了开发效率
- 故障可控
缺点:
- 系统复杂度提高,运维难度增加
- 存在安全问题
2、微服务架构原理及特征
2.1 基本概念
服务间的通信:
- 对于单体服务,不同模块通信只是简单的函数调用;
- 对于微服务,服务间通信意味着网络传输。
2.2 服务注册以及发现
新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。
3、 核心服务治理功能
3.1 服务发布
服务发布就是更新线上服务代码的过程。
服务发布的难点:
如何解决?
- 蓝绿部署:一个服务存在多个集群,轮流更新服务代码,某个集群更新过程中,将其流量全部转移到其他集群上。好处:简单稳定。缺点:需要两倍资源。
- 灰度发布
比如说服务b目前有三个实例,我们打算更新这三个实例的代码,我们先在此基础上添加一个新的实例,运行一段时间后如果没有问题,将之前三个实例中的一个下线;然后重复这个步骤,直到所有旧实例都被替换掉。 这种方法回滚难度大,基础设施要求高。
3.2 稳定性治理
限流:服务提供方拒绝部分请求
熔断:服务请求方有一个熔断器,如果请求不到服务,不会一直重试,而是间隔一段时间进行重试。
过载保护:服务提供方有过载保护功能,可以拒绝请求。
降级:保证重要服务可以正常工作,拒绝不重要的服务的请求。
4、字节跳动服务治理实践
4.1 重试的意义
4.2 重试的难点
幂等性:多次请求可能会造成数据不一致
重试风暴:随着调用深度的增加,重试次数会指数级上涨
超时设置:假设一个调用正常是1s的超时时间,如果允许一次重试, 那么第一次请求经过多少时间时,才开始重试呢?
4.3 解决重试风暴的策略
- 限制重试比例
- 防止链路重试