Stack Overflow 架构透视:(2) 硬件

翻译作品,水平有限,如有错误,请留言指正。
详细请见原作者Nick Craver Blog (May 29,2016)链接

这是关于Stack Overflow架构的一系列文章中的第二篇。
前一篇:《 Stack Overflow: 架构》(2016版)
后一篇:《 Stack Overflow: 我们是如何做部署的》(2016版)

有人对硬件感兴趣吗?好吧,我感兴趣,这篇博客就是关于这个话题,所以,我赢了。如果你不关系硬件,那么可以走开并关闭浏览器了。还在这儿吗?真棒。
假如你的网页访问非常非常慢,在这种情况下,你应该考虑采购一些新的硬件。

我曾今反复重申过多次:性能是一个重要组件。
特别是当你的代码必须在最快的硬件上运行,硬件的关系则越为重大。正如任何其它的平台,Stack Overflow的架构是分层的。硬件对我们来说属于基础层,它有自己的屋子,在很多情况下,对我们来说,它的许多关键组件是不可控的。。。就像运行在别人的服务器。它也伴随着直接和间接的成本。但是,这些不是本篇文章的重点,这方面的对比将于稍后报告。目前来说,我希望能提供一份详细的,关于我们基础设施的清单,用于大家参考和比较。

服务器照片。有时是裸设备。
这个网页可以加载得更快,但是我不能自禁。(言归正传)
在这个系列报告中我将提供大量数字和规格说明。
当我说“我们的SQL Server CPU利用率接近5-10%,” 好吧,这非常棒。
但是,5-10% 的什么? 这时我们需要一个参考值。这份硬件清单可以回答这些问题,并且座位与其它平台比较的依据,利用率对比如何,容量对比如何,等等。

How We Do Hardware

免责声明:我不是一个人干的。

George Beech (@GABeech) 是我的主要搭档,盘点管控Stack使用的硬件。
我们小心地规范每一台服务器,以使它符合设计意图。 我们不会只管下订单、分派任务。在这个过程中我们也不会自己单独完成;你必须知道将来这些硬件需要运行什么东西,才能做出合适的选择。我们将和开发工程师或者其他的可靠性工程师一道,为运行在盒子上的应用选择最佳方案。我们也关注在整个系统中什么才是最好的。每一台服务器都不是孤岛。如何将它嵌入到总体的架构中去,确实需要好好考量。哪些服务可以全平台共享?数据中心?日志系统?管理更少的事情,或者至少做到更少的差异,这件事本身就具有内在的价值。

当我们盘点硬件的时候,我们列出了很多规则来帮助我们厘清哪些是需要提供的。
我还从没有真正写下这些心里面的检查表,简短来说:

  • 这是一个升级或降级的问题吗?(我们购买一个更大的机器,或者一些更小的?
  • 我们需要/希望做到什么程度的冗余? (多少预留空间和故障恢复能力?)
  • **存储: **
  • 服务器/应用需要挂在磁盘吗?(我们是否需要Spinny操作系统驱动?)
  • 如果是,需要多少?(多大的网络带宽?有多少小文件?是否需要固态硬盘?)
  • 如果是SSD(固态硬盘),是否写负载?(我们讨论 Intel S3500/3700s? P360x? P3700s?)
  • 我们需要多少SSD容量? (是否可以采用同时搭载HDD(机械硬盘)的双轮方案?)
  • 数据是否需要完全缓存?(相比没有电容器的SSD,哪一种更便宜,哪种更合适?)
  • 将来存储是否需要扩展? (我们采用1U/10-bay 服务器, 或者一个 2U/26-bay 服务器?)
  • 这是一个数据仓库的场景设定吗?(我们是否考虑3.5’’驱动器?如果是,每个2U主板上是12个还是16个驱动器?)
  • 对于3.5’’的后板来说,存储平衡在在处理器上是否能达到 120W TDP 的限制?
  • 我们是否需要直接显示磁盘?(控制器是否需要支持pass-through?)
  • ** 内存:**
  • 它需要多少内存?(我们必须买什么?)
  • 它将会使用多少内存?(我们最好买什么?)
  • 我们是否认为它稍后需要更多的内存?(我们应该搭配那种内存频率?)
  • 它是一个内存消耗型应用程序吗?(我们是否想要达到最大主频?)
  • 它是一个高并发的应用程序吗?(一定空间的情况下,我们是否想要通过更多的DIMM来分摊内存?)
  • ** CPU: **
  • 我们希望采用哪种类型的处理器?(我们需要CPU自己供电还是独立电源?)
  • 它是高并发的应用程序吗?(我们希望采用更少、更快的内核?或者,采用数量更多,更慢的内核?)
  • 以下哪种情况?是否存在大量的二级和三级缓存竞争?(为了提高性能,我们是否需要一个巨大的三级缓存?)
  • 应用瓶颈主要是单一内核吗?(我们是否采用最大主频?)
  • 如果是这样的话,同时需要支持多少进程数?(这里我们希望采用哪种引擎?)
  • **网络: **
  • 我们是否需要增加 10Gb 网络连接?(此处是否为透传设备,例如一个负载均衡器?)
  • 我们需要怎样的出/入流量均衡策略?(哪个CPU内核负责计算均衡权重?)
  • **冗余: **
  • 我们在数据缓存中心是否也需要服务器?
  • 我们是否需要在同等数量的情况下,接受更低的冗余要求?
  • 我们是否需要一个电源线?不。我们不需要。

现在,让我们来看看服务网站的都有哪些硬件,它们位于纽约 (New York)QTS 数据中心。实际上,它位于新泽西(New Jersey),但是让我们保持这个约定。为什么我们称之为NY数据中心?因为我们不想重命名所有以NY-开头的服务器。(What ?!…)我将记录在下面的清单上,丹佛的情况,在规格和冗余级别上略有差别。

Hide Pictures (in case you’re using this as a hardware reference list later)

Stack Overflow & Stack Exchange

纽约数据中心

全局选项

先说明一些全局配置,在下面每台服务器的介绍里就不重复了:

  • 除非有特殊需要,不包含操作系统驱动。大多数服务器使用一对250 或者 500 GB SATA HDD 硬盘 ,用于操作系统,通常是 RAID 1。我们不担心启动时间问题,所有物理服务器,启动时间中的大部分不依赖驱动的速度(例如,检查768GB内存)。
  • 所有服务器通过2个或以上10Gb网络链路连接,通过双活LACP协议。
  • 所有服务器运行在208V 单相功率电源 (经由2个PSU ,来自2个PDU-双电源).
  • 在纽约的所有服务器由缆线臂,在丹佛的服务器则没有(主要依靠本地工程师)。
  • 所有服务器都有一个iDRAC连接 (经由管理网络) 和一个KVM连接。

网络

  • 2x Cisco Nexus 5596UP 核心交换机 (96 SFP+ 端口,每个端口 10 Gbps)
  • 10x Cisco Nexus 2232TM Fabric Extenders (2 per rack - each has 32 BASE-T ports each at 10Gbps + 8 SFP+ 10Gbps 上联链路)
  • 2x Fortinet 800C 防火墙
  • 2x Cisco ASR-1001 路由器
  • 2x Cisco ASR-1001-x 路由器
  • 6x Cisco 2960S-48TS-L 网管交换机 (1 Per Rack - 48 1Gbps ports + 4 SFP 1Gbps)
  • 1x Dell DMPU4032 KVM
  • 7x Dell DAV2216 KVM Aggregators (1–2 per rack - each uplinks to the DPMU4032)

原作者备注: 每个 FEX 到核心 拥有 80 Gbps 上联带宽 ,核心通过一个160 Gbps端口通道与它们连接。由于最近的一些工程,我们位于丹佛数据中心的硬件会更新一些。所有4 台路由器的型号是 ASR-1001-x 和 双核 Cisco Nexus 56128P,每个都拥有96 SFP+ 10Gbps 端口 和 8 QSFP+ 40Gbps 端口。这些节省下来的端口,可以用于未来扩展,我们可以为核心绑定4x 40Gbps链接,替代每个 16x10Gbps端口的方案,正如我们在纽约做的那样。

这些就是纽约的网络设备情况。

SO-Hardware-Network-NewYork-Fiber-Small.jpg

SO-Hardware-Network-NewYork-Fortinet-Small.jpg

SO-Hardware-Network-NewYork-Rack-Small.jpg

丹佛数据中心

这里需要提到的是Mark Henderson, 我们网站的可靠性工程师之一,专程到纽约数据中心为我的这份报告拿到了一些高分辨率的照片。

SO-Hardware-Network-Denver-Installed-Small.jpg

SO-Hardware-Network-Denver-Racked-Small.jpg

SO-Hardware-Network-Denver-Raw-Small.jpg

SQL Servers (Stack Overflow 集群)

  • 2 Dell R720xd 服务器,每台配置如下:
  • 双 E5-2697v2 处理器 (每个 12 核 @2.7–3.5GHz)
  • 384 GB of RAM (24x 16 GB DIMMs)
  • 1x Intel P3608 4 TB NVMe PCIe SSD (RAID 0, 2块卡上两个控制器)
  • 24x Intel 710 200 GB SATA SSDs (RAID 10)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

SQL Servers (Stack Exchange 及其它业务集群)

  • 2 Dell R730xd Servers, each with:
  • 双 E5-2667v3 处理器 (每个8 核 @3.2–3.6GHz)
  • 768 GB of RAM (24x 32 GB DIMMs)
  • 3x Intel P3700 2 TB NVMe PCIe SSD (RAID 0)
  • 24x 10K Spinny 1.2 TB SATA HDDs (RAID 10)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)
    原作者备注: 丹佛的SQL硬件在规格上相同,对应纽约部分这里只有一个 SQL 服务器
    这是二月份为纽约的SQL Server 升级PCIe SSD的情形:

SO-Hardware-SQL-Front-Small.jpg

SO-Hardware-SQL-Inside-Small.jpg

SO-Hardware-SQL-SSDs-Small.jpg

SO-Hardware-SQL-Top-Small.jpg

Web 服务器

  • 11 Dell R630 服务器,每台配置如下:
  • 双 E5-2690v3 处理器 (每个12 核 @2.6–3.5GHz)
  • 64 GB of RAM (8x 8 GB DIMMs)
  • 2x Intel 320 300GB SATA SSDs (RAID 1)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

应用服务器 (Workers)

  • 2 Dell R630 服务器, 每台配置如下:
  • 双 E5-2643 v3 处理器(每个 6 核 @3.4–3.7GHz)
  • 64 GB of RAM (8x 8 GB DIMMs)
  • 1 Dell R620 服务器,配置如下:
  • 双 E5-2667 处理器 (每个6 核 @2.9–3.5GHz)
  • 32 GB of RAM (8x 4 GB DIMMs)
  • 2x Intel 320 300GB SATA SSDs (RAID 1)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)
SO-Hardware-Web-Tier-Back-Small.jpg

SO-Hardware-Web-Tier-Front-Small.jpg

SO-Hardware-Web-Tier-Front2-Small.jpg

SO-Hardware-Web-Tier-Unboxed-Small.jpg

原作者备注: NY-SERVICE03 目前仍然是一台 R620, 但是现在并没有足够老到以至于需要更换。它会在今年晚些时候升级。

Redis 服务器 (缓存)

  • 2 Dell R630 服务器, 每台配置如下:
  • 双 E5-2687W v3 处理器 (每个10 核 @3.1–3.5GHz)
  • 256 GB of RAM (16x 16 GB DIMMs)
  • 2x Intel 520 240GB SATA SSDs (RAID 1)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

Elasticsearch 服务器 (检索)

  • 3 Dell R620 服务器, 每台配置如下:
  • 双 E5-2680 处理器 (每个8 核 @2.7–3.5GHz)
  • 192 GB of RAM (12x 16 GB DIMMs)
  • 2x Intel S3500 800GB SATA SSDs (RAID 1)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

HAProxy 服务器 (负载均衡器)

  • 2 Dell R620 服务器 (流量来源CloudFlare), 每台配置如下:
  • 双 E5-2637 v2 处理器 (每个4 核 @3.5–3.8GHz)
  • 192 GB of RAM (12x 16 GB DIMMs)
  • 6x Seagate Constellation 7200RPM 1TB SATA HDDs (RAID 10) (日志)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC) - (DMZ)内网流量
  • 双 10 Gbps 网络 (Intel X540) - 外网流量
  • 2 Dell R620 服务器 (直达流量), 每台配置如下:
  • 双 E5-2650 处理器 (每个 8 核 @2.0–2.8GHz each)
  • 64 GB of RAM (4x 16 GB DIMMs)
  • 2x Seagate Constellation 7200RPM 1TB SATA HDDs (RAID 10) (日志)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC) - (DMZ) 外网流量
  • 双 10 Gbps 网络 (Intel X540) - 外网流量

原作者备注: 这些服务器是不同时期采购的,因此规格上略有差异。并且,2台CloudFlare负载均衡器因为安装了memcached,拥有更多内存(我们现在已经不运行该组件)。这些服务,redis, 检索,和负载均衡器在stack都是基于1U 服务器。
这是纽约的情况:

SO-Hardware-Redis-Inside-Small.jpg

SO-Hardware-Service-Inside-Small.jpg

SO-Hardware-Service-Rear-Small.jpg

SO-Hardware-Service-Redis-Search-Front-Small.jpg

其它

我们还有一些其他的服务器并不直接或间接服务于网站的流量。
它们负责处理一些相关业务(例如,域名控制器,少量用于应用验证,跑在虚拟机上),或者一些次要的采购用于监控,日志存储,备份等等。既然已经表示未来会做一系列的报告,我把一切有趣的“后台”服务器也列出来。使我可以将更多的服务器拿出来和你分享,有人不喜欢的吗?

VM 服务器 (VMWare, 当前)

  • 2 Dell FX2s Blade Chassis, each with 2 of 4 blades populated
  • 4 Dell FC630 Blade Servers (2 per chassis), each with:
  • 双 E5-2698 v3 处理器 (每个16 核 @2.3–3.6GHz)
  • 768 GB of RAM (24x 32 GB DIMMs)
  • 2x 16GB SD Cards (Hypervisor - no local storage)
  • 双 4x 10 Gbps 网络 (FX IOAs - BASET)
  • 1 EqualLogic PS6210X iSCSI SAN
  • 24x Dell 10K RPM 1.2TB SAS HDDs (RAID10)
  • 双 10Gb 网络 (10-BASET)
  • 1 EqualLogic PS6110X iSCSI SAN
  • 24x Dell 10K RPM 900GB SAS HDDs (RAID10)
  • 双 10Gb 网络 (SFP+)
SO-Hardware-VMs-Blades-Small.jpg

SO-Hardware-VMs-Blades2-Small.jpg

SO-Hardware-VMs-Front-Small.jpg

SO-Hardware-VMs-Rear-Small.jpg

在一些场景下,还有几台重要的服务器不是虚拟机。这些系统后台任务,帮助我们通过日志追踪排查问题,存储大量的数据等等。

机器学习服务器 (Providence)
这些服务器99%的时间是空闲的,但是每晚承担了大量的处理工作:刷新Providence。它们也可以通过内部数据中心的方式,用来测试基于海量数据的新算法。

  • 2 Dell R620 服务器, 每台配置如下:
  • 双 E5-2697 v2 处理器 (每个 12 核 @2.7–3.5GHz)
  • 384 GB of RAM (24x 16 GB DIMMs)
  • 4x Intel 530 480GB SATA SSDs (RAID 10)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

译者注:Providence,应为项目代号。Providence通过分析流量日志,给网站的访问用户打标签 (类似“web开发者” 或者 “使用Java技术栈”) 。详细可以查阅《providence-machine-learning-at-stack-exchange》

机器学习服务器-Redis (Still Providence)
这是一个为 Providence服务的redis数据集。它们通常是一台主用,一台备用,还有一个实例是用于测试,如最新版的ML算法。当它不用做Q&A站点时,这些数据会服务于职位招聘的边栏广告。

  • 3 Dell R720xd 服务器,每台配置如下:
  • Dual E5-2650 v2 Processors (8 cores @2.6–3.4GHz each)
  • 384 GB of RAM (24x 16 GB DIMMs)
  • 4x Samsung 840 Pro 480 GB SATA SSDs (RAID 10)
  • Dual 10 Gbps network (Intel X540/I350 NDC)

日志服务器(各种日志)
我们的 Logstash 集群 (使用 Elasticsearch 存储) ,数据来源于,任何地方。
我们曾计划将HTTP日志复制一份到这些服务器,但是由于影响性能的问题而没有实现。尽管如此,我们还是将所有的网络设备日志,syslog,Windows和Linux系统日志存在这里,所以我们能够建立建立一个网络的全局视图,或者快速地排查问题。当告警发生的时候,它也被用作Bosun的一个数据源。这个集群总计使用的存储是 6x12x4 = 288 TB。

  • 6 Dell R720xd 服务器, 每台配置如下:
  • Dual E5-2660 v2 Processors (10 cores @2.2–3.0GHz each)
  • 192 GB of RAM (12x 16 GB DIMMs)
  • 12x 7200 RPM Spinny 4 TB SATA HDDs (RAID 0 x3 - 4 drives per)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

** SQL Server-HTTP日志 **
在这些服务器,我们将访问负载均衡器的单独HTTP请求,存储到SQL数据库(来源于HAProxy syslog)。我们只记录少数高级别的请求,类似URL,查询,UserAgent,SQL执行时间,Redis,等等。在这里的数据,每天将进入一个集群的Columnstore 索引。我们借助这些数据排查用户的问题,发现僵尸网络,等等。

  • 1 Dell R730xd 服务器,配置如下:
  • 双 E5-2660 v3 处理器 (每个10 核 @2.6–3.3GHz)
  • 256 GB of RAM (16x 16 GB DIMMs)
  • 2x Intel P3600 2 TB NVMe PCIe SSD (RAID 0)
  • 16x Seagate ST6000NM0024 7200RPM Spinny 6 TB SATA HDDs (RAID 10)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

** SQL Server - 开发 **
我们喜欢尽可能多地模拟生产环境,类似SQL匹配,额,至少是它过去常常发生的那样。们一直以来这购买升级生产处理器。我们会将升级这些服务器,采用2U 解决方案,在今年晚些升级Stack Overflow 集群的时候一起做。

  • 1 Dell R620 服务器,配置如下:
  • 双 E5-2620 处理器 (每个6核 @2.0–2.5GHz)
  • 384 GB of RAM (24x 16 GB DIMMs)
  • 8x Intel S3700 800 GB SATA SSDs (RAID 10)
  • 双 10 Gbps 网络 (Intel X540/I350 NDC)

这些就是实际服务我们网站的硬件,或者说大家普遍感兴趣的部分。
我们当然还有其它服务器,用于后台任务,例如日志记录,监控,备份,等等。
如果你对于我们其它系统还有特别感兴趣的地方,请尽管留言提问,我很高兴回答。

这是一周多以前在纽约数据中心的全景:

SO-Hardware-Racks-Small.jpg

SO-Hardware-Racks2-Small.jpg

接下来?
我做的这一系列工作是希望能让社区了解到最多情况。
通过Trello board, 它让部署看起来像是下一个最有趣的话题。预计下一次将让大家了解代码是如何从开发者的机器到生产环境,以及这个过程中解决的所有问题。它将覆盖数据库迁移,滚动构建,CI 组件,我们如何建立开发环境,所有要素如何共享信息等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容