8w同时连接数的DISCUZ论坛结构改进
魔力游的论坛达到8w同时连接数 原有的架构已经无法满足如此巨大的访问请求 原有结构 前端使用F5进行负载均衡 将...
扫描右侧二维码阅读全文
21
2008/05

8w同时连接数的DISCUZ论坛结构改进

魔力游的论坛达到8w同时连接数
原有的架构已经无法满足如此巨大的访问请求
原有结构
原有结构
前端使用F5进行负载均衡
将负载分摊至4台WEB SERVER
然后WEB SERVER同时连接后端的MYSQL服务器
瓶颈很明显在于MYSQL服务器

第1次改进
使用LVS和NFS进行MYSQL负载分摊
增加两台WEB SERVER
由于WEB的CPU负载也非常高.所以增加WEBserver的量来分摊CPU LOAD.
在后端使用LVS分发读写请求到后面的两台MYSQL服务器
然后MYSQL的表数据从同一的集中存储中获取
这次改进的问题很明显
锁表
由于MYSQL在执行写操作时会进行锁表
所以运行没多久,MYSQL的库文件就损坏了

第2次改进
改进后的结构
接下来我们考虑过使用NDB作为存储后端代替NFS
但是由于数据库量太大
在进行数据导入时,超出内存
无法将原有的数据库导入到NDB中
所以我们只能使用Mysql proxy + master/slave的方式
进行读写分离
以求分摊负载
由于没有时间进行discuz的程序段的改造
所以只能使用对程序透明的mysql proxy方式进行负载分摊
这次改进的缺点在于对于只读服务器的分摊仍旧是在配置里手工写的
而不能通过程序来进行自动分发.

第3次改进
LVS+PROXY
由于考虑到服务器的自动维护性
以及服务器数量的限制
我们把LVS加在两台read only的mysql服务器上
加上heat beat之后.任何一个只读节点的故障都不会影响
今后如果扩展mysql的IO能力
只要在mysql机群内加入新的mysql slave服务器
加入LVS之后便可以了

Last modification:November 26th, 2018 at 04:16 pm
If you think my article is useful to you, please feel free to appreciate

10 comments

  1. 我晕菜了

    我是真的晕菜了,才8万就那么多服务器 你们好阔气好有钱 我10万才4个服务器,那么多APACHE………………又不能吃 其中一些无论换成nginx还是lighthttpd来搭桥都会好得多
    光改PHP.INI没有用 discuz的session是自己写的 不是PHP的 在数据库中 你改那个对性能影响基本上不大
    需要修改discuz的代码

  2. flashjay

    我想知道你的图,是用什么工具画的:)

  3. Michael Field

    visio画的

  4. cnhulk

    弱弱的问一句论坛session如何共享?

  5. Johnny Woo

    把PHP.INI里面session配置从原来的file改成memcache
    使用memcached来做共用的session保存

  6. fire9

    好像MYSQL-PROXY的性能不是很好哦,为什么不考虑使用缓存技术呢。

  7. Johnny Woo

    上传目录是NFS的
    6台服务器应该基本上是NFS的极限了
    再多服务器,可能就需要重新修改用户上传部分了

  8. xiaoxin

    你前端的apache好多,如果没对discuz的代码做更改,我想知道论坛的附件你放在哪里了呢?是不是用一个NFS SERVER,所有的apache全mount在这上面?

  9. Johnny Woo

    你点它就会另外打开大的了.

  10. dyfire

    都是經驗之談,只是圖片太小,看不清楚~~: ,是否有清楚的 圖片呢~

Leave a Comment