架構師---如何應對雙十一和618大促

一、高可用:

在這裏插入圖片描述
舉例子說,系統的可用性要達到4個9(99.99%)那麼根據上圖可以看到是不能一年內超過53分鐘。這樣看的話確實很難達到。但是公式上說了是計劃之外的。相當於是意外停機,而不是上線部署,系統切換這種正常停機。
計劃外停機和正常運行着兩個狀態在不同場景下定義不同,系統的一部分非關鍵功能降級,對整個系統來說算計劃外還是正常?降級持續或累計多久纔算非正常停機?我們可以再系統的SLA(service level agreement)服務等級協議中定義描述。
那麼備戰中如何在SLA定義好的情況下(吞吐量和響應時間)去考慮系統的可用性則需要涉及到多個因素,比如可擴展性、網絡狀況、容災備份以及系統的實現方式等。

高可用HA(High Availability)是分佈式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。
方法論上,高可用是通過冗餘+自動故障轉移來實現的。
整個互聯網分層系統架構的高可用,又是通過每一層的冗餘+自動故障轉移來綜合實現的,具體的:
(1)客戶端層到反向代理層的高可用,是通過反向代理層的冗餘實現的,常見實踐是keepalived + virtual IP自動故障轉移。
(2)反向代理層到站點層的高可用,是通過站點層的冗餘實現的,常見實踐是nginx與web-server之間的存活性探測與自動故障轉移。
(3)站點層到服務層的高可用,是通過服務層的冗餘實現的,常見實踐是通過service-connection-pool來保證自動故障轉移。
(4)服務層到緩存層的高可用,是通過緩存數據的冗餘實現的,常見實踐是緩存客戶端雙讀雙寫,或者利用緩存集羣的主從數據同步與sentinel保活與自動故障轉移;更多的業務場景,對緩存沒有高可用要求,可以使用緩存服務化來對調用方屏蔽底層複雜性。
(5)服務層到數據庫“讀”的高可用,是通過讀庫的冗餘實現的,常見實踐是通過db-connection-pool來保證自動故障轉移。
(6)服務層到數據庫“寫”的高可用,是通過寫庫的冗餘實現的,常見實踐是keepalived + virtual IP自動故障轉移。

二、可擴展性

擴展性分爲兩種:1-水平擴展、2-垂直擴展
1-水平擴展:一般大家會說堆機器,增加資源的節點數,使負載均衡到每個節點,以應對高流量下的請求。
2-垂直擴展:資源有限的情況下,以及高配置的服務器都需要考慮垂直擴展方案。可以對比應用12因素來參照
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、災備

新的機器資源除了用於擴容,還有個最大的用途就是增加災備能力。現在都是異地多活,多機房部署,要能保證一個機房有故障的情況下,系統依然高可用。在備戰期間,會進行全鏈路壓測,將流量入口全部切換到一個機房,對數據庫進行主備切換等,來驗證和查找整個系統的瓶頸以提升整個系統的災備的能力。
記住一點,添加機器也不是萬能的,優化代碼邏輯,優化架構設計會從根本減少很多問題。

四、性能、柔性和魯棒性

對於大促的應對,首先會對應用架構進行升級,對於主要流量點進行着重關注,可以考慮緩存和異步化的方式來提高性能。
如何理解柔性和魯棒性?
魯棒性強調的是系統結實,不容易出問題,柔性強調出現故障後快速隔離影響和快速修復的能力。
魯棒性可以通過限制上線的數量以及加強對緊急上線的審批力度來控制。
柔性可以在系統流量的高峯期,對所依賴的重要性不高的服務進行降級,對所依賴響應能力差的服務進行熔斷,對多個已來訪進行隔離實現艙壁的效果,也可以不斷優化自動化程度來提高柔性。

五、安全

對於黑客不明攻擊,以及非法請求需要進行合法校驗。大的流量促銷入口,可以限制IP,限制賬號,限制時間,限制數量,限制接口的同一用戶調用次數來控制非法惡意攻擊請求。比如短信驗證碼,現在增加圖片識別滑動、拖動、識圖等功能來增加黑客攻擊難度。保證系統安全。
京東利用了SDL+安全開發控制,基於京東大促數據牆建立了保障指揮系統,對全站HTTPS進行推廣和優化,並通過DDoS攻防平臺進行攻擊流量的集中監控來有效保證安全。

六、網絡

網絡隔離指的是對測試環境,性能壓測環境,UAT環境,生產環境進行隔離,即相應環境下的服務器是不能互通的,這樣可以保證一個乾淨的網絡環境,這樣優先去掉了外界的干擾因素後面出現問題也便於排查。
做系統預案的時候主要包括兩個部分,一個是技術預案,一個是業務預案。技術預案一般是自動容錯,故障自動轉移,主備自動切換,備用的網絡專線,備用域名,備用服務器,數據堆積處理,上下游限流處理, 數據庫阻塞、死鎖、連接數滿等等等等,這個後面專門弄個文章來討論下。而業務預案往往被忽視,甚至沒做,比如你的電商平臺下有10家物流供應商,一旦其中的一個或者多個出現異常導致無法作業,這時候應該可以自動切換選擇不同的供應商,或者調整權重分配。

七、搗亂猴子(故障)演練

故障演練也包括兩部分,一個是正常的故障演練,比如數據庫主備庫宕機自動切換演練,nginx主備切換演練,redis節點宕機切換演練,應用宕機演練等等。另外一個就是破壞性的演練,項目在不發通知的情況下祕密成立一個破還演習小組,在任何時間以任何手段對系統環境進行破壞,其中包括網絡,中間件,應用,數據庫等等,比如讓網絡突然掉線或者應用集羣破壞50%,這個可以考驗整個項目團隊的應急能力和整個系統恢復所需要的時間以及看出更多的漏洞,最後項目團隊做總結。

八、集中辦公

集中辦公一般在大促前的兩個禮拜就開始了,項目的核心人員包括核心開發人員,架構師,DBA,網絡工程師等到一個相對獨立封閉的環境進行辦公,這樣做的主要目的就是保證這些人可以在一個相對安靜的環境下更專注的去尋找系統中的一些漏洞和系統優化,以及對於系統問題及時響應。

九、預防大於一切-值班安排

系統的每個模塊都要保證至少有2~3個人是精通的,這樣一旦出現問題可以迅速的進行排查修復,而且安排7X24個小時白夜班輪崗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章