您的位置:知识库 » 开源

分享Poppen.de架构经验

发布时间: 2010-07-23 12:15  阅读: 1275 次  推荐: 0   原文链接   [收藏]  

  Poppen.de是德国的一家婚姻中介网站,对于该网站的统计数字有:1)200万的用户数,2)2万的并发用户数,3)每天产生30万的私信,4)25万的日登录用户数。这样的网站也就是个中型规模的网站,下面看看这个网站在技术应用及经验方面带来的东西。

  原文链接:http://highscalability.com/blog/2010/4/12/poppende-architecture.html

  Nginx

  Poppen.de使用nginx作为web server,包括静态请求和动态请求。特别的,Poppen.de通过nginx来直接从memcache中获取缓存的动态页面内容而不需要经过PHP,一个例子就是请求用户信息页。对于缓存整个动态请求页面内容,这是一种方法,更常见的是使用squid、varnish来做。在请求用户上传图片的处理方面,Poppen.de是将图片上传到统一的文件服务器,而前端的nginx在请求时会做本机的cache处理(不知道它的请求是如何落到nginx上的,如果是随机的,多台nginx本机cache的数据就重复了,有些浪费,但也最简单),对于图片量不大的情况倒是简单的处理方法。

  PHP-FPM

  Poppen.de使用了PHP 5.3.x、APC和PHP-FPM,PHP-FPM是启用了100个进程,也是个标配。使用APC使得PHP能减少30%的CPU和内存消耗。Poppen.de竟然使用了symfony作为开发框架,出发点自然是希望快速开发,但从我的使用经验来说,symfony还是太重的一个框架,无论是使用上还是性能上都不是最优的PHP框架。当然,它也提到,框架是有性能损失的,但还可以接受。就PHP框架来说,尽管开源的框架一筐一筐,但没一个真正流行的,而重复的轮子却不停的出现,此种现象很耐人寻味。Poppen.de还使用了Facebook出品的XHProf来分析PHP程序的性能问题。

  Mysql

  Poppen.de的数据存在Mysql中,主要就是主从模式。由于现在的数据量并不大,并没有做数据分区处理,当数据量上来时,像垂直和水平分区自然是扩展性能的简单方式。稍显意外的是,Poppen.de使用由4台机器构成的NDB cluster来存储写频繁的数据,比如某个用户页都被谁访问过这样的统计信息。如果NDB cluster能被一些大型应用证明其稳定性,对于解决写频繁的应用(比如Social game?)来说是个不错的选择。Poppen.de的表大多是MyISAM,自然不是很好的选择,不过他们竟然有计划转向XtraDB(自然是经过测试比较后的结果),真是够有个性的。尽管XtraDB很优秀,但官方的innodb显然会更成熟,并且新版也在吸收如XtraDB等存储引擎的优点,选择一个不明前途的第三方引擎还是有些风险的。

  Memcached

  cache为王,Poppen.de有45GB、51个结点的cache数据。并且还做了一个系统,当一个表数据变化时,自动作废cache数据,好处自然是减少了应用处理。当然,也可以做一个穿透的数据访问中间件来做cache填充与失效的事情(就像DAL)。Poppen.de似乎也在考虑使用Redis或MongoDB等来将cache操作和数据操作自然的绑在一起。

  RabbitMQ

  Poppen.de使用了RabbitMQ来做一些异步job处理。特别有趣的是,它使用了PHP-FPM的一个专有特性,即fastcgi_finish_request() 函数,能够在请求结束前,在把结果返回到客户端后,异步的做诸如连接关闭、发送消息的处理。在消费消息方面,Poppen.de使用了最简单的山寨方法,就是同时运行多个PHP脚本,每个脚本在消费250个job后退出,然后由监控脚本再新起一个消费脚本。当处理不过来时,或者多加脚本或者多加机器来解决。

  其他

  Poppen.de使用CouchDB来存储log而是代替人工直接分析日志文件,这个对于单机的日志分析或许会更快更方便些,并且他们有计划将日志可视化,但他们想必现在还没打算做分布式的日志存储与分析的工作。Poppen.de使用了叫做Red5的东西来存储视频(我是不了解了)。Poppen.de还使用Graphite来做数据监控,包括如Memcached的命中率、RabbitMQ状态监控、各机器的负载监控等。当一个网站有一定规模后,这种监控是必不可少的,而通常也是拿现成的工具使用,在必要时做些功能上的扩展。Poppen.de还使用Tsung来做基准测试,比如HTTP请求及各Mysql存储引擎方面的测试。

  经验

  1、背靠大树好乘凉,选择技术和工具时要挑成熟、活跃的社区,这样有问题也有途径及时解决。
  2、了解你所使用的技术的优缺点,发挥它的优点,避开它的缺点。
  3、扩展工具,让工具更好的满足你。
  4、敢于尝试。可以看到,越是大公司,在技术选型时越是缩手缩脚,生怕外面的东西不成熟有问题,总相信自己能造成更好的自己能掌控的轮子。而看看Poppen.de上面提到的东西,有多少是你不知道没用过的?再感慨一下,每天都有大量的开源项目出现,一些因为被人关注而众人拾柴,东西就存活下去,一些尽管东西很好但因为无人问津,也就悄无声息的死去。
  5、度量一切,对网站的各个模块、系统、流量等数字有清晰的认识。
  6、经验积累、全面把握。不要等到上线时发现新模块的功能不是需要的,不要等到上线时发现模块性能不满足需求。

  总结

  Poppen.de还做了些展望,比如将更多的使用erlang产品,这要是个国内的公司,估计很多人会膜拜的。而总结来说,Poppen.de分享的东西真是很实在很实用,是个很开放也很技术流的公司,对中小规模的网站来说是可充分借鉴的。

0
0
标签:网站架构 PHP

开源热门文章

    开源最新文章

      最新新闻

        热门新闻