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

为分布式系统设计数据库

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等

数据库设计是微服务和云原生解决方案的关键因素,因为基于微服务的架构导致了数据的分布式。数据管理不再在一个单一的过程中发生,而是可以通过多个过程来操作数据。云计算的兴起使得数据更加分布式。

为了应对这种复杂性,微服务和云原生解决方案已经出现了几种数据管理模式。在这篇文章中,我们将看到一些可以帮助我们在分布式环境中管理数据的最重要的模式。

微服务和云数据库设计的挑战 

在我们深入了解具体的数据管理模式之前,理解微服务和云数据库设计的主要挑战是很重要的:

  • 在微服务架构中,数据分布在不同的节点上。其中一些节点可能位于世界上完全不同的地理区域的不同数据中心中。在这种情况下,很难保证所有节点之间数据的一致性。在任何给定的时间点,各个节点之间的数据状态可能会有所不同。这也被称为最终一致性的问题。 

  • 由于数据是分布式的,没有像单节点单体系统中那样管理数据的中央权威。对于各种参与系统来说,使用一种机制(例如,共识算法)进行数据管理非常重要。 

  • 在微服务架构中,恶意行为者的攻击面更大,因为有多个活动部件。这意味着我们需要在构建微服务时建立更为强大的安全态势。 

  • 微服务和云的主要承诺是可伸缩性。尽管扩展应用程序过程变得更容易,但水平扩展数据库节点却并不容易。如果没有适当的可伸缩性,数据库可能会成为性能瓶颈。 

深入数据管理模式 

考虑到相关的挑战,有几种模式可用于管理微服务和云原生应用程序中的数据。这些模式的主要任务是帮助开发人员解决上述各种挑战。让我们逐一看看这些模式。

每个服务一个数据库 

顾名思义,这种模式建议每个微服务管理其自己的数据。这意味着没有其他微服务可以直接访问或操作由另一个微服务管理的数据。任何数据的交换或操作只能通过一组明确定义的API来完成。下图显示了一个每个服务一个数据库模式的例子。

图片

图1: 每个服务一个数据库模式

表面上看,这种模式似乎相当简单。当我们从一个全新的应用程序开始时,可以相对容易地实施它。然而,当我们将现有的单体应用程序迁移到微服务架构时,服务之间的划分并不是那么清晰。

大多数功能都是以一种不同系统部件非正式访问其他部件数据的方式编写的。

在使用每个服务一个数据库模式时,我们需要关注两个主要领域:

  • 为每个服务定义有界上下文 

  • 管理跨多个微服务的业务事务

共享数据库 

下一个重要的模式是共享数据库模式。尽管此模式支持微服务架构,但它通过使用可供多个微服务访问的共享数据库采取了一种更为宽松的方法。对于正在过渡到微服务架构的现有应用程序,这是一个更安全的模式,因为我们可以慢慢地发展应用程序层,而无需更改数据库设计。然而,这种方法削减了微服务的一些优势:

跨团队的开发人员需要协调表格的模式更改。当多个服务试图访问相同的数据库资源时,可能会出现运行时冲突。

CQRS 和事件溯源 

在命令查询责任分离(CQRS)模式中,应用程序监听来自其他微服务的域事件,并更新一个单独的数据库以支持视图和查询。然后,我们可以从这个单独的数据库中服务复杂的聚合查询,同时根据需要优化性能并按需扩展。

事件溯源通过将实体或聚合的状态存储为事件序列来更进一步。每当我们对对象进行更新或插入时,都会创建一个新事件并存储在事件存储中。我们可以一起使用CQRS和事件溯源来解决围绕事件处理和维护单独查询数据的许多挑战。这样,您可以根据各自的需求单独扩展写入和读取。

图片

图2: 事件溯源和CQRS一起执行

不足之处在于,对于大多数开发人员来说,这是一种不熟悉的构建应用程序的方式,并且有更多的移动部件需要管理。

Saga 模式 

Saga模式是处理跨多个微服务的业务事务的另一个解决方案。例如,在食品配送应用上下订单是一项业务事务。在Saga模式中,我们将此业务事务分解为由不同服务处理的一系列本地事务。对于每个本地事务,执行事务的服务都会发布一个事件。

事件触发另一个服务中的后续事务,并且链条持续下去,直到整个业务事务完成。如果链条中的任何特定事务失败,Saga将通过执行一系列补偿事务来回滚,以撤销所有先前事务的影响。

Saga实现有两种类型:

  • 基于编排的Saga 

  • 基于编舞的Saga

分片 

分片有助于构建云原生应用程序。它涉及将一张表的行分隔到多张不同的表中。这也被称为水平分区,但是当分区位于不同的节点上时,它们被称为分片。分片帮助我们提高数据库的读写可伸缩性。同时,它还提高了查询的性能,因为由于分片,特定的查询必须处理更少的记录。

复制 

复制是一个非常重要的数据管理模式。它涉及创建数据库的多个副本。每个副本都是相同的,并运行在不同的服务器或节点上。对一个副本所做的更改将传播到其他副本。这就是所谓的复制。有几种类型的复制方法,例如:

  • 单领导者复制

  • 多领导者复制

  • 无领导者复制

复制帮助我们实现高可用性和提高可靠性,并且它让我们扩展读取操作,因为读取请求可以转发到多个服务器。下面的图3显示了分片和复制的组合运作。

图片

图3: 使用分片和复制一起

云原生环境中数据库设计的最佳实践 

虽然这些模式可以在很大程度上解决微服务和云原生架构中的数据管理问题,但我们还需要遵循一些最佳实践以简化操作。

以下是一些最佳实践:

  • 我们必须尝试为弹性设计解决方案。这是因为在微服务架构中,故障是不可避免的,设计应适应故障,并在不中断业务的情况下从中恢复。

  • 当过渡到其中一个模式时,我们必须实施适当的迁移策略。一些常见的可以评估的策略包括模式优先与数据优先,蓝绿部署,或使用扼杀者模式。

  • 不要忽视备份和经过良好测试的灾难恢复系统。这些事情对于单节点数据库来说也很重要。然而,在分布式数据管理方法中,灾难恢复变得更为重要。

  • 在微服务或云原生应用程序中,持续监控和可观察性同样重要。例如,分片技术可能会导致不平衡的分区和热点。如果没有适当的监控解决方案,对这种情况的任何反应可能都为时已晚,并可能使业务面临风险。

结论 

我们可以得出结论,良好的数据库设计在微服务和云原生环境中绝对是至关重要的。没有适当的设计,应用程序将因分布式数据的固有复杂性而面临多个问题。存在多种数据管理模式,以帮助我们以更可靠和可扩展的方式处理数据。然而,每种模式都有自己的挑战和一组优势和劣势。没有哪种模式适合所有可能的情景,我们应该在处理了各种权衡后才选择特定的模式。

作者:Saurabh Dashora

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

相关文章:

为分布式系统设计数据库

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 数据库设计是微服务和云原生解决方案的关键因素,因为基于微服务的架构导致了数据的分布式。数据管理不再在一个单一的过程中发生,而是可以通过多…...

Programming abstractions in C阅读笔记:p179-p180

《Programming Abstractions In C》学习第60天,p179-p180总结。 一、技术总结 1.palindrome(回文) (1)包含单个字符的字符串(如"a"),或者空字符串(如" ")也是回文。 (2)示例:“level”、“noon”。 2.predicate fun…...

在 VSCode 中使用 PlantUML

最近,因为工作需要绘制一些逻辑图,我自己现在使用的是 PlantUML 或者 mermaid,相比之下前者更加强大。不过它的环境也麻烦一些,mermaid 在一些软件上已经内置了。但是 PlantUML 一般需要自己本地安装或者使用远程服务器&#xff0…...

css3过渡属性属性名:transition

CSS3的过渡属性属性名是transition,它允许我们在状态改变时为元素添加过渡效果,例如在元素从一种样式变为另一种样式时添加平滑的过渡效果。 transition的语法如下: transition: property duration timing-function delay;其中,…...

关于数据链路层(初步)

以太网帧格式: 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固 化的; 帧协议类型字段有三种值,分别对应载荷的形式,有IP、ARP、RARP; …...

诊断DLL——CAPL_DLL集成安全访问算法

文章目录 前言一、CAPL DLL简介DLL生成C2338报错解决方案:二、添加27服务解锁算法三、CAPL调用dll前言 在实际诊断工程应用中,如UDS刷写——27服务,经常会遇到一些Seed2Key的算法问题,为了安全保密,这个算法的源码不便公开,我们可以将其打包成DLL,然后在CANoe诊断控制面…...

集合元素处理(传统方式和Stream方式)

1、集合元素处理(传统方式) 现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行一下若干操作步骤: 第一个队伍只要 名字为 3 个字 的成员姓名;存…...

亲测好用,这3款免费高清录屏软件,效果惊人!

在当今社会上,录屏软件已经成为了人们日常生活中不可或缺的一部分。无论是在工作还是学习中,我们都需要使用录屏软件来录制屏幕上的内容。然而,许多录屏软件都是收费的,这对于那些想要尝试录屏软件但又不想花钱的人来说&#xff0…...

超声波清洗机洗眼镜真的可以洗干净吗?眼镜超声波清洗机推荐

截止2023年4月份近视眼的统计,我过近视人群高达3亿人,可想而知现在近视的群体是有多么庞大的。近视就免不了要戴眼镜,但是一副眼镜长时间的佩戴不清洗的话,镜片会不清晰,也有的朋友会眼镜脏了就去配一副新的&#xff0…...

centos7安装部署ElasticSearch

文章目录 ElasticSearch安装部署简介安装卸载 ElasticSearch安装部署 简介 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 es)是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、G…...

websocket+node+vite(vue)实现一个简单的聊天

1.前端逻辑 本项目基于之前搭建的vite环境&#xff1a;https://blog.csdn.net/beekim/article/details/128083106?spm1001.2014.3001.5501 新增一个登录页和聊天室页面 <template><div>登录页</div><div>用户名:<input type"text" pl…...

YApi和Swagger接口管理

这篇博客针对苍穹外卖而写 YApi 之前的官网&#xff1a;yapi.smart-xwork.cn 由于之前的网址访问不了&#xff0c;现在我用的是这个网址&#xff1a;YApi Pro-高效、易用、功能强大的可视化接口管理平台 登录之后如下 创建两个工作空间 用户端接口也是如法炮制 Swagger 使用…...

在不安全的集群上启用 Elasticsearch Xpack 安全性

本博文详细描述如何把一个没有启动安全的 Elasticsearch 集群升级为一个带有 HTTPS 访问的启用 Elasticsearch xpack 安全的集群。 为了增强 Elasticsearch 集群的安全性&#xff0c;你需要执行完全集群重启&#xff0c;并在客户端进行一些更改。 启用身份验证后&#xff0c;所…...

vue清除动态路由

项目中往往都是添加动态路由&#xff0c;如何删除已经添加进来的路由往往被忽视&#xff0c;为此这里做一下记录&#xff1a; 查看vue-router路由文档 可以看出 Vue2中是通过matcher来进行重新赋值来进行清空的。 let createRouter () > new Router({mode: history, //ha…...

rsyslog实现将日志存储到mysql中

​ 前提&#xff1a;准备好msql server或mariadb server&#xff1b; ​ 1、安装rsyslog连接至mysql server的驱动模块&#xff1b; [13:24 rootcentos6.8~]# yum install -y rsyslog-mysql [13:24 rootcentos6.8~]# rpm -ql rsyslog-mysql /lib64/rsyslog/ommysql.so /usr/…...

2015架构案例(五十一)

第5题 【说明】某信息技术公司计划开发一套在线投票系统&#xff0c;用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户&#xff0c;当用户规模扩大到一定程度时&#xff0c;开始联系相关企业提供信息服务&#xff0c;并…...

亚马逊测评安全吗?

测评可以说是卖家非常宝贵的财富&#xff0c;通过测评和广告相结合&#xff0c;可以快速有效的提升店铺的产品销量&#xff0c;提高转化&#xff0c;提升listing权重&#xff0c;但现在很多卖家找真人测评补单后店铺出现问题导致大家对测评的安全性感到担忧&#xff0c;因为真人…...

VS2022新建项目时没有ASP.NET Web应用程序 (.NET Framework)

问题&#xff1a;如图&#xff0c;VS2022新建项目时没有“ASP.NET Web应用程序 &#xff08;.NET Framework&#xff09;”的选项解决方法&#xff1a;点击跳转至修改安装选项界面选择安装该项即可&#xff1a;...

TIA博途软件中如何设置在程序中自动显示变量的注释信息?

TIA博途软件中如何设置在程序中自动显示变量的注释信息? 本例以TIA博途V15为例进行举例说明 如下图所示,新建一个项目后,打开PLC变量表,这里我选择几个变量进行举例说明,给这几个变量添加注释信息, 打开OB1,编写一句简单的程序,如下图所示,可以看到此时变量只显示名称…...

Hadoop3教程(一):Hadoop的定义、组成及全生态概览

文章目录 &#xff08;1&#xff09;定义1.1 发展历史1.2 三大发行版本1.3 Hadoop的优势1.4 Hadoop的组成 &#xff08;13&#xff09;HDFS概述&#xff08;14&#xff09;Yarn架构&#xff08;15&#xff09;MapReduce概述&#xff08;16&#xff09; HDFS、YARN、MapReduce三…...

AI智能体编排平台:从任务自动化到生态协作的架构与实践

1. 项目概述&#xff1a;一个面向AI编排与技能提升的生态协作平台最近在和一些做AI应用开发的朋友聊天&#xff0c;大家普遍有个痛点&#xff1a;现在AI工具和模型太多了&#xff0c;从大语言模型到图像生成&#xff0c;再到各种自动化脚本&#xff0c;每个都很强大&#xff0c…...

2026年主流抓娃娃App大对比,哪个才是你的“抓宝神器”?

在当今快节奏的生活中&#xff0c;年轻人面临着来自学业、工作、社交等多方面的压力。为了缓解这些压力&#xff0c;寻找适合的解压方式成为了大家的共同需求。抓娃娃App作为一种新兴的娱乐方式&#xff0c;正逐渐受到年轻人的喜爱。下面我们就从潮流趋势、科技前沿、行业洞察等…...

从8K游戏到HDR电影:拆解Xilinx HDMI 2.1 IP如何支持VRR、ALLM和动态HDR这些炫酷特性

从8K游戏到HDR电影&#xff1a;Xilinx HDMI 2.1 IP如何重塑视听体验 当PS5玩家在《战神&#xff1a;诸神黄昏》中感受到无撕裂的流畅战斗画面&#xff0c;或是家庭影院爱好者在《沙丘》中看到沙漠场景的每一粒沙粒都呈现出惊人的动态范围时&#xff0c;背后都离不开HDMI 2.1的关…...

别再死记硬背了!用Python模拟超前进位加法器,直观理解其速度优势

用Python模拟超前进位加法器&#xff1a;从硬件原理到算法思维的跨越 在计算机科学和电子工程交叉领域&#xff0c;加法器是最基础却又最精妙的设计之一。传统教学中&#xff0c;我们往往通过抽象的电路图来理解超前进位加法器&#xff08;CLA&#xff09;的速度优势&#xff0…...

告别showSoftInput失效:一文读懂Android 11+的WindowInsetsController输入法控制

Android输入法控制演进&#xff1a;从InputMethodManager到WindowInsetsController的深度解析 在移动应用开发中&#xff0c;输入法交互是最基础却又最容易被忽视的细节之一。许多开发者都曾遇到过这样的场景&#xff1a;精心设计的登录界面&#xff0c;光标在输入框闪烁&#…...

AutoCut终极指南:如何用文本编辑器快速剪辑100个视频

AutoCut终极指南&#xff1a;如何用文本编辑器快速剪辑100个视频 【免费下载链接】autocut 用文本编辑器剪视频 项目地址: https://gitcode.com/GitHub_Trending/au/autocut 还在为手动剪辑视频而烦恼吗&#xff1f;AutoCut项目让你告别复杂的视频编辑软件&#xff0c;通…...

多智能体的协作成本:沟通开销、上下文膨胀与优化手段

多智能体的协作成本:沟通开销、上下文膨胀与优化手段 1. 标题 (Title) 多智能体系统的协作困境:解析沟通开销与上下文膨胀 从理论到实践:优化多智能体协作成本的完整指南 协作的代价:多智能体系统中的沟通、上下文与优化策略 打破协作壁垒:如何有效降低多智能体系统的运行…...

10分钟掌握Autovisor:智慧树网课自动化学习的完整解决方案

10分钟掌握Autovisor&#xff1a;智慧树网课自动化学习的完整解决方案 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为繁重的智慧树网课任务而烦恼吗&am…...

终极qmcdump指南:5分钟掌握QQ音乐加密格式解密技巧

终极qmcdump指南&#xff1a;5分钟掌握QQ音乐加密格式解密技巧 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump qmcdump是…...

从TPM到机密计算:远程证明技术原理与zap1项目实践指南

1. 项目概述与核心价值最近在整理一些零散的学习笔记时&#xff0c;发现了一个挺有意思的项目&#xff0c;叫Frontier-Compute/zap1-learning-attestation。乍一看这个标题&#xff0c;可能有点让人摸不着头脑&#xff0c;尤其是对于刚接触可信计算或者硬件安全领域的朋友来说。…...