微服务架构五大设计模式详解,助你领跑行业

微服务架构设计模式详解(5种主流模式)

   8447ea8338c27e6b6ac5a3dcc9c8e65f.jpeg

微服务架构

微服务,一种革命性的架构模式,主张将大型应用分解为若干小服务,通过轻量级通信机制互联。每个服务专注特定业务,具备独立部署能力,轻松融入生产环境,为系统带来高效、灵活的构建与部署体验。

如下图所示:

4258c57e4f0ef1ca27e01a51caf16556.jpeg

为什么需要微服务架构

公司初期,业务相对简单,正是验证商业模式的关键时刻。此时,单体服务因其高效性,在业务复杂度低、系统简单的情况下,成为提升生产力的优选方案。

如下图所示:

3641f744c1d27f064a403241403b3013.jpeg

随着公司的发展,业务复杂性慢慢提高,以及访问量越来越大,会出现如下情况:

  • 编译时间过长、回归测试周期过长;
  • 开发效率降低,因为,所有业务都混在一起;
  • 团队扩展了,需要分工明确了,按照业务来发展,大家都高效;

聚合设计模式

为了尽量减少服务之间的通信,我们可以使用服务聚合模式。

基本上服务聚合设计模式,是接收来自客户端、或 API 网关的请求。

然后分配给内部多个后端微服务,再将结果合并,并在一个响应结构中发给请求发起人。

如下图左侧所示:

8e992b987b2233de7443deb45a671462.jpeg

这种模式,可以帮助简化客户端与微服务之间的通信,并提供更好的性能和用户体验。

代理设计模式

如下图左侧所示:

9870add25424756706b08a47d471cfba.jpeg

比如:

Service Mesh是一种轻量级的微服务代理框架,用于管理微服务之间的通信。

异步消息传递设计模式

如果通信只是在少数几个微服务之间进行,那么同步通信就很好。

REST虽流行但同步易阻塞,微服务架构中,消息队列因其异步性,常作为REST请求/响应的替代选择,提升系统性能。

如下图所示:

4614819d3c7ff7f32ac289b1eda13d7a.jpeg

在微服务架构中,若需实现多服务间无依赖、松耦合的交互,推荐采用基于异步消息的通信方式,确保服务间的高效协同。

链式设计模式

微服务间存在多级依赖,如Sale微服务即依赖于Product和Order微服务,实现高效服务交互与协作。

所有服务都使用同步消息传递,在整个链式调用完成之前,客户端会一直阻塞。

因此,服务调用链不宜过长,以免客户端长时间等待。

如下图所示:

2ea1ae6b6c45ad4b627ec6c78529e521.jpeg

数据共享设计模式

我们已经说过,在微服务里,为每个服务分配一套单独的数据库是理想方案。

在后面的阶段里,我们可以转到每个服务一套数据库的模式,直到我们完全做到了这一点。

但在重构现有的单体应用时,SQL数据库反规范化可能会导致数据重复和不一致。

因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式。

如下图所示:

60c4955acc17c86cd5a79da027e17a09.jpeg

在这种情况下,部分微服务可能会共享缓存、和数据库存储。


-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

你对仲裁裁决不服怎么办?我教你四个狠招!

你对仲裁裁决不服怎么办?我教你四个狠招! 这个标题是什么意思呢?也就是说,当你(或用人单位)向劳动仲裁委提出仲裁申请后,但劳动仲裁结果没有维护你的权益,或者你不满意,…

js 面试题学习笔记一

1、什么是防抖和节流?有什么区别?如何实现? 防抖:触发高频事件后N秒内函数只会执行一次,如果N秒高频事件再次被触发,则重新计算时间。(a时间触发,5秒内执行一次,但是第4…

探索Solana链上DApp开发:高性能区块链生态的新机遇

Solana 是一个新兴的区块链平台,致力于为 DApp(去中心化应用程序)开发者提供高性能、低成本的解决方案。Solana 的独特之处在于其创新性的共识机制和高吞吐量的网络,使得开发者可以构建高度可扩展的 DApp,并为用户提供…

企业营收分析难?搞定收入认领月底不加班!

在当今日益激烈的市场竞争中,企业的营收分析不仅是衡量经营成果的关键指标,更是指导企业未来发展的重要依据。然而,对于许多企业来说,营收分析的过程往往繁琐且耗时,尤其是月底结账时,大量的数据和复杂的计…

鸿蒙OS开发:典型页面场景【一次开发,多端部署】(信息应用)案例

信息应用 简介 内容介绍 Mms应用是OpenHarmony中预置的系统应用,主要的功能包含信息查看、发送短信、接收短信、短信送达报告、删除短信等功能。 架构图 目录 /Mms/ ├── doc # 资料 ├── entry │ └── src │…

【STM32嵌入式系统设计与开发---传感器拓展】——1_2_蓝牙主从模块_AT配置(HC-05)

一、主机蓝牙设置 # 1、重置模块 ATORGL # 2、设置名字,自己随便设置 ATNAMEMaster # 3、设置连接密码,要和从机一样,密码好像可以不加双引号 ATPSWD"1234" # 4、设置为主机 ROLE 1 为主机 ROLE 0为从机 ATROLE1 # 5、设置波特…

编码规范

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 下面给出两段实现同样功能的代码,如图10所示。 图10 两段功能相同的Python代码 图10中右侧的代码段看上去比左侧的代码段更加规整&…

【从零开始学习RabbitMQ | 第三篇】什么是延迟消息

目录 前言: 延迟消息: 延迟消息实现方式: 死信交换机: 延迟消息插件: 1.基于注解的方式 2.基于Bean的方式 总结: 前言: 在现代软件开发中,异步消息处理已成为构建可扩展、高可…

【前端学习笔记】HTML基础

HTML 一、HTML介绍1.HTML概念2.文档声明3.字符编码4. HTML标签5. HTML属性 二、标签1.meta标签2.语义标签3.布局标签4.列表5.超链接6.图片7.字符实体8.内联格式9.HTML 表格10.HTML 表单 三、HTML5新特性1. 本地存储2. Cookie3. 语义化标签4.多媒体元素5.表单增强6.Canvas7.SVG …

C++牛客周赛43题目分享(3)小红平分糖果,小红的完全平方数,小苯的字符串变化,小红的子数组排列判断

目录 ​编辑 1.前言 2.四道题目 2.1小红平分糖果 2.1.1题目描述 2.1.2输入描述 2.1.3输出描述 2.1.4示例 2.1.5代码 2.2小红的完全平方数 2.1.1题目描述 2.1.2输入描述 2.1.3输出描述 2.1.4示例 2.1.5代码 2.3小苯的字符串变化 2.1.1题目描述 2.1.2输入描述 …

基于51单片机简易温度计

一.硬件方案 本系统利用51单片机控制温度传感器DS18B20进行温度的实时检测并显示,能够实现快速测量环境温度。硬件以微控制器为核心,外接时钟电路、复位电路、温度测量电路、LED显示电路组成。 二.设计功能 (1)采用DS18B20温度…

如何将照片从 iPhone 传输到闪存驱动器【无质量损坏】

概括 人们喜欢用 iPhone 拍照,因为照片通常都很漂亮,这都要归功于 iPhone 令人惊叹的技术。但照片更新后会占用更多空间,并且您可能会开始收到没有存储空间的通知。因此,您可以将照片传输到 USB 驱动器,然后从 iPhone…

Broker的主从架构

为了保证MQ的数据不丢失而且具备一定的高可用性,所以一般都是得将Broker部署成Master-Slave模式的,也就是—个Master Broker对应一个Slave Broker Master需要在接收到消息之后,将数据同步给Slave,这样一旦Master Broker挂了&#…

嵌入式智能硬件茶杯垫的设计与实现方案

iCupBox简介 这是一款智能杯垫产品,基于GTD时间管理理念设计,目的是提醒人们专心工作和及时喝水休息,提高工作效率。 https://gitee.com/jiangtao008/iCupBox 开原许可协议:MIT 项目分为客户端APP和杯垫固件系统: 客户端APP,使用QML开发,集成GTD时间管理方法,与杯垫固…

芯片固定uv胶有什么优点?

芯片固定uv胶有什么优点? 芯片固定UV胶具有多种优点,这些优点使得它在半导体封装和芯片固定等应用中成为理想的选择。以下是芯片固定UV胶的一些主要优点: 固化速度快:UV胶在紫外线照射下能迅速固化,通常在几秒到几十秒…

【全开源】知识答题系统源码小程序(FastAdmin+ThinkPHP+Unipp)

打造智慧问答的基石 一、引言:知识答题系统的时代意义 在信息爆炸的时代,知识答题系统源码作为一种高效、有趣的知识传播方式,受到了越来越多人的关注和喜爱。通过搭建知识答题系统,我们可以将海量的知识内容以答题的形式展现给…

makefile一些特殊且常用的符号

$^&#xff1a;表示所有的依赖文件列表&#xff0c;多个文件以空格分隔。 $&#xff1a;表示目标文件的名称。 $<&#xff1a;表示第一个依赖文件的名称。 $*&#xff1a;表示目标文件的主文件名&#xff08;不包括扩展名&#xff09;。 $?&#xff1a;表示所有比目标文件更…

C# 泛型函数

1.非约束 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace MyGeneirc {public class GeneircMethod{/// <summary>/// 泛型方法解决&#xff0c;一个方法&#xff0c;满足不同参数类型…

鸿蒙ArkUI-X跨平台开发:【资源分类与访问】

资源分类与访问 应用开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些资源在不同…

蓝桥楼赛第30期-Python-第三天赛题 提取电影信息题解

楼赛 第30期 Python 模块大比拼 提取电影信息 介绍 JSON&#xff08;JavaScript Object Notation, /ˈdʒeɪsən/&#xff09;是一种轻量级的数据交换格式&#xff0c;最初是作为 JavaScript 的子集被发明的&#xff0c;但目前已独立于编程语言之外&#xff0c;成为了通用的…