自建mysql数据库和阿里云数据库哪个好

在使用云服务时,都会面临一个选择:资源类的服务是要云服务器自建(自己购买云服务器来部署mysql),还是使用云服务器厂商提供的云数据库,比如mysql, redis, mc等,三者使用场景不一样,可能选择也会不一样。

阿里云数据库mysql(RDS)官方文档 https://help.aliyun.com/document_detail/26092.html

阿里云数据库mysql(RDS)开通地址 https://www.aliyun.com/product/rds/mysql

我们重点来分析mysql,在数据可靠性以及服务可用性上,在云上是自建更好,还是使用厂商的paas服务更好。

1.可靠性和可用性分析

数据可靠性:mysql的发生数据丢失的可能性,在单位时间内,丢失数据的比例和概率越低,可靠性越高。

服务可用性:mysql持续提供服务的可能性,在单位时间内,正常提供服务时间越长,服务可用性越高。

这两个指标是相互独立的,有时数据发生了丢失,但服务是可用的;有时服务不可用,但数据没有丢失。

一般来说,大家能够接受一定程度的不可用,但不能接受数据可靠性有问题。但云厂商定义的服务等级协议中,阿里,腾讯,华为三家的mysql服务等级协议中都没有包含数据可靠性的指标承诺。数据可靠性和服务可用性,可以进行明确的定义,但在发生故障时,到底是会影响数据可靠性还是服务可用性,会比较难以明确。举例来说,mysql所在机器宕机,既可能影响到数据可靠性(数据不能写入)也会影响到服务可用性。在下文中,因此我们只分析是否有明确的措施来应对故障或者避免故障,而不再分析这些故障影响到的是数据可靠性还是服务可用性。

2.数据高可用体系建设比较

云上自建mysql, 还是云厂商提供的mysql服务,很关键的一个特性是期望其具有高可用体系:某个节点坏了,能够有替代节点迅速替换继续提供服务。
mysqls上,要有高数据可靠性和高可用性,需要做比较多工作,如主备机制,自动化扩容,自动建立从节点,数据自动备份,监控,读写分离的proxy节点,流量分配等等,这些工作需要较大的投入和经验的积累。

在投入方面,大的云厂商一般是可以保证的,在经验积累方面,因为面对非常多的客户,经验的积累也是更快。

反观一般的公司(体量不是很大情况下,比如到BAT,头条这种级别),要建立起高可用体系,投入大,但收益局限于自己公司,投入产出比低,动力不足,更多的时候,是通过手工 + 一部分自动化 + 业务方程序的实现高可用。

结论:在mysql的高可用体系建设上,自建mysql不如云厂商的mysql服务。在发生机器故障,磁盘满,负载高等需要进行迁移或者扩容时,云上的mysql的数据可靠性和服务可用性会高于云上自建mysql。

3.变更带来的风险分析

软件服务很多的故障是发生在软件升级变更时,mysql软件系统可以分为两个部分:

1. mysql节点本身,包括主节点,备节点,从节点

2.周边系统,包括控制系统,前端代理节点

3.1mysql节点本身更新带来的风险比较

对于mysql节点本身软件,云上自建的话,选择某个版本后,除非有安全问题或特别明显的性能收益,一般不会变更。

对于云厂商而言,要完善高可用体系同时要提升性能,就需要做变更。mysql节点软件更新,云厂商的做法是:有升级,会推送给客户,由客户来决定是否要升级。客户基于风险考虑,可以选择不进行升级。

mysql节点变更带来的风险:云上自建和云上mysql服务的风险相等。

3.2 周边系统的变更问题:

云上自建:周边系统变更可以由自己来进行控制

云上的mysql服务:完全由云厂商控制,客户选择余地小

云厂商因为资源更多,出问题的影响面更大(涉及到众多的赔偿和名誉上的损失),猜测(只能说猜测)会有更严格的检查,测试,发布流程,单次变更风险会比云上自建的小。

同时云厂商服务的客户更多,需求可能更多,因此可能:变更的节奏更快,变更次数比自建的多。

周边系统软件更新带来的风险,云上自建和云上mysql服务两者不好判定。

4.总结

高可用体系:云上mysql服务要强于在云上自建;

mysql节点的变更风险:云上mysql服务和云上自建风险一致;

mysql周边系统的变更风险:云上mysql服务和云上自建不好判定。

综上我们得出结论:云上自建mysql和云厂商提供的mysql服务相比,云厂商提供mysql服务很大概率具有更高的数据可靠性和服务可用性。