在开始这个系列文章之前,我先介绍一下该线上系统的用途以及MySQL服务器的架构。
一、线上系统介绍
该系统是一个面向律师事务所、会计师事务所(德勤)、大型企业(如IBM,GM)、高校(浙大)以及个人提供大陆地区法规、案例及相关新闻评论的信息检索及浏览系统,主要提供信息检索、订阅及在线浏览服务。
系统使用主要PHP语言开发,数据分析及处理部分使用Java和Python;
此外数据检索使用了HP的“绯闻”不少的Autonomy以及Sphinx;
除此之外系统还使用了Smarty,Jquery和ExtJS;
二、MySQL服务器架构
两台性能较好内存较大的数据库做Master-Master,使用MySQL mmm做管理及监控(监控另外还用了Nagios,Zabbix),其中一台数据库M1用作前台的DML操作,另外一台数据库M2用作CMS录入数据使用。
此外有两台Slave,其中S1用于搜索引擎(Autonomy和Sphinx)fetch数据使用,另外一台Slave数据库S2用于数据分析、数据处理及数据备份;
总体上来说,运行稳定,偶尔出现过的复制Duplicate key也是由于代码写的有问题导致的。
但是,随着用户访问量及数据量从去年10月份开始暴涨,数据库的performance正逐渐成为整个系统的主要性能瓶颈;所以老板决定了——加机器,做读写分离
鉴于代码比较乱,在代码层引入读写分离及load balance的成本较大,所以我们考虑使用Proxy工具来实现;
主要的两个选择是:1.MySQL proxy;2.Amoeba;两个工具目前都没找到线上使用实例(如果您知道的话,烦请告知一下,不胜感激!!)
虽然从文档、维护等各方面考虑最后决定使用MySQL proxy,但是因为MySQL proxy仍然处于alpha 0.8.3版本,而且MySQL手册上的“MySQL Proxy is currently an Alpha release and should not be used within production environments”却使得我一直很忐忑。
但路是人走出来了,硬着头皮上了
待续....