技术开发 频道

.NET大型Web站点StackOverflow架构分析

  Content

  License: Creative Commons Attribution-Share Alike 2.5 Generic

  Standards: OpenSearch, Atom

  Host: PEAK Internet

  More Architecture and Lessons Learned

  1.用HAProxy取代了Windows NLB,HAProxy成本更低,更易于使用,通过Hyper-V可以很好地运行于512M内存的虚拟机。它工作于服务器群的最前端,对所有的服务器都透明。相比于原来混杂在一起的Windows配置,它运行于一个独立的网络层,更易于维护与故障处理。

  2.没有使用CDN,即使使用像Amazon那样与主机空间捆绑在一起的看起来“便宜”的CDN,实际的费用也是很高的,至少需要1000美元/月。

  3.备份方案有两种,一种用于快速恢复的磁盘备份,一种用于历史数据存档的磁带备份。

  4.SQL Server的全文索引是非常差劲的,所以他们用Lucene.NET。

  5.让人很感兴趣的是他们如何处理访问高峰时的HTTP请求。

  6.所有这些都运行于Stack Exchange平台,那意味着Stack Overflow, Super User, Server Fault, Meta, WebApps, 和Meta Web Apps都运行于同一个软件。

  7.也有一些独立运行的StackExchange站点,服务于那些具有多个专业技能,又不想为了不同的话题在多个站点之间奔波的人。如果你能成为最伟大的主厨,不能因为给你安排了服务员的工作,你就安于现状。

  8.他们疯狂地使用缓存。

  9.未登录用户访问的所有页面都通过Output Caching进行缓存。

  10.每个站点使用三种类型的缓存:本地、站点、全局。

  本地缓存:只能被当前站点的当前服务器访问。

  为了减少网络延时,通常使用HttpRuntime.Cache作为一级缓存,这样可以避免通过网络在缓存服务器上查找的开销。

  缓存内容包含用户会话,视图数的更新。

  直接缓存在内存中。

  站点级缓存:能被同一个站点的所有服务器访问。

  大部分的缓存都在这一级,比如热点问题ID列表,用户支持率。

  缓存数据存储在Redis数据库中。

  Redis速度很快,缓存查找的开销主要在网络传输上。

  缓存数据发送至Redis之前会被压缩。为什么要压缩呢?因为CPU资源绰绰有余,而且大部分缓存数据是字符串,压缩率会很高,何乐而不为呢。

  Redis服务器上的CPU使用率是0%。

  全局缓存:被所有站点和服务器共享。

  缓存内容包含收件箱,API使用限额,一些全局设置等。

  缓存于Redis数据库中。

  大部分缓存项目在超过缓存时间之后会自动过期(通常几分钟),不需要进行删除操作。当需要让一个特定的缓存失效,会通过Redis消息系统给一级缓存发送删除通知。

  Joel Spolsky(Stack Overflow的创始人)并不是微软的忠诚分子,他不负责技术决策,使用微软软件考虑的也只是性价比(这句可能翻译不准确)。Hacker News上一些评论者的说法需要纠正。

  对于IO系统,他们选择的是Intel X25 solid state drives(SSD硬盘)的RAID 10磁盘阵列,这样的磁盘阵列,保证了可靠性。这个SSD硬盘用起来感觉不错,而且价格比FusionIO的便宜。

  使用的这些微软软件,如果全部购买的话,总费用大概在24.2万美元。由于Stack Overflow参加了微软的Bizspark计划,所以不需要付这么多钱,但是要付的话,最多也就是这么多。

0
相关文章