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

6、微服务架构常用十种设计模式

目录

1、微服务架构

2、微服务架构的优点

3、微服务架构的缺点

4、何时使用微服务架构

5、微服务架构常用十种设计模式

① 独享数据库(Database per Microservice)

② 事件源(Event Sourcing)

③ 命令和查询职责分离(CQRS)

④ Saga

⑤ 面向前端的后端 (BFF)

⑥ API 网关

⑦ Strangler(扼杀者)

⑧ 断路器

⑨ 外部化配置

⑩ 消费端驱动的契约测试

6、总结


1、微服务架构


什么是微服务架构?
微服务架构指的是将大型复杂系统按功能或者业务需求垂直切分成更小的子系统,这些子系统以独立部署的子进程存在,它们之间通过轻量级的、跨语言的同步(比如 REST,gRPC)或者异步(消息)网络调用进行通信。
下面是基于微服务架构的商业 Web 应用的组件视图:



微服务架构的重要特征:
        ●整个应用程序被拆分成相互独立但包含多个内部模块的子进程。
        ●与模块化的单体应用(Modular Monoliths)或 SOA 相反,微服务应用程序根据业务范围或领域垂直拆分。
        ●微服务边界是外部的,微服务之间通过网络调用(RPC 或消息)相互通信。
        ●微服务是独立的进程,它们可以独立部署。
        ●它们以轻量级的方式进行通信,不需要任何智能通信通道。

SOA概述:

      (  SOA 是一种在计算环境中设计、开发、部署和管理离散逻辑单元(服务)模型的方法。 SOA 并不是一个新鲜事物,而只是面向对象模型的一种替代。虽然基于 SOA 的系统并不排除使用 OOD 来构建单个服务,但是其整体设计却是面向服务的。由于 SOA 考虑到了系统内的对象,所以虽然SOA 是基于对象的,但是作为一个整体,它却不是面向对象的。

        SOA 系统原型的一个典型例子是 CORBA,它已经出现很长时间,其定义的概念与 SOA 相似。SOA 建立在 XML 等新技术的基础上,通过使用基于 XML 的语言来描述接口,服务已经转到更动态且更灵活的接口系统中,CORBA 中的 IDL 无法与之相比。图 9-13 描述了一个完整的 SOA 模型。

        江苏银行

        在 SOA 模型中,所有的功能都定义成了独立的服务。服务之间通过交互和协调完成业务的整体逻辑。所有的服务通过服务总线或流程管理器来连接。这种松散耦合的架构使得各服务在交互过程中无需考虑双方的内部实现细节,以及部署在什么平台上。)       


2、微服务架构的优点


        ●更好的开发规模。
        ●更快的开发速度。
        ●支持迭代开发或现代化增量开发。
        ●充分利用现代软件开发生态系统的优势(云、容器、 DevOps、Serverless)。
        ●支持水平缩放和细粒度缩放。
        ●小体量,降低了开发人员的认知复杂性。

3、微服务架构的缺点


        ●更高数量级的活动组件(服务、数据库、进程、容器、框架)。
        ●复杂性从代码转移到基础设施。
        ●RPC 调用和网络通信的大量增加。
        ●整个系统的安全性管理更具有挑战性。
        ●整个系统的设计变得更加困难。
        ●引入了分布式系统的复杂性。


4、何时使用微服务架构


        ●大规模 Web 应用开发。
        ●跨团队企业级应用协作开发。
        ●长期收益优先于短期收益。
        ●团队拥有能够设计微服务架构的软件架构师或高级工程师。


5、微服务架构常用十种设计模式


① 独享数据库(Database per Microservice)


当一家公司将大型单体系统替换成一组微服务,首先要面临的最重要决策是关于数据库。单体架构会使用大型中央数据库。即使转移到微服务架构许多架构师仍倾向于保持数据库不变。虽然有一些短期收益,但它却是反模式的,特别是在大规模系统中,微服务将在数据库层严重耦合,整个迁移到微服务的目标都将面临失败(例如,团队授权、独立开发等问题)。
更好的方法是为每个微服务提供自己的数据存储,这样服务之间在数据库层就不存在强耦合。这里我使用数据库这一术语来表示逻辑上的数据隔离,也就是说微服务可以共享物理数据库,但应该使用分开的数据结构、集合或者表,这还将有助于确保微服务是按照领域驱动设计的方法正确拆分的。



优点
        ●数据由服务完全所有。
        ●服务的开发团队之间耦合度降低。
缺点
        ●服务间的数据共享变得更有挑战性。
        ●在应用范围的保证 ACID 事务变得困难许多。
        ●细心设计如何拆分单体

http://www.xdnf.cn/news/16735.html

相关文章:

  • PLC如何进行远程维护远程上下载程序?
  • QT项目 -仿QQ音乐的音乐播放器(第三节)
  • 基于dcmtk的dicom工具 第九章 以json文件或sqlite为数据源的worklist服务(附工程源码)
  • Qt 移动应用性能优化策略
  • 复现cacti的RCE(CVE-2022-46169)
  • TDengine 中 TDgpt 异常检测的机器学习算法
  • Leetcode——41. 缺失的第一个正数
  • 数学建模——非线性规划
  • 大文档免费翻译方法分享
  • 政策合规性前端设计:工业数据安全的可视化技术规范与落地实践
  • C语言进阶(指针2.函数指针和指针函数,二级指针,指针数组和数组指针,void*指针)
  • 数据结构 排序(2)---选择排序
  • 使用鼠标在Canvas上绘制矩形
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • Shader开发(四)计算机图形学中的颜色定义
  • Java 大视界 -- Java 大数据机器学习模型在金融信用评级模型优化与信用风险动态管理中的应用(371)
  • Day23-二叉树的层序遍历(广度优先搜素)
  • [明道云]-基础教学2-工作表字段 vs 控件:选哪种?
  • Redis 跨主机连接超时分析:从网络波动到架构优化
  • 个人健康管理小程序(消息订阅、Echarts图形化分析)
  • TGD第八篇:二维应用——图像边缘检测
  • ftp加ssl,升级ftps
  • 三维扫描相机:工业自动化的智慧之眼——迁移科技赋能智能制造新纪元
  • 从东南亚出发:小程序容器技术如何助力 App 快速打入全球市场?
  • LeetCode 1616.分割两个字符串得到回文串
  • PHP性能优化与高并发处理:从基础到高级实践
  • 直播间里的酒旅新故事:内容正在重构消费链路
  • 设计模式:状态模式 State
  • 配置daemon.json使得 Docker 容器能够使用服务器GPU【验证成功】
  • 设计模式十三:代理模式(Proxy Pattern)