大型高并发高负载网站的系统架构浅淡


大型高并发高负载网站的系统架构浅淡

怎么样才能高效的开发程序?有一部份人会说,程序就是堆积木,到网上找些模块来用就行了;有另一部份人会说,可以找一些现成的框架与开源软件下载来修改就行了。大家都说的没错,现在国内的开发人员普遍不会考虑程序的性能与代码的大小,只图快速完成任务就OK了。

那么怎样才能高效的开发出功能强大、稳定性高、安全性强、负载量重的程序呢?很多程序开发相关人员可能从未想过这方面的问题。当今的程序是越来越大,很多网站代码都差不多,使用的框架太尽相同,代码中包含了太多无用的代码模块,我相信也有一部分程序开发人员对自己所使用的框架是怎么运行的都不太清楚。清楚是框架是怎么运行的太麻烦了,会用就行了,这话说的没错,但也别忘了程序代码可以随便COPY,但程序真正的精髓是思想,思路是无法COPY的。

本文我将以Nginx + Php + MySql + Memcached来讨论一下如何设计高负载的网站系统架构。

以前我一直以为大型高并发高负载的网站瓶颈是MYSQL,后来我从一高人那了解到一种全新的设计思想才知道原来大型网站的瓶颈是WEB服务器连接数。

高人的设计思想是,动态网站的内容第一次生成后就存储到Memcached当中,当第二次有连接请求时,PHP程序先判断此页面的内容是否在Memcached当中有存在,若存在则直接输出Memcached当中所对应的页面内容。那么又会有人问:要是我的页面需要即时更新怎么办了?对于这个问题,我想更新不会整个页面当中的内容全更新吧,就拿论坛来说,我们需要即时更新访问人数,而页面的内容并没有做修改,这时怎么办才好了?这时我们可以在显示访问人数处作一个标记,并且记录访问数量时并不时时同步更新到数据库当中,而先更新来到Memcached当中,再将需要更新的SQL语句也存储到Memcached异步SQL更新的队列当中,当有人访问页面时,再从Memcached当中获取访问人数,再替换标记就OK了。

我可能没有说清楚,但这种东西讲不清楚,我最后将总结的几句写下。

一、        数据库设置1台MASTER数据库只写,N台SLAVE数据库只读。
二、        记住MASTER数据库不创建索引,而SLAVE数据库定要创建大量索引。
三、        页面的生成可采用静态,若非要采用动态请加上Memcached。
四、        非即时需更新与新增的SQL采用异步更新到MASTER库,异步的SQL存储到Memcached当中,定时或条件触发更新到主库当中。
五、        存储到Memcached当中的数据尽可能的小,不要存储大数组,若非来存储大数组,请拆分成多个KEY分别进行存储。
六、        MYSQL 与Memcached不对外网,只对WEB服务提供内网服务。
七、        不采用SESSION,采用COOKIE加密码校验算法,非要采用SEESION请将SESSION存储到数据表内存表或Memcached当中。
八、        多服务器WEB程序与WEB服务器做境像,采用DNS轮循定位。
九、        尽可能的少写代码,能重复使用的代码尽可能的重用,代码尽可能的精短高效,以追求精益求精为宗旨。
十、        动态页面(PHP JSP ASP)与静态页面(HTML JPG GIF PNG)最好分服务器专门提供服务。
十一、        有条件的话静态文件或大图片文件有条件可采用CDN服务。
十二、        有C语言技术做后盾的话可用C语言开发PHP扩展。

当然以上的办法较适合服务器资源有限,若是财大气粗的您还将会有很多的解决方案,在此就不描述了。
顺便借此来推销一下本人使用多年的PHP框架,您也还可以下载wcore框架试试http://www.hoojar.com/tmp/wcore.zip希望能对您在程序设计思想上有所帮助。谢谢!
言谈不足,望众互教,众献良思,技艺超群,广泛学习,授教如众。

转载:http://www.hoojar.com/view-lore.php?lid=66963  大型高并发高负载网站的系统架构浅淡