mysql架构演变

假设一个网站(discuz)从最开始访问量很小作到日pv千万,咱们来推测一下它的mysql服务器架构演变过程。

第一阶段
网站访问量日pv量级在1w如下。单台机器跑web和db,不须要作架构层调优(好比,不须要增长memcached缓存)。此时,数据每每都是每日冷备份的,但有时候若是考虑数据安全性,会搭建一个mysql主从。


第二阶段
网站访问量日pv达到几万。此时单台机器已经有点负载,须要咱们把web和db分开,须要搭建memcached服务做为缓存。也就是说,在这个阶段,咱们还能够使用单台机器跑mysql去承担整个网站的数据存储和查询。若是作mysql主从,目的也是为了数据安全性。


第三阶段
网站访问量日pv达到几十万。单台机器虽然也能够支撑,可是须要的机器配置要比以前的机器好不少。若是经费容许,能够购买配置很高的机器来跑mysql服务,可是并非说,配置翻倍,性能也翻倍,到了必定阶段配置增长已经不能带来性能的增长。因此,此阶段,咱们会想到作mysql服务的集群,也就是说咱们能够拿多台机器跑mysql。但,mysql的集群和web集群是不同的,咱们须要考虑数据的一致性,因此不能简单套用作web集群的方式(lvs,nginx代理)。能够作的架构是,mysql主从,一主多从。为了保证架构的健壮和数据完整,主只能是一个,从能够是多个。
还有一个问题,咱们须要想到,就是在前端web层,咱们的程序里面指定了mysql机器的ip,那么当mysql机器有多台时,程序里面如何去配置?discuz,其实有一个功能,支持mysql读写分离。即,咱们能够拿多台机器跑mysql,其中一台写,其余多台是读,咱们只须要把读和写的ip分别配置到程序中,程序自动会去区分机器。固然,若是不使用discuz自带的配置,咱们还能够引用一个软件叫作 mysql-proxy, 使用他来实现读写分离。它支持一主多从的模式。


第四阶段
网站访问量日pv到几百万。以前的一主多从模式已经遇到瓶颈,由于当网站访问量变大,读数据库的量也会愈来愈大,咱们须要多加一些从进来,可是从的数量增长到数十台时,因为主须要把bin-log所有分发到全部从上,那么这个过程自己就是一件很繁琐的事情,再加上频繁读取,势必会形成从上同步过来的数据有很大延迟。因此,咱们能够作一个优化,把mysql原来的一主多从变为一主一从,而后从做为其余从的主,而前面的主只负责网站业务的写入,然后面的从不负责网站任何业务,只负责给其余从同步bin-log。这样还能够继续多叠加几个从库。


第五阶段
网站访问量日pv到1千万的时候,咱们发现,网站的写入量很是大,咱们以前架构中只有一个主,这里的主已经成为瓶颈了。因此,须要再近一步作出调整。好比,咱们能够把业务分模块,把用户相关的单独分离出来,把权限、积分等也能够分离出来单独跑一个库,而后再作主从,也就是所谓的分库。固然也能够换一个纬度,把访问量或者写入量大的表单独分离出来,跑在一台服务器上,也能够把一个表分红多个小表。这一步操做,涉及到一些程序上的改动,因此须要事先和开发同事作好沟通和设计。总之,这一步要作的就是分库分表


再日后发展,继续把大表分小表便可。 而国内阿里淘宝网站的数据量是巨量的,他们的数据库所有都是mysql,他们的mysql架构就是遵循分库分表这个原则的,只不过他们划分规则会有不少纬度,好比能够根据地域划分,能够根据买家、卖家划分,能够根据时间划分等等。前端

相关文章
相关标签/搜索