https://docs.ucloud.cn/database/uddb/concepts/method
传统单机数据库面临的挑战
以电商网站为例,在网站创建之初,日均访问量可能只有几百到几千人,这时整个业务后台可能就一个数据库,所有业务表都放在这个数据库中,一台普通的服务器就可以支撑,而且这种架构对业务开发人员也非常友好,因为所有的表都在一个库中,这样查询语句就可以灵活关联了,使用起来很便捷。如图1所示,所有业务表都在一个数据库中。
但是随着业务的不断发展,每天访问网站的人越来越多,数据库的压力也越来越大。通过分析发现,所有的访问流量中,80%以上都是读流量,只有20%左右的写流量,这时可以通过读写分离来缓解数据库的访问压力。如图所示为读写分离,
什么是UDDB?
由于网站的访问量越来越大,尽管采取了读写分离的方式,但随着数据库的压力继续增加,数据库的瓶颈越来越突出。这时我们发现,我们的网站演进到现在,交易、商品、用户的数据都还在同一个数据库中。然而在这个巨大而且臃肿的数据库中,表和表之间的数据很多是没有关系的,也不需要JOIN操作,理论上就应该把它们分别放到不同的服务器,如图所示为垂直分库。
随着业务的不断增长,我们发现交易、商品、用户这些库都变得巨大无比,单机数据库已经无法满足业务的继续增长,这时可以考虑对这些表进行水平拆分,即同一个表中的数据拆分到两个甚至多个数据库中。以用户表为例,数据可以根据userid的奇偶来确定数据的划分。把id为奇数的放到DB1,为偶数的放DB2。如下图为水平分表
单机MySQL面临的挑战
容量和性能问题
业务存储的数据量增多和访问量增大,都构成对单机数据库的挑战;在大数据时代,传统的单机数据库在容量和性能上,都存在瓶颈,明显不能满足业务发展的要求;
成本问题
单机数据库通过Scale-up的方式,采用高端存储和小型机设备,能够一定程度解决容量和性能问题,但带来的问题是成本昂贵,业务成本曲线快速上升。
运维风险问题
数据量达到一定量级后,单机数据库的数据库备份、还原等运维操作需要长时间才能完成,失败概率增加,给日常运维工作带来风险。
开源中间件解决方案及其存在的问题
读写分离、垂直拆库、水平分表作为大型网站后台的刚需,市面上有很多中间件可以满足,比较有代表性的有:阿里巴巴的Cobar、MyCAT。然而这些开源中间件都存在以下缺点:
配置复杂
基于开源中间件对一张大表进行水平拆分需要以下六步操作:
部署数据库节点
安装和部署中间件软件(多个)
登录到各数据库节点,创建子表
把子表的信息,配置到每个中间件的配置文件,然后启动
用HAProxy等负载均衡收敛中间件IP,对外提供一个IP
业务正式访问
运维极其不便
基于开源中间件对系统进行扩容需要进行以下几步:
UCloud 分布式数据库(UCloud Distributed Database,简称UDDB)是基于公有云构建的新一代分布式数据库,为用户提供稳定、可靠、容量和服务能力可弹性伸缩的关系型数据库服务。UDDB 高度兼容 MYSQL 协议和语法,支持自动化水平拆分,在线平滑扩缩容,服务能力线性扩展,透明读写分离,OLTP 和 OLAP 融合支持, 具备数据库全生命周期运维管控能力。
优势:
无限扩容
自动水平拆分;支持字符串,数字,日期等多种拆纬度;业务不中断平滑扩容。
弹性扩展
多种规格实例配置;自主升降级,按需扩展;应用透明读写分离,应用零代码改动;平滑扩展,业务不中断。
简单易用
兼容MYSQL 协议、语法、客户端;轻松数据导入,数据库上云;一键实现数据库扩容;业务零代码改动,实现读写分离。
快速部署
可在线快速部署实例,节省采购、部署、配置等自建数据库工作,缩短项目周期,帮助业务快速上线。
低成本
稳定的产品,完善的运维和技术支持,相比开源产品总体性价比更高;多种实例规格配置覆盖不同业务规模场景,按需购买;自主控制实例升降配,根据业务量调整资源使用。
功能:
水平分表
UDDB通过水平分表来解决容量瓶颈问题,根据一列数据的值把数据行拆分到多个独立的表里。对于开发人员来说,不再需要关心如何切分数据、如何路由请求等待,只需初始化分片字段(shardkey),直接面向逻辑库表进行编程、专注业务逻辑的实现即可,大大降低了程序的复杂度。
读写分离
UDDB的读写分离功能是一种对应用透明的读写分离实现,应用在不需要修改任何代码的情况下,只需要在UDDB控制台中调整读权重,即可将读流量按照需要的比例在存储节点与只读实例之间调整。写流量则统一走存储节点,不分流。
平滑扩容
UDDB支持数据库存储平滑扩缩容,支持一键扩容。
弹性扩展
UDDB支持服务节点实时扩展,实现服务能力的线性扩展。
SQL兼容
UDDB高度兼容MYSQL协议和语法。