翻译作品,水平有限,如有错误,请留言指正。
详细请见原作者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端口的方案,正如我们在纽约做的那样。
这些就是纽约的网络设备情况。
丹佛数据中心
这里需要提到的是Mark Henderson, 我们网站的可靠性工程师之一,专程到纽约数据中心为我的这份报告拿到了一些高分辨率的照片。
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的情形:
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)
原作者备注: 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 服务器。
这是纽约的情况:
其它
我们还有一些其他的服务器并不直接或间接服务于网站的流量。
它们负责处理一些相关业务(例如,域名控制器,少量用于应用验证,跑在虚拟机上),或者一些次要的采购用于监控,日志存储,备份等等。既然已经表示未来会做一系列的报告,我把一切有趣的“后台”服务器也列出来。使我可以将更多的服务器拿出来和你分享,有人不喜欢的吗?
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+)
在一些场景下,还有几台重要的服务器不是虚拟机。这些系统后台任务,帮助我们通过日志追踪排查问题,存储大量的数据等等。
机器学习服务器 (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)
这些就是实际服务我们网站的硬件,或者说大家普遍感兴趣的部分。
我们当然还有其它服务器,用于后台任务,例如日志记录,监控,备份,等等。
如果你对于我们其它系统还有特别感兴趣的地方,请尽管留言提问,我很高兴回答。
这是一周多以前在纽约数据中心的全景:
接下来?
我做的这一系列工作是希望能让社区了解到最多情况。
通过Trello board, 它让部署看起来像是下一个最有趣的话题。预计下一次将让大家了解代码是如何从开发者的机器到生产环境,以及这个过程中解决的所有问题。它将覆盖数据库迁移,滚动构建,CI 组件,我们如何建立开发环境,所有要素如何共享信息等。