【从0-1 千万级直播项目实战】分布式数据库选型 | 你还在分库分表吗?

放松时间

这里跟咱们讲个段子,曾经有个朋友,他在传统软件职业,他常常问我你们互联网就一个App项目,整天迭代来迭代去,还招那么多人去干,有那么多东西做吗?在他眼里可能咱们这种互联网App便是上线即巅峰,只要App发布出去了,就没程序员啥事了,当然要是换曾经的我,我可能会登时暴怒并辩驳他,但现在作为一个成熟程序员我并不会去辩驳,由于我知道跟他讲太多也没有成果,我就笑笑,问题不大。

业务布景

在互联网项目中,分布式、高并发、大数据是绕不开的论题,尤其现在容器化,微服务,云原生的概念越来越火,由此诞生了许多 crud-boy sql-boy k8s-boy … 好了 不废话 直接说布景 千万用户等级直播项目 先不说其他用户 先看用户中心中最基础的用户表 在规划上至少得超越亿级存储才能满意咱们体系的需求 这个时分怎么做呢? 正常人肯定会说 分库分表啊 ok 确实能处理问题 可是会引发其他的问题 接下来我帮你们分析下分库分表的缺陷

  1. 依靠中间件
  2. 大局分布式业务已然失效
  3. 别想聚合和杂乱join查询了
  4. 大多时分需要双写一份大局数据到其他nosql型数据库
  5. 扩容方法费事
  6. 加索引加字段蛋疼的要死
  7. 重构/数据迁移改造时喊爹骂娘

单纯以上几点足以击退crud-boys sql-boys 的心思防地,容许我千万不要emo,今日我将带你们解放双手,拥抱夸姣的明日。

分布式数据库

什么是分布式数据库?

web2.0年代以来,国产数据库百家争鸣,各种海量数据存储需求似乎成为了互联网标配,同样的,在当下云原生年代,分布式集群技能也成为了项目的标配。假如你还不了解分布式数据库的概念,下面一张图将助你开端认识分布式数据库

【从0-1 千万级直播项目实战】分布式数据库选型 | 你还在分库分表吗?

分布式数据库有什么特征?

1.牢靠性

消除了单点毛病问题,分布式数据库体系具有重复的数据构成,单机毛病时整个服务依然能屹立不倒,然后处理了牢靠性问题

2.数据通明性办理

在分布式体系中,数据不是存储在一片地皮,而是存储在核算机网络的多个地皮上,并且还保证了逻辑上是一个全体,它们被一切用户共享,并由一个大局的 DBMS 一致办理。用户拜访数据时无须知道数据存放在哪片地皮,也不需要知道由分布式体系中的哪些服务器来完成,然后降低了运用门槛,让数据对用户愈加通明,办理愈加便利。

3.数据分布式存储

现在的数据存储需求都是TB,PB等级,分布式数据库的数据存储不受单机磁盘容量约束,可经过动态添加数据服务器的数量提升存储才能

4.核算存储别离

核算节点无状况,可经过水平扩展添加核算才能,存储节点和核算节点能够分层优化,不要再被相似单表最多只能存储XX条数据的思想所禁锢。

5.弹性弹性

能够随时随地的在不影响现有应用的情况下,动态对数据存储节点扩缩容,这算是在必定程度上依据自己的业务情况 进行成本的控制。

6.多数据副本

主动将数据以强一致、高功能的方法仿制至跨机房的多个副本,以保证数据99.99999….%可用性

分布式数据库有哪些?

1.Spanner

【从0-1 千万级直播项目实战】分布式数据库选型 | 你还在分库分表吗?

Spanner由谷歌的一个全球等级的分布式数据库,它办理着全球成百上千个数据中心,数百万个服务器,将数万亿数据分片存储到这些服务器上。

  1. 数据能够有多个备份副本,并且能够灵活、细粒度地装备:副本数量、副本所在的数据中心等,副本乃至能够跨国家存储,即便面临大范围自然灾害,数据仍旧可用,真实做到了真实意义上的全球容灾
  2. 读和写操作的外部一致性,以及在一个时间戳下跨数据库的全球一致性操作,这个特功能够保证一致性备份,以及依据一致性备份的一致性MapReduce操作,以及原子操作。
  3. 支撑广域的分布式业务,关于涉及不同数据中心的业务,也能保证ACID特性,有爱好的话咱们能够了解下它的杀手锏 TrueTime 的完成。

长处

  1. 99.999%的SLA
  2. 主动完成数据库sharding
  3. 夸张的扩展性,能够扩展数百万机器

运用场景

游戏、金融科技、医疗保健、媒体娱乐职业

2.TiDB

【从0-1 千万级直播项目实战】分布式数据库选型 | 你还在分库分表吗?

TiDB Server

TiDB Server 担任接纳 SQL 请求,处理 SQL 相关的逻辑,并经过 PD 找到存储核算所需数据的 TiKV 地址,与 TiKV 交互获取数据,回来成果。 TiDB Server 是无状况的,其自身并不存储数据,只担任核算,能够无限水平扩展,能够经过负载均衡组件(如LVS、HAProxy 或 F5)对外供给一致的接入地址。

PD Server

PD Server 是整个集群的办理模块,主要作业有三个:

  • 存储集群的元信息(某个 Key 存储在哪个 TiKV 节点)
  • 分配大局唯一且递增的业务ID
  • 对TiKV 集群进行调度和负载均衡

PD Server 是一个集群,需要部署奇数个节点,一般线上推荐部署>=3个节点。

TiKV Server

TiKV Server 担任存储数据,存储数据的基本单位是 Region,每个 Region 担任存储一个 Key Range的数据,每个 TiKV 节点会担任多个 Region 。运用 Raft 协议做仿制,保持数据的一致性和容灾。副本以 Region 为单位进行办理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。

长处

  1. 无限水平扩展
  2. 高可用,TiDB Server/TiKV Server/PD Server 都能容忍部分实例失效,不影响整个集群的可用性。
  3. 具备良好的MySQL兼容性,业务扩大能够基本完成无缝由MySQL切换成TiDB

缺陷

  1. 硬件要求高
  2. 运用成本高

运用场景

互联网交际职业、游戏场景、数据仓库

3.Mongo DB

【从0-1 千万级直播项目实战】分布式数据库选型 | 你还在分库分表吗?

MongoDB是高功能、可扩展、易部署、易运用,存储数据十分便利的面向调集存储的数据库

Config Server

Config Server是MondoDB的装备服务器,存储分片集群的元数据,元数据反映了分片集群中一切数据和组件的状况和安排,Shards还会从装备服务器读取块元数据,装备服务器还存储身份验证装备信息,例如人物的拜访控制或群集的内部身份验证,MongoDB还运用装备服务器来办理分布式锁,每个分片群集有必要具有自己的装备服务器,不要将相同的装备服务器用于不同的分片群集。

Mongos

Mongos 能够有多个,相当于一个控制中心,担任路由和协调操作,使得集群像一个全体的体系。mongos能够运转在任何一台服务器上,有些选择放在shards服务器上,也有放在client 服务器上的。mongos启动时需要从config servers上获取基本信息,然后接受client端的请求,路由到指定的shards服务器,然后收拾回来的成果回来给client服务器。

Shards

存储节点,为了保证数据的高可用性和一致性,能够是一个独自的实例,也能够是一个副本集,在生产环境下Shard一般是一个Replica Set,以防止该数据片的单点毛病。一切Shard中有一个PrimaryShard,里面包括未进行划分的数据调集。

存储引擎

MongoDB的核心组件,其担任办理和安排数据采纳什么样的格式存储在硬盘和内存上。在MongoDB3.2版别曾经,默许的存储引擎是wiredTiger,在3.2版别之后和4.0版别之前,默许的存储引擎是MMAPv1,在4.0版别之后,默许的存储引擎是In-memory。详细的存储引擎特性我这边不多讲,有爱好咱们能够自己去查找下。

长处

  1. 高可用的副本集支撑
  2. 文档存储 业务常常变动 此特功能够让开发疏忽前期的数据的前期规划问题
  3. 易于查询 不同于SQL模型 查询编写和优化比传统SQL容易得多
  4. 支撑彻底索引,包括内部目标 亿级数据下检索毫秒级回来成为了现实

缺陷

  1. 不支撑业务
  2. 不支撑reload,只能冷重启,初始化装备费事

运用场景

互联网交际职业、游戏职业、直播职业、需求改变/迭代快、不需要业务操作的业务

4.PolarDB

PolarDB是aliyun自主研制的新一代关系型云原生数据库,既拥有分布式规划的低成本优势,又具有集中式的易用性,选用存储核算别离、软硬一体化规划,满意大规模应用场景需求,先看一张它的架构图

【从0-1 千万级直播项目实战】分布式数据库选型 | 你还在分库分表吗?

  • 一写多读

PolarDB选用分布式集群架构,一个集群包括一个主节点和最多15个只读节点(至少一个,用于保证高可用)。主节点处理读写请求,只读节点仅处理读请求。主节点和只读节点之间选用Active-Active的Failover方法,供给数据库的高可用服务。

  • 核算与存储别离

PolarDB选用核算与存储别离的规划理念,满意公共云核算环境下依据业务开展弹性扩展集群的刚性需求。数据库的核算节点(Database Engine Server)仅存储元数据,而将数据文件、Redo Log等存储于远端的存储节点(Database Storage Server)。各核算节点之间仅需同步Redo Log相关的元数据信息,极大降低了主节点和只读节点间的仿制推迟,并且在主节点毛病时,只读节点能够快速切换为主节点。

  • 读写别离

读写别离是PolarDB集群版默许供给的一个通明、高可用、自适应的负载均衡才能。经过集群地址,SQL请求主动转发到PolarDB集群版的各个节点,供给聚合、高吞吐的并发SQL处理才能。

  • 高速链路互联

数据库的核算节点和存储节点之间选用高速网络互联,并经过RDMA协议进行数据传输,使I/O功能不再成为瓶颈。

  • 共享分布式存储

多个核算节点共享一份数据,而不是每个核算节点都存储一份数据,极大降低了用户的存储成本。依据全新打造的分布式块存储(Distributed Storage)和文件体系(Distributed Filesystem),存储容量能够在线平滑扩展,不会受到单个数据库服务器的存储容量约束,可应对上百TB等级的数据规模。

  • 数据多副本、Parallel-Raft协议

数据库存储节点的数据选用多副本方式,保证数据的牢靠性,并经过Parallel-Raft协议保证数据的一致性。

长处

  1. 100%兼容MySQL、PostgreSQL、高度兼容Oracle语法
  2. 核算才能最高可扩展至1000核以上,存储容量最高可达 100TB
  3. 支撑列索引(In-Memory Column Index,简称IMCI)功用,支撑实时业务等级行列数据一致,列索引结合SIMD向量化和并行履行加快技能,在大数据量杂乱查询场景,相比传统MySQL获得百倍以上履行功能加快效果。

缺陷

  1. 不能拜访用户表,数据库的功用受限,假如要做DMS可能需要搭配对应的云服务运用
  2. aliyun老毛病:技能文档不标准

运用场景

适用教育、直播、金融、电商等互联网业务量快速剧增、读多写少的场景

选型计划确认

数据库 功能 稳定性 扩展性 成本
Spanner 无敌(能够扩展到数百万的机器,数已百计的数据中心) 价格和硬件要求高
TiDB 一般 价格和硬件要求高
MongoDB 一般(适用场景也有限) 价格和硬件要求较高
PolarDB 一般 高(弹性扩缩容) 低 (依据开源MySQL的引擎 价格和硬件要求低)

由于咱们做的是直播交际项目,从各方面去考虑,从0-1做的话优先选 PolarDB 作为分布式数据库计划。

总结

  1. 分布式数据库服务是互联网项目十分有必要要引进的架构

  2. 分布式数据库虽好,但也需要依据详细运用场景进行选型,切勿盲目疏忽实际情况进行选型操作

  3. 关于小企业/项目来说,其实也不是一开端就要运用分布式数据库,像PolarDB,是无缝兼容MySQL引擎的,能够先从单机、主备MySQL服务先开端用,后期迁移到分布式数据库其实也很容易,云原生数据库原本便是为了满意用户扩展性、可用性、可移植性方面的要求。