背景

近几年来移动互联网的火爆也促使我从传统行业投入到这个火爆的产业中,目前在一家初创企业做服务器端的研发工作。由于公司规模有限,并不像一些大公司一样有专门的DBA来进行管理和优化数据库方面的工作,所以这些工作也落到了我们后端研发人员的肩膀上。这就需要我们在编写后端与数据库打交道的代码时需要注意正确性以及一些性能的优化。由于产品初期用户量比较小,所以单台数据库服务器当时就足以支撑当时的系统,可随着公司的发展和用户数量的增多,系统不断的扩展,数据库也越来越庞大,这时候当数据库性能遇到问题时,是否能够横向扩展,是否拥有实时同步的副本,当数据库面临灾难时,是否可以短时间内通过故障转移的方式保证数据库的可用性等等问题都逐渐的暴露出来。

面对上述挑战一个显而易见的办法是将多个服务器组成一组集群,这样一来就可以充分利用每一台服务器的资源并将客户端负载分发到不同服务器上,随着应用程序负载的增加,只需要将新的服务器添加到集群即可。

##探索

数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle、SQL Server 、MySQL、PostgeSQL、MariaDB等,像SQLServer/Oracle 这类数据库在初期可以帮业务搞定很多棘手的事情,我们可以花更多的精力在业务本身的发展上,但众所周知也得交不少钱。涉及到钱的事情在公司发展壮大以后总是会回来重新审视这个事情的,随着业务的发展以及数据量访问量的不断增加及成本等方面的考虑,从长远考虑我们最终把这些业务用免费的MySQL来存,但单机的MySQL往往无法直接抗住这些业务,自然而然的我们就需要考虑引入分布式的MySQL解决方案帮助业务去支撑未来的发展。

##方案选型