微服务架构原理 | 青训营笔记

123 阅读4分钟

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

1、微服务架构介绍

微服务架构的背景由来、架构概览、基本要素

  • 互联网爆炸性发展
  • 硬件设施的快速发展
  • 需求复杂性的多样化
  • 计算机理论及技术的发展

单体架构->垂直应用架构->分布式架构->SOA架构->微服务架构

单体架构:all in one process

image.png

优点: 性能最高,冗余小

缺点: debug困难, 模块分工、开发流程(多人协作困难)

垂直应用架构:按照业务线垂直划分

image.png

优点:业务无关的独立服务

缺点:不同业务存在冗余、每个业务还是单体

分布式架构:抽出业务无关的公共模块

image.png

优点:业务无关的独立服务

缺点:服务bug可能导致全站瘫痪、调用关系复杂、不同服务冗余

SOA架构:面向服务 image.png

优点:服务注册

缺点:整个系统设计是中心化的、需要从上至下设计、重构困难

微服务架构:彻底服务化

image.png

优点:开发效率高、业务独立设计、至下而上、故障隔离

治理、运维难度、观测挑战、安全性

  • 服务治理:服务注册、服务发现、负载均衡、扩缩容、流量治理、稳定性治理....
  • 可观测性:日志采集、日志分析、监控打点、监控大盘、异常报警、链路追踪....
  • 安全:身份验证、认证授权、访问令牌、审计、传输加密、黑产攻击....

2、微服务架构原理及特征

微服务架构的基本组件、工作原理、流量特征

image.png

  • 服务(service):一组具有相同逻辑的运行实体
  • 实例(instance):一个服务中,每个运行实体即为一个实例
  • 实例与进程的关系:没有必然关系,可以一个实例对应一个或多个进程(反之不常见)
  • 集群(cluster):通常指内部的逻辑划分,包括多个实例。
  • 常见的实例承载形式:进程、VM、k8s pod ....
  • 有状态/无状态服务:服务的实例是否存储了可持久化的数据(例如磁盘文件)。无状态比如说起到一个代理作用。

单体与微服务服务间通信区别

单体:不同模块,函数调用

微服务:服务间通讯意味着网络传输

服务注册与发现

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

通过服务健康检查来使服务上线与下线

流量特征

统一网关入口

内网通信多数采用RPC

内网通讯链路

3、核心服务治理功能

核心的服务治理功能,包括流量治理、服务均衡、稳定性治理

服务发布(deployment):即让一个服务升级运行新代码的过程。 难点:

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

蓝绿部署

服务一半一半的升级,升级过程中一半的流量不可用。(可以在流量低峰期升级)

灰度发布(金丝雀发布)

减少发布时所需要的服务资源,但是精细化回滚难度大

image.png

流量治理:可以基于地区、集群、实例、请求的维度等因素进行分流。

负载均衡

Round Robin、Random 、Ring Hash、Least Request.....

稳定性治理

限流:当流量超过阈值有效控制

熔断:服务器不正常过一段时间在访问

过载保护:当服务器压力大,拒绝(部分)访问

降级:让优先级高的先处理

image.png

4、服务治理实践

在微服务架构稳定性治理中,对重新请求策略的探索和实践

重试的意义:

  • 本地函数调用失败(重试意义不大)

参数非法、OOM、NPE(空指针异常)、边界case、系统崩溃、死循环、程序异常退出.....

  • 远程函数调用(有重试的意义)

网络抖动、下游负载高导致超时、下游机器宕机、本地机器宕机、本地机器负载高导致调度超时、下游熔断限流。

可以避免偶发的错误、降低错误率(错误率^n)、降低长尾延时、容忍暂时性错误、避开下游故障实例

重试可能引发引发问题:重试风暴

重试风暴(调用链路深) image.png

解决/避免重试引发问题

限制重试比例:设定一个重试比例阈值(例如:1%),重试次数占请求比例不超过该阈值。 image.png

防止链路重试:(理想情况下,只有最后一层重试) image.png