《微服务设计原理与架构》书籍知识点总结

本书是一本微服务书籍的详细的介绍书籍。
主要从直面微服务架构、服务建模方法、服务的拆分与集成、微服务架构的基本组件、微服务架构的关键要素、微服务架构的实现技术、微服务架构的管理体系、面向微服务架构的转型。
主要从直面微服务架构、微服务架构基本组件、微服务架构的关键要素着重的介绍和整理成Xmind思维导图。
原版书籍
在这里插入图片描述
直面微服务架构
主要介绍:构建微服务架构是一项系统工程,涉及服务建模、实现技术、基础设施和研发过程等各个维度
划分
系统
领域
微服务
概念:就是一些具有足够小的颗粒、能够相互协作且自治的服务体系。
每个微服务都比较简单,仅关注一个具体的业务功能,并能很好的完成该功能,这里功能代表是一种业务能力。
微服务架构的基础就是分布式系统
分布式系统
单块系统
介绍
对它进行集成、部署以及实现无状态集群行对也比较简单
通常使用负载均衡机制并运行改单快系统的多个实例,就你能达到系统伸缩性的要求
问题
业务复杂度
可扩展性
代码腐化
团队问题
伸缩性问题
在一个集群中不断地添加新的节点,借助前端的负载均衡器将用户请求按照某种算法分配到不同的节点上。
对于那些需要保持类似会话session数据需求而言,扩容之后的运行机制在如何保持个服务器之间数据的一致性,也存在着较大的实现难度。
分布式系统
两个本质特性
网络
通讯和协调
通过约定、高效且可靠的通信机制进行相关协作才能完成某一项功能。
典型的分布式系统
简介
这些工具位于一个封闭或开放的网络环境中,相互之间通过网络的注册和发现,消息的传递、数据的缓存共享等机制完成协作
基本构成
分布式服务
消息中间件
分布式缓存
系统拆分的基本思想
纵向拆分
一个大应用拆分为i多个小应用
横向拆分
更多的关注技术,将可以复用的业务拆分出来
存在问题
网络传输的三态性
成功
失败
超时
异构型
负载均衡
数据一致性
服务可用性
微服务架构
微服务的大小
服务越小,其独立性和高内聚性能够带来优势,的你也会导致服务数量太多,增加管理这些服务的成本。
微服务的交互
交互方式
远程调用
消息传递
轻量级的通信机制而言,让服务之间的通信变的标准化,无状态化。
微服务架构特点
服务组件化
目的:服务可以独立部署
按业务能力组织服务
去中心化
基础设施自动化
CI/CD
微服务架构设计的切入点
服务建模
DDD领域驱动设计方法
服务之间集成方式
dubbo
服务之间的部署
gateway
微服务架构与现有架构的对比
微服务与SOA
应用范围
soa是企业级、面向大范围和统一化的服务化架构,微服务项目通常用于一个项目或产品
灵活性
SOA通过服务的编排机制实现灵活性 。微服务架构灵活性来自于快速的开发和部署以及服务之间的独立性
组织性
SOA强调不同组织中职能团队的实现,而微服务强调跨职能团队机制。
部署
SOA仍然以单块系统进行部署,独立进行部署是微服务架构的基本特征
微服务与ESB
消息总线思想的概念
理论基础是消息驱动的编程方法和计算机硬件总线的概念。
构建为服务架构的系统方法
服务建模
实现技术
基础设施
研发过程
微服务架构的优势
技术优势
组件化方案
技术自由度
可扩展性
可伸缩性
有效应对遗留系统
支持持续交付
业务与组织优势
消除过程浪费
快速产品开发
微服务架构的挑战
技术架构挑战
去中心化与平衡
服务版本控制
研发过程挑战
需求边界
引入变化
实施微服务架构
本章小结
服务建模方法
服务分类
服务模型
服务边界
服务数据
服务拆分与集成
服务拆分
服务集成
微服务架构的基本组件
服务通讯
网络连接
TCP两种基本连接
持久连接
短连接
TCP三次握手和四次挥手
IO模型
现在操作系统
内核空间
用户空间
IO操作的概念
信息交换过程中,我们对这些流进行数据收发操作、简称IO操作。
IO模型概念:
用户空间、内核空间、设备空间之间数据流操作的模型
阻塞IO
非阻塞IO
IO复用
信号驱动IO
异步IO
可靠性
周期进行有效性检测
TCP层通过简历长连接和接收方之间传递心跳信息
应用层:心跳信息根据系统同的要求可能包含一定的业务逻辑
通讯链路中断
间隔时间发起重连操作
同步与异步
服务通讯两种基本方式
单向模式
一般为同步模式
请求应对模式
一般为异步模式
同步调用
同步调用会造成业务线程阻塞,但开发和管理相对简单。
异步调用
实现方式:队列思想和事件驱动架构都是实现异步调用的常见策略
目的:在于获取高性能
future模式
future get
串行的,会造成get方法线程的阻塞
future listener
模式会创建listener,当future结果生成时会唤醒Future的listener对象,形成异步回调机制。
服务调用方式
事件驱动
基本的事件驱动架构
事件驱动架构与领域模型
简单的订阅者
即时转发订阅者
转发给消息队列
事件存储订阅者
事件持久化,专门的事件转发器转发到消息队列
负载均衡
概念
分布式
不同的业务分布在不同的地方
集群
是指几台服务器集中在一起,实现同一个业务
关系
分布式中每一个节点都可以做集群,集群不一定就是分布式。
其他
集群负载均衡机制
可以将业务请求分摊到多台单机性能不一定非常出众的服务器上。
集群的容错机制
确保集群中的某台机器无法正常提供服务时,整个集群仍然可用
服务器端负载均衡
提供服务端负载均衡的工具(基于HTTP协议或TCP协议)
Apache
Nginx
HAProxy
实现方式
在客户端和各个微服务实例之间假设集中式的负载均衡器即可
客户端负载均衡
优势:不会产生集中式负载均衡所产生的瓶颈问题
实现方式:在客户端程序里建立一个服务列表,自己设计调度算法,请求时通过算法去目标服务器去请求
典型应用就是memcache缓存
负载均衡算法
静态负载均衡算法
随机
加权随机
轮询算法
加权轮询
动态负载均衡算法
动态改变权重
静态变动态
权重根据各个服务器之间的持续监控并不断更新
分类
最少连接数算法
服务调用延时
源IP哈希
服务路由
直接路由
依赖配置中心或者数据库中的服务提供者的具体地址,构建链路完成调用。
缺点
运行时服务提供者地址发生改变,无法第一时间通知服务消费者,服务消费者和服务提供者之间耦合度高
维护配置中心和数据库持久化操作同样需要成本
间接路由
介绍
体现了解耦思想,充分发挥了发布–订阅模式作用,
事件是整个结构能够运行所依赖的基本的数据模型
微服务中间接路由的实现组件—服务注册中心
服务注册中心不可用时,可以使用本地缓存实现调用。
优势
路由解耦问题
面向全路由场景
路由规则
特定场景
服务故障
高峰期导流
业务相关的制定化路由
动态路由通过路由规则进行实现
黑白名单
条件脚本(可以用python等脚本实现)
API网关
微服务架构中核心要点
所有的客户端和消费端通过统一的网关接入微服务
在网关层处理所有的非业务功能
网关作用
解耦
支持客户端与微服务直接交互,当需要交互的微服务数量较多时,解耦成为一项核心需求。
API优化
对于同一个业务,不同的客户端可能需要不同的数据。例如,PC端可能一次性获取所有的数据。而对手机app而言,可以通过分页的方式逐步的加载用户信息。
简化调用过程
由于能够对返回数据进行灵活处理,API网关减少了请求的往返次数,从而简化了客户端的调用,也提高了服务访问性能。例如:API网关一次请求,可能向多个服务拉取数据。请求数据减少也会直接提升用户体验。
多一层网络跳转:相对优点来说微不足道
API网关增加了系统的复杂性和响应时间
延伸作用
请求管理
安全管理
业务路由
访问控制
日志记录
服务适配
网关功能
NIO接入和异步接出
NIO
IO的多路复用模式
报文格式转换
构建异构系统
通过协议转化整合后台
REST
AMQP
Dubbo
安全性控制
概念
用户身份认证
实践:统一的单点登陆(SSO)功能
常见安全性技术
密钥交换
客户端认证
报文加解密
访问控制
某些场景下需要控制客户端的访问次数和访问频率,对于一些高并发的系统还会有限流的需求
防止站点不被冲垮,网关可以配置一个阀值,当请求次数超过了阀值时,就返回错误而不继续访问后台服务。
业务路由支持
可以在网关层指定灵活的路由策略,针对特定的API,我们需要设置白名单和路由规则等各类限制。而非业务功能的配置以及变更都可以在网关层单独操作。
配置管理
演变过程
单块系统中,配置文件少,改动少,一般和源代码一起放在仓库中。随着配置文件数量和改动频率的增加,就会考虑配置文件从代码仓库中分离出来,放到服务器特定的目录下,剩下非文件形式的关键配置则存入数据库中
配置中心模型
概念
简单来说就是一种统一管理各种配置的基础服务组件。
分类
按照配置来源划分
源代码文件
数据库
远程调用
按照适用环境划分
开发环境
测试环境
预发布环境
生产环境
按照配置集成阶段划分
编译时
打包时
运行时
按照配置加载类型划分
单次加载型配置
动态加载型配置
核心要求
非开发环境下应用配置的保密性,避免关键配置写入源代码。
不同部署下应用配置的隔离性,比如非生产环境配置不能用于生产环境
统一部署环境下服务器应用配置的一致性,即所有的服务网i使用同一份配置
分布式环境下应用配置的可管理性,即提供远程管理配置能力
分布式协调机制
实现需要满足要求
高效获取
实时感知
分布式访问
概念
通过一定的方法,确保配置信息在分布式环境中能够得到实时、一致的管理。
zookeeper
每个节点都设置一个监听器(watcher),节点监听机制可以用来实现实时感知,从而做出响应。
微服务架构的关键要素
小知识点
单块系统中方法调用之间数据一致性,可以通过事务来实现。
分布式环境中,可以通过分布式事务在一定程度上实现数据的一致性。
服务治理
客户端调用服务提供者的过程
客户端通过服务中心注册,拉去服务提供者的路由表,更新到本地缓存中。
客户端通过本地缓存中路由表直接调用服务提供者。
服务注册中心
注册中心核心功能
订阅发布功能
注册中心实现策略
服务的发布与注册
发布启动器
动态代理
发布管理器
协议服务器
服务的发现和调用
调用启动器
动态代理
调用管理器
协议客户端
服务监控
概念:通过使用跟中ID作为一次完整应用调用的唯一标识,然后将该次调用的详细信息通过日志的方式进行保存。
日志埋点
客户端日志埋点
服务器端日志埋点
日志埋点作用分类
服务调用跟踪所有请求过程的日志能够关联起来
统计各服务的处理时间,计算时间延迟。
日志埋点缺点及解决方式
日志埋点会产生海量的运行时数据
常用专门处理工具
hadoop
storm
Spark
技术的离线/实时处理框架
基于Elastic Search、Solr的垂直化搜索引擎
专门的Flume/ELK等日志批量处理框架
数据一致性
分布式事务
特点
原子性
一致性
隔离性
持久性
分类
本地事务
关系型数据库,使用ACID事务的特性
分布式事务
二阶段提交协议
原理
一方提议并收集其他节点的反馈
根据反馈决定提交或终止事务
缺点
同步阻塞问题
单点故障
数据不一致
三阶段提交协议
改动点
同时在协调者和参与者之间引入超时机制
三阶段提交CanCommit、PreCommit、DoCommit
小知识点
提议节点称为协调者
参与决议的节点称为参与者
传统分布式事务的问题
分布式事务能够解决一部分数据一致性问题,传统的分布式事务并不是实现微服务数据一致性的最佳选择。
微服务使用的是最终一致性
CAP理论与BASE思想
CAP
一致性C
分布式系统中,所有的数据北非在同一时刻,是否拥有同样的值
可用性A
集群的一部分节点故障后,集群整体是否正常响应请求
分区容错性P
相当于对通信的时限要求,系统如果不能在一定的时限内达成数据的一致性,就意味着发生了分区情况,也就是说整个分布式系统不再互联。
BASE
概念:base是cap理论的延伸
基本可用BA
软状态A
最终一致性E
可靠事件模式
基本思路
通过消息中间件队列实现
关键点
某个服务更新了业务实体后发布消息失败
发送成功,但是消息中间件未能正确推送事件到订阅服务
主流消息中间件都支持持久化和至少一次投递的功能
接受事件的服务重复消费事件
业务代码块控制幂等性。例如判断订单对应的唯一的ID
解决方案
使用一个本地事件
实现策略
事件确认组件
事件恢复组件
实时消息传递组件
补偿模式
基本思路
提供补偿微服务,调用失败时执行微服务补偿服务
关键点
通过日志明确补偿范围
解决方案
服务重启
立即重试
定时调用
Sagas长事务模式
概念
sagas模式属于一个错误管理模式,可以同时控制复杂事务的执行和回滚
基本思路
最开始时是为了实现长时间的本地事务,现在也用于一些跨越多个数据的分布式事务。
将工作分成单独事务
正常的操作
回滚的操作
解决方案
使用队列和栈实现
使用队列向前执行
另一方面使用栈向后执行
TCC模式
基本思路
简介
Try接口
完成所有业务的规则检查,预留业务资源
Confirm接口
真正执行业务,其自身不做任何业务检查,只是用Try预留的业务资源,同时该操作需要满足幂等性
Cancel接口
释放Try阶段预留的业务资源,同样需要满足幂等性
解决方案
TCC事务管理三部分
主业务服务
从业务服务
业务活动管理器
实现策略
设计一个稳定的、高可用性、扩展性强的TCC事务管理器
最大努力通知模式
基本思路
通知发送方在完成业务处理后向通知接收方发送通知消息
解决方案
查询组件
确认组件
通知组件
人工干预模式
基本思路
重要的场景下还需要通过人工干预的方式来保证真正的一致性。典型场景:支付服务和第三方支付宝系统之间可能会有定期对账过程。
解决方案
后台管理系统,提供操作不一致数据的基本入口。
数据一致性模式总结
分类
一致性
吞吐量
复杂度
2PC
强一致性


3PC
强一致性


可靠事件模式
最终一致性


补偿模式
最终一致性


Sagas模式
最终一致性


TCC模式
最终一致性


最大努力通知模式
最终一致性


服务可靠性
服务访问失败的原因
服务器访问失败原因分类
硬件失败
硬盘无法写入
机器故障
分布式环境固有原因
异构系统问题
服务自身失败
设计问题
代码缺陷
服务依赖失败
服务器访问雪崩效应
概念:一个不可用传染至整个系统不可用,从而造成整个服务体系的雪崩
是一种扩散效应
服务失败的应对策略
比较容易想到的应对策略
超时
重试
异步解耦
服务容错
失效转移Failover
失败通知Failback
失败安全Failsafe
快速失败Failfast
分支机构Forking
广播机制Broadcast
服务隔离
线程隔离
进程隔离
集群隔离
机房隔离
读写隔离
服务限流
计数器法
滑动窗口法
漏桶算法
令牌桶算法
服务降级
服务分级
服务熔断
微服务架构的实现技术
微服务架构实现与技术选型
SpringBoot
SpringCould
案例分析
微服务架构的管理体系
服务测试
服务交付与部署
服务监控
服务安全
面向微服务架构转型
微服务架构转型过程与方法
微服务架构与研发过程转变
微服务架构转型案例分析

思维导图
在这里插入图片描述
下载地址百度网盘
链接:https://pan.baidu.com/s/1fu53jMwsd9l8G_mhr759aw
提取码:3qqq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值