【从0-1 千万级直播项目实战】分布式数据库选型 | 你还在分库分表吗?
放松时间
这里跟咱们讲个段子,曾经有个朋友,他在传统软件职业,他常常问我你们互联网就一个App项目,整天迭代来迭代去,还招那么多人去干,有那么多东西做吗?在他眼里可能咱们这种互联网App便是上线即巅峰,只要App发布出去了,就没程序员啥事了,当然要是换曾经的我,我可能会登时暴怒并辩驳他,但现在作为一个成熟程序员我并不会去辩驳,由于我知道跟他讲太多也没有成果,我就笑笑,问题不大。
业务布景
在互联网项目中,分布式、高并发、大数据是绕不开的论题,尤其现在容器化,微服务,云原生的概念越来越火,由此诞生了许多 crud-boy sql-boy k8s-boy … 好了 不废话 直接说布景 千万用户等级直播项目 先不说其他用户 先看用户中心中最基础的用户表 在规划上至少得超越亿级存储才能满意咱们体系的需求 这个时分怎么做呢? 正常人肯定会说 分库分表啊 ok 确实能处理问题 可是会引发其他的问题 接下来我帮你们分析下分库分表的缺陷
- 依靠中间件
- 大局分布式业务已然失效
- 别想聚合和杂乱join查询了
- 大多时分需要双写一份大局数据到其他nosql型数据库
- 扩容方法费事
- 加索引加字段蛋疼的要死
- 重构/数据迁移改造时喊爹骂娘
单纯以上几点足以击退crud-boys sql-boys 的心思防地,容许我千万不要emo,今日我将带你们解放双手,拥抱夸姣的明日。
分布式数据库
什么是分布式数据库?
web2.0年代以来,国产数据库百家争鸣,各种海量数据存储需求似乎成为了互联网标配,同样的,在当下云原生年代,分布式集群技能也成为了项目的标配。假如你还不了解分布式数据库的概念,下面一张图将助你开端认识分布式数据库
分布式数据库有什么特征?
1.牢靠性
消除了单点毛病问题,分布式数据库体系具有重复的数据构成,单机毛病时整个服务依然能屹立不倒,然后处理了牢靠性问题
2.数据通明性办理
在分布式体系中,数据不是存储在一片地皮,而是存储在核算机网络的多个地皮上,并且还保证了逻辑上是一个全体,它们被一切用户共享,并由一个大局的 DBMS 一致办理。用户拜访数据时无须知道数据存放在哪片地皮,也不需要知道由分布式体系中的哪些服务器来完成,然后降低了运用门槛,让数据对用户愈加通明,办理愈加便利。
3.数据分布式存储
现在的数据存储需求都是TB,PB等级,分布式数据库的数据存储不受单机磁盘容量约束,可经过动态添加数据服务器的数量提升存储才能
4.核算存储别离
核算节点无状况,可经过水平扩展添加核算才能,存储节点和核算节点能够分层优化,不要再被相似单表最多只能存储XX条数据的思想所禁锢。
5.弹性弹性
能够随时随地的在不影响现有应用的情况下,动态对数据存储节点扩缩容,这算是在必定程度上依据自己的业务情况 进行成本的控制。
6.多数据副本
主动将数据以强一致、高功能的方法仿制至跨机房的多个副本,以保证数据99.99999….%可用性
分布式数据库有哪些?
1.Spanner
Spanner由谷歌的一个全球等级的分布式数据库,它办理着全球成百上千个数据中心,数百万个服务器,将数万亿数据分片存储到这些服务器上。
- 数据能够有多个备份副本,并且能够灵活、细粒度地装备:副本数量、副本所在的数据中心等,副本乃至能够跨国家存储,即便面临大范围自然灾害,数据仍旧可用,真实做到了真实意义上的全球容灾。
- 读和写操作的外部一致性,以及在一个时间戳下跨数据库的全球一致性操作,这个特功能够保证一致性备份,以及依据一致性备份的一致性MapReduce操作,以及原子操作。
- 支撑广域的分布式业务,关于涉及不同数据中心的业务,也能保证ACID特性,有爱好的话咱们能够了解下它的杀手锏 TrueTime 的完成。
长处
- 99.999%的SLA
- 主动完成数据库sharding
- 夸张的扩展性,能够扩展数百万机器
运用场景
游戏、金融科技、医疗保健、媒体娱乐职业
2.TiDB
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,互为副本。
长处
- 无限水平扩展
- 高可用,TiDB Server/TiKV Server/PD Server 都能容忍部分实例失效,不影响整个集群的可用性。
- 具备良好的MySQL兼容性,业务扩大能够基本完成无缝由MySQL切换成TiDB
缺陷
- 硬件要求高
- 运用成本高
运用场景
互联网交际职业、游戏场景、数据仓库
3.Mongo DB
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。详细的存储引擎特性我这边不多讲,有爱好咱们能够自己去查找下。
长处
- 高可用的副本集支撑
- 文档存储 业务常常变动 此特功能够让开发疏忽前期的数据的前期规划问题
- 易于查询 不同于SQL模型 查询编写和优化比传统SQL容易得多
- 支撑彻底索引,包括内部目标 亿级数据下检索毫秒级回来成为了现实
缺陷
- 不支撑业务
- 不支撑reload,只能冷重启,初始化装备费事
运用场景
互联网交际职业、游戏职业、直播职业、需求改变/迭代快、不需要业务操作的业务
4.PolarDB
PolarDB是aliyun自主研制的新一代关系型云原生数据库,既拥有分布式规划的低成本优势,又具有集中式的易用性,选用存储核算别离、软硬一体化规划,满意大规模应用场景需求,先看一张它的架构图
- 一写多读
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协议保证数据的一致性。
长处
- 100%兼容MySQL、PostgreSQL、高度兼容Oracle语法
- 核算才能最高可扩展至1000核以上,存储容量最高可达 100TB
- 支撑列索引(In-Memory Column Index,简称IMCI)功用,支撑实时业务等级行列数据一致,列索引结合SIMD向量化和并行履行加快技能,在大数据量杂乱查询场景,相比传统MySQL获得百倍以上履行功能加快效果。
缺陷
- 不能拜访用户表,数据库的功用受限,假如要做DMS可能需要搭配对应的云服务运用
- aliyun老毛病:技能文档不标准
运用场景
适用教育、直播、金融、电商等互联网业务量快速剧增、读多写少的场景
选型计划确认
数据库 | 功能 | 稳定性 | 扩展性 | 成本 |
---|---|---|---|---|
Spanner | 强 | 高 | 无敌(能够扩展到数百万的机器,数已百计的数据中心) | 价格和硬件要求高 |
TiDB | 一般 | 高 | 高 | 价格和硬件要求高 |
MongoDB | 强 | 高 | 一般(适用场景也有限) | 价格和硬件要求较高 |
PolarDB | 一般 | 高 | 高(弹性扩缩容) | 低 (依据开源MySQL的引擎 价格和硬件要求低) |
由于咱们做的是直播交际项目,从各方面去考虑,从0-1做的话优先选 PolarDB 作为分布式数据库计划。
总结
-
分布式数据库服务是互联网项目十分有必要要引进的架构
-
分布式数据库虽好,但也需要依据详细运用场景进行选型,切勿盲目疏忽实际情况进行选型操作
-
关于小企业/项目来说,其实也不是一开端就要运用分布式数据库,像PolarDB,是无缝兼容MySQL引擎的,能够先从单机、主备MySQL服务先开端用,后期迁移到分布式数据库其实也很容易,云原生数据库原本便是为了满意用户扩展性、可用性、可移植性方面的要求。