翻譯作品,水平有限,如有錯(cuò)誤,請(qǐng)留言指正。
詳細(xì)請(qǐng)見原作者Nick Craver Blog (May 29,2016)鏈接
這是關(guān)于Stack Overflow架構(gòu)的一系列文章中的第二篇。
前一篇:《 Stack Overflow: 架構(gòu)》(2016版)
后一篇:《 Stack Overflow: 我們是如何做部署的》(2016版)
有人對(duì)硬件感興趣嗎?好吧,我感興趣,這篇博客就是關(guān)于這個(gè)話題,所以,我贏了。如果你不關(guān)系硬件,那么可以走開并關(guān)閉瀏覽器了。還在這兒嗎?真棒。
假如你的網(wǎng)頁訪問非常非常慢,在這種情況下,你應(yīng)該考慮采購一些新的硬件。
我曾今反復(fù)重申過多次:性能是一個(gè)重要組件。
特別是當(dāng)你的代碼必須在最快的硬件上運(yùn)行,硬件的關(guān)系則越為重大。正如任何其它的平臺(tái),Stack Overflow的架構(gòu)是分層的。硬件對(duì)我們來說屬于基礎(chǔ)層,它有自己的屋子,在很多情況下,對(duì)我們來說,它的許多關(guān)鍵組件是不可控的。。。就像運(yùn)行在別人的服務(wù)器。它也伴隨著直接和間接的成本。但是,這些不是本篇文章的重點(diǎn),這方面的對(duì)比將于稍后報(bào)告。目前來說,我希望能提供一份詳細(xì)的,關(guān)于我們基礎(chǔ)設(shè)施的清單,用于大家參考和比較。
服務(wù)器照片。有時(shí)是裸設(shè)備。
這個(gè)網(wǎng)頁可以加載得更快,但是我不能自禁。(言歸正傳)
在這個(gè)系列報(bào)告中我將提供大量數(shù)字和規(guī)格說明。
當(dāng)我說“我們的SQL Server CPU利用率接近5-10%,” 好吧,這非常棒。
但是,5-10% 的什么? 這時(shí)我們需要一個(gè)參考值。這份硬件清單可以回答這些問題,并且座位與其它平臺(tái)比較的依據(jù),利用率對(duì)比如何,容量對(duì)比如何,等等。
How We Do Hardware
免責(zé)聲明:我不是一個(gè)人干的。
George Beech (@GABeech) 是我的主要搭檔,盤點(diǎn)管控Stack使用的硬件。
我們小心地規(guī)范每一臺(tái)服務(wù)器,以使它符合設(shè)計(jì)意圖。 我們不會(huì)只管下訂單、分派任務(wù)。在這個(gè)過程中我們也不會(huì)自己單獨(dú)完成;你必須知道將來這些硬件需要運(yùn)行什么東西,才能做出合適的選擇。我們將和開發(fā)工程師或者其他的可靠性工程師一道,為運(yùn)行在盒子上的應(yīng)用選擇最佳方案。我們也關(guān)注在整個(gè)系統(tǒng)中什么才是最好的。每一臺(tái)服務(wù)器都不是孤島。如何將它嵌入到總體的架構(gòu)中去,確實(shí)需要好好考量。哪些服務(wù)可以全平臺(tái)共享?數(shù)據(jù)中心?日志系統(tǒng)?管理更少的事情,或者至少做到更少的差異,這件事本身就具有內(nèi)在的價(jià)值。
當(dāng)我們盤點(diǎn)硬件的時(shí)候,我們列出了很多規(guī)則來幫助我們厘清哪些是需要提供的。
我還從沒有真正寫下這些心里面的檢查表,簡短來說:
- 這是一個(gè)升級(jí)或降級(jí)的問題嗎?(我們購買一個(gè)更大的機(jī)器,或者一些更小的?
- 我們需要/希望做到什么程度的冗余? (多少預(yù)留空間和故障恢復(fù)能力?)
- **存儲(chǔ): **
- 服務(wù)器/應(yīng)用需要掛在磁盤嗎?(我們是否需要Spinny操作系統(tǒng)驅(qū)動(dòng)?)
- 如果是,需要多少?(多大的網(wǎng)絡(luò)帶寬?有多少小文件?是否需要固態(tài)硬盤?)
- 如果是SSD(固態(tài)硬盤),是否寫負(fù)載?(我們討論 Intel S3500/3700s? P360x? P3700s?)
- 我們需要多少SSD容量? (是否可以采用同時(shí)搭載HDD(機(jī)械硬盤)的雙輪方案?)
- 數(shù)據(jù)是否需要完全緩存?(相比沒有電容器的SSD,哪一種更便宜,哪種更合適?)
- 將來存儲(chǔ)是否需要擴(kuò)展? (我們采用1U/10-bay 服務(wù)器, 或者一個(gè) 2U/26-bay 服務(wù)器?)
- 這是一個(gè)數(shù)據(jù)倉庫的場景設(shè)定嗎?(我們是否考慮3.5’’驅(qū)動(dòng)器?如果是,每個(gè)2U主板上是12個(gè)還是16個(gè)驅(qū)動(dòng)器?)
- 對(duì)于3.5’’的后板來說,存儲(chǔ)平衡在在處理器上是否能達(dá)到 120W TDP 的限制?
- 我們是否需要直接顯示磁盤?(控制器是否需要支持pass-through?)
- ** 內(nèi)存:**
- 它需要多少內(nèi)存?(我們必須買什么?)
- 它將會(huì)使用多少內(nèi)存?(我們最好買什么?)
- 我們是否認(rèn)為它稍后需要更多的內(nèi)存?(我們應(yīng)該搭配那種內(nèi)存頻率?)
- 它是一個(gè)內(nèi)存消耗型應(yīng)用程序嗎?(我們是否想要達(dá)到最大主頻?)
- 它是一個(gè)高并發(fā)的應(yīng)用程序嗎?(一定空間的情況下,我們是否想要通過更多的DIMM來分?jǐn)們?nèi)存?)
- ** CPU: **
- 我們希望采用哪種類型的處理器?(我們需要CPU自己供電還是獨(dú)立電源?)
- 它是高并發(fā)的應(yīng)用程序嗎?(我們希望采用更少、更快的內(nèi)核?或者,采用數(shù)量更多,更慢的內(nèi)核?)
- 以下哪種情況?是否存在大量的二級(jí)和三級(jí)緩存競爭?(為了提高性能,我們是否需要一個(gè)巨大的三級(jí)緩存?)
- 應(yīng)用瓶頸主要是單一內(nèi)核嗎?(我們是否采用最大主頻?)
- 如果是這樣的話,同時(shí)需要支持多少進(jìn)程數(shù)?(這里我們希望采用哪種引擎?)
- **網(wǎng)絡(luò): **
- 我們是否需要增加 10Gb 網(wǎng)絡(luò)連接?(此處是否為透傳設(shè)備,例如一個(gè)負(fù)載均衡器?)
- 我們需要怎樣的出/入流量均衡策略?(哪個(gè)CPU內(nèi)核負(fù)責(zé)計(jì)算均衡權(quán)重?)
- **冗余: **
- 我們在數(shù)據(jù)緩存中心是否也需要服務(wù)器?
- 我們是否需要在同等數(shù)量的情況下,接受更低的冗余要求?
- 我們是否需要一個(gè)電源線?不。我們不需要。
現(xiàn)在,讓我們來看看服務(wù)網(wǎng)站的都有哪些硬件,它們位于紐約 (New York)QTS 數(shù)據(jù)中心。實(shí)際上,它位于新澤西(New Jersey),但是讓我們保持這個(gè)約定。為什么我們稱之為NY數(shù)據(jù)中心?因?yàn)槲覀儾幌胫孛幸訬Y-開頭的服務(wù)器。(What ?!…)我將記錄在下面的清單上,丹佛的情況,在規(guī)格和冗余級(jí)別上略有差別。
Hide Pictures (in case you’re using this as a hardware reference list later)
Stack Overflow & Stack Exchange
紐約數(shù)據(jù)中心
全局選項(xiàng)
先說明一些全局配置,在下面每臺(tái)服務(wù)器的介紹里就不重復(fù)了:
- 除非有特殊需要,不包含操作系統(tǒng)驅(qū)動(dòng)。大多數(shù)服務(wù)器使用一對(duì)250 或者 500 GB SATA HDD 硬盤 ,用于操作系統(tǒng),通常是 RAID 1。我們不擔(dān)心啟動(dòng)時(shí)間問題,所有物理服務(wù)器,啟動(dòng)時(shí)間中的大部分不依賴驅(qū)動(dòng)的速度(例如,檢查768GB內(nèi)存)。
- 所有服務(wù)器通過2個(gè)或以上10Gb網(wǎng)絡(luò)鏈路連接,通過雙活LACP協(xié)議。
- 所有服務(wù)器運(yùn)行在208V 單相功率電源 (經(jīng)由2個(gè)PSU ,來自2個(gè)PDU-雙電源).
- 在紐約的所有服務(wù)器由纜線臂,在丹佛的服務(wù)器則沒有(主要依靠本地工程師)。
- 所有服務(wù)器都有一個(gè)iDRAC連接 (經(jīng)由管理網(wǎng)絡(luò)) 和一個(gè)KVM連接。
網(wǎng)絡(luò)
- 2x Cisco Nexus 5596UP 核心交換機(jī) (96 SFP+ 端口,每個(gè)端口 10 Gbps)
- 10x Cisco Nexus 2232TM Fabric Extenders (2 per rack - each has 32 BASE-T ports each at 10Gbps + 8 SFP+ 10Gbps 上聯(lián)鏈路)
- 2x Fortinet 800C 防火墻
- 2x Cisco ASR-1001 路由器
- 2x Cisco ASR-1001-x 路由器
- 6x Cisco 2960S-48TS-L 網(wǎng)管交換機(jī) (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)
原作者備注: 每個(gè) FEX 到核心 擁有 80 Gbps 上聯(lián)帶寬 ,核心通過一個(gè)160 Gbps端口通道與它們連接。由于最近的一些工程,我們位于丹佛數(shù)據(jù)中心的硬件會(huì)更新一些。所有4 臺(tái)路由器的型號(hào)是 ASR-1001-x 和 雙核 Cisco Nexus 56128P,每個(gè)都擁有96 SFP+ 10Gbps 端口 和 8 QSFP+ 40Gbps 端口。這些節(jié)省下來的端口,可以用于未來擴(kuò)展,我們可以為核心綁定4x 40Gbps鏈接,替代每個(gè) 16x10Gbps端口的方案,正如我們在紐約做的那樣。
這些就是紐約的網(wǎng)絡(luò)設(shè)備情況。



丹佛數(shù)據(jù)中心
這里需要提到的是Mark Henderson, 我們網(wǎng)站的可靠性工程師之一,專程到紐約數(shù)據(jù)中心為我的這份報(bào)告拿到了一些高分辨率的照片。



SQL Servers (Stack Overflow 集群)
- 2 Dell R720xd 服務(wù)器,每臺(tái)配置如下:
- 雙 E5-2697v2 處理器 (每個(gè) 12 核 @2.7–3.5GHz)
- 384 GB of RAM (24x 16 GB DIMMs)
- 1x Intel P3608 4 TB NVMe PCIe SSD (RAID 0, 2塊卡上兩個(gè)控制器)
- 24x Intel 710 200 GB SATA SSDs (RAID 10)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC)
SQL Servers (Stack Exchange 及其它業(yè)務(wù)集群)
- 2 Dell R730xd Servers, each with:
- 雙 E5-2667v3 處理器 (每個(gè)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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
原作者備注: 丹佛的SQL硬件在規(guī)格上相同,對(duì)應(yīng)紐約部分這里只有一個(gè) SQL 服務(wù)器
這是二月份為紐約的SQL Server 升級(jí)PCIe SSD的情形:




Web 服務(wù)器
- 11 Dell R630 服務(wù)器,每臺(tái)配置如下:
- 雙 E5-2690v3 處理器 (每個(gè)12 核 @2.6–3.5GHz)
- 64 GB of RAM (8x 8 GB DIMMs)
- 2x Intel 320 300GB SATA SSDs (RAID 1)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC)
應(yīng)用服務(wù)器 (Workers)
- 2 Dell R630 服務(wù)器, 每臺(tái)配置如下:
- 雙 E5-2643 v3 處理器(每個(gè) 6 核 @3.4–3.7GHz)
- 64 GB of RAM (8x 8 GB DIMMs)
- 1 Dell R620 服務(wù)器,配置如下:
- 雙 E5-2667 處理器 (每個(gè)6 核 @2.9–3.5GHz)
- 32 GB of RAM (8x 4 GB DIMMs)
- 2x Intel 320 300GB SATA SSDs (RAID 1)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC)




原作者備注: NY-SERVICE03 目前仍然是一臺(tái) R620, 但是現(xiàn)在并沒有足夠老到以至于需要更換。它會(huì)在今年晚些時(shí)候升級(jí)。
Redis 服務(wù)器 (緩存)
- 2 Dell R630 服務(wù)器, 每臺(tái)配置如下:
- 雙 E5-2687W v3 處理器 (每個(gè)10 核 @3.1–3.5GHz)
- 256 GB of RAM (16x 16 GB DIMMs)
- 2x Intel 520 240GB SATA SSDs (RAID 1)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC)
Elasticsearch 服務(wù)器 (檢索)
- 3 Dell R620 服務(wù)器, 每臺(tái)配置如下:
- 雙 E5-2680 處理器 (每個(gè)8 核 @2.7–3.5GHz)
- 192 GB of RAM (12x 16 GB DIMMs)
- 2x Intel S3500 800GB SATA SSDs (RAID 1)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC)
HAProxy 服務(wù)器 (負(fù)載均衡器)
- 2 Dell R620 服務(wù)器 (流量來源CloudFlare), 每臺(tái)配置如下:
- 雙 E5-2637 v2 處理器 (每個(gè)4 核 @3.5–3.8GHz)
- 192 GB of RAM (12x 16 GB DIMMs)
- 6x Seagate Constellation 7200RPM 1TB SATA HDDs (RAID 10) (日志)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC) - (DMZ)內(nèi)網(wǎng)流量
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540) - 外網(wǎng)流量
- 2 Dell R620 服務(wù)器 (直達(dá)流量), 每臺(tái)配置如下:
- 雙 E5-2650 處理器 (每個(gè) 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 網(wǎng)絡(luò) (Intel X540/I350 NDC) - (DMZ) 外網(wǎng)流量
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540) - 外網(wǎng)流量
原作者備注: 這些服務(wù)器是不同時(shí)期采購的,因此規(guī)格上略有差異。并且,2臺(tái)CloudFlare負(fù)載均衡器因?yàn)榘惭b了memcached,擁有更多內(nèi)存(我們現(xiàn)在已經(jīng)不運(yùn)行該組件)。這些服務(wù),redis, 檢索,和負(fù)載均衡器在stack都是基于1U 服務(wù)器。
這是紐約的情況:




其它
我們還有一些其他的服務(wù)器并不直接或間接服務(wù)于網(wǎng)站的流量。
它們負(fù)責(zé)處理一些相關(guān)業(yè)務(wù)(例如,域名控制器,少量用于應(yīng)用驗(yàn)證,跑在虛擬機(jī)上),或者一些次要的采購用于監(jiān)控,日志存儲(chǔ),備份等等。既然已經(jīng)表示未來會(huì)做一系列的報(bào)告,我把一切有趣的“后臺(tái)”服務(wù)器也列出來。使我可以將更多的服務(wù)器拿出來和你分享,有人不喜歡的嗎?
VM 服務(wù)器 (VMWare, 當(dāng)前)
- 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 處理器 (每個(gè)16 核 @2.3–3.6GHz)
- 768 GB of RAM (24x 32 GB DIMMs)
- 2x 16GB SD Cards (Hypervisor - no local storage)
- 雙 4x 10 Gbps 網(wǎng)絡(luò) (FX IOAs - BASET)
- 1 EqualLogic PS6210X iSCSI SAN
- 24x Dell 10K RPM 1.2TB SAS HDDs (RAID10)
- 雙 10Gb 網(wǎng)絡(luò) (10-BASET)
- 1 EqualLogic PS6110X iSCSI SAN
- 24x Dell 10K RPM 900GB SAS HDDs (RAID10)
- 雙 10Gb 網(wǎng)絡(luò) (SFP+)




在一些場景下,還有幾臺(tái)重要的服務(wù)器不是虛擬機(jī)。這些系統(tǒng)后臺(tái)任務(wù),幫助我們通過日志追蹤排查問題,存儲(chǔ)大量的數(shù)據(jù)等等。
機(jī)器學(xué)習(xí)服務(wù)器 (Providence)
這些服務(wù)器99%的時(shí)間是空閑的,但是每晚承擔(dān)了大量的處理工作:刷新Providence。它們也可以通過內(nèi)部數(shù)據(jù)中心的方式,用來測試基于海量數(shù)據(jù)的新算法。
- 2 Dell R620 服務(wù)器, 每臺(tái)配置如下:
- 雙 E5-2697 v2 處理器 (每個(gè) 12 核 @2.7–3.5GHz)
- 384 GB of RAM (24x 16 GB DIMMs)
- 4x Intel 530 480GB SATA SSDs (RAID 10)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC)
譯者注:Providence,應(yīng)為項(xiàng)目代號(hào)。Providence通過分析流量日志,給網(wǎng)站的訪問用戶打標(biāo)簽 (類似“web開發(fā)者” 或者 “使用Java技術(shù)?!? 。詳細(xì)可以查閱《providence-machine-learning-at-stack-exchange》
機(jī)器學(xué)習(xí)服務(wù)器-Redis (Still Providence)
這是一個(gè)為 Providence服務(wù)的redis數(shù)據(jù)集。它們通常是一臺(tái)主用,一臺(tái)備用,還有一個(gè)實(shí)例是用于測試,如最新版的ML算法。當(dāng)它不用做Q&A站點(diǎn)時(shí),這些數(shù)據(jù)會(huì)服務(wù)于職位招聘的邊欄廣告。
- 3 Dell R720xd 服務(wù)器,每臺(tái)配置如下:
- 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)
日志服務(wù)器(各種日志)
我們的 Logstash 集群 (使用 Elasticsearch 存儲(chǔ)) ,數(shù)據(jù)來源于,任何地方。
我們曾計(jì)劃將HTTP日志復(fù)制一份到這些服務(wù)器,但是由于影響性能的問題而沒有實(shí)現(xiàn)。盡管如此,我們還是將所有的網(wǎng)絡(luò)設(shè)備日志,syslog,Windows和Linux系統(tǒng)日志存在這里,所以我們能夠建立建立一個(gè)網(wǎng)絡(luò)的全局視圖,或者快速地排查問題。當(dāng)告警發(fā)生的時(shí)候,它也被用作Bosun的一個(gè)數(shù)據(jù)源。這個(gè)集群總計(jì)使用的存儲(chǔ)是 6x12x4 = 288 TB。
- 6 Dell R720xd 服務(wù)器, 每臺(tái)配置如下:
- 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
** SQL Server-HTTP日志 **
在這些服務(wù)器,我們將訪問負(fù)載均衡器的單獨(dú)HTTP請(qǐng)求,存儲(chǔ)到SQL數(shù)據(jù)庫(來源于HAProxy syslog)。我們只記錄少數(shù)高級(jí)別的請(qǐng)求,類似URL,查詢,UserAgent,SQL執(zhí)行時(shí)間,Redis,等等。在這里的數(shù)據(jù),每天將進(jìn)入一個(gè)集群的Columnstore 索引。我們借助這些數(shù)據(jù)排查用戶的問題,發(fā)現(xiàn)僵尸網(wǎng)絡(luò),等等。
- 1 Dell R730xd 服務(wù)器,配置如下:
- 雙 E5-2660 v3 處理器 (每個(gè)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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
** SQL Server - 開發(fā) **
我們喜歡盡可能多地模擬生產(chǎn)環(huán)境,類似SQL匹配,額,至少是它過去常常發(fā)生的那樣。們一直以來這購買升級(jí)生產(chǎn)處理器。我們會(huì)將升級(jí)這些服務(wù)器,采用2U 解決方案,在今年晚些升級(jí)Stack Overflow 集群的時(shí)候一起做。
- 1 Dell R620 服務(wù)器,配置如下:
- 雙 E5-2620 處理器 (每個(gè)6核 @2.0–2.5GHz)
- 384 GB of RAM (24x 16 GB DIMMs)
- 8x Intel S3700 800 GB SATA SSDs (RAID 10)
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540/I350 NDC)
這些就是實(shí)際服務(wù)我們網(wǎng)站的硬件,或者說大家普遍感興趣的部分。
我們當(dāng)然還有其它服務(wù)器,用于后臺(tái)任務(wù),例如日志記錄,監(jiān)控,備份,等等。
如果你對(duì)于我們其它系統(tǒng)還有特別感興趣的地方,請(qǐng)盡管留言提問,我很高興回答。
這是一周多以前在紐約數(shù)據(jù)中心的全景:


接下來?
我做的這一系列工作是希望能讓社區(qū)了解到最多情況。
通過Trello board, 它讓部署看起來像是下一個(gè)最有趣的話題。預(yù)計(jì)下一次將讓大家了解代碼是如何從開發(fā)者的機(jī)器到生產(chǎn)環(huán)境,以及這個(gè)過程中解決的所有問題。它將覆蓋數(shù)據(jù)庫遷移,滾動(dòng)構(gòu)建,CI 組件,我們?nèi)绾谓㈤_發(fā)環(huán)境,所有要素如何共享信息等。