【微服务架构模式】微服务设计模式

这是微服务架构系列文章的第 3 篇

b123deb1def17ac6b825273fd2101672.png

高可用性、可扩展性、故障恢复能力和性能是微服务的特征。您可以使用微服务架构模式来构建微服务应用程序,从而降低微服务失败的风险。


模式分为三层:


应用模式


应用程序模式解决了开发人员面临的问题,例如数据分解、数据维护、测试、用户界面和一些可观察性模式。

e78fc28678430eaba9471cd66a545299.png

让我们回顾一下这些应用程序模式的基础知识。


分解模式


选择如何将单体系统分解为服务

  • 按业务能力分解——服务是围绕业务能力组织的。

  • 按子域分解——服务是围绕域驱动设计的子域组织的。


数据模式

  • 数据一致性——每个服务使用一个单独的数据库以确保松散耦合。为了跨服务的数据一致性,必须使用 Saga 模式。

  • 查询——每个服务使用数据库的另一个问题是某些查询需要连接来自多个服务的数据。不可能对服务的数据库执行分布式查询,因为它的数据只能通过其 API 访问。必须使用其中一种查询模式来检索分散在多个服务中的数据。

    • API 组合——对一项或多项服务进行 API 调用并汇总结果。

    • 命令查询职责分离 (CQRS) — 数据保存在一个或多个可以轻松查询的副本中。


测试模式


单个微服务更容易测试,因为它们比单体应用程序小得多。在测试不同服务是否协同工作时,重要的是要避免使用同时检查多个服务的复杂、缓慢和不稳定的端到端测试。

  • 消费者驱动的合同测试——确保服务满足客户的期望。

  • 消费者端合约测试——确保服务的客户端可以与之通信。

  • 服务组件测试——隔离服务并对其进行测试。


用户界面模式


显示与不同服务相对应的数据及其显示方式是不同团队的责任。

  • 服务器端页面片段组合——每个团队开发一个 Web 应用程序,为他们的服务实现的页面区域生成 HTML 片段。UI 团队通过在服务器端聚合特定于服务的 HTML 片段来开发页面模板。

  • 客户端 UI 组合——每个团队创建一个客户端 UI 组件,为他们的服务实现屏幕区域,例如 AngularJS 指令。通过组合多个特定于服务的 UI 组件,UI 团队实现页面骨架来构建屏幕。

可观察性模式


为了有效地运行应用程序,了解其运行时行为并解决请求失败等问题非常重要。

  • 审计日志——审计日志记录每个用户的操作。审计活动日志通常用于协助客户支持、确保合规性和检测可疑活动。

  • 应用程序指标——监控和警报是生产环境的关键组成部分。有一系列指标,例如 CPU、内存和磁盘的利用率,到服务请求的延迟和执行的请求数。指标由提供警报和可视化的指标服务收集。

应用基础架构模式


它们适用于也会影响开发的基础设施问题,例如通信、可观察性、可靠性和安全模式。

571eed7835743a1f64bdea1dd0e0fe65.png

横切关注点模式


我们必须先了解关注点,才能理解横切关注点。关注点是基于其功能的系统的一部分。有两种担忧:

  • 核心关注点——它代表主要需求的单一和特定功能,例如业务逻辑。

  • 横切关注点——与次要需求相关的关注点。横切关注点是适用于整个应用程序的关注点,例如安全性和日志记录。

    • 外部化配置——在运行时,它向服务提供配置属性值,例如数据库凭据和网络位置。

    • 微服务底盘——微服务底盘是处理一系列问题的一个或一组框架,例如外部化配置、健康检查、应用程序指标、服务发现、断路器和分布式跟踪。您可以使用微服务机箱更有效地开发服务的业务逻辑。

    • 服务模板——开发人员可以通过复制源代码模板快速开始开发新服务。顾名思义,模板是一个简单的可运行服务,它实现了构建逻辑和横切关注点以及示例应用程序逻辑。

通讯模式


基于微服务的应用程序是分布式系统。微服务架构严重依赖进程间通信(IPC)。

  • 远程过程调用 (RPI) — 使用请求/回复协议发出服务请求。

  • 特定于域的协议 - 对于服务间通信,例如使用 SMTP/IMAP 的电子邮件,或使用 RTMP/HLS/HDS 的媒体流,请使用特定于域的协议。

  • 消息传递——使用异步消息传递进行服务间通信,例如 AMQP


可观察性模式


可观察性模式提供了对应用程序行为方式的洞察。诊断微服务架构的问题要困难得多。在最终将响应返回给客户端之前,请求可以在多个服务之间反弹。

  • 日志聚合——将服务活动日志写入可以执行搜索和警报的集中式日志服务器。

  • 异常跟踪——应将异常报告给异常跟踪服务,该服务对异常进行重复数据删除、警告开发人员并跟踪其解决方案。

  • 健康检查 API — 提供一个返回服务健康状况的端点。

  • 分布式跟踪——为每个外部请求提供一个 ID,并在请求在服务之间流动时对其进行跟踪。

可靠性模式


当服务不可用时,如何保证它们之间的可靠通信?

  • 断路器——断路器可用于保护跨服务调用。当一定数量的下游资源请求未能达到一定阈值时,断路器会打开。如果断路器打开,系统将很快出现故障。一段时间后,客户端会发送一些请求来检查下游服务是否已经恢复。如果有正常响应,将在健康恢复后再次发送请求。

安全模式


用户通常由微服务架构中的 API 网关进行身份验证。然后必须将用户的身份和角色传递给它调用的服务。一个常见的解决方案是使用访问令牌模式。API 网关将访问令牌(例如 JWT(JSON Web 令牌))传递给服务,服务可以验证令牌并获取有关用户的信息。


基础架构模式


它们解决了与开发之外的基础设施有关的问题,例如部署、发现和与外部 API 的通信模式。

92f6d6bd557ba0824b79807479073c76.png

部署模式


部署微服务有几种模式。传统上,服务以特定语言的方式打包。有两种现代部署方法。

  • 虚拟机或容器——虚拟机或容器可用于部署服务。

  • 无服务器部署——无服务器平台在您上传服务代码后执行它。自动化的自助服务平台是部署和管理服务的最佳方式。

发现模式


通常,服务需要相互通信。单体应用程序使用语言级方法或过程调用来调用其服务。传统上,分布式系统在固定的、众所周知的位置(主机和端口)运行,因此可以通过 HTTP/REST 或其他一些机制访问服务。然而,大多数基于微服务的现代应用程序都在虚拟化或容器化环境中运行,其中服务实例的数量及其位置会动态变化。

  • 自注册——服务向服务注册中心注册自己

  • 客户端发现——服务客户端从服务注册表中检索服务实例,然后在它们之间进行负载平衡。

  • 3rd Party Registration — 第三方自动向服务注册中心注册服务实例。

  • 服务器端发现——服务发现由路由器完成,路由器接收来自客户端的请求。

外部 API 模式


微服务提供的 API 粒度通常与客户端所需的不同。微服务提供的 API 通常是细粒度的,因此客户端必须与多个服务交互。每个客户端需要不同数量的数据,网络性能对每个客户端的影响也不同。

  • API Gateway — API Gateway 实现了一项服务,该服务是从外部 API 客户端进入基于微服务的应用程序的入口点。它执行请求路由、API 组合和其他功能,例如身份验证、速率限制、缓存等。

  • 前端的后端(BFF)——为每种类型的客户端创建一个单独的 API 网关。每个移动、浏览器和公共 API 团队都将拥有自己的网关,而 API 网关团队拥有公共层。

在以后的文章中,我们将详细介绍每种模式。

本文 :https://architect.pub/microservices-design-patterns
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号

【jiagoushipro】
【超级架构师】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
3a8fe90726f72d88dc60ffcf321e4a39.jpeg
微信小号

【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.

0dd377a650f5a32c7c040f380aba3d46.jpeg

QQ群

【285069459】深度交流企业架构,业务架构,应用架构,数据架构,技术架构,集成架构,安全架构。以及大数据,云计算,物联网,人工智能等各种新兴技术。
加QQ群,有珍贵的报告和干货资料分享。

2bb7b0583aea7ee051659f5495418a68.jpeg

视频号【超级架构师】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

8ba7a736cd6211c2d213b3e75fe28241.jpeg

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。

2e481737c24397673061e47601ec7ded.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
知识星球认识更多朋友,职场和技术闲聊。知识星球【职场和技术】
领英Harryhttps://www.linkedin.com/in/architect-harry/
领英群组领英架构群组
https://www.linkedin.com/groups/14209750/
微博‍‍【超级架构师】智能时刻‍
哔哩哔哩【超级架构师】

b6ec81dd375b8baea556465d4579f990.jpeg

抖音【cea_cio】超级架构师

cce9292ff0cd7a750a54d199dfe78183.jpeg

快手【cea_cio_cto】超级架构师

30f737e0e8d6cec482b1a2d4f97e9880.jpeg

小红书【cea_csa_cto】超级架构师

ff6cdd812e43e0db92de899b585fbb53.jpeg

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站架构师实战分享https://architect.pub   
网站程序员云开发分享https://pgmr.cloud
网站首席架构师社区https://jiagoushi.pro
网站应用开发和开发平台https://apaas.dev
网站开发信息网https://xinxi.dev
网站超级架构师https://jiagou.dev
网站企业技术培训https://peixun.dev
网站程序员宝典https://pgmr.pub    
网站开发者闲谈https://blog.developer.chat
网站CPO宝典https://cpo.work
网站首席安全官https://cso.pub    ‍
网站CIO酷https://cio.cool
网站CDO信息https://cdo.fyi
网站CXO信息https://cxo.pub

谢谢大家关注,转发,点赞和点在看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/5399.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue表格实现一个简单的合并单元格功能

用的是vue2ant-design-vue 但是vue3或者element-ui也是同理 先上效果 需要后端的数据将相同id的放在一起 否则也会有问题 例如: this.list [{id: 1,name: 舟山接收站,...}{id: 2,name: 舟山接收站碳中和LNG,...},{id: 2,name: 舟山接收站碳中和LNG,...} ]// th…

Java-数据结构(一)-java1中有哪些数据结构呢?

这里写目录标题 前言一、为什么需要数据结构?1、低效的操作2、占用过多的内存空间3、困难的数据操作 二、枚举(Enumeration)1、定义2、关键字3、适用场景 三、 位集合(BitSet)1、定义2、方法3、适用场景 四、向量&…

联邦学习 (FL) 中常见的3种模型聚合方法

联邦学习 (FL) 中常见的3种模型聚合方法 联合学习 (FL) 是一种出色的 ML 方法,它使多个设备(例如物联网 (IoT) 设备)或计算机能够在模型训练完成时进行协作,而无需共享它们的数据。 “客户端”是 FL 中使用的计算机和设备&#x…

通用分页详解【下】

目录 前言 一、通用分页的核心思想 二、PageBean的分页要素及优化 三、SQL的通用 1.获取总记录数 2.获取分页语句 四、PageTag的核心逻辑见解 五、运行流程 案例运用 注意: 1.pageBean优化 2.tld文件 3.分页标签助手类 4.Servlet层 5.jsp页面 6.结果输…

借助APlayer、MetingJS实现 网页音乐播放器

借助APlayer、MetingJS实现 1、src/publi/index.html引入 <script src"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <script src"https://cdn.jsdelivr.net/npm/meting2.0.1/dist/Meting.min.js"></scri…

2.Elasticsearch核心概念

文章目录 一、Es中的核心概念1.1文档和字段1.2 索引和映射1.3 Mysql与Elasticsearch的区别1.4 Elasticsearch中分片的概念1.4.1 什么是分片数1.4.2 什么是副本数1.4.3 分片和副本带来的好处一、Es中的核心概念 elasticsearch中有很多独有的概念,与mysql中略有差别,但也有相似…

一步一步学OAK之五:通过OAK相机实现边缘检测

目录 边缘检测简介Setup 1: 创建文件Setup 2: 安装依赖Setup 3: 导入需要的包Setup 4: 创建pipelineSetup 5: 创建节点创建相机节点创建边缘检测节点创建XLinkOut数据交互的节点 Setup 6:设置相关属性设置彩色相机的相关属性设置左侧和右侧的单目相机的相关属性设置边缘检测器的…

加速优化WooCommerce跨境电商网站的15种简单方法

Neil Patel和 Google所做的研究表明&#xff0c;如果加载时间超过三秒&#xff0c;将近一半的用户会离开网站。页面加载时间每增加一秒&#xff08;最多5秒&#xff09;&#xff0c;您的收入可能就会减少。在本教程中&#xff0c;我们将学习如何优化加速WooCommerce商店。 目录…

Linux 的逻辑世界与 Windows 的复杂性

Linux的逻辑世界与Windows的复杂性 作为操作系统&#xff0c;Linux 和 Windows 都在全球用户心中赢得了一席之地。 这两种系统都很常用&#xff0c;每种都有不同的原因和目的。 作为一名有用的 AI 助手&#xff0c;我有机会广泛使用 Linux 和 Windows&#xff0c;并且我想探索…

centos7 安装Python3.9

1. 安装编译相关软件 su yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install libffi-devel -y2.下载安…

B+树

B树 B树是对B树的一种变形树&#xff0c;它与B树的差异在于: 非叶结点仅具有索引作用&#xff0c;也就是说&#xff0c;非叶子结点只存储key&#xff0c;不存储value 树的所有叶结点构成一个有序链表&#xff0c;可以按照key排序的次序遍历全部数据 B树存储数据 若参数M选…

Learn Mongodb了解DB数据库 ①

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; PHP MYSQL &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…