维基百科(Wikipedia)是一个基于Wiki技术的全球性多语言百科全书协作计划,同时也是一部在网际网路上呈现的网路百科全书,其目标及宗旨是为全人类提供自由的百科全书──用他们所选择的语言来书写而成的,是一个动态的、可自由和的全球知识体。
wikipedia在IT架构方面的经验,对于我们构建网站极有参考价值,因为wikipedia提供的这些信息非常详细和确凿。下面是我学习Wikipedia架构后的一些总结。
1、Wikipedia的相关数据
峰值每秒钟3万个HTTP 请求
每秒钟 3Gbit 流量, 近乎375MB
350 台 PC 服务器
Wikipedia的数据来源来自Wikimedia architecture.pdf
2、系统架构图
3、GeoDNS
这个GeoDNS可能比较新奇,实际上原理很简单,GeoDNS是一个为BIND写的40行的小程序,可以让DNS解析的时候考虑地域因素——让用户能够访问离他地域最近的Web服务器
4、用LVS实现负载均衡
WikiPedia 用 LVS 做负载均衡, 是章文嵩博士发起的项目,也算中国人为数不多的在开源领域的骄傲啦。LVS 维护的一个老问题就是监控了,维基百科的技术人员用的是 pybal.
5、用Lighttpd做图片服务器
Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好,并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用户是非常重要的,因为迁移到lighttpd就必须面对这些问题。
6、使用MediaWiki软件
对 MediaWiki 的应用层优化细化得快到极致了。用开销相对比较小的方法定位代码热点,参见实时性能报告,瓶颈在哪里,看这样的图树展示一目了然。另外一个十分值得重视的 经验是,尽可能抛弃复杂的算法、代价昂贵的查询,以及可能带来过度开销的 MediaWiki 特性。
7、大量缓存(Cache)
维基百科网站成功的第一关键要素就是 Cache 了。CDN(其实也算是 Cache) 做内容分发到不同的大洲、Squid 作为反向代理. 数据库 Cache 用 Memcached,30 台,每台 2G 。对所有可能的数据尽可能的Cache,但他们也提醒了 Cache 的开销并非永远都是最小的,尽可能使用,但不能过度使用。
squid,~17台,P4,3~4GB内存,1U机架服务器,FedoraCore3;Squid 大部份应付未登入使用者的需求,快取命中率达75%,有效的减轻Apache的负载。负载平衡是以Round-Robin DNS法來达成。
8、用Mysql数据库集群
MediaWiki 用的DB 是 MySQL. MySQL 在 Web 2.0 技术上的常见的一些扩展方案他们也在使用。 复制、读写分离......应用在 DB 上的负载均衡通过 LoadBalancer.php 来做到的,可以给我们一个很好的参考。
9、Web服务器
Apache,49台,P4,1~4GB内存,1U机架服务器,FedoraCore2;运行PHP,且搭配Turck的PHP快取系統以增进效能。这些服务器以NFS共享工作目录,以实现同步运作。
参考资料
Wikipedia meta