您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

全面讲解分布式数据库架构设计特点

时间:2019-11-19 10:32:30  来源:  作者:

数据库作为基础软件中的重要一环有着很深的技术含量,在这样的大背景下国产数据库厂商开始发力,这其中分布式数据库如雨后春笋般出现,良性的竞争环境使它们都得到了长足的发展,其中不乏优秀的产品,本文主要挑选目前几个相对成熟数据库进行架构特点介绍。

作者:张小海来源:51CTO

【51CTO.com原创稿件】行业背景

随着全球经济下行压力增大,中美贸易摩擦愈演愈烈,美国一系列的经济制裁和技术封锁使得我们有种被扼住咽喉的感觉,数据库作为基础软件中的重要一环有着很深的技术含量,在这样的大背景下国产数据库厂商开始发力,这其中分布式数据库如雨后春笋般出现,良性的竞争环境使它们都得到了长足的发展,其中不乏优秀的产品,本文主要挑选目前几个相对成熟数据库进行架构特点介绍。

分布式数据库总体架构

分布式数据库总体设计有两个思路和方向,一个是基于共享存储的架构(share everything),另一个是基于数据分片的架构(share nothing)。

共享存储的架构特点是底层存储共用一份数据池子,上层数据库server层可以弹性扩展,典型的案例像DB2 pureScale,Oracle RAC,阿里云PolarDB等,这种架构的好处是天然适合做云数据库,比如阿里云,上层的SQL引擎可以是MySQL也可以是PG,而且可以无限扩展,底层的存储其实是一起的,用户申请只是申请几个上层的MySQL或者PG server同时在底层存储开辟一块空间给用户,这样的话可以做到资源的弹性伸缩。这种架构的数据库严格意义上不能称之为分布式数据库。

数据分片架构的特点是底层数据通过一定的规则比如hash或者range让数据打散分别分布到不同的数据节点上,计算时底层多个节点共同参与计算,可以算是一种mpp并行计算的架构,同时数据节点可以扩展,上层由协调节点进行SQL解析和转发,这是目前典型的分布式数据库架构,也是本文讨论的重点。

目前分布式数据库的总体架构设计基本都和下图相差不大,每种产品在不同组件的实现上存在差异,但大体架构上类似。

全面讲解分布式数据库架构设计特点

 

从图中可以看到分布式数据库三大组件:协调节点、数据节点、全局事务管理器。协调节点负责SQL解析转发,充当的是类似proxy的角色,数据节点负责计算和数据存储,全局事务管理器负责全局事务读一致性的保证。

下面分别介绍一下目前主流的分布式数据库的架构以及设计差异。

1.TiDB

TiDB是目前在互联网界风靡的一款分布式数据库,由PingCAP公司研发,由三大组件构成,底层TiKV Server是Github开源组件,是一个分布式的kv存储引擎,做数据存储,对应数据节点;上层TiDB Server由PingCAP公司研发,用作SQL解析和转发,对应协调节点;PD Server复制全局时间戳分配,对应全局事务管理器。下面列举了它的架构特点:

①轻量化,深受互联网公司喜爱,适合与容器进行集成,当前PingCAP公司也在做TiDB operator,将TiDB容器化。

②部署简便,基于Ansible Playbook实现自动化部署。

③实现了基于Region级别的raft复制,将数据表拆分成一个个的Region,Region一主两备基于raft协议做复制,同时Region还会根据负载情况进行合并和分裂,由PD Server进行负载均衡调度。

④使用隐藏列作为分布列,分布列不占用真实列,这样在进行数据修改时数据不需要进行重分布,大致原理是使用表名和主键前面加上前缀信息作为隐藏列,再使用该列进行hash分布。

⑤TiDB Server总体兼容MySQL语法,这个兼容并不是将MySQL Server直接拿过来使用,因为TiKV底层是kv的存储模型,所以TiDB在执行sql的时候需要做sql到kv的映射。

⑥TiKV可以看成一个大的数据池子,在物理机层面不存在哪个机器是主,哪个是备,所有机器都是主节点,热点数据会自动进行动态负载均衡,数据是动态移动的。

⑦总体借鉴了google spanner f1和bigtable的论文,PD Server实现了逻辑上的时间戳,谷歌论文也提出了原子钟的概念,从物理上保证事务号全局有序。

2.OceanBase

OceanBase是蚂蚁金服自研的分布式数据库,号称代码从第一行完全自研。最近ob也屡屡刷新新闻头条,刷榜TPCC官网测试结果,刷新天猫交易额和tps记录,不过金融行业比如银行的应用案例并不多,也许是银行和支付宝可能天然有鸿沟吧。ob架构比较特殊,下面介绍一下它的架构特点:

①最底层是ob server,每个ob server集成了总控服务、sql引擎、存储引擎和数据分区。

②上层是ob proxy,实现sql的路由,这个不止是应用到observer的路由,也有observer之间的路由。

③数据拆成一个个分区,每个分区做paxos复制,保证强一致,主分区宕机不可用会自动切换到备分区。

④checkpoint时间改变,将checkpoint周期拉长为1天,所有交易都落在内存,然后每天夜里去刷一次盘,redo日志实时记录,这样避免了随机写的性能损耗,只有顺序写,更像内存数据库,性能更好,这样也带来一些问题,比如宕机后恢复时间变长,还有查询刚刚做的修改需要先查基础数据,再去应用redo条目,得到最新数据。

⑤两阶段提交并不使用ob proxy节点充当协调者,而是将ob proxy路由到的第一个主数据分区作为协调者,同时两阶段提交的prepare和commit等信息会进行持久化,如果写协调节点宕机,那么备分区会启用,同时读取持久化信息,这个设计和一般的分布式数据库不太一样。

⑥集群维护一个partition cache,分区的分布信息会通过ob proxy在不同ob server间传递。

⑦ob最早的时候曾经开源过一段时间,随后基于它也诞生了cbase、obase这些产品。

3.GaussDB

华为GaussDB分为三个产品线,Gauss100前身是华为自研的内存数据库gmdb,目前已经开源,Gauss200是基于pgxc架构研发的OLAP分析型数据库,Gauss300是在200的基础上继续研发的HTAP数据库,这里主要介绍Gauss300数据库,Gauss300就是上图中典型的架构:

①协调节点负责sql解析、转发的同时也充当了两阶段提交的协调者的角色,协调节点上面存储有部分元数据信息,元数据需要在多个协调节点之间进行同步,如果协调节点宕机,会影响ddl相关操作,还可能造成两阶段提交的残留信息,需要有两阶段残留清理机制。

②数据节点通过quorum-based流复制实现高可用,主备数据节点是实例级别的,一个主节点就是一个主PG实例,一台机器可以有多个主数据节点。

③GTM复制分配全局事务id,GTM一主多备,GTM主备之间要同步gxid信息,而且是强同步,那么带来一个问题,备GTM节点宕机会造成主GTM不可用,造成全局可用性问题,这块华为将GTM的高可用转移到etcd中,将GTM生成的xid写入到etcd中,etcd自身就是一个高可用强一致的集群,这样就保证了GTM的高可用,主GTM宕机那么备GTM会接替,然后继续从etcd集群中读写事务号。

④GTM的事务号是批量分配的,如果在高并发的情况下,gxid如果一条一条分配则会有性能瓶颈,华为将事务号改为一次分配几万甚至几十万,避免了GTM事务号分配的瓶颈。

⑤事务id由32位改为64位。PG的事务号是32位的,最大到42亿,所以事务号在PG中是很珍贵的资源,用完了就会循环使用,循环使用会带来很多严重问题,华为将事务号由32位改为了64位,这样事务号根本不可能用尽,那么一次分配几十万也不足为奇了。

⑥为了提升性能,华为也正在研发gtm-lite功能,该功能可以实现本地事务不走GTM,因为生产环境大部分是本地事务,因而能大大提升性能。

⑦Gauss300是基于pgxc架构演进而来的,类似基于pgxc的还有亚信AntDB、腾讯TBase。

4.SequoiaDB

SequoiaDB是巨杉自主研发的分布式数据库,最初的应用场景主要是历史数据归档和非结构化数据存档,但是近期来巨杉也在积极开发oltp功能,包括研发GTM,支持MySQL协议等。下面介绍一下它的架构特点:

①包括协调节点、编目节点、数据节点、PG节点等。协调节点负责sql转发,编目节点存储元数据,数据节点存储真实数据,PG节点做sql引擎。

②巨杉数据库底层存储是NoSQL的,数据都是JSON格式进行存储,优点类似MongoDB。

③PG节点是将PG Server拿过来做sql存储引擎,支持sql语法,在PG上创建外表,同时创建外部服务器,存取巨杉中的数据,近期也支持了MySQL,将巨杉作为可插拔的存储引擎嵌入到MySQL中。

④目前巨杉用作交易类场景其实不多,现在最大的一个应用案例是某大行一百多物理节点的巨杉集群,用作数据归档和影像管理。

⑤巨杉底层是多模存储引擎,既支持结构化数据,也支持非结构化数据,实现了统一管理。

当然还有很多分布式数据库,像达梦、人大金仓、南大通用、万里开源、中兴等企业都有分布式数据库产品,这里不再一一介绍了。

作者介绍:

张小海,就职于某大型商业银行,目前主要负责数据库管理及新技术研究,PostgreSQL技术推广者,个人公众号:数据库架构之美。



Tags:数据库架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
为正确的案例选择正确的模式 前言困惑的特德恳求说:"很难相信这是不可能的。""这是2020年;当然,必须有另一种方式"。这是Acme Widgets的教学时刻。他们技术堆栈中的数据库发生...【详细内容】
2020-12-07  Tags: 数据库架构  点击:(156)  评论:(0)  加入收藏
一、SMP数据库架构SMP(对称多处理器结构,Symmetric Multi-Processor)数据库架构部署成本相对较低,可以运行从大型服务器到中型商用硬件的各种设备。它在提供合理的性能和吞吐量...【详细内容】
2020-12-01  Tags: 数据库架构  点击:(536)  评论:(0)  加入收藏
在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的。首先我们来说说数据库的架构。1、mysql...【详细内容】
2020-06-09  Tags: 数据库架构  点击:(55)  评论:(0)  加入收藏
本文以MYSQL数据库为例说明。一、数据库架构原则有以下几种:1、高可用2、高性能3、一致性4、扩展性二、常见的架构方案: 方案一:主备架构,只有主库提供读写服务,备库冗余作故障转...【详细内容】
2019-12-24  Tags: 数据库架构  点击:(119)  评论:(0)  加入收藏
数据库作为基础软件中的重要一环有着很深的技术含量,在这样的大背景下国产数据库厂商开始发力,这其中分布式数据库如雨后春笋般出现,良性的竞争环境使它们都得到了长足的发展,其...【详细内容】
2019-11-19  Tags: 数据库架构  点击:(152)  评论:(0)  加入收藏
背景在互联网初创时期,企业往往采用单体架构去搭建自己的应用系统,但是,随着企业的不断壮大,系统访问量不断随之上升,数据量也急剧增长。数据的存储是首先要解决的问题,在这个大数...【详细内容】
2019-11-01  Tags: 数据库架构  点击:(120)  评论:(0)  加入收藏
一、数据库架构原则 高可用 高性能 一致性 扩展性二、常见的架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb1、高可用分析:高...【详细内容】
2019-09-27  Tags: 数据库架构  点击:(121)  评论:(0)  加入收藏
一、数据库架构原则 高可用 高性能 一致性 扩展性二、常见的数据库架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb1、 高...【详细内容】
2019-09-16  Tags: 数据库架构  点击:(195)  评论:(0)  加入收藏
本文总结一下接触过的关系型数据库常用的几种架构及其演进历史。...【详细内容】
2019-08-16  Tags: 数据库架构  点击:(254)  评论:(0)  加入收藏
一、数据库架构原则 高可用 高性能 一致性 扩展性二、常见的架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb1、高可用分析...【详细内容】
2019-06-28  Tags: 数据库架构  点击:(347)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条