MySQL是世界上最流行的开源数据库,集可靠、易用、功能丰富、适用范围广等特点于一身,尤其对开发者友好,使其成为华为云关系型数据库(RDS)用户的首选。尽管MySQL备受关注,更是各种应用的第一选择,但也面临着诸多挑战,其社区版在云上和线下技术局限性会造成一定的影响,难以完全满足用户的需求。
现由华为云RDS团队自研的HWSQL即将公测。那么,华为云RDS的明星产品HWSQL---卓越的云上MySQL,到底解决了哪些难题?技术上又有哪些突破?
华为云RDS for MySQL
通常来说,在生产环境中,管理员采用集群部署MySQL来保证服务可用性并提高性能。尽管MySQL易用性极高,但配置高可用数据库集群仍是一个艰巨的任务。在线下或者在IaaS上部署MySQL,用户需要花时间了解MySQL的复制机制,比如配置主备实例、只读副本,浮动IP地址等。同时,他们还需要特别关注诸如安全和备份策略等问题。这使得他们将在这方面耗费大量的时间和精力。
现在,再也不用担心这些问题了。华为云RDS以用户需求为导向,从用户体验出发,真正解决用户的痛点,避免了这些繁琐的流程。现在,用户只需访问华为云官网,有针对性的选择与之相适应的实例规格类型,仅需回答几个与网络、数据库配置、备份策略相关的问题,即可在最短的时间内获得一个可用数据库。
RDS forMySQL是一个完全托管的在线WEB服务,所有配置皆可通过console或RDS API完成。同时,还可以通过IP地址和端口等采用加密连接的方式访问RDS服务。
可靠可扩展备份故障不用愁
华为云RDS可自动安装,是基于最佳实践来部署MySQL集群。不仅数据库的安全性极高,还能定期进行备份,并可轻松完成一定范围内的软硬件故障恢复,数据库管理员再也不用为备份和故障发愁了。
注:图1是典型的RDS for MySQL部署示例。MySQL运行在ECS上,其数量取决于RDS的部署方式。通常包含一个MySQL主实例、一个备实例和最多五个只读副本为查询密集型的应用增加吞吐量和可扩展性。
MySQL中库表数据存放在可靠的华为块存储云硬盘(EVS)中。EVS提供三副本,增加数据可靠性。RDS服务支持手动和自动数据库备份,数据库备份存储在低成本的对象存储服务(OBS)中以确保数据库是可恢复的,防止软件错误、人为错误、或恶意活动等。整个环境监控采用华为云监控服务(CES),主动通知RDS环境相关的任何问题。
开源MySQL面临的挑战
高并发场景下性能差
MySQL社区版中,使用InnoDB作为存储引擎,不论是云上还是线下,用户都会面临一些挑战。当活跃的数据库连接数过多(一般情况下,连接数大于500),性能将变差,可能会造成查询响应缓慢。尤其是MySQL5.6,并发连接数太多会直接影响数据库性能。即便采用更高规格的实例也解决不了这个问题,根本原因在于MySQL社区版处理线程的方式。当并发连接增多,锁和资源争用问题会导致性能降低。
复制延迟突出
开源MySQL面临的第二个挑战是复制延迟问题。在关系型数据库中,数据库的更新操作会被同步写入事件日志以保证其可恢复。在MySQL中,这种日志叫二进制日志(或“Binlog”),使用二进制日志能保证故障场景下事务可恢复。例如,若需要将一个旧的数据库备份恢复到最新状态,管理员可以重放二进制日志中的事务。
在MySQL数据库中,备库、只读副本与主库之间的同步是依靠二进制日志重放来实现的。在MySQL5.7以前都没有实现真正的多线程复制,导致从库的复制延迟问题很突出。
故障恢复时间长
主实例高负荷的情况下,备实例的复制可能会滞后。如图2所示,备实例的事务处理能力远远落后于主实例,导致事务积压。
注:通过开启半同步复制并运行SysBench 0.5压测,在MySQL5.6.36上获取到如图2所示的结果。该场景包括MySQL主实例和备实例,规格均为32 v CPUs,128GB,客户端采用华为云标准的8 v CPUs,32GB VM。测试的数据库大小是1.5GB,包含64个表,每个表100000行。在标准SysBench压测中,读操作(查询)与写操作(插入,刷新,删除)的比例是14:4。
如上图红线所示,在有负载的场景下,主实例能每秒处理大约1200个事务(每秒22,000次查询)。不幸的是,备实例收集和执行binary日志中事务的速度较慢,处理事务能力远落后于主实例,每秒只能复制和确认200多个事务。高负荷的情况越持久,事务积压越严重,故障情况下恢复所需的时间越长。在上面的示例中,如果主实例在1,000秒之后故障,备实例要花费大约750秒(12分多钟),去重放落后的日志,故障恢复时间因此变得很长。
华为云RDS for HWSQL
尽管并不是所有的环境都存在这个问题,但是对于事务繁忙且对故障恢复时间有要求的数据库来说,上面描述的问题可能是个很大的挑战。幸运的是,华为云RDS forHWSQL服务为大型生产数据库解决了这些问题和其他挑战。
HWSQL是高性能、100%兼容MySQL、由华为自研的数据库服务。不仅具备RDSfor MySQL的所有特性,同时提供更多功能:
· 事务吞吐量约为MySQL社区版的3倍,支持更多的用户连接,同时不影响响应速度。
· 解决并发连接带来的挑战,即使高达8000并发连接,查询性能依旧良好。
· 采用更快、更可靠、无损的半同步复制协议,即使在超高负荷的情况下,也能保证故障快速恢复。
· 充分利用大规格实例的资源,发挥强大HWSQL数据库引擎的优越性能和可扩展性。
采用图1中相同的硬件,相同的SysBench模型进行性能压测之后,RDS forHWSQL明显优于开源MySQL,吞吐量是MySQL社区版本的三倍。在sysbench压测中,每个事务包括18个离散查询,不论数据库连接数有多少,RDS for HWSQL的事务吞吐量达到90000QPS(或者5000TPS),并且时延很低。
注:图3是使用sysbench0.5对多个数据库引擎压测获取的测试结果。该场景包括MySQL主实例和备实例,规格均为32v CPUs,128GB,客户端采用华为云标准的8 vCPUs,32GB VM。测试的数据库大小为150GB,包含64个表,每个表10000000行。
对DBA来说,情况变得明朗。采用上面相同的高负荷环境测试RDS for HWSQL性能。复制到备实例的速度相当快,备实例基本上与主实例保持同步。如果主实例故障,快速复制可以保障备实例立即恢复操作,减少停机时间,提高业务可用性。同时,RDSfor HWSQL采用优化的半同步复制协议来保证数据不仅写入而且提交到副本上,进一步提高可靠性。RDS forHWSQL减少主实例与备实例或者只读副本的延迟,即使在高吞吐量的环境下,也能保证恢复快速无损。从下面图4不难看出,使用HWSQL可大幅降低复制延迟。
卓越的RDS云服务
HWSQL除了以上特性外,还在诸多方面有所突破,比如:
· 强大的线程池插件支持高并发连接
· 事务级MTS并行复制可降低复制时间,快速恢复服务,保证只读副本的数据与主库一致
· 优化的半同步协议确保数据完整性
· 多个只读事务优化
· 写事务和日志优化
IT优选——HWSQL值得拥有
可以说,数据库是大部分在线应用和服务的核心,同时也对企业的发展作用巨大。而数据库的完整性、可用性及恢复时间,都将直接影响数据库管理员及业务人员的工作成效,因而它们是IT和业务人员关注的焦点。
如果还在为工作流烦恼,如果还在为低效率担心,如果还在为性能担忧,那么不妨选择性能一流、可靠性、可用性,且易于部署和管理的RDS forHWSQL。实力派RDS for HWSQL非常值得一试。