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

news2025/1/4 19:35:46

微服务架构设计模式详解(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

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


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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

据库管理-第195期 Oracle RDMA(20240527)

数据库管理195期 2024-05-27 数据库管理-第195期 Oracle & RDMA(20240527)1 RDMA & Exadata2 RDMA & OCI3 RDMA的难点总结 数据库管理-第195期 Oracle & RDMA(20240527) 作者:胖头鱼的鱼缸&#xff08…

平方回文数-第13届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第73讲。 平方回文数&#…

nginx编译安装手把手教学

编译安装nginx的第一步需要从nginx的官网找到nginx最新的稳定版本 下面这是官方网站的资源下载地址 https://nginx.org/en/download.html选中稳定版本点击右键——选择复制链接 在终端内使用wget指令官网下载地址,将nginx下载 使用wget指令下载 wget https://ng…

Docker 快速搭建 MongoDB 4.x 集群(一主一从)

目录 1. 生成 mongo-file2. 启动主节点3. 启动从节点4. 配置副本集5. 注意事项 环境:MongoDB 4.0.25,Alma Linux(建议使用 Linux) 部署的时候是在同一个及其上操作的,实际可以放在不同机器上。 截止到 2024年05月&…

Golang 创建第一个web项目(Gin + Gorm)

1. 写这篇博客的由来: 当你想使用最快的框架创建项目的时候是不是有点束手无策? 当你想配置数据库写 SQL 甚至不知道如何写,文件夹都不知道建在哪里? 😄因为Golang 目前并没有 JAVA 那种硬性规范,但是…

【Python】 用Python的Pandas库美化打印Series和DataFrame

基本原理 在Python的数据分析领域,Pandas是一个非常重要的库。它提供了丰富的数据结构和数据分析工具,使得处理大型数据集变得简单高效。当你使用Pandas处理数据时,经常需要查看数据的预览,这时候美化打印(Pretty-pri…

SSMP整合案例第一步 制作分析模块创建与开发业务实体类

制作分析 我们要实现一个模块的增删改查 实际开发中mybatisplus用的不多,他只能对没有外键的单表进行简单的查询 但在这个案例中我们还是选择mybatisplus开发 模块创建 我们把所有服务器都放在一起 就不用前后端分离 我们尝试用后端开发进行全栈开发 新建项目添…

【分支控制】(switch) 详解

switch分支结构 基本语法 switch (表达式){case 常量1: //当...语句块1;break; //跳出switchcase 常量2:语句块2;break;...case 常量n;语句块n;break;default:default语句块;break;}switch 关键字, 表示switch分支表达式, 对应一个值case 常量1: 当表达式的值等于常量1, 就执行…

FreeRTOS_信号量_学习笔记

信号量的特性 消息队列用于传输多个数据,但是有时候我们只需要传递状态,这个状态值需要用一个数值表示。套用队列笔记中的流水线例子,可以理解为流水线上工件的数量。 信号:起通知作用 量:还可以用来表示资源的数量 当…

232转Profinet网关接扫码枪与PLC通讯在物流分拣线上的应用

一、背景 随着生活节奏的加快,网络购物需求非常大,从而造成快递站需要快速提取快递信息已达到快速出站的效果,这就用到了扫码枪,扫码枪作为采集设备,能够迅速准确地读取货物信息。并将数据传输至PLC控制器&#xff0c…

antd design 自定义表头

<template><a-card :bordered"false"><div class"contentWrap"><!-- 查询区域 --><div class"table-page-search-wrapper"><a-form layout"inline" keyup.enter.native"searchQuery">&…

【InternLM实战营第二期笔记】03:“茴香豆“,搭建你的 RAG 智能助理(未完成)

文章目录 笔记-RAG课程结构为什么要用 RAG&#xff1f;定义工作原理向量数据库RAG 工作流程发展历程常见优化RAG vs 微调LLM 优化方法比较RAG的评价总结 笔记-茴香豆什么是茴香豆茴香豆实战 笔记-RAG 课程结构 为什么要用 RAG&#xff1f; 新增知识&#xff0c;尤其是高频变动…

利用开源工具创建WEBGIS应用

在本文中&#xff0c;我们将大致说明利用开源工具如何与服务器交互以构建交互式或动态 Web GIS。 WebGIS 应用程序已成为展示地理数据的重要模式。我们现在拥有允许用户交互的机制&#xff0c;以便用户可以选择数据&#xff0c;甚至修改或添加新数据。 什么是WEBGIS? 通过网络…

三十、openlayers官网示例解析Double click, Drag and Zoom——第二次点击鼠标拖拽缩放地图效果、取消地图双击放大事件

这篇展示了如何在地图上添加第二次按下鼠标移动鼠标实现拖拽缩放地图效果。 官网demo地址&#xff1a; Double click, Drag and Zoom 官网介绍文字的翻译如下&#xff1a; 示例比较简单&#xff0c;直接贴代码&#xff1a; const map new Map({//添加第二次点击拖拽缩放地图i…

Meta 推出新型多模态 AI 模型“变色龙”(Chameleon),挑战 GPT-4o,引领多模态革命

在人工智能领域&#xff0c;Meta 近日发布了一款名为“变色龙”&#xff08;Chameleon&#xff09;的新型多模态 AI 模型&#xff0c;旨在挑战 OpenAI 的 GPT-4o&#xff0c;并刷新了当前的技术标准&#xff08;SOTA&#xff09;。这款拥有 34B 参数的模型通过 10 万亿 token 的…

探索机器人智能设备:开启智慧生活新篇章

机器人智能设备作为科技创新的代表&#xff0c;正以其独特的魅力吸引着越来越多的关注。它们不仅具备高度的智能化和自主化能力&#xff0c;还能在各种场景下发挥出强大的功能。 机器人智能设备的张总说&#xff1a;在智能家居领域&#xff0c;机器人智能设备可以帮助我们实现家…

骨折分类数据集1129张10类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;1129 分类类别数&#xff1a;10 类别名称:["avulsion_fracture",…

鸿蒙ArkUI-X跨语言调用说明:【平台桥接开发指南(Android)BridgePlugin】

BridgePlugin (平台桥接) 本模块提供ArkUI端和Android平台端消息通信的功能&#xff0c;包括数据传输、方法调用和事件调用。需配套ArkUI端API使用&#xff0c;ArkUI侧具体用法请参考[Bridge API]。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-…

微软Copilot+ PC:Phi-Silica

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba&#xff0c;xLSTM,KAN&#xff09;则提供了大模…

webserver服务器从零搭建到上线(九)|⭐️EventLoop类(一)——详解成员变量、简述成员方法

在本节中&#xff0c;我们一起来仔细探讨一下EpollPoller类。该类可以说是muduo库中最最核心的类了&#xff0c;一定要搞懂&#xff01; 文章目录 私有成员using ChannelList std::vector<Channel*>looping_、quit_threadId_pollReturnTime_、poller_wakeup_fd、wakeupC…