微服务框架 | 青训营笔记

112 阅读3分钟

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

微服务框架 | 青训营笔记

架构介绍

  • 演进历史
    1. 单体架构
    2. 垂直应用架构
    3. 分布式架构
    4. SOA架构
    5. 微服务架构

单体架构

all in one process

  • 优势
    • 性能最高
    • 冗余小
  • 劣势
    • debug困难
    • 模块相互影响
    • 模块分工、开发流程困难

垂直应用架构

按照业务线垂直划分

  • 优势
    • 业务独立开发维护
  • 劣势
    • 不同业务存在冗余
    • 每个业务还是单体

分布式架构

抽出业务无关的公共模块

  • 优势
    • 业务无关独立服务
  • 劣势
    • 服务模块bug导致全站瘫痪
    • 调用关系复杂
    • 不同服务冗余

SOA架构

业务和服务之间多了一个服务注册中心来解耦

  • 优势
    • 服务注册与发现
  • 劣势
    • 整个系统设计是中心化的
    • 需要从上到下设计
    • 重构困难

微服务架构

彻底的服务化

  • 优势
    • 开发效率高
    • 自下而上的业务独立的设计
    • 故障隔离
  • 劣势
    • 治理、运维难度
    • 观测挑战
    • 安全性
    • 分布式系统面临的问题

微服务架构概览

image.png

核心要素

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

微服务架构原理及特征

服务: 一组具有相同逻辑的运行实体
实例: 一个服务中,每个运行实体即为一个实例
集群: 服务内部的逻辑划分,包含多个实例 有/无转态服务: 服务的实例是否存储了可持久化的数据
常见实例承载形式:进程、VM、k8s pod
一个实例通常包含一个或多个进程
微服务的服务间通信是网络传输

服务注册与发现

用一个服务注册中心,用于存储服务名到服务实例的映射

流量特征

统一网关 入口接受http流量,内网通信多数采用RPC。

核心服务治理功能

服务发布

  • 蓝绿部署
    • 将服务中的实例分成蓝绿两个集群,一个集群升级的时候,流量全部导到另一个集群
    • 消耗资源,适合流量小的场景
  • 灰度发布(金丝雀发布)
    • 一遍增加新代码实例,一遍减少老代码实例
    • 回滚麻烦,操作粒度细

流量治理

在微服务框架下,基于地区、集群、实例、请求等维度,对端到端流量进行分流

负载均衡

  • Round Robin
  • Random
  • Ring Hash
  • Least Request

稳定性治理

  • 限流:拒绝高于承载的qps
  • 熔断
  • 过载保护
  • 降级:只响应重要服务

字节跳动服务治理实践

重试

  • 可以避免偶发错误
  • 降低长尾延时:对于偶尔耗时较长的请求,重试请求有机会提前返回
  • 里面暂时性错误,如网络抖动
  • 避开下游故障实例

重试的难点

  • 幂等性
  • 重试风暴:调用链深,造成雪崩
  • 超时设置

重试策略

  • 限制重试比例(在大部分请求成功的大条件下使用)
  • 防止链路重试:理想情况下只在最下一层重试
  • Hedged request(对于延时高的请求):重新向另一个下游实例发一个相同的请求,等待先到达的响应