翻譯作品,水平有限,如有錯誤,請留言指正崭孤。
詳細(xì)請見原作者Nick Craver Blog (May 29,2016)鏈接
這是關(guān)于Stack Overflow架構(gòu)的一系列文章中的第二篇。
前一篇:《 Stack Overflow: 架構(gòu)》(2016版)
后一篇:《 Stack Overflow: 我們是如何做部署的》(2016版)
有人對硬件感興趣嗎糊肠?好吧辨宠,我感興趣,這篇博客就是關(guān)于這個話題货裹,所以彭羹,我贏了。如果你不關(guān)系硬件泪酱,那么可以走開并關(guān)閉瀏覽器了派殷。還在這兒嗎?真棒墓阀。
假如你的網(wǎng)頁訪問非常非常慢毡惜,在這種情況下,你應(yīng)該考慮采購一些新的硬件斯撮。
我曾今反復(fù)重申過多次:性能是一個重要組件经伙。
特別是當(dāng)你的代碼必須在最快的硬件上運行,硬件的關(guān)系則越為重大勿锅。正如任何其它的平臺帕膜,Stack Overflow的架構(gòu)是分層的。硬件對我們來說屬于基礎(chǔ)層溢十,它有自己的屋子垮刹,在很多情況下,對我們來說张弛,它的許多關(guān)鍵組件是不可控的荒典。酪劫。。就像運行在別人的服務(wù)器寺董。它也伴隨著直接和間接的成本覆糟。但是,這些不是本篇文章的重點遮咖,這方面的對比將于稍后報告滩字。目前來說,我希望能提供一份詳細(xì)的御吞,關(guān)于我們基礎(chǔ)設(shè)施的清單麦箍,用于大家參考和比較。
服務(wù)器照片魄藕。有時是裸設(shè)備内列。
這個網(wǎng)頁可以加載得更快撵术,但是我不能自禁背率。(言歸正傳)
在這個系列報告中我將提供大量數(shù)字和規(guī)格說明。
當(dāng)我說“我們的SQL Server CPU利用率接近5-10%嫩与,” 好吧寝姿,這非常棒。
但是划滋,5-10% 的什么饵筑? 這時我們需要一個參考值。這份硬件清單可以回答這些問題处坪,并且座位與其它平臺比較的依據(jù)根资,利用率對比如何,容量對比如何同窘,等等玄帕。
How We Do Hardware
免責(zé)聲明:我不是一個人干的。
George Beech (@GABeech) 是我的主要搭檔想邦,盤點管控Stack使用的硬件裤纹。
我們小心地規(guī)范每一臺服務(wù)器,以使它符合設(shè)計意圖丧没。 我們不會只管下訂單鹰椒、分派任務(wù)。在這個過程中我們也不會自己單獨完成呕童;你必須知道將來這些硬件需要運行什么東西漆际,才能做出合適的選擇。我們將和開發(fā)工程師或者其他的可靠性工程師一道夺饲,為運行在盒子上的應(yīng)用選擇最佳方案灿椅。我們也關(guān)注在整個系統(tǒng)中什么才是最好的套蒂。每一臺服務(wù)器都不是孤島。如何將它嵌入到總體的架構(gòu)中去茫蛹,確實需要好好考量操刀。哪些服務(wù)可以全平臺共享?數(shù)據(jù)中心婴洼?日志系統(tǒng)骨坑?管理更少的事情,或者至少做到更少的差異柬采,這件事本身就具有內(nèi)在的價值欢唾。
當(dāng)我們盤點硬件的時候,我們列出了很多規(guī)則來幫助我們厘清哪些是需要提供的粉捻。
我還從沒有真正寫下這些心里面的檢查表礁遣,簡短來說:
- 這是一個升級或降級的問題嗎?(我們購買一個更大的機(jī)器肩刃,或者一些更小的祟霍?
- 我們需要/希望做到什么程度的冗余? (多少預(yù)留空間和故障恢復(fù)能力?)
- **存儲: **
- 服務(wù)器/應(yīng)用需要掛在磁盤嗎?(我們是否需要Spinny操作系統(tǒng)驅(qū)動?)
- 如果是盈包,需要多少沸呐?(多大的網(wǎng)絡(luò)帶寬?有多少小文件呢燥?是否需要固態(tài)硬盤崭添?)
- 如果是SSD(固態(tài)硬盤),是否寫負(fù)載叛氨?(我們討論 Intel S3500/3700s? P360x? P3700s?)
- 我們需要多少SSD容量? (是否可以采用同時搭載HDD(機(jī)械硬盤)的雙輪方案?)
- 數(shù)據(jù)是否需要完全緩存呼渣?(相比沒有電容器的SSD,哪一種更便宜寞埠,哪種更合適屁置?)
- 將來存儲是否需要擴(kuò)展? (我們采用1U/10-bay 服務(wù)器, 或者一個 2U/26-bay 服務(wù)器?)
- 這是一個數(shù)據(jù)倉庫的場景設(shè)定嗎?(我們是否考慮3.5’’驅(qū)動器畸裳?如果是缰犁,每個2U主板上是12個還是16個驅(qū)動器?)
- 對于3.5’’的后板來說怖糊,存儲平衡在在處理器上是否能達(dá)到 120W TDP 的限制?
- 我們是否需要直接顯示磁盤帅容?(控制器是否需要支持pass-through?)
- ** 內(nèi)存:**
- 它需要多少內(nèi)存?(我們必須買什么伍伤?)
- 它將會使用多少內(nèi)存并徘?(我們最好買什么?)
- 我們是否認(rèn)為它稍后需要更多的內(nèi)存扰魂?(我們應(yīng)該搭配那種內(nèi)存頻率麦乞?)
- 它是一個內(nèi)存消耗型應(yīng)用程序嗎蕴茴?(我們是否想要達(dá)到最大主頻?)
- 它是一個高并發(fā)的應(yīng)用程序嗎姐直?(一定空間的情況下倦淀,我們是否想要通過更多的DIMM來分?jǐn)們?nèi)存?)
- ** CPU: **
- 我們希望采用哪種類型的處理器声畏?(我們需要CPU自己供電還是獨立電源撞叽?)
- 它是高并發(fā)的應(yīng)用程序嗎?(我們希望采用更少插龄、更快的內(nèi)核愿棋?或者,采用數(shù)量更多均牢,更慢的內(nèi)核糠雨?)
- 以下哪種情況?是否存在大量的二級和三級緩存競爭徘跪?(為了提高性能甘邀,我們是否需要一個巨大的三級緩存?)
- 應(yīng)用瓶頸主要是單一內(nèi)核嗎真椿?(我們是否采用最大主頻鹃答?)
- 如果是這樣的話乎澄,同時需要支持多少進(jìn)程數(shù)突硝?(這里我們希望采用哪種引擎?)
- **網(wǎng)絡(luò): **
- 我們是否需要增加 10Gb 網(wǎng)絡(luò)連接置济?(此處是否為透傳設(shè)備解恰,例如一個負(fù)載均衡器?)
- 我們需要怎樣的出/入流量均衡策略浙于?(哪個CPU內(nèi)核負(fù)責(zé)計算均衡權(quán)重护盈?)
- **冗余: **
- 我們在數(shù)據(jù)緩存中心是否也需要服務(wù)器?
- 我們是否需要在同等數(shù)量的情況下羞酗,接受更低的冗余要求腐宋?
- 我們是否需要一個電源線?不檀轨。我們不需要胸竞。
現(xiàn)在,讓我們來看看服務(wù)網(wǎng)站的都有哪些硬件参萄,它們位于紐約 (New York)QTS 數(shù)據(jù)中心卫枝。實際上,它位于新澤西(New Jersey)讹挎,但是讓我們保持這個約定校赤。為什么我們稱之為NY數(shù)據(jù)中心吆玖?因為我們不想重命名所有以NY-開頭的服務(wù)器。(What ?!…)我將記錄在下面的清單上马篮,丹佛的情況沾乘,在規(guī)格和冗余級別上略有差別。
Hide Pictures (in case you’re using this as a hardware reference list later)
Stack Overflow & Stack Exchange
紐約數(shù)據(jù)中心
全局選項
先說明一些全局配置浑测,在下面每臺服務(wù)器的介紹里就不重復(fù)了:
- 除非有特殊需要意鲸,不包含操作系統(tǒng)驅(qū)動。大多數(shù)服務(wù)器使用一對250 或者 500 GB SATA HDD 硬盤 尽爆,用于操作系統(tǒng)怎顾,通常是 RAID 1。我們不擔(dān)心啟動時間問題漱贱,所有物理服務(wù)器槐雾,啟動時間中的大部分不依賴驅(qū)動的速度(例如,檢查768GB內(nèi)存)幅狮。
- 所有服務(wù)器通過2個或以上10Gb網(wǎng)絡(luò)鏈路連接募强,通過雙活LACP協(xié)議。
- 所有服務(wù)器運行在208V 單相功率電源 (經(jīng)由2個PSU 崇摄,來自2個PDU-雙電源).
- 在紐約的所有服務(wù)器由纜線臂擎值,在丹佛的服務(wù)器則沒有(主要依靠本地工程師)。
- 所有服務(wù)器都有一個iDRAC連接 (經(jīng)由管理網(wǎng)絡(luò)) 和一個KVM連接逐抑。
網(wǎng)絡(luò)
- 2x Cisco Nexus 5596UP 核心交換機(jī) (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 上聯(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)
原作者備注: 每個 FEX 到核心 擁有 80 Gbps 上聯(lián)帶寬 ,核心通過一個160 Gbps端口通道與它們連接厕氨。由于最近的一些工程进每,我們位于丹佛數(shù)據(jù)中心的硬件會更新一些。所有4 臺路由器的型號是 ASR-1001-x 和 雙核 Cisco Nexus 56128P,每個都擁有96 SFP+ 10Gbps 端口 和 8 QSFP+ 40Gbps 端口命斧。這些節(jié)省下來的端口田晚,可以用于未來擴(kuò)展,我們可以為核心綁定4x 40Gbps鏈接国葬,替代每個 16x10Gbps端口的方案贤徒,正如我們在紐約做的那樣。
這些就是紐約的網(wǎng)絡(luò)設(shè)備情況汇四。
丹佛數(shù)據(jù)中心
這里需要提到的是Mark Henderson, 我們網(wǎng)站的可靠性工程師之一接奈,專程到紐約數(shù)據(jù)中心為我的這份報告拿到了一些高分辨率的照片。
SQL Servers (Stack Overflow 集群)
- 2 Dell R720xd 服務(wù)器船殉,每臺配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
SQL Servers (Stack Exchange 及其它業(yè)務(wù)集群)
- 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
原作者備注: 丹佛的SQL硬件在規(guī)格上相同鲫趁,對應(yīng)紐約部分這里只有一個 SQL 服務(wù)器
這是二月份為紐約的SQL Server 升級PCIe SSD的情形:
Web 服務(wù)器
- 11 Dell R630 服務(wù)器,每臺配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
應(yīng)用服務(wù)器 (Workers)
- 2 Dell R630 服務(wù)器, 每臺配置如下:
- 雙 E5-2643 v3 處理器(每個 6 核 @3.4–3.7GHz)
- 64 GB of RAM (8x 8 GB DIMMs)
- 1 Dell R620 服務(wù)器,配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
原作者備注: NY-SERVICE03 目前仍然是一臺 R620, 但是現(xiàn)在并沒有足夠老到以至于需要更換利虫。它會在今年晚些時候升級挨厚。
Redis 服務(wù)器 (緩存)
- 2 Dell R630 服務(wù)器, 每臺配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
Elasticsearch 服務(wù)器 (檢索)
- 3 Dell R620 服務(wù)器, 每臺配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
HAProxy 服務(wù)器 (負(fù)載均衡器)
- 2 Dell R620 服務(wù)器 (流量來源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 網(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á)流量), 每臺配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC) - (DMZ) 外網(wǎng)流量
- 雙 10 Gbps 網(wǎng)絡(luò) (Intel X540) - 外網(wǎng)流量
原作者備注: 這些服務(wù)器是不同時期采購的堡僻,因此規(guī)格上略有差異。并且疫剃,2臺CloudFlare負(fù)載均衡器因為安裝了memcached,擁有更多內(nèi)存(我們現(xiàn)在已經(jīng)不運行該組件)钉疫。這些服務(wù),redis, 檢索,和負(fù)載均衡器在stack都是基于1U 服務(wù)器巢价。
這是紐約的情況:
其它
我們還有一些其他的服務(wù)器并不直接或間接服務(wù)于網(wǎng)站的流量牲阁。
它們負(fù)責(zé)處理一些相關(guān)業(yè)務(wù)(例如,域名控制器壤躲,少量用于應(yīng)用驗證城菊,跑在虛擬機(jī)上),或者一些次要的采購用于監(jiān)控碉克,日志存儲凌唬,備份等等。既然已經(jīng)表示未來會做一系列的報告漏麦,我把一切有趣的“后臺”服務(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 處理器 (每個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+)
在一些場景下更耻,還有幾臺重要的服務(wù)器不是虛擬機(jī)。這些系統(tǒng)后臺任務(wù)捏膨,幫助我們通過日志追蹤排查問題秧均,存儲大量的數(shù)據(jù)等等。
機(jī)器學(xué)習(xí)服務(wù)器 (Providence)
這些服務(wù)器99%的時間是空閑的脊奋,但是每晚承擔(dān)了大量的處理工作:刷新Providence熬北。它們也可以通過內(nèi)部數(shù)據(jù)中心的方式疙描,用來測試基于海量數(shù)據(jù)的新算法诚隙。
- 2 Dell R620 服務(wù)器, 每臺配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
譯者注:Providence,應(yīng)為項目代號起胰。Providence通過分析流量日志久又,給網(wǎng)站的訪問用戶打標(biāo)簽 (類似“web開發(fā)者” 或者 “使用Java技術(shù)棧”) 效五。詳細(xì)可以查閱《providence-machine-learning-at-stack-exchange》
機(jī)器學(xué)習(xí)服務(wù)器-Redis (Still Providence)
這是一個為 Providence服務(wù)的redis數(shù)據(jù)集地消。它們通常是一臺主用,一臺備用畏妖,還有一個實例是用于測試脉执,如最新版的ML算法。當(dāng)它不用做Q&A站點時戒劫,這些數(shù)據(jù)會服務(wù)于職位招聘的邊欄廣告半夷。
- 3 Dell R720xd 服務(wù)器,每臺配置如下:
- 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 存儲) 婆廊,數(shù)據(jù)來源于,任何地方巫橄。
我們曾計劃將HTTP日志復(fù)制一份到這些服務(wù)器淘邻,但是由于影響性能的問題而沒有實現(xiàn)。盡管如此湘换,我們還是將所有的網(wǎng)絡(luò)設(shè)備日志宾舅,syslog,Windows和Linux系統(tǒng)日志存在這里彩倚,所以我們能夠建立建立一個網(wǎng)絡(luò)的全局視圖筹我,或者快速地排查問題。當(dāng)告警發(fā)生的時候帆离,它也被用作Bosun的一個數(shù)據(jù)源崎溃。這個集群總計使用的存儲是 6x12x4 = 288 TB。
- 6 Dell R720xd 服務(wù)器, 每臺配置如下:
- 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ù)載均衡器的單獨HTTP請求袁串,存儲到SQL數(shù)據(jù)庫(來源于HAProxy syslog)。我們只記錄少數(shù)高級別的請求呼巷,類似URL囱修,查詢,UserAgent,SQL執(zhí)行時間王悍,Redis破镰,等等。在這里的數(shù)據(jù)压储,每天將進(jìn)入一個集群的Columnstore 索引鲜漩。我們借助這些數(shù)據(jù)排查用戶的問題,發(fā)現(xiàn)僵尸網(wǎng)絡(luò)集惋,等等孕似。
- 1 Dell R730xd 服務(wù)器,配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
** SQL Server - 開發(fā) **
我們喜歡盡可能多地模擬生產(chǎn)環(huán)境刮刑,類似SQL匹配喉祭,額,至少是它過去常常發(fā)生的那樣雷绢。們一直以來這購買升級生產(chǎn)處理器泛烙。我們會將升級這些服務(wù)器,采用2U 解決方案翘紊,在今年晚些升級Stack Overflow 集群的時候一起做蔽氨。
- 1 Dell R620 服務(wù)器,配置如下:
- 雙 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 網(wǎng)絡(luò) (Intel X540/I350 NDC)
這些就是實際服務(wù)我們網(wǎng)站的硬件,或者說大家普遍感興趣的部分鹉究。
我們當(dāng)然還有其它服務(wù)器中捆,用于后臺任務(wù),例如日志記錄坊饶,監(jiān)控泄伪,備份,等等匿级。
如果你對于我們其它系統(tǒng)還有特別感興趣的地方蟋滴,請盡管留言提問,我很高興回答痘绎。
這是一周多以前在紐約數(shù)據(jù)中心的全景:
接下來津函?
我做的這一系列工作是希望能讓社區(qū)了解到最多情況。
通過Trello board, 它讓部署看起來像是下一個最有趣的話題孤页。預(yù)計下一次將讓大家了解代碼是如何從開發(fā)者的機(jī)器到生產(chǎn)環(huán)境尔苦,以及這個過程中解決的所有問題。它將覆蓋數(shù)據(jù)庫遷移行施,滾動構(gòu)建允坚,CI 組件,我們?nèi)绾谓㈤_發(fā)環(huán)境蛾号,所有要素如何共享信息等稠项。