微服务架构 | 青训营笔记

170 阅读2分钟

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

微服务架构

认识系统架构

系统架构演进的原因:还联网发展迅速、硬件发展迅速、需求多样化、开发人员剧增、计算机理论的发展

系统架构发展历程

单体->垂直应用->分布式->SOA->微服务(上节课讲过)

各架构特点

单体:优势:性能最高、冗余小 劣势:debug困难、模块相互影响、分工和开发困难

垂直应用:优势:业务独立开发维护 劣势:不同业务存在冗余、各业务都是单体

分布式:优势:业务无关的独立服务 劣势:服务模块BUG可导致全站瘫痪、调用关系复杂、不同服务冗余

SOA:优势:祝福注册 劣势:系统设计是中心化的、需要自上而下设计、重构困难

微服务:优势:开发效率、业务独立设计、自下而上、故障隔离 劣势:治理运维困难、观测挑战、安全性、分布式系统

微服务核心要素

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

微服务架构原理

服务:一组、相同逻辑、运行实体

实例:运行实体

实例:包含一或多个进程

实例的形式:进程、VM、。。。。

服务间通信

单体:函数调用

微服务:网络传输

流量特征

统一网管入口、内网通信多数采用RPC(效率高,二进制)、网状调用链路

核心服务治理

服务发布

一个服务升级运行新代码的过程

存在的困难:服务不可用、服务抖动、服务回滚

蓝绿部署:无损升级,简单、稳定,但需要两倍资源

灰度发布(金丝雀发布):一个一个替换实例(流量切换问题、回滚问题)

流量治理

可以基于地区、集群、实例、亲求等维度进行分流

负载均衡

Round Robin、Random、Ring Hash、 Least Request

稳定性治理

限流(rate limit 超过限制的访问拒绝一部分)、熔断(多次连接无应答,取消连接)、过载保护(过载了则拒绝)、降级(优先级低的服务拒绝掉)

拓展

本地函数调用

程序的异常:参数非法、OOM、NPE、边界case、系统崩溃、死循环、程序异常退出

远程函数调用

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

重试的优势

可以避免偶发错误,提高SLA

降低长尾延迟(对于耗时较长的请求有机会提前返回)

容忍暂时性错误

避开下游故障实例

重试的劣势

幂等性、重试风暴、超时设置

重试策略

限制重试比例、防止链路重试、Hedged requests