「微服务框架 - 不变的基建」|青训营笔记

90 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8天

一、本节课重点内容

  1. 微服务架构介绍
  2. 微服务架构原理及特征
  3. 核心服务治理功能
  4. 字节跳动服务治理实践

二、本节课详细内容

认识系统架构

系统架构按照先后出现的顺序分为单体架构,垂直应用架构,分布式架构,SOA架构,微服务架构。

各架构优缺点

单体:优势:性能最高、冗余小 劣势:debug困难、模块相互影响、分工和开发困难

垂直应用:优势:业务独立开发维护 劣势:不同业务存在冗余、各业务都是单体

分布式:优势:业务无关的独立服务 劣势:服务模块BUG可导致全站瘫痪、调用关系复杂、不同服务冗余

SOA:优势:祝福注册 劣势:系统设计是中心化的、需要自上而下设计、重构困难

微服务:优势:开发效率、业务独立设计、自下而上、故障隔离 劣势:治理运维困难、观测挑战、安全性、分布式系统

微服务核心要素

服务治理、可观测性、安全性

微服务架构原理

  • 服务:一组、相同逻辑、运行实体
  • 实例:运行实体 包含一或多个进程

实例的形式:进程、VM等

服务间通信

单体:函数调用

微服务:网络传输

流量特征

统一网管入口、内网通信多数采用RPC(效率高,二进制)、网状调用链路

核心服务治理

服务发布 一个服务升级运行新代码的过程

存在的困难:服务不可用、服务抖动、服务回滚

蓝绿部署:无损升级,简单、稳定,但需要两倍资源

灰度发布(金丝雀发布):一个一个替换实例(流量切换问题、回滚问题)

流量治理

可以基于地区、集群、实例、亲求等维度进行分流

负载均衡

Round Robin、Random、Ring Hash、 Least Request

稳定性治理

限流(rate limit 超过限制的访问拒绝一部分)、熔断(多次连接无应答,取消连接)、过载保护(过载了则拒绝)、降级(优先级低的服务拒绝掉)

字节跳动服务治理实践

请求重试的意义

  • 降低错误率
  • 降低长尾延时
  • 容忍暂时性错误
  • 避开下游故障实例

请求重试的难点

  • 幂等性
  • 重试风暴
  • 超时设置

重试策略

  • 限制重试比例

  • 防止链路重试

  • Hedged Requests

重试效果验证

  • 字节跳动重试组件能够极大限制重试发生的链路放大效应

三、课后

1. 结合 CAP 等原理,思考微服务架构有哪些缺陷?

单体应用通过数据库事务保证一致性,拆分为微服务后,会形成分布式处理的业务,进而就会产生分布式事务一致性问题。

2. 微服务是否拆分得越“微”越好?为什么?

服务的过度拆分会使架构的设计复杂度大大提升,同时也会大大提升运维和测试的复杂度等。

3. Service Mesh 这一架构是为了解决微服务架构的什么问题?

通过将微服务通信下沉到基础设施层,屏蔽了微服务处理各种通信问题的复杂度,形成微服务之间的抽象协议层。开发者无需关心通信层的具体实现,也无需关注 RPC 通信(包含服务发现、负载均衡、流量调度、流量降级、监控统计等)的一切细节,真正像本地调用一样使用微服务,通信相关的一起工作直接交给 Service Mesh。

4. 有没有可能有这样一种架构,从开发上线运维体验上是微服务,但实际运行又类似单体服务?

未完待续