您當(dāng)前的位置是:  首頁(yè) > 新聞 > 國(guó)內(nèi) >
 首頁(yè) > 新聞 > 國(guó)內(nèi) >

從脈脈宕機(jī)15個(gè)小時(shí)看如何實(shí)現(xiàn)高可用性架構(gòu)

2016-08-03 09:27:02   作者:   來源:CTI論壇   評(píng)論:0  點(diǎn)擊cti:


  據(jù)報(bào)道,近日,由于中國(guó)聯(lián)通整治違規(guī)互聯(lián)網(wǎng)接入及大帶寬業(yè)務(wù),某CDN/IDC服務(wù)商業(yè)務(wù)中斷,華為云故障一整天,導(dǎo)致生意幫一整天當(dāng)機(jī),脈脈服務(wù)器掛了,失聯(lián)15個(gè)小時(shí)……
  接著整個(gè)經(jīng)歷就非常崩潰了:用戶不間斷的咨詢投訴,很多用戶幾百萬的生意,重要的戰(zhàn)略合作受影響,重要數(shù)據(jù)和資料的無法調(diào)用,CDN直播叫停……都因?yàn)榫W(wǎng)絡(luò)故障而停擺,影響甚大。
  意外在所難免。用戶和客戶是無辜的。如何保障自己的技術(shù)和服務(wù)的高可用性,做到即使在出現(xiàn)0.0001%的故障發(fā)生率的情況下,仍然可以給用戶和客戶提供高可用性,保證災(zāi)難情況下網(wǎng)絡(luò)服務(wù)的及時(shí)恢復(fù),是云技術(shù)服務(wù)商、提供商必須面對(duì),又亟待解決的重要問題。
  什么是高可用性?
  要了解高可用性對(duì)于服務(wù)提供商的必要性和重要性,首先我們要了解什么是高可用性。一般來講,一個(gè)靠譜的云服務(wù)一定是:
  可用性非常高的,24*7隨時(shí)可以用。
  可控性一定要好,非云服務(wù)你可以上個(gè)鎖,云服務(wù)沒法上鎖,如何能做到可控性很好是一個(gè)難點(diǎn)。
  災(zāi)難恢復(fù),是軟件就會(huì)有問題。怎么樣積極地面對(duì)這個(gè)問題,多長(zhǎng)時(shí)間恢復(fù),如何恢復(fù),是否有成熟的預(yù)案這是任何一個(gè)云廠商都要誠(chéng)實(shí)面對(duì)的問題。
  業(yè)界的高可用性標(biāo)準(zhǔn)
  首先,我們來看一下可用性的評(píng)判標(biāo)準(zhǔn),就是SLA,Service Level Agreement。一個(gè)東西是不是高可用,那么就問他幾個(gè)九,敢不敢拿出來說一下。
  3個(gè)9基本上是國(guó)內(nèi)云服務(wù)的基礎(chǔ)線。也就是說云服務(wù)至少要做到3個(gè)9才稱為基本上可用,是合格性產(chǎn)品。如果做不到這個(gè),你的產(chǎn)品就連忽悠客戶都做不到了;厝ブ匦麻_發(fā),重新裝備,刷到至少3個(gè)9再回來。
  從3個(gè)9邁向4個(gè)9,也就是99.99%的可用性,每年只有52.6分鐘的時(shí)間是不可用的。以前谷歌搜索可用度大概是全球5個(gè)9到6個(gè)9之間,每一個(gè)小節(jié)點(diǎn)都是5個(gè)9不到6個(gè)9之間。其實(shí)這個(gè)是很可怕的一個(gè)概念,也就意味著即使有不可抗力,發(fā)生了臺(tái)風(fēng),洪水,地震等重大災(zāi)害性事件,也只需要5分鐘內(nèi)恢復(fù)服務(wù)。
  相較而言,大部分國(guó)內(nèi)的IDC機(jī)房都是按照99%設(shè)計(jì)的,一年至少3天是不可用的。這一標(biāo)準(zhǔn),給了廠商一定的機(jī)動(dòng)時(shí)間,也提供了一定的靈活性。
  所以說,從3個(gè)9往上,每一次提升都是一次技術(shù)的挑戰(zhàn)。SLA直接反映一個(gè)云服務(wù)的靠譜程度:
  從99%到3個(gè)9,是基本可以靠人力和運(yùn)氣解決的;
  從3個(gè)9到4個(gè)9,考驗(yàn)的是運(yùn)維自動(dòng)化的能力,災(zāi)備的能力;
  從4個(gè)9往上基本考驗(yàn)的是服務(wù)基礎(chǔ)架構(gòu)、業(yè)務(wù)設(shè)計(jì)的能力。
  聲網(wǎng)Agora.io的高可用性
  聲網(wǎng)Agora.io一直在4個(gè)9到5個(gè)9之間努力,這個(gè)目前還是很有難度的。為了保證高可用性,聲網(wǎng)Agora.io特意將核心機(jī)房分布在全球各地,以減少地區(qū)性的網(wǎng)絡(luò)故障對(duì)于通信的影響,同時(shí),核心機(jī)房用了十幾家不同的IDC,即使某家的網(wǎng)絡(luò)故障了,也能最大限度上保障服務(wù)的穩(wěn)定性。
  聲網(wǎng)在全球部署了覆蓋四個(gè)大洲的虛擬實(shí)時(shí)通信網(wǎng),100多個(gè)數(shù)據(jù)中心,近千臺(tái)服務(wù)器,每年為用戶提供數(shù)千億分鐘的網(wǎng)絡(luò)通話服務(wù),這一系列的舉動(dòng)都是為了充分確保接入SDK的客戶隨時(shí)隨地獲得高質(zhì)量的通話服務(wù)。
  我們認(rèn)為,要提升高可用性,需要從方方面面整體布局。
  從架構(gòu)上,聲網(wǎng)的所有服務(wù)都有多點(diǎn)備份,并且所有備份節(jié)點(diǎn)都能夠獨(dú)立服務(wù),不依賴其他節(jié)點(diǎn)。任何機(jī)房故障,甚至幾個(gè)機(jī)房同時(shí)故障都不會(huì)影響到整體服務(wù),除非所有節(jié)點(diǎn)同時(shí)發(fā)生故障。
  聲網(wǎng)的SDK也能夠快速切換,一旦檢測(cè)到某個(gè)服務(wù)節(jié)點(diǎn)不可用,可以快速切換到其他備份節(jié)點(diǎn)。
  當(dāng)然,武功再高,也怕菜刀。為了防范一些萬一的故障導(dǎo)致服務(wù)不可用,聲網(wǎng)還有一系列措施應(yīng)對(duì)故障。
  首先聲網(wǎng)部署了實(shí)時(shí)故障檢測(cè)系統(tǒng)。在服務(wù)用戶的同時(shí),該系統(tǒng)收集整個(gè)系統(tǒng)服務(wù)狀態(tài),并實(shí)時(shí)分析。如果遇到服務(wù)數(shù)據(jù)異常立即報(bào)警。
  接下來,聲網(wǎng)的數(shù)據(jù)分析系統(tǒng)可以對(duì)服務(wù)數(shù)據(jù)進(jìn)行多個(gè)維度和層面的分析匯總。在故障發(fā)生時(shí),可以快速判斷是哪個(gè)模塊或者機(jī)房出現(xiàn)問題。有了這個(gè)系統(tǒng),聲網(wǎng)就可以快速定位故障。比如常見的數(shù)據(jù)庫(kù)故障,進(jìn)程崩潰,遇到性能瓶頸,還有此次事件的主角——機(jī)房故障。
  在定位了問題之后,聲網(wǎng)還有一套工具能夠?qū)崟r(shí)調(diào)整線上系統(tǒng),進(jìn)行故障隔離。比如遇到某些數(shù)據(jù)庫(kù)瓶頸時(shí),能夠暫時(shí)關(guān)閉某些數(shù)據(jù)庫(kù)的寫服務(wù),不影響讀數(shù)據(jù)。能夠暫停某個(gè)機(jī)房的服務(wù),避免用戶受到影響;蛘吣承┖笈_(tái)服務(wù)故障,暫時(shí)禁用,不讓用戶的音視頻通信受到影響。
  在進(jìn)行故障隔離后,或者遇到難以隔離的故障,就需要快速恢復(fù)了。對(duì)于常見的進(jìn)程崩潰,聲網(wǎng)有自動(dòng)化的包管理工具可以一鍵重啟,回滾到前一個(gè)穩(wěn)定版本。對(duì)于數(shù)據(jù)庫(kù)故障,有數(shù)據(jù)庫(kù)工具可以快速重建數(shù)據(jù)庫(kù),并恢復(fù)數(shù)據(jù)。即使遇到這次事件中的機(jī)房故障,除了架構(gòu)設(shè)計(jì)能夠保證服務(wù)基本不受影響外,也有機(jī)房上架工具能夠快速上架,并使用部署工具重新部署一個(gè)新的機(jī)房。一般而言,聲網(wǎng)上架一個(gè)新機(jī)房?jī)H需幾十分鐘。
  故障隔離處理后,聲網(wǎng)會(huì)盡快對(duì)故障的根本原因做一個(gè)徹底的調(diào)查。首先從系統(tǒng)中收集各種數(shù)據(jù)和日志,進(jìn)行分析,并嘗試建立測(cè)試環(huán)境以確認(rèn)故障的根本原因。
  最后,需要進(jìn)行服務(wù)改進(jìn)。改進(jìn)主要從幾個(gè)方面著手:第一,修復(fù)問題。直接修復(fù)bug,改進(jìn)算法性能等。第二,架構(gòu)改進(jìn)。下一次這個(gè)模塊再出問題,怎么樣設(shè)計(jì)系統(tǒng)才能夠讓服務(wù)不受影響?如何設(shè)計(jì)多點(diǎn)備份?第三,工具改進(jìn)。下次再出現(xiàn)這些問題,需要哪些工具可以幫助更快速的定位,對(duì)故障進(jìn)行隔離,更快速的恢復(fù)故障?
  開發(fā)者該如何甄別高可用性服務(wù)
  面對(duì)市場(chǎng)上魚龍混雜的云服務(wù)提供商,開發(fā)者應(yīng)該如何正確地甄別和選擇高可用度的服務(wù)呢?三個(gè)層面:
  觀察該服務(wù)商的架構(gòu)是否符合高可用度,SLA一定要達(dá)到4個(gè)9;
  是否具備完整的、實(shí)時(shí)的災(zāi)難預(yù)案。從問題發(fā)生的預(yù)警,到問題定位分析,到問題解決和服務(wù)恢復(fù),是否能在最快的時(shí)間內(nèi)完成,將用戶的損失降到最低,
  是否把服務(wù)可用性當(dāng)成生命線的信仰。

專題