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架构就是遵循分库分表这个原则的,只不过他们划分规则会有很多纬度,比如可以根据地域划分,可以根据买家、卖家划分,可以根据时间划分等等。


2015-05-26 15:12 举报
已邀请:
1

定海偶然

赞同来自: u18101733

本帖最后由 定海偶然 于 2015-5-26 15:25 编辑

看看~~

pv(page view,页面浏览量)PV(page view)即页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。网页浏览数是评价网站流量最常用的指标之一,简称为PV。监测网站PV的变化趋势和分析其变化原因是很多站长定期要做的工作。  Page Views中的Page一般是指普通的html网页,也包含php、jsp等动态产生的html内容。来自浏览器的一次html内容请求会被看作一个PV,逐渐累计成为PV总数。




0

定海偶然

赞同来自:

一句一字的读完了,感觉,对mysql在不同需求下工作有了一个直观清晰的印象~
0

疾风

赞同来自:

现在很少能做到第四阶段吧
0

疾风

赞同来自:

现在很少能做到第四阶段吧
0

疾风

赞同来自:

现在很少能做到第四阶段吧
0

模范棒棒糖

赞同来自:

pv越大后面的支持的数据库越大啊。
0

小怪兽

赞同来自:

学习下下 ~
0

随风飘雪012

赞同来自:

支持下,话说铭哥,现在的mariadb galera的性能比mysql主从的性能会好一些,配置也比较简单,而且可以自动剔除故障数据库,可以适当参考一下
0

随风飘雪012

赞同来自:

这是我写的关于mariadb的文章,贴出来给个参考http://xianglinhu.blog.51cto.com/5787032/1676039
0

zxc123

赞同来自:

不错,是一篇好的文章
0

chenqi

赞同来自:

mark
0

小许

赞同来自:

学习了。
0

robert

赞同来自:

涨姿势了
0

wanjj

赞同来自:

0

迷城

赞同来自:

{:4_91:}
0

我是学渣

赞同来自:

每一次读到框架类的文章都对网站有更多的认识。
0

qwerthink

赞同来自:

学习了
0

balich

赞同来自:

学习。。。
0

wangzai

赞同来自:

学习
0

wangzai

赞同来自:

学习
0

wangzai

赞同来自:

学习
0

wangzai

赞同来自:

学习
0

zmh0415

赞同来自:

好!学习了
0

君君

赞同来自:

越来越强大
0

Coohx - 小运维

赞同来自:

学习了,很清晰。
0

xiao123

赞同来自:

今天学习了
mysql复制  http://htop.me/2015/07/10/MySQL%E5%A4%8D%E5%88%B6/
mysql主从心得整理  http://wangwei007.blog.51cto.com/68019/965575   
mysql主从常见问题   http://f.dataguru.cn/thread-423665-1-1.html   
mysql-proxy 实现读写分离   http://my.oschina.net/barter/blog/93354
mysql架构演变  http://www.aminglinux.com/bbs/thread-8025-1-1.html
0

hwl888

赞同来自:

好,学习了
0

午夜DJ

赞同来自:

一主多从不是不稳定吗?是不是需要开发的配合
0

u46306306

赞同来自:

学习了

0

llill

赞同来自:

学习了。

0

Graped( ー̀дー́ )

赞同来自:

got it

0

LINUX_A - 不要在最能吃苦的年龄选择安逸!

赞同来自:

学习了!

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: