自从2009年8月发布了第一篇关于“Stack Overflow 架构”方面的文章,Stack Overflow已经发生了很大的变化。那篇文章更多关注的是Stack Overflow如何解决网站的扩展性(scale-up)问题,而经过几年的发展,Stack Overflow已经长大成人,成长为了大型网站。
现在与2009年相比,Stack Overflow每月独立访问用户翻了一倍,超过1600万;每月PV翻了近6倍,达到9500万。
Stack Overflow新增了很多站点,比如Server Fault, Super User等,共有43个不同站点组成了Stack Exchange Network,可谓硕果累累,迅猛增长。
Stack Overflow的变化翻天覆地,而不变的是他们开放的心态,所以才有了这篇架构分享的文章。最近,他们写了一系列文章分享他们如何应对这样的快速增长。
穿越时空,我们来看看有哪些明显的变化?
更多:更多的用户,更多的PV,更多的数据中心,更多的站点,更多的开发者,更多的操作系统,更多的数据库,更多的服务器...
Linux:Stack Overflow因使用Windows系统而著称,现在他们使用越来越多的Linux服务器,比如HAProxy(负载均衡), Redis(NoSQL数据库), Bacula(数据备份系统), Nagios(远程监控软件), 日志, 路由器都运行于Linux系统,几乎所有需要并行处理的功能都是由Linux处理(这句话的翻译可能不准确)。
容错:Stack Overflow使用了两条不同的互联网线路,增加了更多的冗余服务器,将一些网站服务运行于第二个数据中心。
NoSQL:Redis作为整个网站的缓存层。这是一个巨大的改变,以前并没有将缓存作为一个独立的层分离出来。Redis运行于Linux。
遗憾的是,一些我关注的问题并没有从中找到答案,比如面对这么多不同的系统,如何解决多租户的问题(Multi-tenancy 是一种软件体系结构,在这种体系结构中软件运行在 software as a service 服务商的服务器上,服务于多个客户组织即 tenant)。但是,从中我们依然可以学到很多。下面是收集的一些数据列表:
The Stats
1.95 Million Page Views a Month
2.800 HTTP requests a second
3.180 DNS requests a second
4.55 Megabits per second
5.16 Million Users - Traffic to Stack Overflow grew 131% in 2010, to 16.6 million global monthly uniques.
Data Centers
1 Rack with Peak Internet in OR (Hosts our chat and Data Explorer)
2 Racks with Peer 1 in NY (Hosts the rest of the Stack Exchange Network)
Hardware
10 Dell R610 IIS web servers (3 dedicated to Stack Overflow):
1x Intel Xeon Processor E5640 @ 2.66 GHz Quad Core with 8 threads
16 GB RAM
Windows Server 2008 R2
2 Dell R710 database servers:
2x Intel Xeon Processor X5680 @ 3.33 GHz
64 GB RAM
8 spindles
SQL Server 2008 R2
2 Dell R610 HAProxy servers:
1x Intel Xeon Processor E5640 @ 2.66 GHz
4 GB RAM
Ubuntu Server
2 Dell R610 Redis servers:
2x Intel Xeon Processor E5640 @ 2.66 GHz
16 GB RAM
CentOS
1 Dell R610 Linux backup server running Bacula:
1x Intel Xeon Processor E5640 @ 2.66 GHz
32 GB RAM
1 Dell R610 Linux management server for Nagios and logs:
1x Intel Xeon Processor E5640 @ 2.66 GHz
32 GB RAM
2 Dell R610 VMWare ESXi domain controllers:
1x Intel Xeon Processor E5640 @ 2.66 GHz
16 GB RAM
2 Linux routers
5 Dell Power Connect switches
Dev Tools
1.C#: Language
2.Visual Studio 2010 Team Suite: IDE
3.Microsoft ASP.NET (version 4.0): Framework
4.ASP.NET MVC 3: Web Framework
5.Razor: View Engine
6.jQuery 1.4.2: Browser Framework:
7.LINQ to SQL, some raw SQL: Data Access Layer
8.Mercurial and Kiln: Source Control(分布式版本控制系统)
9.Beyond Compare 3: Compare Tool(文件比较工具)
Software and Technologies Used
1.Stack Overflow uses a WISC stack via BizSpark
2.Windows Server 2008 R2 x64: Operating System
3.SQL Server 2008 R2 running Microsoft Windows Server 2008 Enterprise Edition x64: Database
4.Ubuntu Server
5.CentOS
6.IIS 7.0: Web Server
7.HAProxy: for load balancing(高性能的负载TCP/HTTP均衡器)
8.Redis: used as the distributed caching layer.(作为分布式缓存层的NoSQL数据库)
9.CruiseControl.NET: for builds and automated deployment(.NET平台的持续集成工具)
10.Lucene.NET: for search
11.Bacula: for backups(开源的数据备份系统)
12.Nagios: (with n2rrd and drraw plugins) for monitoring(监视系统运行状态和网络信息的远程监控软件)
13.Splunk: for logs(日志分析工具)
14.SQL Monitor: from Red Gate - for SQL Server monitoring
15.Bind: for DNS
16.Rovio: a little robot (a real robot) allowing remote developers to visit the office “virtually.”
17.Pingdom: an external monitor and alert service.(网站监控服务及网站速度测试工具)
External Bits
Code that is not included as part of the development tools:
1.reCAPTCHA(用于验证码验证,已被Google收购)
2.DotNetOpenId(.NET 平台上的 OpenID 实现方案)
3.WMD - Now developed as open source. See github network graph (轻量级所见即所得编辑器)
4.Prettify(代码高亮显示)
5.Google Analytics
6.Cruise Control .NET
7.HAProxy(负载均衡)
8.Cacti(网络流量监测图形分析工具)
9.MarkdownSharp(Markdown文本处理器的C#实现)
10.Flot(基于JQuery的纯JavaScript实现的绘图库)
11.Nginx(反向代理服务器)
12.Kiln(分布式版本控制系统)
13.CDN: none, all static content is served off the sstatic.net, which is a fast, cookieless domain intended for static content delivered to the Stack Exchange family of websites.
(没有使用CDN,用一个专门的域名sstatic.net传递所有的静态内容)
Developers and System Administrators
14 Developers
2 System Administrators
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计划,所以不需要付这么多钱,但是要付的话,最多也就是这么多。
转载于:https://blog.51cto.com/yerik/1159519