前言

大概从五六年前开始,我在工作中越来越多地谈到了微服务,并参与了一些客户应用的微服务改造,其中不乏成功的例子,当然也有没达到预期的情况。随着网络基础设施的高速发展,以及越来越多的企业和组织需要通过互联网提供服务,在考虑构建可以支持海量请求以及多变业务的软件平台时,微服务架构成为多数人的首选。微服务架构的出现是符合事物发展规律的:当问题足够大、有足够多的不确定性因素时,人们习惯把大的问题拆分成小的问题,通过分割、抽象和重用小而可靠的功能模块来构建整体的方案。但是当这些小的、可重用的部分越来越多时,又会出现新的问题。在相似的阶段,人们遇到的问题通常也是相似的,这个时候我们需要一些共识,需要用一些通用的词汇来描述问题以及解题思路和方案,这也是人们知识的总结。

在互联网的大背景下,微服务的理论有机会被广泛实践。但是在实践过程中,大家对微服务的理解却大相径庭,到底要怎样做才能真正掌握微服务的架构理论呢?通过此文笔者想和大家分享一下对微服务架构的认识和理解。

微服务架构笔记目录

 

 

 

由于内容太多啦,就不一一展示给大家啦,有需要完整版笔记的朋友可添加助理获取

 

内容安排

  • 第1章描述了所谓“单体地狱”的症状,当单体应用程序超出其架构时会出现这种问题,这可以通过采用微服务架构来规避。这一章还概述了微服务架构模式语言,这也是本书大部分内容的主题。
  • 第2章解释了为什么软件架构很重要,描述了可用于将应用程序分解为服务集合的模式,并解释了如何克服在此过程中遇到的各种障碍。
  • 第3章介绍了微服务架构中强大的进程间通信的几种模式,解释了为什么异步和基于消息的通信通常是最佳选择。
  • 第4章介绍如何使用Saga模式维护服务间的数据一致性。 Saga 是通过传递异步消息的方式进行协调的一系列本地事务。
  • 第5章介绍如何使用领域驱动设计(DDD)的聚合和领域事件等模式为服务设计业务逻辑。
  • 第6章以第5章为基础,解释了如何使用事件溯源模式开发业务逻辑,事件溯源模式是一种以事件为中心的设计思路,用来构建业务逻辑和持久化领域对象。
  • 第7章介绍如何使用API组合模式或命令查询职责隔离(CQRS)模式,这两个模式用来实现查询分散在多个服务中的数据。
  • 第8章介绍了处理来自各种外部客户端请求的外部API模式,例如移动应用程序、基于浏览器的JavaScript应用程序和第三方应用程序。
  • 第9章是关于微服务自动化测试技术的两章中的第一章, 介绍了重要的测试概念,例
  • 如测试金字塔,描述了测试套件中每种测试类型的相对比例,还展示了如何编写构成测试金字塔基础的单元测试。
  • 第10章以第9章为基础,描述了如何在测试金字塔中编写其他类型的测试,包括集成测试、消费者契约测试和组件测试等。
  • 第11章介绍了开发生产就绪服务的各个方面,包括安全性、外部化配置模式和服务可观测性模式。服务可观测性模式包括日志聚合、应用指标和分布式追踪。
  • 第12章介绍了可用于部署服务的各种部署模式,包括虚拟机、容器和Serverless模式。还介绍了使用服务网格的好处,服务网格是在微服务架构中处理服务间通信的一个网络软件层。
  • 第13章介绍了如何通过采用绞杀者( Strangler)模式逐步将单体架构重构为微服务架构,绞杀者模式是指以服务形式实现新功能,从单体中提取模块将其转换为服务。

第一章逃离单体地狱

  • 单体地狱的特征,如何借助微服务架构逃离单体地狱
  • 微服务架构的基本特征,它的好处和弊端
  • 开发大型复杂应用时,如何借助微服务实现DevOps式开发风格
  • 微服务架构的模式语言及为什么使用它

FTGO应用程序的架构

 

FTGO的微服务架构

 

 

微服务架构的模式语言概述

 

第二章服务的拆分策略

  • 理解软件架构,以及它为什么如此重要
  • 使用拆分模式中的业务能力模式和子域模式进行单体应用到服务的拆分
  • 使用领域驱动设计中的限界上下文概念来分解数据,并让服务拆分变得更容易

微服务架构到底是什么

第1章描述了微服务架构的关键思想是如何进行功能分解。你可以将应用程序构建为一组服务,而不是开发一个大型的单体应用程序。一方面,将微服务架构描述为一种功能分解是有用的。但另方面,它留下了几个未解决的问题,包括:微服务架构如何与更广泛的软件架构概念相结合?什么是服务?服务的规模有多重要?

软件架构是什么,为什么它如此重要

架构显然很重要。至少有两个专门讨论该主题的会议: O'Reilly 的软件架构会议( htp:cinf/nese.rilloom/softwre archtecture)和SATURN会议( htpsp//esourcs.sci.cmu.du/newsreventsevents/saturm)。许多开发人员的目标是成为一名架构师。 但什么是架构,为什么它如此重要?为了回答这个问题,我首先定义术语软件架构的含义。之后,我将讨论应用程序的架构是多维的,并使用一组视图或蓝图进行描述。然后我将强调软件架构的重要性,因为它对应用程序的质量属性有显著的影响。

为应用程序定义微服务架构

那么如何定义一个微服务架构呢?跟所有的软件开发过程一样,一开始我们需要拿到领域专家或者现有应用的需求文档。跟所有的软件开发一样,定义架构也是一项艺术而非技术。本节我们将介绍一种定义应用程序架构的三步式流程,如图2-5所示。世界上并没有一个机械化的流程可以遵循,然后指望这个流程输出一个合理的架构。我们只能介绍一个大概的方法,现实世界中,这是一个不断迭代和持续创新的过程。

 

 

第三章微服务架构中的进程间通信

  • 通信模式的具体应用:远程过程调用、断路器、客户端发现、自注册、服务端发现、第三方注册、异步消息、事务性发件箱、事务日志拖尾、轮询发布者
  • 进程间通信在微服务架构中的重要性
  • 定义和演化API
  • 如何在各种进程间通信技术之间进行权衡
  • 使用异步消息对服务的好处
  • 把消息作为数据库事务的一部分可靠发送

基于同步远程过程调用模式的通信

 

使用服务发现

 

应用层服务发现模式

 

关于消息通道

 

第四章使用Saga管理事务

  • 为什么分布式事务不适合现代应用程序
  • 使用Saga模式维护微服务架构的数据一致性
  • 使用协同和编排这两种方式来协调Saga
  • 采用对策来解决缺乏隔离的问题

微服务架构对分布式事务的需求

 

协同式Saga

 

 

 

Order Service和Create Order Saga的设计

 

第五章微服务架构中的业务逻辑设计

  • 设计业务逻辑组织模式:事务脚本模式和领域建模模式
  • 使用领域驱动设计的聚合模式设计业务逻辑
  • 在微服务架构中应用领域的事件模式

使用聚合模式设计领域模型

在传统的面向对象设计中,领域模型由一组类和它们之间的关系组成,这些类通常被组织成包。例如,图5-4显示了FTGO应用程序的领域模型的一部分。 它是一个 典型的领域模型,由一组互相关联的类组成。

 

Kitchen Service的业务逻辑

 

Order Service的业务逻辑

 

 

第六章使用事件溯源开发业务逻辑

  • 使用事件溯源模式开发业务逻辑
  • 实现事件存储库
  • 整合Saga和基于事件溯源的业务逻辑
  • 使用事件溯源实现Saga编排器

Eventuate的Java客户端框架

 

使用事件溯源实现协同式Saga

 

 

 

第七章在微服务架构中实现查询

  • 在微服务架构中查询数据的挑战
  • 何时以及如何使用API组合模式实现查询
  • 何时以及如何使用CQRS模式实现查询

什么是API组合模式

 

 

设计CQRS视图

 

第八章外部API模式

  • 设计能够支持多种客户端的API的挑战
  • 使用API Gateway模式和后端前置模式
  • 设计和实现API Gateway
  • 使用响应式编程来简化API组合
  • 使用GraphQL实现API Gateway

FTGO移动客户端API的设计难题

 

API Gateway模式

 

API Gateway能够为每个客户端提 供它们专用的API

 

 

第九章微服务架构中的测试策略(上)

  • 微服务中有效的测试策略
  • 使用模拟(mock)和桩(stub)对软件中的元素执行隔离测试
  • 使用测试金字塔确定测试工作的重点
  • 对服务中的类执行单元测试

微服务架构中的测试策略概述

 

微服务架构中的测试挑战

 

为服务编写单元测试

 

第十章微服务架构中的测试策略(下)

  • 在隔离环境中测试服务的技术。
  • 使用消费者驱动的契约测试编写快速且可靠的测试,用来验证服务间的通信。
  • 何时以及如何进行应用程序的端到端测试。

针对异步请求/响应式交互的集成契约测试

 

为FTGO的Order Service编写组件测试

 

端到端测试

 

第十一章开发面向生产环境的微服务应用

  • 开发安全的服务
  • 如何使用外部化配置模式
  • 如何使用可观测性模式
  • 健康检查API
  • 日志聚合
  • 分布式跟踪
  • 异常跟踪
  • 应用程序指标
  • 审核日志记录
  • 通过使用微服务基底模式简化服务的开发

使用异常追踪模式

 

使用微服务基底

 

第十二章部署微服务应用

  • 四个关键部署模式,它们如何工作,以及它们的好处和弊端
  • 使用Kubernetes部署服务
  • 使用服务网格把服务发布环节与服务部署环节分开
  • 使用AWS L ambda部署服务
  • 选择部署模式

部署模式:编程语言特定的发布包格式

 

部署模式:将服务部署为虚拟机

 

部署模式:将服务部署为容器

 

第十三章微服务架构的重构策略

  • 何时将单体应用迁移到微服务架构
  • 在将单体应用重构为微服务架构应用时,为什么使用增量方法至关重要
  • 将新功能实现为服务
  • 从单体中提取服务
  • 集成服务和单体

将单体应用重构为微服务架构的若干策略

 

 

Delivery Service集成胶水的设计

 

由于笔记涉及到的知识点与内容极多,就不一一展示给大家了,这份【微服务架构

设计模式】共484页,若需要完整版笔记的朋友,可以转发此文关注小编,添加小助理来获取!!

当然,单单有文档看是远远不够的,还有视频和相匹配的课件进行学习提升,努力把微服务这一块儿给搞明白,相信一定会有不凡的人生!!

分布式&微服务架构实现

 

 

总结

笔记中既包含了微服务的原理、原则,又包含了实际落地中的架构设计模式;既包含可举一反三的理念和概念,也包含类似领域驱动设计、Saga实现事务操作、CQRS构建事件驱动系统等具体可套用的范.式....相信对于企业CIO推动公司数字化转型战略、软件开发者提升自身技术架构功力,以及云原生爱好者以微服务切入最新的云原生体系,都有着极其重要的实践指导意义。