高可用高伸缩微服务架构基于Dubbo、Spring Cloud和Service Mesh
ISBN: 978-7-121-36213-2
推荐指数: ★★★★★
作者:程超 梁桂钊 秦金卫 方志斌 张逸 杜琪 殷琦 肖冠宇
阅读时间: 2021-04-13
页数: 505
非常推荐,
如果是增加理论知识和架构师谈资十分推荐阅读,
如果是想看看Java世界有多大十分推荐.
整体来说还是很好的一本书,
还是很有深度的.
理论文章十分推荐第一和二章,
讲的很有深度和内容,
需要消化和实践,
记得去年这个时候还懵懵懂懂,
现在终于了解一二了.
后面讲解的也各有千秋,
只怪自己没有时间认真研究下去,
而是笼统看过去(先大概了解,后详细研究)
知道个大概,也明白各自的解决方案,
具体的解决方法还是不得到.
1. 架构基础知识
架构是理论,框架是实现.
库是工具箱,
框架是一套通用的解决方案.
架构是高度抽象的需求,是系统中不变的变量.
平台是所有可能做的事的集合.
单体架构: 整个系统的所有功能单元整体部署到同一个进程(所有代码可以打包一个或多个文件)
分布式架构: 整个系统的功能单元分散到不同进程, 然后由多个进程共同提供不同的业务能力.
前后的分离: 分为逻辑分离和物理分离。逻辑分离是同在一个jar或者war包下面, 部署在Tomcat下面, 开发的时候前端代码和后端代码都在一个项目下面. 物理分离首先的代码分离, 前端有前端的项目, 后端有后端的项目, 部署的时候一般前端放到Nginx下面,后端使用jar或者war形式发布.
面向服务架构(SOA) --Service Oriented Architecture 关注点是服务,服务是最基本的业务功能单元,由平台中立性的接口契约来定义.
远程过程调用(RPC)—Remote Procedure Call 两个不同系统的数据通信, 往往采用Socket+自定义数据报文实现.
消息队列(MQ)—Message Queue 点对点模式,发布订阅模式, 因此增加了异步业务处理能力, 系统解耦, 削峰填谷, 通信可靠性.
微服务架构(MSA)—Microservice Architectural 由一些独立的服务共同组成应用系统, 每个服务单独部署,独立运行在自己的进程中.每个服务都是独立的业务.分布式管理.
2.领域驱动设计
领域驱动设计(DDD)—Domain Driven Design 技术维度,业务维度,将要解决的业务概念和业务规则转换为软件系统中的类型及类型的属性与行为,通过合理运用面向对象的封装、继承、多态等设计要素,降低或隐藏整个系统的业务复杂性,并使得系统具有更好的扩展性,应对纷繁多变的现实业务问题。
顺序性编程向响应式编程思想转变,
不仅性能和可靠性的提升,
也是思想的升华。
3.微服务稳定性保证的常用手段
- 限流:计数器算法、漏洞算法、令牌桶算法
- 断路器:Hystrix,Sentinel
- 阿姆达定律:在并行计算中用多处理器的应用加速受限于程序所需的串行时间百分比。
- 局部性原理:时间局部性,空间局部性。
- 消息队列
- 缓存:缓存穿透、缓存雪崩、热点缓存
4. 微服务下保证事务一致性
- CAP原则:Consistency(一致性)、Availability(可用性)、Partition-tolerance(分区容错性)
- BASE理论:Basically Available(基本可用)、Soft-state(软状态)、Eventually Consistent(最终一致性)
- 二阶段提交协议:第一阶段准备、第二阶段提交。
- 三阶段提交协议:第一阶段预备、第二阶段准备、第三阶段提交。
- TCC: Try、Confirm、Cancel
- 补偿模式、消息队列
5. 网关
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。
————David Wheeler
网关的角色是作为一个API架构,用来保护、增强和控制对于API服务的访问。
- 请求接入
- 业务聚合
- 中介策略
- 统一管理
6. 服务编排
微服务架构下更需要通过各个服务之间的协作来实现一个完整的业务流程,而串联各个服务的过程叫编排。
7. 微服务数据抽取于统计
微服务的数据去中心化核心:每个微服务有自己私有的数据库持久化业务数据。