[ 微服务框架 | 青训营笔记 ]

46 阅读3分钟

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

微服务架构介绍

为什么系统架构需要演进
互联网的爆炸性发展、硬件设施的快速发展、需求复杂性的多样化、开发人员的急剧增加、计算机理论及技术的发展

分类:单体架构、垂直应用架构、分布式架构、SOA架构、微服务架构
单体架构:all in one process,性能最高,冗余小,debug困难,模块相互影响,分工、开发流程
垂直应用架构:按照业务线垂直划分
分布式架构:抽出业务无关的公共模块
SOA架构:面向服务,服务注册;整个系统设计中心化,从上到下设计,重构困难
微服务架构:彻底的服务化;

核心要素:服务治理、可观测性、安全

微服务架构原理及特征

服务:一组具有相同逻辑的运行实体
实例:一个服务中,每个运行实体即为一个实例
集群:服务内部的逻辑划分
实例与进程:一个实例对应一个或多个进程
常见的实例承载形式:进程、VM、k8s pod
有状态/无状态服务:服务的实例是否存储了可持久化的数据

服务间通信
单体服务:不同模块间通信用函数调用
微服务:网络传输

服务注册及发现
如何指定调用一个目标服务的地址
hardcode:不可行
DNS:存在缓存,导致延时;负载均衡问题;不支持服务实例的探活检查;域名无法配置端口
解决思路:新增一个统一的服务注册中心,用于存储服务名到服务实例的映射

流量特征:统一网管入口,内网通信多数采用RPC,网状调用链路

核心服务治理功能

**服务发布:**让一个服务升级运行新的代码的过程
难点:服务不可用、服务抖动、服务回滚
发布实践:蓝绿部署【简单稳定,需两倍资源】,灰度发布(金丝雀发布)【逐步加新的发布实例】

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

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

稳定性治理:线上服务总会出问题,与程序的正确性无关
保护机制:限流、熔断、过载保护、降级

字节跳动服务治理实践

重试意义——可能的异常
本地函数调用:参数非法,OOM,NPE,边界case,系统崩溃,死循环,程序异常退出
远程函数调用:网络抖动,下游负载高导致超时,下游机器宕机,本地机器负载高、调度超时,下游熔断、限流
意义:降低错误率,降低长尾延时,容忍暂时性错误,避开下游故障实例

重试难点:幂等性、重试风暴、超时设置
限制重试比例:重试次数占所有请求比例不超过阈值
防止链路重试:限制每层都发生重试
hedged requests:对可能超时的请求,重新向另一个下游实例发送相同请求,等待先到达的响应