QPS 的? “12306”是如何支撐百萬-

作者:IT技術思維  來源/微信公眾號:IT-Thought  發布日期:2019-10-28

每到節假日期間,一二線城市返鄉、外出游玩的人們幾乎都面臨著一個問題:搶火車票!12306 搶票,極限并發帶來的思考雖然現在大多數情況下都能訂到票,但是放票瞬間即無票的場景,相信大家都深有體會。尤其是春節期間,大家不僅使用 12306,還會考慮“智行”和其他的搶票軟件,全國上下幾億人在這段時間都在搶票。“12306 服務”承受著這個世界上任何秒殺系統都無法超越的 QPS,上百萬的并發再正常不過了!筆者專門研究了一下“12306”的服務端架構,學習到了其系統設計上很多亮點,在這里和大家分享一下并模擬一個例子:如何在 100 萬人同時搶 1 萬張火車票時,系統提供正常、穩定的服務。Github代碼地址:
https://github.com/GuoZhaoran/spikeSystem大型高并發系統架構高并發的系統架構都會采用分布式集群部署,服務上層有著層層負載均衡,并提供各種容災手段(雙火機房、節點容錯、服務器災備等)保證系統的高可用,流量也會根據不同的負載能力和配置策略均衡到不同的服務器上。下邊是一個簡單的示意圖:負載均衡簡介上圖中描述了用戶請求到服務器經歷了三層的負載均衡,下邊分別簡單介紹一下這三種負載均衡。① OSPF(開放式最短鏈路優先)是一個內部網關協議(Interior Gateway Protocol,簡稱 IGP)OSPF 通過路由器之間通告網絡接口的狀態來建立鏈路狀態數據庫,生成最短路徑樹,OSPF 會自動計算路由接口上的 Cost 值,但也可以通過手工指定該接口的 Cost 值,手工指定的優先于自動計算的值。OSPF 計算的 Cost,同樣是和接口帶寬成反比,帶寬越高,Cost 值越小。到達目標相同 Cost 值的路徑,可以執行負載均衡,最多 6 條鏈路同時執行負載均衡。② LVS (Linux Virtual Server)它是一種集群(Cluster)技術,采用 IP 負載均衡技術和基于內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。③ Nginx想必大家都很熟悉了,是一款非常高性能的 HTTP 代理/反向代理服務器,服務開發中也經常使用它來做負載均衡。Nginx 實現負載均衡的方式主要有三種:
輪詢加權輪詢IP Hash 輪詢下面我們就針對 Nginx 的加權輪詢做專門的配置和測試。Nginx 加權輪詢的演示Nginx 實現負載均衡通過 Upstream 模塊實現,其中加權輪詢的配置是可以給相關的服務加上一個權重值,配置的時候可能根據服務器的性能、負載能力設置相應的負載。下面是一個加權輪詢負載的配置,我將在本地的監聽 3001-3004 端口,分別配置 1,2,3,4 的權重:
#配置負載均衡
upstreamload_rule{
server127.0.0.1:3001weight=1;
server127.0.0.1:3002weight=2;
server127.0.0.1:3003weight=3;
server127.0.0.1:3004weight=4;
}
...
server{
listen80;
server_nameload_balance.comwww.load_balance.com;
location/{
proxy_passhttp://load_rule;
}
}

關注IT技術思維微信公眾號,獲取更多精彩內容

九点期货配资