UCloud读写分离中间件性能优势凸显 将提供永久免费服务
Posted UCloud云计算
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UCloud读写分离中间件性能优势凸显 将提供永久免费服务相关的知识,希望对你有一定的参考价值。
创建简单,配置灵活。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产品内容。
以上是关于UCloud读写分离中间件性能优势凸显 将提供永久免费服务的主要内容,如果未能解决你的问题,请参考以下文章