转自:http://blog.yening.cn/2007/03/25/226.html
作者:叶宁
这是一次演讲的记录。关于这次演讲的ppt文档链接:http://pub.yening.cn/w/peash-2007-3-25.ppt
==================================
主题:大型、高负载网站架构和应用初探
时间:30-45分钟
开题:163,sina,sohu等网站他们有很多应用程序都是PHP写的,为什么他们究竟是如何能做出同时跑几千人甚至上万同时在线应用程序呢?
挑选性能更好web服务器
单台 Apache web server 性能的极限
选用性能更好的web server TUX,lighttpd,thttpd …
动,静文件分开,混合使用
应用程序优化,Cache的使用和共享
常见的缓存技术
生成静态文件
对象持久化 serialize & unserialize
Need for Speed ,在最快的地方做 cache
Linux 系统下的 /dev/shm
tmpfs/ramdisk
php内置的 shared memory function /IPC
memcached
MySQL的HEAP表
多台主机共享cache
NFS,memcached,MySQL 优点和缺点比较
MySQL数据库优化
配置 my.cnf,设置更大的 cache size
利用 phpMyAdmin 找出配置瓶颈,榨干机器的每一点油
集群(热同步,mysql cluster)
集群,提高网站可用性
最简单的集群,设置多条A记录,DNS轮询,可用性问题
确保高可用性和伸缩性能的成熟集群解决方案
通过硬件实现,如路由器,F5 network
通过软件或者操作系统实现
基于内核,通过修改TCP/IP数据报文负载均衡,并确保伸缩性的 LVS以及 确保可用性守护进程ldirectord
基于 layer 7,通过URL分发的 HAproxy
数据共享问题
NFS,Samba,NAS,SAN
案例
解决南北互通,电信和网通速度问题
双线服务器
CDN
根据用户IP转换到就近服务器的智能DNS,dnspod …
Squid 反向代理,(优点,缺点)
案例
--------------------------------------------------------------------------------
附记:
pea上海的负责人h058在3月1日就邀请我希望我在pea上能说点什么,虽然我觉得我还是算健谈,但是觉得需要在如此正规的场合做演讲我还是真没有经验的,就连ppt我都不会做。一开始h058叫我说说linux下svn的部署,但是我觉得这个题目太浅了,也没有什么花头可以说。于是就想说点其它的。正好这段时间自己对服务器部署方面和应用程序优化这方面非常感兴趣,也想认真归纳了一下,于是就敲定这个题目了。
写大纲非常快10号左右基本上要说的话题都定下来了,虽然要说的东西基本上都非常熟悉如MySQL,Apache,包括集群的两个应用LVS 和Haproxy自己也亲自做过试验,但是还是考虑到演讲的过程中会有些朋友提出一些比较刁难的问题,自己不懂,于是还是做了认认真真地对每个细节做足了功课,并且在每天睡醒地时候自己默默地在脑子里面像电影那样过一片。
3月24日,交大惠谷创业中心,shopex 407 培训教室….. PEA Shanghai 第七次聚会开始,与会人数约30人,还是10多名php的培训学员.
一开始是无喱头同学演讲的”PHPCMS系统的设计”,可能是对与会人员参与的情况了解不足,在系统宏观讲解和一些程序处理细节上觉得重点没有突出,到处着墨,洋洋洒洒18页Word文档,近1小时的演讲我已经听得已经云里雾里了,环顾四周,身边来培训php的一位小mm已经在偷偷睡觉了…..
15:55 分,无喱头同学觉得自己说得实在有点深了,主动提出中止演讲,休息十分钟,到我上场。
演讲意外的顺利,35分钟,从开题到留homework,行云流水,一气呵成,连水都没有喝一口,其中加入了不少极兴发挥,那时候觉得情绪非常激昂,浑身充满力量,唯一不爽的就是喉咙有点痛,呵呵
当我宣布“好好学习 天天向上”演讲结束后,同学们爆出热烈地掌声,那时,我深深地吐了一口气,压在心里的多日的大石终于落下来了,演讲看起来非常成功。
在演讲的过程中,我发现刚才睡觉的小MM居然也在聚集汇神地听我说话,让我值得感动的是发现还有不少同学在记笔记,没有人打瞌睡,结束还是很多人问我拿ppt。我问马哥我说得如何,马哥评价说“条例清晰,思路明确,语速平稳,真的不错!”,h058也称赞道我把现场的气氛调动起来了。嗯,那基本上可以肯定这次演讲还是做得不错了,自己给自己打分的话,88分!
回想一下,其实还觉得有一些不足的,觉得语速还是偏快了,没有抑扬顿挫感觉。并且声音太大,弄得自己喉咙不舒服。情绪还不是太稳定,稍微有点激动了。还有不知道是大家全都熟悉我说的话题还是我说得很透彻,基本上没有人提出问题。而我觉得好一个好的讲师,应该能调动大家的积极性,让大家一起参与话题的讨论中来,这点看来还需要继续锻炼。
通过这次演讲,发现自己在做一些即兴发挥的话题还有演讲方面等还是有点天赋和潜力可挖,以后一定要多多参加锻炼。并总结出要将一个演讲做好,要准备以下几点:
1) 精心的准备(包括选题和对听众的了解)
2) 稳定的心态和平稳的情绪
3) 热诚,全付身心的投入
4) 平时语言和谈吐技巧的积累
5) 想办法让听众参与到你的话题中.
对此次演讲相关文章也转引于此。(文章链接:http://atman.memoab.com/articles/194)
=====================
《大型高负载网站架构和应用初探》, 他总结了很多信息和数据,感谢叶宁的辛劳成果. 这里我也想就此PPT写些自己的感想.
老牌的互联网公司,如Yahoo! ,网易等因成长和壮大的时间曲线较长,所以你可以看到多数采取的方式是以频道或项目来分割开, 避免站点臃肿到不可控制. 基本的架构方式为:
前层的反向代理加速—Web Server—Cache Server—DB
而负载均衡的方式也使用了如DNS轮循或部分硬件负载均衡设备来承担大流量.
叶宁在ppt第一部分提到了性能更好的 Web服务器, 世面上Web Server“品种繁多”,挑选适合自己的尤其重要. 一般的Web Server多是在User Layer, 但在RedHat 9.0时我也使用了TUX(kernel Layer层面上Web Server). 页高速缓冲存储器通过DMA方式将置换数据直接传导网络,实现了零拷贝的操作. 对小字节数据块静态操作,有着非常优良的体验; but, 如果崩溃的话,呵呵 这后果也是….
注: DMA的方式因为减少了CPU的参与, 而且DMA池应用于Cache System也是可行的,RedHat为TUX也在往能使用减少User Layer参与的情况下, 尽量让其在User Layer 守护, 我想这个思路是可以应用与除了web server以外的应用上.
除了一些商业的Web Server性能不错的外, 有些做Web 加速和代理的软件我们也放在一起介绍,
如Lighttpd, Nginx,HAproxy.
这三个应该是现在应用最多的前层软件, Lighttpd使用比较著名的例子如Flickr, tudou.com
Nginx 业内站点如sina, 51.com 等都是应用它的.
ppt第二部分提到的是缓存系统. 我在这里也说下自己的意见:
Linux在kernel 2.5后就将/dev/shm与tmpfs使用了同个struct 结构. 在以前很多文章中我都看到要用shm来做cache存储的地方,但问题是没有仔细考虑过机器的内存大小,使用内存情况,且也没有能限制shm被做为 cache使用的大小限制! 我更推荐使用memcached和对PHP优化上.
最后提下负载均衡环境, 在提供Web应用的站点中使用的方式是和¥挂钩的, 如LVS, HAProxy, 加上Linux-HA项目, 完全能撑起千万的流量.
另一种就是使用硬件设备, 如F5 BigIP, NetSclaer设备.
当然Web 2.0的公司提倡DIY的精神也未尝不可,一台1U的IA32硬件设备, 板子需要是为fw,switch设计的, 使用FreeBSD操作系统, 主要是FS和slab的改写会是技术活 .