当前位置: 首页 > 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三…...

成为数据分析师要具备什么能力——功法篇(上)

这篇文章适合做了一段时间数据分析工作&#xff0c;开始思考怎么继续提升自己的分析师、运营或者是实习了一段时间的同学&#xff0c;这时的你也许会想几个问题&#xff1a; 为什么我做出来的分析总觉得没有别人的那么高级&#xff1f; 老板为什么总说我的分析“太浅了”&#…...

【MySQL】Java的JDBC编程

目录 ♫什么是JDBC ♫JDBC常用接口和类 ♪Connection接口 ♪Statement对象 ♪ResultSet对象 ♫JDBC的使用 ♪添加“驱动包” ♪创建数据源&#xff0c;描述数据库服务器在哪 ♪和数据库服务器建立连接 ♪构建SQL语句 ♪执行SQL语句 ♪释放资源 ♫什么是JDBC 我们前面操…...

windows OpenCV(包含cuda)最简安装教程

windows OpenCV&#xff08;包含cuda&#xff09;最简安装教程 1. 在Windows下安装vcpkg vcpkg是一个开源的C包管理器&#xff0c;它能帮助我们轻松地安装和管理C库和工具。要在Windows上安装vcpkg&#xff0c;可以按照以下步骤进行&#xff1a; 克隆vcpkg仓库&#xff1a; 首…...

Vue3 + Nodejs 实战 ,文件上传项目--实现文件批量上传(显示实时上传进度)

目录 技术栈 1.后端接口实现 2.前端实现 2.1 实现静态结构 2.2 整合上传文件的数据 2.3 实现一键上传文件 2.4 取消上传 博客主页&#xff1a;専心_前端,javascript,mysql-CSDN博客 系列专栏&#xff1a;vue3nodejs 实战--文件上传 前端代码仓库&#xff1a;jiangjunjie…...

狂砸40亿美元,亚马逊向OpenAI竞争对手Anthropic投资

9 月 25 日下午&#xff0c;亚马逊在公司官网发布&#xff0c;向大模型公司 Anthropic 投资 40 亿美元&#xff0c; Anthropic以拥有对标 ChatGPT 的谈天机器人 Claude 而出名。 这项新的战略合作将结合双方在更安全的生成式AI领域的技术和专业知识&#xff0c;加速Anthropic未…...

目标检测YOLO实战应用案例100讲-基于YOLOv5_tiny算法的路面裂缝智能检测

目录 前言 国内外研究现状 公路路面裂缝检测方法现状 基于深度学习检测算法现状...

P5682 [CSP-J2019 江西] 次大值% 运算 set 去重的一道好题

#include <bits/stdc.h> using namespace std; int n, x, len, a[100010], ans; set<int> s; set<int>::iterator asd; int main() {/*a[n-1] 是最大的a[n-2] 可能是次大的a[n]%a[n-1]<a[n-1] 不可能是最大的&#xff0c;可能是次大的a[n-1]%a[n-2]<…...

vue3后台管理框架之API接口统一管理

在开发项目的时候,接口可能很多需要统一管理。在src目录下去创建api文件夹去统一管理项目的接口; 参数请参考mock中的模拟接口 //统一管理咱们项目用户相关的接口import request from @/utils/requestimport type { loginForm, loginResponseData, userInfoReponseData } fro…...

线性表的插入、删除和查询操作

线性表的插入、删除和查询操作 1、定义线性表 定义一个线性结构&#xff0c;有列表默认长度设置为50&#xff0c;列表数量 #include <stdio.h> #define MaxSize 50typedef int Element; typedef struct{Element data[MaxSize];int length; }SqList;2、顺序表插入 插入…...

基于深度学习网络的疲劳驾驶检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1疲劳检测理论概述 4.2 本课题说明 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 In_layer_Size [227 227 3]; img_size [224,…...

做网站需不需要服务器/如何制作网页最简单的方法

Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各种需求场景&a…...

网站上papi酱做的音频/搜狗站长平台打不开

Web基本笔记~12.引用数据类型 上一期 引用类型的值&#xff08;对象&#xff09;是引用类型的一个实例。在JavaScript中&#xff0c;引用类型是一种数据结构&#xff0c;用于将数据和功能组织在一起。它也常被称为类&#xff0c;但这种称呼并不妥当。尽管JavaScript从技术上讲…...

网站改版需求/搜索引擎优化的目的是

最近几天有点忙&#xff0c;所以我们今天来一篇短的&#xff0c;简单地介绍一下数据库设计中的一种模式——Soft Delete。 可以说&#xff0c;该模式毁誉参半&#xff0c;甚至有非常多的人认为该模式是一个Anti-Pattern。因此在本篇文章中&#xff0c;我们不仅仅会对该模式进行…...

0453牡丹江信息网二手车/成都网站关键词推广优化

说在前面 已经到了月中旬了&#xff0c;程序员们即将迎来面试季&#xff0c;今天刚好有一位粉丝找到我&#xff0c;他上周刚面完奇虎360&#xff0c;经过了几轮的面试&#xff0c;最后薪资也谈了&#xff0c;今天主要是问我想这样的大型互联网公司一般多久会正式下offer。 一…...

网站设计费用价目表/sem数据分析

此脚本首先找到连接用户失效的索引,并在线重建. 1 create or replace procedure index_rebuild as2 cursor mycur is3 select *4 from user_indexes5 where status UNUSABLE;6 myrec user_indexes%rowtype;7 vsql varchar(100);8 begin9 open mycur; …...

建设部网站注册人员/百度搜索榜单

5月发生的WannaCry病毒事件尚未平息&#xff0c;新的变种病毒又疯狂来袭&#xff01;据国外媒体报道&#xff0c;27日&#xff0c;欧洲多国再次受到类似“永恒之蓝”的***&#xff0c;新病毒会远程锁定设备&#xff0c;然后索要价值300美元的比特币作为赎金。Petya变种病毒凶猛…...