当前位置: 首页 > news >正文

微服务架构七种模式

微服务架构七种模式

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

微服务架构七种模式

需求:

1.聚合器微服务设计模式
2. 代理微服务设计模式
3. 链式微服务设计模式
4. 分支微服务设计模式
5. 数据共享微服务设计模式
6. 异步消息传递微服务设计模式

设计思路

1.聚合器微服务设计模式
其主要功能是将不同的微服务功能模块组合成一个单一的API,从而提高整个系统的可用性和可扩展性。
具体来说,聚合器微服务设计模式的实现需要以下步骤:

对于需要聚合的功能模块,使用独立的微服务进行开发和维护,并尽可能地保持每个服务的独立性和可扩展性;

设计一个聚合器微服务,该服务将调用所有需要的功能模块,并将它们的响应结果汇总成一个单一的API响应。这个聚合器微服务可以被视为一个路由器,它将路由所有的请求到正确的服务;

当聚合器微服务收到一个请求时,它会调用所有需要的功能模块,并将它们的响应结果汇总成一个单一的API响应。这个响应结果可以是JSON格式的数据,也可以是其他格式的数据;

对于特定的业务需求,可以在聚合器微服务中实现各种聚合逻辑,例如对多个响应结果进行组合、聚合或过滤等等。

  1. 代理微服务设计模式

安全代理:代理微服务可以在客户端和后端服务之间提供安全层,对数据进行加密、身份验证和授权等操作,确保只有授权的用户可以访问服务。

负载均衡代理:代理微服务可以根据负载情况动态分配请求到多个后端实例,以避免某个实例过载从而导致服务不可用的情况。

缓存代理:代理微服务可以在客户端和后端服务之间提供缓存层,从而提高服务的响应速度和性能。

带宽限制代理:代理微服务可以限制对后端服务的访问速率,从而避免后端服务因过多请求而崩溃。

记录数据代理:代理微服务可以对所有请求和响应数据

  1. 链式微服务设计模式
    链式微服务设计模式是一种可扩展的设计模式
    该模式将各个微服务连接起来,形成一条链,每个微服务都完成一部分功能,然后将结果传递给下一个服务,直到完成整个过程。

该模式将各个微服务连接起来,形成一条链,每个微服务都完成一部分功能,然后将结果传递给下一个服务,直到完成整个过程。

在链式微服务设计模式中,每个微服务都是独立的,它们都有自己的输入和输出,并且可以使用异步消息传递或同步调用等不同的通信方式。每个微服务都是可插拔的,可以轻松添加或删除服务,而不需要修改整个系统。

这种设计模式允许每个微服务专注于自己的任务,而不需要关注整个系统的细节。它还可以提高系统的可扩展性和性能,因为每个微服务都可以进行水平扩展,以处理更多的请求。

另外,链式微服务设计模式可以帮助开发人员更好地组织代码和模块化系统。每个微服务都可以作为一个模块,可以单独测试和部署,从而更容易实现持续交付和部署。

分支微服务设计模式是一种用于构建大型系统的微服务架构模式,它将系统分成多个小的、相互独立的子系统。

在分支微服务设计模式中,每个微服务代表一个子系统,负责处理该子系统的所有业务逻辑。这种模式允许每个子系统独立开发、测试和部署,从而提高了系统的可伸缩性和可维护性。

  1. 分支微服务设计模式
    分支微服务设计模式主要有以下几个特点:

  2. 每个微服务都是独立的,具有自己的数据库和API接口。

  3. 不同的微服务之间可以通过RESTful API或消息队列进行通信。

  4. 每个微服务都遵循单一职责原则,只负责处理特定的业务逻辑。

  5. 分支微服务模式允许系统中的不同部分独立开发和升级,从而提高了系统的可伸缩性和可维护性。

  6. 通过使用分支微服务模式,可以将系统中的风险降到最低,因为每个微服务都可以独立测试和部署。

数据共享微服务是一种模式,它允许不同的应用程序和服务共享数据,以便实现更高效的业务流程。下面是一些常用的数据共享微服务设计模式:

数据聚合模式:将多个数据源的数据聚合到一个中心库或数据湖中,并提供统一的API接口供其他服务调用。

数据复制模式:将数据从一个数据源复制到另一个数据源,以便在不同的应用程序或服务中使用。

数据传输模式:使用消息队列或其他数据交换机制,将数据从一个服务传输到另一个服务。

数据缓存模式:使用缓存服务将数据缓存起来,以便其他服务可以更快地访问它们。

数据仓库模式:构建一个数据仓库,将数据从多个数据源导入其中,并提供查询接口供其他服务使用。

异步消息传递是一种常见的微服务设计模式,它允许不同的服务之间通过消息传递进行通信。这种方式可以帮助解决微服务架构中的耦合性和性能问题。

在异步消息传递模式中,一个服务可以通过消息队列向另一个服务发送消息,而不需要直接调用该服务的 API。这种方式可以让服务之间解耦,因为发送方不需要知道接收方的实现细节,只需要知道如何发送消息,并且接收方会在消息队列中接收并处理消息。

另外,异步消息传递还可以提高系统的性能和可伸缩性。因为消息队列可以处理大量的消息,不同的服务可以异步地处理这些消息,从而让整个系统的吞吐量得到提高
以下是异步消息传递微服务设计模式的几个关键要点:

1.使用消息队列作为服务之间通信的中介。消息队列可以是开源的,比如RabbitMQ和Apache Kafka,也可以是云服务商提供的管理的消息队列,比如AWS SQS和Azure Service Bus。

2.定义标准的消息格式和协议,以确保不同的服务可以理解和处理消息。

3.使用异步方式发送消息,这意味着发送方不需要等待接收方处理完消息才能继续执行。

4.确保消息处理的幂等性,即使同一个消息被处理多次,也应该保证最终结果是一样的。

实现思路分析

参考资料和推荐阅读

参考资料
官方文档
开源社区
博客文章
1.https://edu.iask.sina.com.cn/jy/3o7lgs8RzuF.html
书籍推荐

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~

相关文章:

微服务架构七种模式

微服务架构七种模式 目录概述需求: 设计思路实现思路分析 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.…...

关于CICD流水线的前端项目运行错误,npm项目环境配置时出现报错:Not Found - GET https://registry.npm...

关于CICD流水线的前端项目运行错误,npm项目环境配置时出现报错:Not Found - GET https://registry.npm… 原因应该是某些jar包缓存中没有需要改变镜像将包拉下来 npm config set registry http://registry.npm.taobao.org npm install npm run build...

element-plus的周选择器 一周从周一开始

1、代码 1&#xff09;、template中 <el-date-picker v-model"value1" type"week" format"[Week] ww" placeholder"巡访周" change"change"value-format"YYYY-MM-DD" /> 2&#xff09;、方法中 import…...

Android 9.0 pms获取应用列表时过滤掉某些app功能实现

1.前言 在9.0的系统rom定制化开发中,对系统定制的功能也是很多的,在一次产品开发中,要求在第三方app获取应用列表的时候,需要过滤掉某些app,就是不显示在app应用列表中,这就需要在pms查询app列表时过滤掉这些app就可以了,接下来就实现这些功能 2.pms获取应用列表时过滤掉…...

HTML <thead> 标签

实例 带有 thead、tbody 以及 tfoot 元素的 HTML 表格: <table border="1"><thead><tr><th>Month</th><th>Savings</th></tr></thead><tfoot><tr><td>Sum</td><td>$180<…...

谷歌发布Gemini以5倍速击败GPT-4

在Covid疫情爆发之前&#xff0c;谷歌发布了MEENA模型&#xff0c;短时间内成为世界上最好的大型语言模型。谷歌发布的博客和论文非常可爱&#xff0c;因为它特别与OpenAI进行了比较。 相比于现有的最先进生成模型OpenAI GPT-2&#xff0c;MEENA的模型容量增加了1.7倍&#xf…...

力扣92. 局部反转链表

92. 反转链表 II 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&am…...

九、适配器模式

一、什么是适配器模式 适配器模式&#xff08;Adapter&#xff09;的定义如下&#xff1a;将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式&#xff08;Adapter&#xff09;包含以下主要角色&…...

使用spring自带的发布订阅来实现发布订阅

背景 公司的项目以前代码里面有存在使用spring自带发布订阅的代码&#xff0c;因此稍微学习一下如何使用&#xff0c;并了解一下这种实现方式的优缺点。 优点 实现方便&#xff0c;代码方面基本只需要定义消息体和消费者&#xff0c;适用于小型应用程序。不依赖外部中间件&a…...

Walmart电商促销活动即将开始,如何做促销活动?需要注意什么?

近日&#xff0c;沃尔玛官宣Baby Days优惠活动将于9月1日正式开始&#xff01;卖家可以把握机会&#xff0c;通过设置促销定价&#xff0c;以最优惠的婴儿相关产品价格吸引消费者&#xff0c;包括汽车座椅、婴儿车、尿布袋、家具、床上用品、消耗品、婴儿服装、孕妇装等。注意本…...

Matlab(画图进阶)

目录 大纲 1.特殊的Plots 1.1 loglog(双对数刻度图) ​1.3 plotyy(创建具有两个y轴的图形) 1.4yyaxis(创建具有两个y轴的图) 1.5 bar 3D条形图(bar3) 1.6 pie(饼图) 3D饼图 1.7 polar 2.Stairs And Ste阶梯图 3.Boxplot 箱型图和Error Bar误差条形图 3.1 boxplot 3.2 …...

人生的回忆

回忆是人类宝贵的精神财富&#xff0c;它们像一串串珍珠&#xff0c;串联起我们生活中的每一个片段。 回忆是时间的见证者&#xff0c;它们承载着我们成长、经历、悲欢离合的点点滴滴。 回忆让我们重温过去的欢笑与眼泪&#xff0c;感受那些已经逝去的时光。它们就像一本翻开的…...

Spring之依赖注入源码解析

Spring之依赖注入源码解析 Spring依赖注入的方式 手动注入 在XML中定义Bean时&#xff0c;即为手动注入&#xff0c;因为是程序员手动给某个属性指定了值。 通过set方式进行注入 <bean name"userService" class"com.luban.service.UserService">…...

5G NR:RACH流程-- Msg1之生成PRACH Preamble

随机接入流程中的Msg1&#xff0c;即在PRACH信道上发送random access preamble。涉及到两个问题&#xff1a; 一个是如何产生preamble&#xff1f;一个是如何选择正确的PRACH时频资源发送所选的preamble? 一、PRACH Preamble是什么 PRACH Preamble从数学上来讲是一个长度为…...

高基数类别特征预处理:平均数编码 | 京东云技术团队

一 前言 对于一个类别特征&#xff0c;如果这个特征的取值非常多&#xff0c;则称它为高基数&#xff08;high-cardinality&#xff09;类别特征。在深度学习场景中&#xff0c;对于类别特征我们一般采用Embedding的方式&#xff0c;通过预训练或直接训练的方式将类别特征值编…...

高效利用隧道代理实现无阻塞数据采集

在当今信息时代&#xff0c;大量的有价值数据分散于各个网站和平台。然而&#xff0c;许多网站对爬虫程序进行限制或封禁&#xff0c;使得传统方式下的数据采集变得困难重重。本文将向您介绍如何通过使用隧道代理来解决这一问题&#xff0c;并帮助您成为一名高效、顺畅的数据采…...

图论岛屿问题DFS+BFS

leetcode 200 岛屿问题 class Solution {//定义对应的方向boolean [][] visited;int dir[][]{{0,1},{1,0},{-1,0},{0,-1}};public int numIslands(char[][] grid) {//对应的二维数组int count0;visitednew boolean[grid.length][grid[0].length];for (int i 0; i < grid.l…...

Cypress web自动化windows环境npm安装Cypress

前言 web技术已经进化了&#xff0c;web的测试技术最终还是跟上了脚步&#xff0c;新一代的web自动化技术出现了&#xff1f; Cypress可以对在浏览器中运行的任何东西进行快速、简单和可靠的测试。 官方地址https://www.cypress.io/,详细的文档介绍https://docs.cypress.io/g…...

CentOS7.9设置ntp时间同步

文章目录 应用场景基础知识操作步骤 应用场景 我们公司是做智慧交通的&#xff0c;主要卖交通相关的硬件和软件。硬件包括信号机、雷达、雷视、边缘盒子等&#xff0c;软件包括信控平台、管控平台等信号机设备、雷达设备、边缘计算单元等&#xff0c;还有一些第三方的卡口设备…...

36、springboot --- 对 tomcat服务器 和 undertow服务器 配置访客日志

springboot 配置访客日志 ★ 配置访客日志&#xff1a; 访客日志&#xff1a; Web服务器可以将所有访问用户的记录都以日志的形式记录下来&#xff0c;主要就是记录来自哪个IP的用户、在哪个时间点、访问了哪个资源。 Web服务器可将所有访问记录以日志形式记录下来&#xff…...

MySQL表的增删改查

文章目录 MySQL表的增删改查1. Create1.1 单行数据插入1.2 多行数据插入1.3 插入否则更新1.4 替换 2. Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩(&l…...

yolov3

yolov1 传统的算法 最主要的是先猜很多候选框&#xff0c;然后使用特征工程来提取特征&#xff08;特征向量&#xff09;,最后使用传统的机器学习工具进行训练。然而复杂的过程可能会导致引入大量的噪声&#xff0c;丢失很多信息。 从传统的可以总结出目标检测可以分为两个阶…...

基于低代码/无代码工具构建 BI 应用程序

一、前言 随着数字化推进&#xff0c;越来越多的企业开始重视数据分析&#xff0c;希望通过BI&#xff08;商业智能&#xff09;技术提高业务决策的效率和准确性。 传统的BI解决方案往往需要大量的定制开发和数据准备&#xff0c;不仅周期长、成本高&#xff0c;还需要专业的数…...

Servlet与过滤器

目录 Servlet 过滤器 Servlet Servlet做了什么 本身不做任何业务处理,只是接收请求并决定调用哪个JavaBean去处理请求,确定用哪个页面来显示处理返回的数据 Servlet是什么 ServerApplet&#xff0c;是一种服务器端的Java应用程序 只有当一个服务器端的程序使用了Servlet…...

微信小程序开发实战记录

近期公司需要开发一个小程序项目&#xff0c;时间非常紧急&#xff0c;在开发过程中遇到几个困扰的问题及解决方案&#xff0c;记录如下&#xff1a;小程序框架选择 基础框架&#xff1a;小程序原生框架 sassui&#xff1a; 采用 vant weapp图表&#xff1a;采用 ec-echarts …...

防破解暗桩思路:检查菜单是否被非法修改过源码

本篇文章属于《518抽奖软件开发日志》系列文章的一部分。 我在开发《518抽奖软件》&#xff08;www.518cj.net&#xff09;的时候&#xff0c;为了防止被破解&#xff0c;需用添加一些暗桩&#xff0c;在合适的时机检查软件是否被非法修改过&#xff0c;如果被非法修改就做出提…...

IDEA使用Docker插件

修改Docker配置 1.执行命令vim /usr/lib/systemd/system/docker.service&#xff0c;在ExecStart配置的后面追加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock -H tcp://0.0.0.0:…...

[前端] vue使用Mousetrap.js实现快捷键

Mousetrap.js介绍 Mousetrap.js 是一个处理键盘快捷键的 JavaScript 库&#xff0c;它允许您定义复杂的键盘快捷键并在浏览器中使用。 官方地址 代码仓库 安装库 在命令行中运行以下命令安装 mousetrap 模块&#xff1a; npm install mousetrap再次运行命令行&#xff0c;安…...

如何查询Oracle的字符集

如何查询Oracle的字符集 很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集&#xff0c;一是oracel server端的字符集&#xff0c;二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候&#xff0c;需要这三个字符集都一致才能正确…...

C语言每日一练------------Day(7)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;两个数组的交集     双指针 &#x1f493;博主csdn个人主页&#xf…...