知识体系框架

第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开源,支持配置管理

更多推荐