什么样的硬件设备在支撑 Stack Overflow?

Stack Overflow 是使用 ASP.NET 开发的。

我更愿意把 Stack Overflow 看作是能够运行于大规模数据下,但本身并不算大规模的(running with scale but not at scale)。意思是我们的网站非常有效率,但至少目前为止,我们的规模还不够“大”。让我们通过一些数字来介绍Stack Overflow当前是一个怎样的规模吧。以下是一些核心的数字,来自于不久前在一整天(24小时)内的统计,准确说是2013年11月12日。这是一个典型的工作日,并且只统计了我们活动的数据中心,也就是我们自己的服务器。那些对CDN节点的请求和流量被排除在外,因为它们并不直接访问我们的网络。

负载均衡器接受了148,084,833次HTTP请求

其中36,095,312次是加载页面

833,992,982,627 bytes (776 GB) 的HTTP流量用于发送

总共接收了286,574,644,032 bytes (267 GB) 数据

总共发送了1,125,992,557,312 bytes (1,048 GB) 数据

334,572,103次SQL查询(仅包含来自于HTTP请求的)

412,865,051次Redis请求

3,603,418次标签引擎请求

耗时558,224,585 ms (155 hours) 在SQL查询上

耗时99,346,916 ms (27 hours) 在Redis请求上

耗时132,384,059 ms (36 hours) 在标签引擎请求上

耗时2,728,177,045 ms (757 hours) 在ASP.Net程序处理上

(我觉得应该发表一篇文章介绍我们如何快速采集这些数据,以及为什么值得耗费精力去获取它们)

注意以上数字包括了整个Stack Exchange网络,但那并不是我们全部的。除此之外,这些数字也仅仅来自于我们为了检测性能而记录的HTTP请求。“哇,一天有这么多个小时,你们怎 么做到的?”我们把这叫做魔法,当然有些人喜欢说成“许多个有多核处理器的服务器”,但我们依然坚持这是魔法。以下是那个数据中心里运行Stack Exchange网络的设备:

4个MS SQL 服务器

11个IIS服务器

2个Redis服务器

3个标签引擎服务(任何针对标签的请求都会访问它们,比如/questions/tagged/c++)

3个ElasticSearch服务器

2个负载均衡器(HAProxy)

2个交换机(Nexus 5596和Fabric Extenders)

2个Cisco 5525-X ASA (可看作是防火墙)

2个Cisco 3945 Router

有图有真相:

我们不仅仅运行网站,旁边架子上还有一些运行着虚拟机的服务器和其他设备,它们并不直接服务于网站,而是进行部署、域名控制、监控、操作数据库等其他工作。上面列表中的两个数据库服务器之前一直都是用作备份,直到最近才作为只读的负载(主要用于Stack Exchange API),于是我们可以不需要太多考虑便继续扩大规模了。Web服务器有两个分别用于开发和存储元数据,运行负载非常低。

核心设备

如果除去那些多余的设备,以下是Stack Exchange运行需要的(保持目前的性能水平):

2个MS SQL服务器(Stack Overflow在一台,其他的在另一台,实际上只需一台机器运行还能有富余)

2个Web服务器(或许3个吧,不过我有信心2个足矣)

1个Redis服务器

1个标签引擎服务器

1个ElasticSearch服务器

1个负载均衡器

1个交换机

1个ASA

1个路由器

(我们真该找个机会尝试这个配置,关闭部分设备,看看极限在哪)

现在还有一些虚拟机运行在后台,执行一些辅助功能,比如域名控制等等。但那都是些相当低负载的任务,我们就不做讨论了,这里把重心放在Stack Overflow本身,看看它是怎样全速加载出页面的。如果你希望更精确全面,可以增加一个VMware虚拟机进来,用于执行所有的辅助工作。这样看来并 不需要很多机器,但是这些机器的规格通常在云上难以实现,除非你有足够多的钱。以下是这些“增强型”服务器简要的配置介绍:

数据库服务器有384GB内存和1.8TB的SSD硬盘

Redis服务器有96GB内存

ElasticSearch服务器有196GB内存

标签引擎服务器有着我们能买得起的最快的处理器

交换机每个端口有10Gb的带宽

Web服务器不是很特别,有32GB内存、2个4核处理器和300GB的SSD硬盘

有些服务器有2个10Gb带宽的接口(比如数据库),其他有4个1Gb带宽的

20Gb的带宽太多余了?你还真特么说对了,活动的数据库服务器平均只利用了20Gb通道中的100-200Mb。然而,像备份、重建等等操作,根据当前内存和SSD硬盘的情况,可以使带宽完全饱和,所以说这样设计还是有意义的。

存储设备

我们目前有大约2TB的数据库存储(第一个集群有18块SSD硬盘—— 总共1.63TB,使用1.06TB;第二个集群由4块SSD硬盘组成—— 总共1.45TB,使用889GB),这是我们在云服务器上需要的(嗯哼,又要吐槽价格了吧),请记住这全部都是SSD硬盘。归功于存储器良好的表现,我 们数据库的平均写入时间是0毫秒,甚至超出我们能度量的精度了。算上内存中的数据以及两级缓存,Stack Overflow中实际的数据库读写比例是40:60。你没看错,60%是写操作(点此了解读写比)。此外,每个Web服务器都有两块320GB SSD硬盘组成的RAID1。ElasticSearch在每个区块大约需要300GB的容量,由于我们会非常频繁的写入或重建索引,SSD硬盘在这里是更好的选择。

值得注意的是我们拥有一个SAN(存储区域网络)连接到核心网络,那就是 Equal Logic PS6110X,它有24个可热交换的10K SAS磁盘和2个10Gb的控制器。这个设备仅仅被VM服务器用作共享储存空间以保证虚拟机高度的可用性,但并不实际支撑网站的运行。换句话说,如果SAN挂掉了,在一段时间内网站甚至无法察觉(只有虚拟机中的域名控制器能感知到)。

整合到一起

这所有的设备在一起是为了什么?性能。我们需要很高的性能,这是一个对我们来说很重要的特性。所有站点的首页都是问题页面,我们内部把它亲切地称作Question/Show(路由的名字)。在11月12日,这个页面平均渲染时间是28毫秒, 而我们的要求是至多50ms。为了使用户获得更好的体验,我们尽一切可能缩短页面加载的时间,哪怕只有一毫秒。在和性能有关的问题上,我们所有的开发人员 都是“锱铢必较”的,这也有助于我们的网站保持快速响应。以下是一些Stack Overflow上热门页面的平均渲染时间,数据还是来自于前面统计的那24小时:

Question/Show: 28 ms (2970万次点击)

User Profiles: 39 ms (170万次点击)

Question List: 78 ms (110万次点击)

Home page: 65 ms (100万次点击) (这对我们来说已经很慢了,Kevin Montrose正在着手修复这个问题)

凭借对每一次请求的时间线的记录,我们能够准确观察到页面加载的过程。我们需要这样的数据,否则难道靠脑补来做决定吗?有数据在手,我们就可以这样监控性能:

如果你对某个特定页面的数据感兴趣,我也很乐意发布出来。但这里我重点关注渲染时间,因为它表示我们的服务器需要多久来生成一个网页。网络传输速度是一个完全不同的话题了(尽管不得不承认它也有很大的关系),不过将来我会讲到的。

增长空间

非常值得一提的是我们这些服务器运行时的使用率都非常低。比如Web服务器的CPU平均使用率为5-15%,内存只使用了15.5GB,网络流量只有20-40Mb/s;而数据库服务器CPU平均使用率为5-10%, 使用了365GB内存,以及100-200Mb/s的网络。这使我们能做到几件重要的事情:在网站规模增大时不至于需要马上升级设备;当出现问题时(错误 的查询、代码以及攻击等等,无论是什么样的问题),我们能保持网站始终不挂;在必要的时候降低功耗。这里有个我们Web层的监控项目:

利用率如此之低的主要原因是高效的代码。尽管本文的主题并不是这个,但是高效的代码对挖掘服务器的性能也有着决定性的作用。做一件非必要的事情所损 失的,居然比无所作为还要多——把这引申到代码中就是说,你需要把它们改进得更高效了。这些损失或者消耗可以是能源、硬件(你需要更多更快的服务器)、开 发人员理解代码更困难(平心而论,这个有两面性,高效的代码并不一定那么简单),以及缓慢的页面渲染——可能导致用户更少地浏览网站其他页面甚至再也不访 问你的网站了。低效率代码带来的损失可能比你想象的大很多。

现在我们了解了Stack Overflow运行在怎样的硬件上,下次可以讨论一下为何我们不使用云。

原文链接: SO 团队成员 Nick Craver 翻译: 伯乐在线 - 蒋生武

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-10-04 01:33:17

什么样的硬件设备在支撑 Stack Overflow?的相关文章

在 Stack Overflow 远程办公是一种怎样的体验?

在Stack Overflow,我们经常会探讨为什么信任远程工作这种方式,而且结果显示,我们已经在远程工作方面取得了不错的成果.事实上,2016年我们针对各个公司开展的一项调查显示,有88%的远程工作人员反映自己高度.全面地参与到了公司的运作过程(就总体的员工参与调查率来看,我公司为85%,而行业内其他公司平均为71%).远程工作人员对于"工作与生活相互融合"以及"社会联系"等方面的正面评价,也远高于其他员工对这两方面调查的总体评价.  那么我们又是如何妥善落实远程

Stack Overflow 公布 2013 年用户调查结果

截止2013年,Stack Overflow社区的月访问量从2150万次增长到了2690万次,访问者分别来自全球的242个国家.为了维持社区的增长,我们做了很多的努力-- Careers 2.0已经有了法语和德语两个本地化版本,我们正致力于为整个Stack Overflow网络开发iOS和Android应用,并且Stack Overflow历史上的首次本地化尝试--葡萄牙语版Stack Overflow-- 已经处于Beta状态.为了让我们更好地为Stack Overflow社区和用户服务,我们

美图秀秀将发布其硬件设备Meitu Kiss美颜手机

摘要: 美图秀秀将于5月16日在北京798中央大厅发布其硬件设备Meitu Kiss美颜手机.作为一款直接由热门App扩展到手机功能的转变,美图秀秀CEO吴欣鸿透露,是从市场上火爆的自拍神器卡西欧TR看 美图秀秀将于5月16日在北京798中央大厅发布其硬件设备--Meitu Kiss美颜手机.作为一款直接由热门App扩展到手机功能的转变,美图秀秀CEO吴欣鸿透露,是从市场上火爆的自拍神器卡西欧TR看到了商机. 吴欣鸿认为,目前市场上的手机前置摄像头普遍比后置摄像头像素低,很难拍出令人满意的自拍照

基于用户投票的排名算法(三)Stack Overflow

上一篇文章,我介绍了Reddit的排名算法. 它的特点是,用户可以投赞成票,也可以投反对票.也就是说,除了时间因素以外,只要考虑两个变量就够了. 但是,还有一些特定用途的网站,必须考虑更多的因素.世界排名第一的程序员问答社区Stack Overflow,就是这样一个网站. 你在上面提出各种关于编程的问题,等待别人回答.访问者可以对你的问题进行投票(赞成票或反对票),表示这个问题是不是有价值. 一旦有人回答了你的问题,其他人也可以对这个回答投票(赞成票或反对票).

用Delphi通过SetupAPI.dll列举和停用硬件设备

前天弄的东西,通过SetupAPI.dll列举硬件设备,部分是改自MSDN自带的例子,自己加了显示设备类型名和图标.代码是我一个个加上去的有些乱. {Setup.pas---从SetupAPI.h里转的一些函数和常量}unit SetupAPI;interfaceuses Windows;const DIGCF_PRESENT = $0002; DIGCF_ALLCLASSES = $0004; SPDRP_DEVICEDESC = 0; DIF_PROPERTYCHANGE = 18; DIC

Win8系统在新界面安装硬件设备驱动图文教程

Windows 8在功能上的最大亮点就是新界面及新界面应用,硬件设备驱动在新界面中也能够顺利的安装和使用.具体方法如下: 第一步:鼠标移动到右上或者右下角,在侧边栏单击"设置". 第二步:在"设置"中,单击最下方的"更改电脑设置". 第三步:在Windows 8新界面的"设备"中,单击"添加设备". 第四步:Windows 8会自动扫描硬件,然后在列表中显示识别记过.首先将会搜索Windows 8自带的硬件

PHP has encountered a Stack overflow问题解决方法_php技巧

昨晚将一个disucz论坛进行转移后,发现打开的页面上回多一个PHP has encountered a Stack overflow 这个提示错误,进过翻译为"PHP遇到堆栈溢出".我就感觉奇怪了,新站没人访问的,怎么可能会溢出. 好吧去discuz官方论坛找找解决方法. 找到的第一解决方法,更新后台缓存,结果不行.接下来检查数据库配置文件,也没有错误.检查php权限也没有错误. discuz官网有人说是php版本太低了,个人对于这种人是比较反感的,这种说法比较扯淡.不用去验证了.

独家 | 一探Stack Overflow工作搜索

大约在两年前,Stack Overflow上发生了一件大事:Stack Overflow发布了一个叫做Providence的新系统.这个系统可以得知访问者对什么样的技术有兴趣,也可以衡量某个访问者和某个工作之间的匹配程度. 更通俗的说,Providence的发布可以被看作是Stack Overflow向"更智能"迈进以及在数据科学领域上持续投资的道路上的里程碑.如果想了解更多关于Providence的信息,可以参考下面这个系列博客(https://kevinmontrose.com/2

硬件设备之外 苹果已落后谷歌和Facebook?

据国外媒体报道,苹果已经在设备制造上取得了无与伦比的成功.苹果公司的产品设计出众,从内而外都因设计而昂贵.用户会坚持使用苹果公司的产品,直至苹果公司再发布新的产品.以硬件设备为主的策略使得苹果成为世界上最有价值的科技公司. 然而,即便是苹果,也必须改变,苹果公司首席执行官蒂姆·库克(Tim Cook)在本周举行的全球开发者大会上也指出了这一点.苹果公司深刻认识到,公司不能拘泥于只售卖硬件设备,因为诸如销量如日中天的iPhone手机也面临着销量下滑的状况.此外,在数字服务市场,苹果的业务已经落后于