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

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.dtcms.com/a/304413.html

相关文章:

  • 随缘玩 一: 代理模式
  • 算法导论核心代码精粹
  • USRP X440 和USRP X410 直接RF采样架构的优势
  • 【51单片机静态1位数码管显示按键倒计时控制蜂鸣器】2022-9-28
  • Wndows Docker Desktop-Unexpected WSL error
  • AUTOSAR Mcal Dio - 模块介绍 + EB配置工具介绍
  • 【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务
  • Doris中文检索效果调优
  • 自组织遗传算法(Self-Organizing Genetic Algorithm, SOGA)求解Rastrigin函数优化问题
  • 【Rust并发集合】如何在多线程中并发安全地使用集合
  • 【AI News | 20250728】每日AI进展
  • 接口自动化测试pytest框架
  • 网络原理--HTTPHTTPS
  • JAVA_TWENTY—ONE_单元测试+注解+反射
  • MySQL——MVCC
  • ftp加ssl,升级ftps
  • 解决Spring MVC中@PathVariable参数为null导致的404问题:全面解析与最佳实践
  • Spring MVC数据传递全攻略
  • 架构实战——互联网架构模板(“网络层”技术)
  • WINCC选项组配置
  • Spring Boot 请求限流实战:基于 IP 的高效防刷策略
  • Postgresql 查询使用正则
  • SQL158 每类视频近一个月的转发量/率
  • Java 大视界 -- Java 大数据在智能教育学习社区知识图谱构建与知识传播分析中的应用(370)
  • DeepCompare文件深度对比软件的差异内容提取与保存功能深度解析
  • Go语言新手村:轻松理解变量、常量和枚举用法
  • 论文阅读--射频电源在半导体领域的应用
  • 《从HTTP到IP证书:网络身份验证的下一站革命》
  • 如何使用 Git 钩子 hooks 自动化任务?
  • 【MySQL】数据库的简单介绍