什么是独享数据库(Database per Microservice)?解决了什么问题?

news2024/11/23 0:59:59

独享数据库(Database per Microservice)是一种微服务架构模式,涉及为每个微服务创建单独的数据库。在这种模式下,每个微服务都有自己的数据库,这允许更大的可扩展性、灵活性和自治性。

使用这种模式,每个微服务都可以完全控制自己的数据,这使它能够独立决定如何存储、检索和管理其数据。

每个微服务可以选择最适合其特定需求的数据库技术,而不是被迫为整个系统使用单一的数据库技术。

该模式还通过消除单点依赖有助于降低系统失败的风险。由于每个微服务都有自己的数据库,一个微服务的故障不一定会影响系统的其余部分。

这也使得维护、升级和更改更容易,以及具有更高的容错性和弹性,这是设计微服务时开发人员应该牢记的10件事情之一。

b4674a5a3495605618a53aa32e560aa3.png

以下是该模式在实践中的样子,您可以看到每个服务都有自己的数据库,OrderService正在与订单数据库交互,用户服务有用户数据库,产品服务也有产品数据库。

总的来说,数据库每微服务模式为微服务架构提供了许多好处,包括可扩展性、灵活性、自治性和弹性。然而,它也需要仔细的规划和协调,以确保在必要时正确管理和共享数据。

独享数据库(Database per Microservice)解决了什么问题?

独享数据库(Database per Microservice)设计模式解决了在分布式系统中管理微服务数据存储的问题。在微服务架构中,每个微服务负责特定的业务能力,并具有自己的数据存储需求。

传统的单体应用程序通常有一个管理所有数据的单个数据库,但在微服务架构中,为多个微服务管理数据的单个数据库可能变得复杂,并可能导致微服务之间的紧密耦合、难以扩展和维护数据库以及潜在的数据完整性问题。

数据库每微服务设计模式通过允许每个微服务拥有自己的专用数据库来解决这些问题,从而提供更好的可扩展性、可维护性和灵活性。

460e92cc512bb3edde3dc3010e6ea6a9.png

什么时候用独享数据库(Database per Microservice)模式?

例如,假设有一个类似于Amazon.com的电子商务平台,具有多个微服务来处理各种功能,如用户身份验证、订单管理和库存管理。每个微服务都需要自己的数据库来存储和管理相关数据。

使用独享数据库(Database per Microservice)模式,电子商务平台可以确保每个微服务都有自己的数据库,这有助于隔离数据问题,减少服务之间的耦合,并提供更大的灵活性和可扩展性。

例如,如果订单管理微服务经历流量激增,它可以独立于其他服务进行扩展,因为它有自己的数据库。

此外,使用独享数据库(Database per Microservice)模式,每个微服务都可以选择最适合其特定需求的数据库技术。

例如,库存管理微服务可能会使用NoSQL数据库,因为它具有高可扩展性和性能,而用户身份验证微服务可能会使用关系型数据库,因为它具有数据一致性和事务支持。

总的来说,数据库每微服务模式可以是微服务架构的有价值的方法,特别是对于需要多个服务才能运行的复杂应用程序。

以下是一个图表,展示了这种模式在微服务架构中的样子:

4a03f8056e0b6feba9161af93b79edca.png

在这种情况下,一个API网关位于系统的前端,并将来自前端的HTTP请求路由到相应的微服务。产品和订单微服务分别处理与产品和订单相关的请求。

每个微服务都有自己的数据库(产品数据库和订单数据库),微服务对其各自的数据库进行查询。还存在一个分析微服务,它查询订单数据库以生成报告,这可能看起来有些反直觉,但如果分析微服务只是从数据库中读取数据,那么这仍然是可以接受的。

独享数据库(Database per Microservice)模式的缺点是什么?

优点:

1.提高可扩展性通过为每个微服务单独设置数据库,可以更容易地根据需求扩展单个服务,而不会影响其他服务。2.增加自治性每个微服务都负责自己的数据,这意味着团队可以自主和独立地工作。3.提高性能由于每个微服务都有自己的数据库,它可以使用针对其特定需求进行优化的数据库技术,从而提高性能。4.更易于维护由于每个微服务都有自己的数据库,对一个微服务的更改不会影响其他微服务,使得维护和修改系统更容易缺点:

1.增加复杂性管理多个数据库可能很复杂,并需要大量的设置和维护工作。2.数据一致性问题拥有多个数据库意味着确保所有微服务之间的数据一致性可能具有挑战性,并需要额外的工作。3.成本更高拥有多个数据库可能会导致更高的成本,包括硬件和软件许可证。4.潜在的数据重复将数据存储在多个数据库中可能会导致数据重复,从而导致不一致和混淆。

需要注意的是,该模式的适用性取决于正在设计的系统的具体要求,在实施之前应进行仔细评估。

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

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

相关文章

考考驾照(安卓)

软件安装好后,不用注册登录直接就可以用,软件里主要包含有科目一,科目二,科目三,科目四等等学习的知识内容和一些技巧。 像科目一和科目四有考前须知,考试技巧,和学车流程,还有考试一…

JavaScript学习-DOM事件基础

DOM事件基础 事件监听(绑定)事件监听案例:关闭广告随机点名案例事件监听版本 事件类型类型鼠标经过与鼠标离开轮播图完整版焦点事件键盘事件与文本事件评论字数统计 事件对象获取事件对象事件对象常用属性案例:评论回车发布 环境对象回调函数综合案例&am…

MPLS格式和802.1q帧格式,ISL格式

一.MPLS IETF开发的多协议标记交换(MPLS)把第2层的链路状态信息(带宽、延迟、利用率等)集成到第3层的协议数据单元中,从而简化和改进了第3层分组的交换过程 。理论上,MPLS支持任何第2层和第3层协议。MPLS包头的位置界…

常见电子元器件

目录 常见电子元器件NTC(负温度系数热敏电阻)压敏电阻X2电容(抑制电源电磁干扰用电容器)泄放电阻共模电压共模电感整流桥滤波电容RCD吸收二极管Y电容整流器的原理输出整流肖特基二极管 功率晶体管(GTR,三极管)双极型晶体管(BJT,三极管)MOSFET…

Linux安装使用PostgreSQL

安装PostgreSQL 开源数据库:PostgreSQL 在官网选择对应版本的安装包 https://www.postgresql.org/download/ 我的Linux系统是CentOS7 选择对应的系统 选择安装的版本、平台、架构 复制粘贴安装脚本运行 初始化后会创建一个用户postgres,一般开始…

基于javaweb(springboot+mybatis)网上家具商城项目设计和实现以及文档报告

基于javaweb(springbootmybatis)网上家具商城项目设计和实现以及文档报告 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末…

内存对齐为何会提高性能?

文章目录 前言一、内存对齐是什么?二、这一行是什么?高速缓存行: CacheLine为啥补齐到64? 总结 前言 著名的Java并发编发锁编程大师Doug lea在JDK 7的并发包里新增一个队列集合LinkedTransferQueue,它在使用volatile变量时,用一种追加字节…

用于鲁棒分割的矢量量化

文章目录 Vector Quantisation for Robust Segmentation摘要本文方法Quantisation for RobustnessPerturbation Bounds 实验结果 Vector Quantisation for Robust Segmentation 摘要 背景 医学领域中分割模型的可靠性取决于模型对输入空间中扰动的鲁棒性。鲁棒性是医学成像中…

读SQL进阶教程笔记16_SQL优化让SQL飞起来

1. 查询速度慢并不只是因为SQL语句本身,还可能是因为内存分配不佳、文件结构不合理等其他原因 1.1. 都是为了减少对硬盘的访问 2. 不同代码能够得出相同结果 2.1. 从理论上来说,得到相同结果的不同代码应该有相同的性能 2.2. 遗憾的是,查…

MySQL 高级语句

实验准备: 第一张表: create table location (Region char(20),Store_Name char(20)); insert into location values(East,Boston); insert into location values(East,New York); insert into location values(West,Los Angeles); insert into location…

基于html+css的图展示70

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【3.0版本】用ChatGPT开发一个书籍推荐微信小程序(三)

文章目录 1 前言1.1 实现原理1.2 在小程序如何衔接1.3 技术架构 2 爬取数据2.1 根据书名爬取信息2.2 根据作者爬取信息2.3 根据类型爬取信息 3 讨论 1 前言 1.1 实现原理 万变不离其宗,还是相当于与ChatGPT交互问答,然后映射到小程序中,以下…

Linux -- 进程信号

文章目录 1. 信号量1.1 进程互斥概念1.2 认识信号量 2. 信号入门2.1 信号概念2.2 见一见2.3 signal()系统调用2.4 宏定义信号 3. 信号产生方式3.1 键盘产生信号3.2 系统调用产生信号3.3 软件条件产生信号3.4 硬件异常产生信号3.5 Core dump 4. 阻塞信号4.1 相关概念4.2 信号在内…

Raspberry Pi OS 2023-05-03 版本发布

导读树莓派 Raspberry Pi Foundation 今天发布了用于 Raspberry Pi 计算机的官方 Raspberry Pi OS 发行版新版本,带来了更新的组件、错误 Bug 修复和各种性能改进。 Raspberry Pi OS 2023-05-03 版本最大变化是内核从长期支持的 Linux 5.15 LTS 到长期支持的 Linux …

【为什么可以相信一个HTTPS网站】

解决信用,仅仅有加密和解密是不够的。加密解密解决的只是传输链路的安全问题,相当于两个人说话不被窃听。可以类比成你现在生活 的世界——货币的信用,是由政府在背后支撑的;购房贷款的信用,是由银行在背后支撑的&…

### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义

### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义 报错信息: ### Cause: dm.jdbc.driver.DMException: 列[URI]长度超出定义 ; 列[URI]长度超出定义; nested exception is dm.jdbc.driver.DMException: 列[URI]长度超出定义at org.springframework.jdb…

计算机毕业论文内容参考|基于Python的互联网金融产品交易平台的设计与实现

文章目录 导文摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析需求分析技术分析技术设计系统架构技术实现产品管理模块订单管理模块支付管理模块总结与展望导文 基于Python的互联网金融产品交易平台的设计与实现 摘要 本文提出并实现了一种基于Pytho…

《计算机网络—自顶向下方法》 Wireshark实验(六):IP 协议分析

IP 协议(Internet Protocol),又译为网际协议或互联网协议,是用在 TCP/IP 协议簇中的网络层协议。主要功能是无连接数据报传送、数据报路由选择和差错控制。IP 协议是 TCP/IP 协议族的核心协议,其主要包含两个方面&…

Vue入门学习笔记:TodoList(三):实例中的数据、事件和方法

目录: Vue入门学习笔记:TodoList(一):HelloWorld Vue入门学习笔记:TodoList(二):挂载点、模板、实例 Vue入门学习笔记:TodoList(三)&a…

有关浪涌保护器的基础知识

浪涌和瞬态电压浪涌是电路上电压和电流的临时上升。它们的电压范围大于 2000 伏,电流范围大于 100 安培。典型的上升时间在1到10微秒范围内。瞬态或浪涌是最常见的电源问题,其瞬时破坏性会造成重大损坏,例如电气或电子设备故障、频繁停机、数…