第四十一天:mysql 架 构 演 变 过 程

小Q:历史孕育了真理,它能和时间抗衡,把遗闻旧事保藏下来。它是往昔的迹象,当代

的鉴戒,后世的教训。                           —— 塞万提斯

==============================================================================

架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种:

Scale-up :  纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力。

Scale-out : 横向扩展,  通过加节点(机器)来实现伸缩,提升服务能力。

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

一类常用的架构演变:

》》》

时间: 2024-09-30 06:54:43

第四十一天:mysql 架 构 演 变 过 程的相关文章

第二十一篇:基?于?W?D?M?模?型?的?A?V?S?t?r?e?a?m?驱?动?架?构?研?究

基?于?W?D?M?模?型?的?A?V?S?t?r?e?a?m?驱?动?架?构?研? 这篇论文2006年早就发表, 与当时开发这个驱动正好差不多的时间. 最近实际项目需要, 又回过头来将AVStream中的主要框架列举一下. 整个框架由: KSDevice KSFilter KSPin所构成 KSDevice负责了PNP相关的DISPATCH, 如START, STOP, ADD, REMOVE KSFilter构成软件AVSTREAM设备的DISPATCH, 这就是所谓的FILTER CENT

mySQL 創建存儲過程procedure

1.mySQL 創建存儲過程procedure 如下圖: /*奇葩之處竟然要定義個標記[delimiter //]表示是procedure 不是sql ,procedure 的關鍵字被狗吃了?*/ 2.流程控制語句 if then  end if 3.case when end case . 4.while end while /* end while 是亮點,這個和Oracle 不一樣*/ 5.loop end loop 循環: 6.repeat   until  end repeat; /*

MySQL架构由小变大的演变过程

假设一个网站(discuz)从最开始访问量很小做到日pv千万,我们来推测一下它的mysql服务器架构演变过程. 第一阶段    网站访问量日pv量级在1w以下.单台机器跑web和db,不需要做架构层调优(比如,不需要增加memcached缓存).此时,数据往往都是每日冷备份的,但有时候如果考虑数据安全性,会搭建一个mysql主从. 第二阶段    网站访问量日pv达到几万.此时单台机器已经有点负载,需要我们把web和db分开,需要搭建memcached服务作为缓存.也就是说,在这个阶段,我们还可

MySQL数据库服务器逐渐变慢分析与解决

一.检查系统的状态 通过操作系统的一些工具检查系统的状态,比如CPU.内存.交换.磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可能正等待IO的完成.除此之外,还应观注那些占用系统资源(cpu.内存)的进程. 1.使用sar来检查操作系统是否存在IO问题 #sar -u 2 10 — 即每隔2秒检察一次,共执行20次. 结果示例: 注:在redhat下,%system就是所谓的%wio. Linux 2.4.21-20.ELs

MySQL数据库服务器逐渐变慢分析

第一步 检查系统的状态 1.1 使用sar来检查操作系统是否存在IO问题 #sar -u 2 10 — 即每隔2秒检察一次,共执行20次. [[email protected] tester]# sar -u 2 1010:51:22 AM CPU %user %nice %system %iowait %steal %idle 10:51:24 AM all 13.74 0.00 5.60 42.49 0.00 38.17 10:51:26 AM all 20.15 0.00 11.99 43

mysql插入数据会变中文

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Lucida Grande"; color: #000000 } table.t1 { border-collapse: collapse } td.td1 { border-style: solid; border-width: 1.0px 1.0px 1.0px 1.0px; border-color: #cbcbcb #cbcbcb #cbcbcb #cbcbcb; pad

第 十 九 天 :架 构 下 Apache 的 基 本 配 置

小Q:我们都希望喝酒的时候有个人会深情的看着我温柔的说,少喝点,伤身体, 麻痹现实中却总是有个煞笔在旁边吼,闹啥那,养鱼啊,喝完...... 今天国庆放假了,大家都回去了,剩我自己在宿舍默默的奋斗,挺孤单的:不过我一直告诉自己强者往往是孤独的,我做不了强者,不过我也要能适应这分孤独: 今天主要是紧接着前几天LAMP架构和discuz论坛来配置Apache的各个配置模块, 来实现服务器网站的一些配置. Apache 切割日志: 底部有截图介绍 有时候我们访问一个网站,随便点几下,就会在他的日志文件

第 二 十 二 天 :LNMP 架 构 的 基 本 配 置(一)

小Q:把委屈和泪水都咽下去,输不起就不要输,死不了就站起来,告诉所有看不 起你的人:我很好. LNMP架构和LAMP架构一样,其实都是配置web服务的nginx或Apache中的虚拟主机配置文件:因为配置Apache的时候用了很长时间去理解,所以在nginx时,感觉轻松好多,配置的内容都一样:现在介绍第一部配置. nginx用户认证: [后有截图] 同Apache的认证类似:比如我们要在后台管理界面进行双重加密(即在www.test.com/admin.php界面加一个用户认证). cd   /

第 二 十 二 天 :LNMP 架 构 的 基 本 配 置(二)

小Q:生活从来都不容易,当你觉得容易的时候,肯定有人再替你承担属于你的不 容易:而身为我们的我们,应该扛起那些不容易,至少至少要扛起自己的. 同样的说法,nginx配置是比Apache简单,所以可以称为新一代的主流:紧接着上一节,我们还有几个配置要说一下.期间千万要配置完之后检查·加载,有时候出的错累积太多,真的都不想去检查,但是工作中有必须得去检查. 配置静态缓存文件: [后有截图] 第一加快响应速度:第二节省我们带宽. 进入虚拟主机配置文件: vim    /usr/local/nginx/