Day07 微服务架构| 青训营笔记

79 阅读2分钟

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

微服务架构

单体架构

性能最高,冗余少

debug困难;模块相互影响;模块分工、开发流程复杂

垂直应用架构

按业务线垂直划分,每一个业务线一个单体架构

不同业务存在冗余

分布式架构

抽出一个服务层,业务无关的独立业务

缺点:服务模块bug导致全站瘫痪;调用关系复杂;不同服务冗余

SOA架构(Service Oriented Architecture)

面向服务

优势:服务注册

劣势:* 整个系统中心化;需要从上到下设计;重构困难

微服务架构

优势:开发效率;业务独立设计;自下而上;故障隔离

劣势:治理、运维难;观测挑战;安全性;分布式系统

服务治理

可观测性

日志采集 日志分析 监控打点 异常报警 链路追踪

安全

基本概念

服务:相同逻辑 运行实体

实例:每个运行实体称为一个实例;一个实例可能对应一个or多个进程

承载形式:进程、VM、K8s Pod

集群:服务内部逻辑划分,服务包含集群,集群包含实例

有状态/无状态服务:有持久化数据 or 代理

服务间通信:

单体:函数调用

微服务:网络传输 HTTP gRPC Thrift

服务注册及发现

模仿DNS,新增一个统一的服务注册中心,用于存储服务名到服务实例的映射

核心服务治理功能

服务发布难点:服务不可用;服务抖动;服务回滚;

服务发布:蓝绿部署;金丝雀策略

流量治理

按照地区、集群、实例、请求等维度,端到端流量的路由路径进行治理

稳定性治理:线上服务总是会出问题的,与程序的正确性无关

原因:网络攻击;流量突增;机房断电;机器故障;网络故障

稳定性治理

限流

熔断

过载保护

降级

字节跳动服务治理实践

重试:对于一些偶发的错误,提高SLA

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

重试的问题:

  • 幂等性

  • 重试风暴:每个都重试三次,下一层九次,下一层二十七次

    • 限制重试比例:设定一个重试比例阈值,某一个时间窗口重试次数占所有请求比例不超过该阈值
    • 防止链路重试,链路层面防止重试风暴的核心是限制每层都发生重试
    • A->B->C,C失败,返回“重试失败,不要再重试了”,避免重试风暴
  • 超时设置

    • Hedged requests 对于可能超时的请求,重新向另一个下游实例发送一个请求