UCloud读写分离中间件性能优势凸显 将提供永久免费服务

百家 作者:Ucloud 2017-07-13 11:04:06


UCloud推出的UDB读写分离中间件在某种程度上也体现了公有云数据库服务的发展趋势:从简单数据库实例售卖和管理演变为数据存储高可靠、业务访问高可用、系统零维护、接口丰富(MySQL/MongoDB/SQL Server/Oracle兼容)、功能多样化(读写分离/系统精细化管理/分布式/OLTP&OLAP一体化)的平台型结构化数据存储和处理服务。

从这层意义来讲,UDB读写分离中间件是UCloud云数据库团队在平台型服务方向上的一次探索。除了第一篇文章《UCloud推出读写分离中间件  打造数据库效率提升利器》里提到的模块实现质量高、MySQL兼容性好、永久免费三大优势外,本文将对UDB读写分离中间件的其它优势做进一步介绍,并通过性能测试报告使用户更直观的了解UDB读写分离中间件。


优势突出  做最受用户欢迎的数据库中间件

创建简单,配置灵活。UDB读写分离中间件在控制台上一键即可开启/释放读写分离功能,提供四种读请求分发模式,供客户根据业务需要,灵活选择和配置。

中间件双活无单点,可用性和稳定性有保证。中间件采用双活两节点部署,前端采用工业级负载均衡产品ULB进行IP收敛、负载均衡和容灾,另外ULB在开启读写分离功能时自动创建,无需客户自己绑定。

UDB节点自动化健康检查。读写分离中间件自动检查UDB主从节点的可用性与从节点的数据延迟,并自动剔除不健康节点,节点恢复后将自动加入。

可以说,基于公有云环境,UCloud云数据库团队将读写分离的易用性推向一个新高度,打造了一款业内最好用的读写分离中间件。不过,UCloud的目标并不局限于此,作为拥有五年云数据库运营经验的团队,UCloud的DBA(数据库管理员)在数据库管理和运维上积累了大量经验,中间件作为介于业务程序和数据库之间的代理,恰好是承载这些管理与运维经验的最佳模块。

为此,UCloud云数据库团队的研发部门和DBA部门正进行深度合作,在读写分离的基础上加入数据库管理功能,希望将其打造成管理功能最强大、最受用户欢迎的数据库中间件。该中间件初步规划以下功能:

1. SQL分发规则配置,以SQL为粒度,配置分发规则,将符合规则的SQL分发到指定的UDB节点;

2. 后端数据库节点SQL处理性能分析和统计;

3. 数据库过载保护和流量控制;

4. SQL白名单机制,防止SQL注入攻击;

5. 敏感数据过滤和审计。

性能测试报告 核心优势一目了然

读写分离的核心价值在于通过添加从节点实现读性能的线性扩展。如果做不到这一点,MySQL兼容度再好、管理功能再强大也无法满足业务的本质需求。 UDB读写分离中间件通过精心的结构设计,推敲和打磨每一行跟性能相关的代码,实现了读性能随从节点数量的线性增长:增加相应数量的从节点,数据库的读性能也将随之线性增长。从这一意义来说,使用UDB读写分离中间件可以将客户所购买从节点的每一点性能都“压榨”出来,杜绝浪费,而此性能是目前市面上绝大多数中间件无法做到的。

从上图可以看到,在压测程序测试线程数>=128个(保证测试压力足够)的情况下,读QPS(每秒查询率)随着从节点数增加而线性增加:只有1个主节点时,QPS最高能到5万;1主1从时,QPS能够到10万;1主2从时,QPS峰值为15万。

为了能更加直观地说明“读性能随从节点数量线性扩展”这一效果,从上图中分别挑选1主0从、1主1从、1主2从三种配置下的最高读QPS,得到以下性能曲线:

从图中可以看出, 读QPS随着节点数的增加,呈现出近乎完美的线性增长。

ProxysQL是业内一款著名的数据库中间件,主要功能有读写分离、数据库管理、Cache等,为国内外大量DBA所喜爱,甚至ProxySQL在某种程度上是开源读写分离中间件的第一选择。 

产品发布之前,为了搞清楚UDB读写分离中间件在读性能上与业内标杆还有多大差距,UCloud做了两款产品的读性能对比测试。出乎意料的是,在读性能上UDB读写分离中间件几乎完胜ProxySQL:

从测试结果看,对于配置完全相同的两个后端数据库节点,UDB读写分离中间件读性能峰值能够到10w QPS,而ProxySQL最高仅为7.5w QPS,两者之间有25%的差距(但ProxySQL消耗的CPU比UDB读写分离中间件低,由于瓶颈在后端数据库节点IO上,因此两款中间件都没有跑完测试机的CPU)。

考虑到ProxySQL采用C++开发,而UDB读写分离中间件采用Go语言开发,这一结果也令人倍感惊讶,但经过仔细检查测试方法并进行多次测试后,得到的结果仍是一致的。

因此,从本次测试得到的结论是:一般情况下,C++由于对底层更具掌控力,在性能上相较于Go会有更多优势,但也并不是绝对的,因为性能通常更多取决于模块设计是否科学,代码是否经过精心优化以及是否能够充分利用多核CPU的强劲计算能力。

具体的测试方法如下:

建表语句:CREATE TABLE `sbtest1` ( `id` int(10) unsigned NOT NULL, `k` int(10) unsigned NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 MAX_ROWS=1000000


测试命令:./src/sysbench --db-driver=mysql --mysql-table-engine=innodb --mysql-host=10.9.99.169 --mysql-port=3306 --mysql-user=root --mysql-password="liuly624@cloud" --mysql-db=sbtest --oltp-tables-count=5 --oltp-table-size=50000000 --report-interval=2 --max-requests=0 --time=300 --threads=128 --rand-init=on --rand-type=special --rand-spec-pct=5 --percentile=99 --oltp_auto_inc=off --test=/data/sysbench/tests/include/oltp_legacy/select.lua run

具体的测试步骤是:

1.分别采用64、128、192、256线程,直连UDB主节点进行压测,记录QPS;

2.分别采用64、128、192、256线程,连接读写分离中间件,后端配置1主0从共一个UDB节点进行压测,记录QPS; 

3.分别采用64、128、192、256线程,连接读写分离中间件,后端配置1主1从共两个UDB节点进行压测,记录QPS; 

4.分别采用64、128、192、256线程,连接读写分离中间件,后端配置1主2从共三个UDB节点进行压测,记录QPS。 

5.分别采用64、128、192、256线程,连接ProxySQL中间件,后端配置1主2从共三个节点,记录QPS。 

在测试中发现,由于ProxySQL是以SQL语句为粒度进行转发,并且转发目的是以group为单位,主从节点不在同一个group。虽然后端配置了三个节点,实际利用的是两个从节点,所以在上述性能测试结果最后一张图中,本次测试只体现ProxySQL后端接两个从节点的性能。

获取方便 使用方式简单

与UCloud其他产品一样,UDB读写分离功能的使用和管理极为简便。

1.开启读写分离

在UCloud控制台创建好UDB主从节点之后,即可开启读写分离:

开启成功后,控制台可以看到“管理读写分离”按钮:

2. 管理读写分离

控制台看到“管理读写分离”按钮后,点击即可进入读写分离管理页面,对读写分离中间件进行管理:

其中,IP对应读写分离中间件下属ULB实例的IP,业务程序通过该IP和端口即可访问读写分离中间件。

点击“延迟阈值”的“更改”和“读模式”的“更改”,可以修改延迟阈值和读模式:

其中,延迟阈值用于设置从节点和主节点数据延迟的最大允许值。如果从节点的数据延迟超出该值,则中间件将认为从节点不可用,从而将其排除在主从节点外,在随后的健康检查中如果发现延迟地域该值,则重新加入。读模式用于配置中间件对读请求的转发规则,共有4种转发规则可以配置。

3.关闭读写分离

点击读写分离管理页面的“关闭读写分离”按钮,即可关闭读写分离。

下面再来简单介绍一下UDB读写分离中间件的功能限制和管理命令,使用户对这一产品有更加系统的了解。

功能限制

UDB读写分离中间件对MySQL兼容度高,功能限制非常少,仅有以下三个方面:

1.MySQL协议限制

1.1、不支持SSL加密;

1.2、暂不支持压缩协议。

2.SQL限制

2.1、Prepare语句只会分发到主节点;

2.2、支持savepoint语句(该语句将被分发到主节点),但暂不支持rollback to savepoint;

2.3 、暂不支持XA事务命令;

2.4、Lock Tables/Unlock Tables 将被分发到主节点,而Proxy层不会有任何Lock状态,因此Lock Tables产生的锁不会影响到从节点;

2.5、存储过程后的Select语句一律分发到主节点。如:call udb_test('000001',@pp,@qq); select @pp,@qq; select * from t1; 上述两条Select语句都将被分发到主节点;

2.6、show processlists、Show master/slave status、kill query、COMPROCESSINFO、COMSTATISTICS命令当前只会转发到主节点,针对中间件和数据库系统管理场景的管理命令正在开发中;

2.7、暂不支持COMTABLEDUMP和COMCHANGE_USER协议。

3.SET命令限制

3.1、Set Session、Set User变量语句将被广播到主节点和从节点,如果广播失败,Proxy将断开和客户端连接,从而撤销广播失败导致的数据不一致。考虑到节点间的数据一致性,Set global变量语句只会被分发到主节点,后续含全局变量的Select语句也只会发送到主节点;

3.2、不允许在一条Set语句中同时出现Global变量和Session、User变量。

管理命令

目前,UDB读写分离中间件提供两条系统命令,用于分析系统的运行状况。

1. ushow qps

该命令用于统计过去5s内各节点的读写QPS,以及节点数据相对主节点的延迟信息。

代码说明:

ReadQueries/5s :过去5s内总共发往某UDB节点的读请求次数;

ReadQps:过去5s内某UDB节点的平均读QPS;

WriteQueries/5s :过去5s内总共发往某UDB节点的写请求次数; WriteQps:过去5s内某UDB节点的平均写QPS; 

TotalQps:过去5s内某UDB节点的平均读写QPS;

UdbId:UDB节点Id;

SencondBehindMaster: 该UDB的数据相对于主节点的延迟,如果是主节点则固定为0。

2. ushow last route

该命令用于查看上一条SQL命令被路由到了哪个节点。

永久免费

UDB读写分离中间件将为UCloud用户提供永久免费服务,不会收取任何费用。区别于其他友商的云数据库产品,UDB没有CPU限制,只按内存和磁盘收费,因此UDB的性能优势非常突出。 

正因这一差异化策略,让UDB在性能上拥有极佳的口碑,UDB读写分离中间件也延续了这一传统。从本质上来说,读写分离中间件是一款CPU密集型软件, 但对内存和磁盘要求不高,所以完全可以复用UDB产品在CPU积累的技术和运营经验,做到CPU消耗型UDB读写分离中间件的免费,在帮助用户提高效率的同时也节省了成本。

UDB读写分离功能已经在上海二可用区B正式上线,北京二可用区B客户正在邀测中,有需要的客户可以联系客户经理开通该可用区的权限。目前只有高可用UDB才能开启读写分离能力,普通版UDB的读写分离能力将在近期内上线。




点击“阅读原文”,了解更多UDB产品内容。


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接