做者丨魏暘:騰訊高級工程師,具備15年運維經驗的專家。負責QQ空間、微雲、QQ空間相冊等的運維工做。
12月16日,首期沙龍「海量運維實踐大曝光」在騰訊大廈圓滿舉行。沙龍出品人騰訊運維技術總監、復旦大學客座講師、DevOps專家梁定安,講師騰訊手機QQ運維負責人郭智文,騰訊高級工程師魏暘,騰訊SNG資深運維專家周小軍出席沙龍,並帶來精彩的技術分享。爲了便於你們學習,特將本次沙龍講師的演講內容進行了整理。您也能夠在騰訊織雲公衆號下載本次演講PPT。後端
騰訊社交業務包括QQ、QQ空間、QQ相冊等核心業務。核心業務按深圳、天津和上海三地分佈,各支撐華南、華中、華東、華北、西北、西南等大區的用戶訪問。服務器
你們都知道核心業務多地部署物理容災,名字服務、負載均衡等手段架構容災。可是當機房、網絡等大範圍故障真正發生時,咱們要怎麼作才能保證業務持續可用?拿前一段時間騰訊深圳某個機房光纖被挖斷的案例來說,業務碰到的問題:網絡
帶着這些問題,我簡單介紹一下空間SET化分佈異地多活方案。架構
提高質量,提高速度,提高效率,節約成本。併發
業務經過SET化部署在多個物理機房,當某個機房故障時,咱們能夠快速切換服務到其餘機房,能夠作到物理容災。同時,多地部署也提供了用戶就近接入的能力,提高用戶體驗。再者,業務關聯的服務部署在同一個城市或者機房,可以極大減小業務之間的機房穿越帶寬,下降成本。最後,SET的複製結合織雲的快速部署能力,咱們可以快速複製並在不一樣地域部署多個業務SET。負載均衡
簡單來講,SET是一個包含了多個標準化模塊的集合,同時包含了更多的業務屬性,好比業務形態,核心指標,柔性策略,地域,調度策略等等。運維
橫向分佈與條帶化的思惟 海量用戶按不一樣比例被分流到不一樣的專區訪問。好比用戶接入維度,咱們劃分了PC、移動端SET,同時在移動端咱們又能夠細分爲安卓和蘋果用戶。好比運營商,好比地域分佈。每個SET都須要有可度量的指標,空間業務主要根據SET內模塊負載、可支撐的用戶量、和實時交易量等維度來評估一個SET。異步
在有了可度量的SET標準後,咱們就能夠基於本身的業務形態來建立SET模型了。以空間爲例,用戶登陸進空間首先會看到本身發表的歷史說說,相冊,好友動態等等信息,咱們把這一類的業務場景劃分爲讀數據SET。用戶會在空間上發說說,上傳照片或視頻,咱們把這一類的業務場景劃分爲寫數據SET。同時深圳的PC或者移動端用戶更新了空間,數據須要同步到其餘地域的後端存儲上,空間有一套專用的同步中心架構來保證數據同步。工具
咱們基於空間的業務場景制定的一個大體的模型就是這樣:根據接入層區分用戶,單點寫,多點讀,數據同步模塊保證多點讀的數據一致性。性能
初步模型制定好之後,咱們須要針對不一樣的架構和業務場景來劃分不一樣的SET。好比空間首屏,主要由空間的信息中心模塊來負責數據拉取展示,咱們把信息中心相關聯的業務模塊都統一劃分爲I類SET。再根據不一樣的
咱們還根據不一樣數字表明不一樣的地域信息和SET順序。
1) 名稱分爲2段,用「_」分割;第1段固定爲SET,表示專區;
2) 第二段分爲4節,每節佔一位,前3位與目前規則一致:
3) SET類型,簡寫爲A、D 、B、I,分別表明接入、數據SET、基礎數據,信息中心等;
4) 地域信息,分別有深圳,上海、西安等,用0、一、2分別按序增長,最多到16進制等
5) SET數序號,從一、二、3開始,最多到16進制的F;
6) 業務產品信息,即Qzone爲各業務搭建的SET,用一個字母代替,如P、G、U分別表明如PENGYOU、3G、UGC等
同步中心是空間業務SET化能力的一個重要組件,業務數據的同步都依賴同步中心。簡單介紹一下同步中心的架構:單寫多度的業務講數據接入同步中心後,同步中心經過多種技術手段保證數據同步到多地的讀SET。同步中心架構較複雜,這裏主要介紹一下同步中心的有序轉發:
許多業務對用戶請求處理的前後順序有很嚴格的要求,爲了實現用戶請求的有序轉發,同步中心作了三個功能:
SET內部和不一樣SET的業務模塊都是經過名字服務來相互訪問的
用戶層GSLB->STGW=TGW+Nginx,Nginx自動獲取vip
接入->邏輯:L5,vip->l5名字服務。負載均衡的時候有過載保護
邏輯->存儲:L5。Stgw和L5都是騰訊自研的路由、名字服務組件。調度都是基於名字
服務來實施。L5有SET化的標籤,可讓SET的服務配置文件保持一致的狀況下,服務只在SET內調度。能夠極大提高SET的部署效率。
指定好的SET,須要經過壓測來找出SET內業務模塊資源的最優配比。咱們會經過調度現網用戶來對SET作壓測,經過壓測找出SET內某個模塊的短板並及時調整資源配比。同時,隨着SET內模塊服務的升級,服務性能也在變化,咱們會按期作調度演習來壓測SET的完整鏈路,及時更新SET內模塊的資源配比,可支撐用戶數等SET核心指標。
在制定好SET模型,明確了每一個SET能夠支撐多少用戶量,對應的業務場景,包含了多少個模塊,能夠支撐多少用戶後,就能夠開始着手SET部署了。每一個SET創建一個模板,錄入SET內包含的模塊,模塊內服務、權限、文件等信息保持一致,不一樣SET的配置不一樣
SET的複製根據SET模板快速部署。這些信息最後會同步到織雲,由織雲來快速部署服務。一個SET內幾十個模塊,幾百臺服務器可在10分鐘內完成自動化部署上線 。
針對SET內不一樣的業務架構,業務形態,咱們也開發了配套的監控工具。
前面主要說了爲何要作SET,怎麼作,以及怎麼維護和監控,回到深圳機房光纖被挖斷的問題上來,咱們是怎麼作的?
每一個SET都有可衡量的指標,模塊設備的平均負載都在40%左右。
若是網絡故障影響到了用戶接入W01 SET,咱們會調整stgw將用戶轉移到部署在另外一個機房的W02 SET。若是W01 訪問I01故障,咱們能夠把W01的訪問切換到W02。若是整個深圳機房都不可訪問,咱們則會把請求切換到上海、天津的SET中。
重大活動期間,用戶量可能會突增幾倍甚至十幾倍,靠堆設備不現實。咱們針對這類場景制定了柔性策略,當SET容量達到必定的標準時,好比CPU負載達到70%,咱們就會開啓業務的柔性策略,犧牲用戶部分非核心功能體驗來保證業務總體可持續可用。柔性策略有分級,SET容量沒達到一個標準就會自動啓用不一樣的柔性策略。