这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
一、基础知识
1.1 系统架构演变历史
- 单体架构:all in one process
- 垂直应用架构:按照业务线垂直划分,但每个业务也是单体架构,即划分成了多个单体架构。
- 分布式架构:抽出业务无关的公共模块。
- SOA架构:开始面向服务,整个系统是中心化的,自上而下
- 微服务架构:去中心化,自下而上,易于重构。微服务是在SOA上做的升华。微服务架构重点强调的一个是"业务需要彻底的组件化和服务化",原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。
1.2 概览
1.3 核心要素
- 服务治理:服务注册、服务发现、流量治理...
- 可观测性:日志采集、链路追踪...
- 安全: 身份验证、认证授权...
二、微服务架构原理及特征
2.1 基本概念
2.1.1 基本名词解释
- 服务:一组具有相同逻辑(相同代码)的运行实体。
- 实例(instance):一个服务中,每个运行实体即为一个实例。
- 集群(cluster):通常指服务内部的逻辑划分、包含多个实例。
- 服务包含集群,集群包含实例
#### 2.1.2 服务间通信
- 单体服务:不同模块间通信只是简单的函数调用。
- 微服务:服务间通信意味着网络传输。
2.2 服务注册与发现
2.2.1 怎样去调用服务?
新增一个统一的服务注册中心,用于存储服务名到服务实例的映射(类似DNS一样)。
2.2.2 服务实例上线及下线的过程
目的:保证流量通畅
上线:先跑起实例,再health check,最后再注册服务。
下线:先删除注册中心的记录,等一段时间,再下线服务。
2.3 流量特征
- 统一网关入口
- 内网通信多数采用RPC协议(二进制协议,传输和编解码效率高)
- 网状调用链路
三、核心服务治理功能
3.1 服务发布
服务发布(deployment):即让一个服务升级运行新的代码过程。
难点:服务不可用、服务抖动(流量不稳定)、服务回滚
解决方案:
- 蓝绿部署:简单、稳定,需要两倍资源,可以考虑在流量低峰的时候完成部署
- 灰度发布(金丝雀发布):一个个实例进行部署。需要对流量的有很高精确控制,而且回滚困难(需要很好的平台支撑,如:k8s)。
3.2 流量治理
在微服务架构下,我们可以基于地区、集群、实例、请求等维度,对端到端的流量的路由路径进行精确控制
3.3 负载均衡(Load Balance)
负责分配请求在每个下游实例上的分布
常见的LB策略:Round Robin、Random、Ring Hash、Least Request
3.4 稳定性治理
线上服务总是会出问题的,这与程序的正确性无关。(流量突增、硬件故障...)
解决方案:
参考链接
(92条消息) SOA架构和微服务架构的区别_扛麻袋的少年的博客-CSDN博客_soa架构和微服务架构的区别
微服务架构原理与治理实践 .pptx - 飞书云文档 (feishu.cn)
[核心服务治理功能 - 掘金 (juejin.cn)](