微服务架构原理与治理实践|青训营笔记

117 阅读3分钟

微服务架构原理与治理实践

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

[TOC]

微服务架构介绍

架构概览

微服务架构预览

  • 网关

    处理外来流量

  • 服务配置和治理
  • 链路追踪和监控

基本要素

  • 服务治理

    服务注册、服务发现、负载均衡、扩缩容、流量治理、稳定性治理

  • 可观测性

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

  • 安全

    身份验证、认证授权、访问令牌、审计、传输加密、黑产攻击

微服务架构原理及特征

基本概念

  • 服务

    一组具有相同逻辑的运行实体

  • 实例

    一个服务中,每个运行实体即一个实例

  • 实例与进程的关系

    实例与进程之间没有必然对应的关系

  • 集群

    服务内部的逻辑划分,包含多个实例

  • 常见的实例承载形式

    进程、VM、k8s pod

  • 有状态/无状态服务

    服务的实例是否存储了可持久化的数据

服务注册和发现

在代码层面,调用指定目标服务的地址,往往采用了hardcode的方式,此方式存在问题

解决思路:

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

流量特征

  • 统一网关入口
  • 内网通信多数采用RPC
  • 网状调用链路

流量特征

HTTP协议本质上是一个文本协议,RPC是二进制协议,RPC往往在执行效率上是优于HTTP协议的,故内网的流量传输使用RPC协议

核心服务治理功能

服务发布

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

难点:

  • 服务不可用
  • 服务抖动
  • 服务回滚

蓝绿部署

将服务分为两个部分A和B,当需要服务发布的时候,先把A的流量切给B,然后进行更新A的服务,之后再对B进行类似的操作。

特点:

  • 简单、稳定
  • 需要两倍的资源

灰度发布

在服务中,先加入一个新实例,观察运行情况,将一个旧实例的流量切换给新实例,用新实例逐个替换掉旧实例。

特点:

  • 需要对流量进行精细化操作
  • 回滚操作困难

流量治理

流量管理

在微服务架构下,基于地区、集群、实例、请求等维度,对端到端流量的路由路径进行精确控制。

负载均衡

负载均衡负责分配请求在每个下游实例上的分布

  • Round Robin
  • Random
  • Ring Hash
  • Least Request

稳定性治理

线上服务是一定会出问题的,跟代码的正确性无关

  • 网络攻击
  • 流量问题
  • 机房断电
  • 网络故障

稳定性治理的主要措施:

  • 限流
  • 熔断
  • 过载保护
  • 降级

字节跳动服务治理实践

重试的意义

在本地函数调用的过程中,可能出现若干问题,例如:参数非法、OOM、NPE、边界、系统崩溃、死循环、程序异常退出。

在远程函数调用的过程中,同样可能出现若干问题,例如:网络抖动、下游负载高导致超时、下游机器宕机、本地机器负载高、下游熔断限流。

重试可以避免掉偶发的错误。

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

重试的难点

  • 幂等性
  • 重试风暴

    假设存在A、B、C、D四个服务依次调用,若每个服务设置重试3次,当遇到重试失败时,累计到D需要进行27次重试,指数级增加。

  • 超时设置

重试策略

  • 限制重试比例
  • 防止链路重试(防止重试风暴)