第20章 微服务系统分析与设计-全面深度重点提炼
知识体系框架
第20章 微服务系统分析与设计
20.1 微服务概述
微服务的定义
微服务的特点
微服务与单体架构的区别
微服务的优缺点
20.2 微服务架构设计
微服务架构模式
微服务拆分原则
微服务通信方式
微服务数据管理
20.3微服务开发
微服务开发框架
微服务开发流程
API网关
20.4 微服务治理
服务熔断与降级
负载均衡
配置管理
链路追综
容器化与编排
一/微服务概述
1.1 微服务的定义
微服务的定义:
|
微服务是一种架构风格,将一个单一应用程序开发一组小型服务,每个服务运行在自己的进程中,服务间通过轻量级通信机制(通常是HTTP RESTFUL API)进行交互,每个服务围绕业务能力构建,可以独立部署,独立扩展,独立开发。 |
微服务的核心思想:
| 核心思想 | 说明 |
| 单一职责 | 每个服务只负责一个业务功能 |
| 独立部署 | 每个服务可以独立部署 |
| 独立开发 | 每个服务可独立开发和测试 |
| 去中心化 | 服务间平等,无中心节点 |
| 轻量级通信 | 使用轻量级协议(HTTP/REST/消息队列) |
1.3微服务与单体架构的区别
单体架构定义:
单体架构是将所有功能打包在一个应用程序中,作为一个整体进行开发,测试,部署和扩展。
单体架构VS微服务架构
| 比较项 | 单体架构 | 微服务架构 |
| 代码结构 | 所有功能在一个代码库 | 每个服务独立代码库 |
| 部署方式 | 整体部署 | 独立部署 |
| 扩展方式 | 整体扩展 | 按需扩展单个服务 |
| 技术栈 | 统一技术栈 | 可以使用不同技术栈 |
| 团队协作 | 大团队协作 | 小团队独立开发 |
| 故障影响 | 单点故障影响整个系统 | 单个服务失败不影响其他服务 |
| 开发复杂度 | 初期简单,后期复杂 | 初期复杂,后期简单 |
| 运维复杂度 | 简单 | 复杂 |
| 性能 | 进程内调用,性能高 | 网络调用,性能较低 |
| 适用场景 | 小型项目,初创项目 | 大型项目,复杂系统 |
1.4微服务的优缺点
微服务的优点
| 优点 | 说明 |
| 独立部署 | 单个服务的修改不影响其他服务 |
| 技术多样性 | 不同服务可以使用不同技术 |
| 容错性 | 单个服务失败不会影响整个系统 |
| 可扩展性 | 可以针对热点服务进行扩展你 |
| 团队协作 | 小团队可以独立开发 |
| 代码边界清晰 | 服务边界明确,代码组装清晰 |
微服务的特点:
| 缺点 | 说明 |
| 运维复杂 | 需要管理大量服务 |
| 分布式问题 | 需要处理分布式服务,网络分区等问题 |
| 调用链长 | 服务间用链长,调试困难 |
| 数据一致性 | 跨服务的数据一致性难以保证 |
| 测试复杂 | 需要进行集成测试和端到端测试 |
| 性能开销 | 网络调用比进程内的调用性能低 |
二/微服务架构设计
2.1 微服务架构模式
常见微服务架构模式
1.服务网络架构定义:
服务网格是一个基础设施层,用于处理服务间的通信,负责负载均衡,服务发现,熔断,监控等功能。
服务网络的特点
| 特点 | 说明 |
| 基础设施层 | 作为基础设施,对业务透明 |
| sidecar模式 | 每个服务旁边部署一个代理 |
| 非侵入性 | 不需要修改业务代码 |
| 统一管理 | 统一管理服务间通信 |
常见服务网络产品:
| 产品 | 说明 |
| lstio | 最流行的服务网格框架 |
| linkerd | 轻量级服务网络 |
| ENVOY | 高性能代理 |
2.事件驱动架构
定义:事件驱动架构是一种架构模式,服务间通过事件进行通信,生产者 发布事件,消费者订阅事件。
事件驱动架构的特点:
| 特点 | 说明 |
| 松耦合 | 服务间通过事件解读 |
| 异步通信 | 事件通信是异步的 |
| 可扩展性 | 可以轻松添加新的事件消费者 |
| 最终一致性 | 保证最终一致性 |
3.CQRS模式
定义:
CQRS是指命令查询职责分离,将读操作和写操作分离。
CQRS的特点:
| 特点 | 说明 |
| 读写分离 | 读操作和写操作使用不同的模型 |
| 性能优化 | 可以针对读写分别优化 |
| 复杂度增加 | 需要维护两个模型 |
4.事件朔源
定义:
事件朔源是指不存储当前状态,而是存储所有改变状态的事件,通过重放事件来恢复状态。
微服务拆分原则:
| 原则 | 说明 |
| 业务边界 | 按业务能力划分,每个对应一个业务能力 |
| 单一职责 | 每个服务只负责一个业务功能 |
| 高内聚低耦合 | 服务内部高度内聚,服务之间松耦合 |
| 独立部署 | 服务可以独立部署 |
| 数据独立 | 每个服务有自己独立的数据库 |
| 团队规模 | 每个服务由小团队维护 |
微服务拆分的方法:
方法 说明
按业务能力拆分 根据业务功能划分服务
按子域拆分 根据领域驱动设计的子域划分
按用例划分 根据用例场景划分服务
微服务拆分的粒度:
粒度 说明
太粗 服务功能过多失去服务的优先
太细 服务数量过多,运维复杂度高
合适 平衡业务边界,团队规模,运维成本
2.3微服务通信方式
微服务通信方式:
同步通信
定义:
同步通信是指服务调用后等待响应,调用方阻塞直到受到响应。
常见的同步通信方式:
方式 说明
RESTful APICC 基于HTTP协议的API,最常用
RPC 远程过程调用,如RPC,DUBBO
GRAPHQL 灵活的查询语言
RESTFUL API的特点
特点 说明
基于HTTP 使用HTTP协议
资源向导 以资源中心
无状态 每个请求包含所有信息
易于理解 接口简单易懂
RPC的特点
特点 说明
性能高 二进制协议,性能比HTTP高
类型安全 强类型,编译时检查
调用简单 像调用本地方法一样调用远程服务
2.异步通信
定义:
异步通信是指服务调用后不等待响应,通过消息队列进行消息队列进行通信。
常见的异步通信方式:
方式 说明
消息队列 使用消息队列进行通信
事件总线 使用事件总线发布和订阅总线
消息队列的特点:
特点 说明
解耦 生产者和消费者解藕
异步 异步处理,平滑负载
削峰填谷 缓冲请求,平滑负载
可靠性 消息持久化,保证可靠性传输
常见的消息队列
产品 说明
RabitMQ 支持多种消息协议,功能丰富
KAFKA 高吞吐量,适合大数据场景
ROCKETMQ 阿里开源,高可靠
同步通信vs异步通信
比较项 同步通信 异步通信
响应方式 阻塞等待响应 不等待响应
耦合度 较高 较低
性能 较低 较高
复杂度 简单 复杂
可靠性 依赖服务可用性 消息队列保证可靠性
使用场景 需要实时响应 不需要实时响应
2.4微服务数据管理
微服务数据管理的原则:
原则 说明
每个服务独立数据库 每个服务有自己独立性的数据库
数据隔离 服务间不直接访问对方的数据库
数据一致性 通过最终一致性保证数据一致性
分布式解决方案
方案 说明
两阶段提交 强一致性,但性能差
三阶段提交 改进的2pc ,减少阻碍
TCC 补偿事务,适合业务场景
SAGA 模式 长事务,通过补偿保证一致性
本地消息表 通过本地事务保证消息可靠
三.微服务开发
3.1 微服务开发框架
常见微服务开发框架:
框架 语言 说明
SPRING java 最流行的微服务框架
SPRING CLOUD JAVA 微服务全家桶
DUbbo JAVA 阿里开源的RPC框架
Go Micro GO GO 语言微服务框架
GRpc 多语言 Google开源RPC框架
SPRING CLOUD 核心组件
EUReka 服务注册于发现
Ribbon 客户负载均衡
Feign 声明式HTTP客户端
Hystrik 服务熔断于降级
ZUUL API网关
CONFIG 配置中心
BUS 消息总线
Sleuth 链路追踪
3.2 API网关
API网关定义:
API 网关是系统的统一入口,负责请求路由,协议转换,认证授权,限流熔断等功能。
API网关的作用:
作用 说明
请求路由 将请求路由到后端服务
负载均衡 对后端服务进行负载均衡
认证授权 统一处理认证和授权
限流熔断 限流和熔断保护后端服务
协议转换 转换不同的协议
日志监控 统一日志和监控
常见的AFI网关:
网关 说明
阻拦 netflix开源,Spring Cloud集成
SPRING CLOUDE GATEWAY SPRING CLOUDD 官方网站
kong 基于nginx的APi网关
nginx 高性能反向代理
3.3服务注册与发现
服务注册与发现定义:
服务注册与发现定义:
服务注册与发现是指服务启动时向注册中心注册自己的地址,服务调用方从注册中心获取服务提供方的地址。
服务注册与发现的流程:
步骤 说明
1.服务注册 服务启动时向注册中心注册
2.心跳检测 服务定时向注册中心发送心跳
3.服务发现 调用方从注册中心获取服务地址
4.服务调用 调用方根据地址调用服务
5.服务下线 服务停止时从注册中心注销
常见的服务注册中心:
注册中心 说明
EUREKA Netflix 开源 ,Spring CLOUD 集成
Consul HashiCorp开源,分布式协调服务
ZOOkeeper Apache开源 ,分布式协调服务
Nacos 阿里开源,支持服务注册和配置管理
Eureka的架构:
组件 说明
Eureka 服务注册中心
Eureka Client 服务提供者和消费者vr
Service Provider 服务提供者,注册到EureKA s
Service Consumer 服务消费者
3.4 负载均衡
负载均衡定义:
负载均衡是将请求奋发到多个服务器,提高系统的处理能力和可用性。
负载均衡的类型:
类型 说明
服务端负载均衡 在服务器端进行负载均衡
客户端负载均衡 在客户端进行负载均衡,如RIBBON
负载均衡算法:
算法 说明
轮询 依次轮流分发请求
随机 随机选择服务器
加权轮询 根据权重分发请求
最少连接 选择廉价而数量最少的服务器
一致性哈希 根据请求特征哈希选择服务器
四.微服务治理
4.1服务熔断与降级
服务熔断定义:
服务熔断是指当下游服务失败率达到阈值时,自动切断对下游服务的调用,直接返回失败,防止故障蔓延。
服务降级定义:
服务降级是指当系统资源不足或服务压力大时,主动关闭某些非核心服务,保证核心服务的正常运行。
熔断器的状态:
状态 说明
关闭 正常状态 ,请求正常调用
打开 熔断状态 ,请求直接返回失败
半开 探测状态,允许部分请求通过,判断是否恢复
熔断器的工作流程:
步骤 说明
1 请求调用下游服务
2 记录成功和失败次数
3 失败率达到阈值,熔断器打开
4 请求直接返回失败
5 一段时间后,熔断器进入半开状态
6 探测请求成功,熔断器关闭
常见熔断器框架:
框架 说明
Hystrix NETFIX开源,Spring CLOUD 集成
Resilience4j 轻量级熔断器
Sentinel 阿里开源,流量控制和熔断降级
4.2配置管理
配置管理的定义:
配置管理是统一管理服务的配置信息,支持配置的动态更新。
配置管理的作用
作用 说明
集中管理 统一管理所有服务的配置
动态更新 配置更新后无需重启服务
环境隔离 不同环境使用不同配置
版本管理 配置版本管理,支持回滚
常见的配置中心:
配置中心 说明
SPRING CLOUD CONFIG SPRING CLOUD 官方配置中心
Apoilo 携程开源,功能丰富
Nacose 阿里开源,支持配置管理和服务发现CONSUL HASHCORP开源,支持配置管理
更多推荐
所有评论(0)