金融级分布式数据库架构设计

合集下载

金融管理系统 数据表结构设计

金融管理系统 数据表结构设计

金融管理系统数据表结构设计设计一个金融管理系统的数据表结构需要考虑多个方面,包括但不限于用户信息、账户信息、交易记录、产品信息等。

以下是一个简化的数据表结构设计示例:1. 用户表 (Users)UserID (主键)UsernamePassword (加密存储)EmailPhoneNumberRegistrationDate2. 账户表 (Accounts)AccountID (主键)UserID (外键,关联Users表的UserID)AccountNumberAccountType (例如: 储蓄, 支票, 投资等)OpeningBalanceOpeningDate3. 交易记录表 (Transactions)TransactionID (主键)AccountID (外键,关联Accounts表的AccountID)TransactionDateTransactionType (例如: 存款, 取款, 转账等)AmountCurrency (例如: 人民币, 美元, 欧元等)4. 产品表 (Products)ProductID (主键)ProductNameProductType (例如: 存款产品, 基金, 股票等)InterestRate (如果是存款产品)MaturityDate (如果是投资产品)5. 投资产品持有表 (InvestmentHoldings)InvestmentID (主键)AccountID (外键,关联Accounts表的AccountID)ProductID (外键,关联Products表的ProductID)InvestmentAmountInvestmentDate6. 贷款表 (Loans)(如果有贷款业务)LoanID (主键)AccountID (外键,关联Accounts表的AccountID)LoanAmountLoanInterestRateLoanTerm (贷款期限)7. 保险表 (Insurances)(如果有保险业务)InsuranceID (主键)AccountID (外键,关联Accounts表的AccountID)InsuranceType (例如: 人寿保险, 财产保险等)PremiumAmount8. 其他相关表(根据具体业务需求设计): 信用卡、贷款、基金、股票等。

金融风险管理系统的架构设计与性能分析

金融风险管理系统的架构设计与性能分析

金融风险管理系统的架构设计与性能分析1. 引言金融风险管理是金融机构最关注的领域之一,它涉及到金融机构的稳定性和可持续发展。

在这个数字化时代,金融风险管理系统的架构设计和性能分析变得尤为重要。

本文将从架构设计和性能分析两个方面,探讨金融风险管理系统的最佳实践。

2. 架构设计2.1 模块化设计金融风险管理系统应该采用模块化设计,将不同的功能和业务逻辑划分为独立的模块。

每个模块应该具有清晰的接口设计,以便于扩展和维护。

常见的模块包括风险评估模块、数据采集与处理模块、决策支持模块等。

模块化设计可以使系统更加灵活,方便定制化和快速响应风险变化。

2.2 分布式架构金融风险管理系统应该采用分布式架构,将不同的模块部署在多个服务器上,实现负载均衡和高可用性。

分布式架构可以提高系统的性能和可扩展性,降低单点故障的风险。

同时,分布式架构还可以利用云计算技术,提高系统的弹性和灵活性。

2.3 安全性设计金融风险管理系统的安全性是至关重要的。

系统应该采用多层次的安全防护机制,包括身份认证、访问控制、数据加密等。

同时,系统还应该具备日志监控和异常检测功能,及时发现并应对潜在的安全威胁。

最重要的是,系统应该遵循相关的法规和合规要求,保护用户的隐私和敏感数据。

3. 性能分析3.1 响应时间金融风险管理系统的响应时间是衡量性能的重要指标之一。

系统应该能够在短时间内处理大量的数据和请求。

为了提高响应时间,可以采用缓存技术、异步处理和并发控制等策略。

同时,还可以通过优化数据库查询和网络传输等方面来降低延迟。

3.2 可扩展性金融风险管理系统应该具备良好的可扩展性,能够适应业务的快速发展和规模的增长。

系统应该能够动态地添加新的节点和服务器,平滑地处理更大的负载。

为了提高可扩展性,可以采用消息队列、分布式缓存和分布式数据库等技术。

3.3 可靠性金融风险管理系统的可靠性是保证业务正常运行的基础。

系统应该具备高可用性和故障恢复能力,能够及时发现并处理潜在的故障。

SACC2019---MySQL分布式事务数据库金融级灾备双活的指标要求与技术架构---金官丁

SACC2019---MySQL分布式事务数据库金融级灾备双活的指标要求与技术架构---金官丁

3台
型号:E5-2680 v4 cores:28 threads:56
内存
硬盘
备注
64G
512G SSD
256G
800G SSD * 6 两台存储节点与一台 RAID 5 直连MySQL对比服务
数据量说明
数据容量
操作类型 HotDB(耗时) MySQL(耗时)
备注
水平分片表7张 8000万条数据/每张
Active Master
Standby Master
数据分片N
分布式事务数据库核心技术算法功能:计算节点的负载均衡高可用能力
分布式事务数据库的计算节点的高可用实现要求及效果:
Cluster集群版本:通过分布式选举算法保障计算节点服务可 用性,Primary节点切换服务恢复的总时长在秒级, Secondary节点切换服务恢复在毫秒级
HA主备版本:故障判断及切换服务恢复的总时长在秒级
管理平台
update 1 sseelleecctt 11 select 2
负载均衡
Primary Node (计算节点)
数据分片1
集群初始化...
SePcroimnadrayryNNodoede 2 ((计计算算节节点点))
Secondary Node 3 (计算节点)
数据可靠性
数据安全性 服务高可用 水平可扩展
金融级分布式事务数据库特性
数据库基本能力
分布式数据存储
分布式事务
一致性算法
并行计算
读写分离
全局序列
全局索引
分布式事务数据库能力
透明加密
Linux系统 X86架构
Unix系统
……
ARM架构
……

分布式数据库的设计与实现

分布式数据库的设计与实现

分布式数据库的设计与实现分布式数据库是一种将数据存储在不同的物理节点上的数据库系统。

它通过将数据分散存储在多个服务器上,以实现高可用性、高性能和横向扩展等优势。

本文将介绍分布式数据库的设计与实现的方法和原则。

一、概述分布式数据库设计的目标是实现数据的分布式存储和访问,同时保证数据的一致性、可靠性和性能。

它通常可以分为两个部分:分布式数据库管理系统(Distributed Database Management System,简称DDMS)和数据分布策略。

二、DDMS设计与实现1. 数据切分在设计分布式数据库时,首先需要将数据按照一定的规则进行切分,将其分散存储在多个节点上。

常见的数据切分方法有垂直切分和水平切分两种。

- 垂直切分:按照业务模块将数据库表进行切分,使得每个节点只存储一部分表的数据。

这样可以减少单一节点的负载,提高系统性能和可用性。

- 水平切分:按照某个列或一组列的数值范围将表的数据划分成多个部分,分别存储在不同的节点上。

这样可以实现数据的负载均衡和横向扩展。

2. 数据复制在分布式数据库中,为了保证数据的可靠性和高可用性,一般会对数据进行复制存储。

常见的数据复制方法有主从复制和多主复制两种。

- 主从复制:一个节点作为主节点负责接收和处理所有的写入请求,其他节点作为从节点负责复制主节点的数据,并处理读取请求。

这样可以提高系统的读取性能和可用性。

- 多主复制:多个节点都可以处理读写请求,并相互之间进行数据同步。

这样可以提高系统的写入性能和可用性。

3. 数据一致性在分布式数据库中,由于数据的复制和分布式存储,会导致数据的一致性问题。

为了解决这个问题,可以采用一致性哈希算法来确定数据存储的位置和复制的节点。

同时,可以使用副本一致性协议来实现数据的一致性。

- 一致性哈希算法:将数据的键值通过哈希函数映射到一个统一的Hash环上,根据节点在环上的位置确定数据的存储节点。

这样可以实现动态添加和删除节点时的数据迁移。

分布式数据库设计与优化

分布式数据库设计与优化

分布式数据库设计与优化随着互联网的发展和数据量的不断增长,传统的单机数据库已经无法满足大规模的数据存储和访问需求。

为了解决这一问题,分布式数据库被广泛采用。

本文将着重介绍分布式数据库的设计和优化策略。

一、分布式数据库设计1. 数据划分在分布式数据库中,数据划分是非常重要的一步。

好的数据划分可以提高系统的并发性能和可伸缩性。

其思路是将数据按照某种规则分散到不同的节点上,实现负载均衡和数据的并行处理。

常见的数据划分策略有两种,即垂直划分和水平划分。

垂直划分指的是将一个表按照列进行拆分,将不同的列存储在不同的节点上。

水平划分则是根据某个条件将表中的数据分散到不同的节点上。

2. 数据复制为了保证分布式数据库的高可用性和容错能力,数据复制是必不可少的。

通过将数据复制到多个节点上,可以避免单点故障,提高系统的可靠性。

数据复制有两种方式,即主备复制和多库复制。

主备复制是将一个节点作为主节点,其他节点作为备节点。

主节点负责处理用户的读写请求,备节点则负责同步主节点的数据。

当主节点发生故障时,可以通过自动切换备节点来保证系统的正常运行。

多库复制是将数据复制到多个节点上,每个节点都可以处理用户的读写请求。

通过多库复制可以提高系统的读取性能,但写入操作需要同步到所有节点,对于写入性能有一定的影响。

3. 数据一致性在分布式数据库中,数据一致性是一个复杂而重要的问题。

由于数据被分散存储在不同的节点上,数据的一致性需要得到保证。

在设计分布式数据库时,需要考虑如何解决数据一致性的问题。

常见的保证数据一致性的方法有两种,即强一致性和最终一致性。

强一致性要求所有节点在同一时刻看到的数据是一致的,但会影响系统的性能和可伸缩性。

最终一致性则允许在一段时间内存在数据不一致的情况,但能够保证最终数据的一致性。

二、分布式数据库优化1. 查询优化查询优化是提高分布式数据库性能的关键。

在设计查询时,应尽量减少数据的传输和节点间的通信开销。

可以通过以下方法来进行查询优化:- 使用索引:在查询中使用索引可以加快数据的查找速度,降低系统的负载。

TDSQL分布式金融级数据库架构

TDSQL分布式金融级数据库架构

可见
TDSQL》
未来展望
腾讯TDSQL分布式金融级数据库架构
全局读一致性
面向金融类业务,十年积累,亿级账户验证
腾讯公司内与计费、充值、转账、财务等核心系统90%以上都使用TDSQL!
2002
2004
2008
2010
2012
2014
腾讯SP业务 原生MYSQL
增值业务 分库分表手工
伸缩
业务爆炸 一致性、 7X24可用性
腾讯计费 超高并发超短
低效
所有事件全序排序=>所有事务全 局排序,低效
数据是否可读,需要通过全局事 务提交状态验证,增加通讯次数
案例
Pg XC
某些系统 SS2PL+MVCC
Spanner SS2PL+MVCC
CockroachDB SSI+MVCC
5
2次读
增加了通讯轮数,且只能解决读 学术界的解决
《Scalable atomic visibility with
有异 常
有异 常
• 写-写
有异 常
• 写-读
并发操作可以被区分为四种:读-读、读-写、写-读、写-写
两个数据节点Na、Nb;两个数据项X、Y Na节点commit完成;Nb节点commit未完成 全局该事务处于committing状态
读半已提交数据异常
结果:账目不平
第1个分布式事务
第2个分布式事务
目录 CONTENTS
分布式事务处理模型与数据异常 业界主流数据库的解决方式
TDSQL全局读一致性的实现技术
解决方案
编号 1 2
3
4
各种方案 全局事务管理器 基于封锁的并发访问控制算法+全

如何进行分布式系统架构设计

如何进行分布式系统架构设计

如何进行分布式系统架构设计在当今互联网时代,随着大数据和云计算的崛起,分布式系统架构设计越来越成为互联网应用领域的主流趋势。

分布式系统架构设计的核心目标在于提高系统的可靠性、可伸缩性和可维护性。

一、概述随着数据量的不断增加,单一系统已经无法承载大规模的数据处理需求。

为了提高系统的处理能力和可靠性,分布式系统应运而生。

在分布式系统中,不同的计算资源被分布在多个计算节点之上,形成了一个协同工作的整体系统。

因此,分布式系统架构设计需要兼顾系统结构和实现方式两个方面。

二、分布式系统结构设计原则1. 服务分类和分层在分布式系统中,通常将系统中的服务按照功能划分为不同的服务分类。

不同的服务之间可以根据实际需要进行不同的部署和管理。

同时,可以通过分层来实现系统的各个服务之间的上下游功能调用。

2. 模块化设计在分布式系统中,系统的各个服务在功能上可以进行细分,每个细分功能模块可以独立的运行和部署。

这样,可以让系统更加模块化,架构更加清晰。

3. 异步化设计在分布式系统中,由于各个服务之间的通信以及数据的传输,通常需要较长的时延。

因此,在系统设计上可以采用异步化的方案,减少系统响应时间,提升系统的处理能力。

三、分布式系统实现方式1. 服务端框架服务端框架可以帮助我们快速搭建分布式系统,例如:Dubbo、Spring Cloud、Apache Thrift等。

这些框架提供了完善的服务化治理方案,可以通过框架来完成服务发布和服务的管理。

2. 消息中间件消息中间件是分布式系统实现的一种重要方式,通过消息中间件,可以实现分布式系统之间的异步通信。

目前业界比较主流的消息中间件有:Apache Kafka、RabbitMQ等。

3. 分布式存储分布式系统离不开分布式存储。

分布式存储可以通过对象存储、分布式文件系统、键值存储等多种方式实现。

常见的分布式存储方案有:Hadoop HDFS、Ceph、GlusterFS、MongoDB等。

分布式数据库课程设计

分布式数据库课程设计

分布式数据库课程设计一、课程目标知识目标:1. 让学生掌握分布式数据库的基本概念、原理和体系结构;2. 使学生了解分布式数据库设计、查询优化和事务管理的基本方法;3. 帮助学生了解分布式数据库在不同行业中的应用及发展趋势。

技能目标:1. 培养学生运用分布式数据库技术解决实际问题的能力;2. 培养学生使用分布式数据库管理系统进行数据查询、更新和事务处理的能力;3. 提高学生分布式数据库系统分析与设计的能力。

情感态度价值观目标:1. 培养学生对分布式数据库技术的兴趣和热情,激发学生主动学习的积极性;2. 培养学生的团队协作意识,提高学生在团队项目中的沟通与协作能力;3. 培养学生具备良好的信息素养,遵循分布式数据库领域的道德规范和法律法规。

本课程针对高年级本科生,具备一定的数据库基础,对分布式技术有一定了解。

课程性质为专业选修课,旨在帮助学生拓宽知识面,提高解决实际问题的能力。

在教学过程中,注重理论与实践相结合,鼓励学生积极参与讨论和项目实践,以实现课程目标。

通过本课程的学习,学生将能够具备分布式数据库领域的基本知识和技能,为未来从事相关领域工作打下坚实基础。

二、教学内容1. 分布式数据库概述:介绍分布式数据库的概念、发展历程、特点及应用场景,对应教材第一章内容。

- 分布式数据库基本概念与术语- 分布式数据库发展历程与趋势- 分布式数据库的优势与挑战2. 分布式数据库体系结构:讲解分布式数据库的体系结构,包括分布式数据存储、分布式数据处理和分布式事务管理等,对应教材第二章内容。

- 分布式数据存储模型- 分布式数据处理策略- 分布式事务管理机制3. 分布式数据库设计:介绍分布式数据库设计方法,包括数据分布、数据复制和查询优化等,对应教材第三章内容。

- 数据分布策略- 数据复制与一致性- 查询优化技术4. 分布式数据库事务管理:讲解分布式事务的概念、性质及事务管理策略,对应教材第四章内容。

- 分布式事务的基本性质- 分布式事务管理策略- 分布式并发控制与死锁处理5. 分布式数据库应用案例分析:分析分布式数据库在不同行业中的应用案例,探讨其技术特点与解决方案,对应教材第五章内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

金融级分布式数据库架构设计目录1.行业背景 (3)2.数据库分布式改造的途径 (3)3.分布式数据库总体架构 (4)4.两阶段提交的问题 (5)5.CAP与BASE的抉择 (7)6.raft的优势 (8)6.1. Leader选举 (9)6.2. 日志复制 (10)6.3. 安全性 (11)7.分布式数据库如何实现PITR (16)1.行业背景银行业从最初的手工记账到会计电算化,到金融电子化,再到现在的金融科技,可以看到金融与科技的结合越来越紧密,人工智能、大数据、物联网、区块链等新兴技术改变了金融的交易方式,为金融行业的创新前行提供了源源不断的动力。

同时互联网金融的兴起是一把双刃剑,带来了机遇的同时也带来了挑战。

普惠金融使得金融的门槛降低,更多的普通大众参与到金融活动中,这让金融信息系统承受了越来越大的压力。

于是我们可以看到大型商业银行、保险公司、证券公司、交易所等核心交易系统都在纷纷进行分布式改造,其中数据库作为有状态的应用,成为了信息系统中唯一的单点,承担了所有来自上层应用的压力。

随着数据库瓶颈的凸显,进行分布式改造迫在眉睫。

2.数据库分布式改造的途径数据库进行分布式改造主要有三种途径:分布式访问客户端、分布式访问中间件、分布式数据库。

由于其分布式能力实现在不同的层次(应用层、中间层、数据库层),对应用程序有不同的侵入程度,其中分布式访问客户端对应用侵入性最大,改造难度最大,而分布式数据库方案对应用侵入性最小,但是架构设计及研发难度最大。

3.分布式数据库总体架构其实当前市面上的分布式数据库总体架构都是类似的,由必不可缺的三个组件组成:接入节点、数据节点、全局事务管理器。

总体架构如下,协调节点负责sql解析,生成分布式执行计划,sql转发,数据汇总等;数据节点负责数据存储与运算;全局事务管理器负责全局事务号的生成,保证事务的全局一致性。

这个架构或多或少都受到了google spanner F1论文的影响,这篇文章主要分析了这几个组件在实现上有什么难点,该如何进行架构设计。

4.两阶段提交的问题我们知道两阶段提交是阻塞性协议,这也是它最大的问题。

下图pgxc架构下的两阶段提交为例,主要分为下面几个阶段:①:CN prepare ->②:所有DN prepare ->③:CN commit->④:所有DN commit试想一下如果在cn commit阶段发生cn/dn宕机会发生什么?如果在cn下发完cn commit命令后宕机,这时dn收到commit命令后会进行提交,但是返回commit ok时发生cn宕机,事务进入阻塞状态。

如果cn下发commit之后某个dn发生宕机,则会造成某些dn commit成功,某些dn commit失败,造成不一致,但是如果dn重新启动后会继续去cn上拿事务提交信息,发现是commit状态,则会继续执行commit操作,提交之前的事务。

在这个地方我们可以探讨一个更极端的情况,如果此时cn也宕机了,那么失败的dn重启后去cn拿状态发现拿不到,这是这个失败dn上的事务就处于一个未决态,不知道是应该提交还是回滚,这时候应该有一个进程能够从其他dn上发现该状态并报告给故障dn,通知它进行提交。

这个角色就是pgxc_clean进程,其实之前几种情况下的事务的回滚也是该进程的工作。

那我们再深入一下,如果该dn是事务的唯一参与者,那么此时pgxc_clean 就无法从其他dn以及cn获取状态,这时该dn就是真正的未决态了。

为了解决两阶段提交的阻塞问题,出现了三阶段提交,三阶段提交在commit之前引入了cancommit的过程,同时加入超时机制。

因为如果协调者发生宕机,参与者无法得知协调者到底发出的是commit还是abort,三阶段提交cancommit过程就是告知参与者我发送的是commit或者abort命令,这时如果协调者发生失败,参与者等待超时时间后可以选出新的协调者,而该协调者是知道应该发出什么命令。

虽然三阶段提交解决了阻塞问题,但是无法解决性能问题,分布式系统中为了保证事务一致性需要跟每个参与者通信,一个事务的提交和参与需要分布式系统中每个节点的参与,必然带来延时,不过在万兆、infiniband、roce高速网络的支持下已经不再是问题了。

5.CAP与BASE的抉择我们知道分布式系统无法战胜CAP。

那么在设计分布式系统的时候该如何进行取舍?首先P (分区容错性)是必须保证的,因为分布式系统必然是多个节点(分区)通过网络进行互联,而网络是不可靠的,分布式系统是为了避免单点故障,如果因为网络问题或者某些节点失败造成整体系统不可用,那么也不符合分布式系统的设计初衷。

如果保证A(可用性),那么当网络失败时,网络隔离的不同区域就要继续提供服务,那么就会造成不同分区的数据不一致(脑裂);如果保证C(一致性),那么网络失败时,就需要等待不同网络分区的节点同步完数据,如果网络一直失败,那么系统就会因为无法同步而一直不可用。

2PC就是典型的牺牲可用性保证一致性的例子,而BASE(basically available,soft state,eventual consistency)就是牺牲一致性保证可用性的例子,因为做到实时的强一致要牺牲的代价太大了,它允许数据在某些时间窗口内的不一致,通过记录窗口内的每一个临时状态日志做到在系统故障时,通过日志继续完成未完成的工作或者取消已经完成的工作回退到初始状态,这种方式保证了最终一致性。

BASE与传统ACID理论其实是背离的,满足BASE理论的事务也叫柔性事务,在遭遇失败时需要有相应的补偿机制,与业务耦合性较高,其实我并不是很赞同BASE的做法,因为它已经背离了数据库最基本的设计理念。

6.raft的优势不管是上面的XA还是BASE都无法彻底解决一致性问题,真正意义上的强一致一定是基于强一致协议的。

paxos和raft是目前主流的两种共识算法。

Paxos诞生于学院派,是分布式环境下基于消息传递的共识算法,它设计之初是考虑一个通用的模型,并没有过多的考虑实际的应用,而且paxos考虑了多个节点同时写入的情况,这就使得paxos的状态机异常复杂,所以难以理解,不同的人可能理解出不同的意思,这一点一直遭人诟病,比如MGR引入write set 的概念来处理多点写入冲突的问题,这在高并发热点数据的场景下是不可接受的。

因为paxos 的难以理解,斯坦福的两名大学生设计了raft算法,相比来说,raft是工业派,同一时刻leader 只有一个,follower通过日志复制实现一致性,相比paxos来说raft的状态机更加简单易懂,实现起来也更加简单,因此在分布式环境上有着广泛的应用,例如TiDB、RadonDB、etcd、kubernetes等。

Raft协议将共识问题分解为三个子问题分别解决:leader选举、日志复制、安全性。

6.1.Leader选举服务器节点有三种状态:领导者、跟随者和候选者。

正常情况下,系统中只有一个领导者,其他的节点全部都是跟随者,领导者处理全部客户端请求,跟随者不会主动发送任何请求,只是简单的响应来自领导者或者候选者的请求。

如果跟随者接收不到消息(选举超时),那么他就会变成候选者并发起一次选举。

获得集群中大多数选票的候选者将成为领导者,领导者一直都会是领导者直到自己宕机了。

Raft 算法把时间分割成任意长度的任期(term),每一段任期从一次选举开始,一个或者多个候选者尝试成为领导者。

如果一个候选者赢得选举,然后他就在这个的任期内充当领导者。

要开始一次选举过程,跟随者先要增加自己的当前任期号并且转换到候选者状态,然后他会并行的向集群中的其他服务器节点发送请求投票的RPCs 来给自己投票,候选者会继续保持着当前状态直到以下三件事情之一发生:(a) 他赢得了这次的选举,(b) 其他服务器成为领导者,(c) 没有任何一个候选者赢得选举。

当一个候选者获得了集群大多数节点针对同一个任期号的选票,那么他就赢得了选举并成为领导者。

然后他会向其他的服务器发送心跳消息来建立自己的权威并且阻止新的领导人的产生。

下图为三种角色的转换状态机。

6.2.日志复制当leader被选举出来,他就作为服务器处理客户端请求。

客户端的每一个请求都被看成复制状态机所需要执行的指令。

领导者把这条指令作为一条新的日志条目附加到日志中去,然后并行的发起附加条目RPCs 给其他的服务器,让他们复制这条日志条目。

当这条日志条目被安全的复制,领导者会应用这条日志条目到它的状态机中然后把执行的结果返回给客户端。

如果跟随者崩溃或者网络丢包,领导者会不断的重复尝试附加日志条目RPCs (尽管已经回复了客户端)直到所有的跟随者都最终存储了所有的日志条目。

下图为复制状态机模型。

6.3.安全性安全性指的是每台复制状态机都需要按照同样的顺序执行相同的指令,以保证每台服务器数据的一致性。

假想一台跟随者在某段时间处于不可用状态,后来可能被选为领导者,这时就会造成之前的日志被覆盖。

Raft算法通过在leader选举时增加一些限制来避免这个问题,这一限制保证所有领导者对于给定的任期号,都拥有了之前任期的所有被提交的日志条目。

日志条目只会从领导者传给跟随者,不会出现因为新领导者缺日志而需要跟随者向领导者传日志的情况,并且领导者从不会覆盖本地日志中已经存在的条目。

Raft 算法使得在投票时投票者拒绝掉那些日志没有自己新的投票请求,从而阻止该候选者赢得选票。

CN的设计接入节点的设计可能看起来很简单,但是里面有些地方内容还是有些玄机的。

设计cn需要重点考量的地方主要是cn到底是做重还是做轻。

这是把双刃剑,主要有下面两方面问题。

No.1如何做到sql语法兼容性?接入节点主要负责sql的解析、执行计划的生成与下发,这些东西其实是sql解析器做的事情,我们可以直接将mysql或者pg的解析器甚至server层拿过来做sql解析和执行计划生成,而且就天然的兼容了mysql或者pg的语法。

No.2如何处理元数据的问题?上面的方案看似很完美的事情,但是有个问题:如果直接将mysql或者pg的server层搬过来的话,元数据怎么办?cn上到底放不放元数据?如果不放元数据,那么就需要一个统一的存放和管理元数据的地方,我在cn上建的表需要到某个固定地方更新元数据信息,查询也是一样。

如果cn上存放元数据,那么元数据的更新就需要在各个cn之间进行同步,如果发生某个cn宕机,则任何ddl操作都会hang住,这时就需要有一个机制:在cn超时无响应后将cn 剔除出集群。

DN的设计数据节点的设计主要考虑下面几个方面问题。

No.1 数据节点如何做高可用?数据库的数据当然是最宝贵的,任何数据库都要有数据冗余方案,数据节点一定要有高可用,在保证rpo=0的基础上尽量缩短rto。

相关文档
最新文档