由某CDN故障引發的思考:業務方如何應對坑爹的第三方故障
大部分公司的業務規模應該還沒有達到所有服務都能夠自給自足的程度,而且就算是BAT這些巨頭們,很多服務也完全沒有必要所有東西都自己做,一是效率問題,二是成本問題。喜歡喝牛奶未必就要自己養頭奶牛,所以大部分公司的業務或多或少都會依賴一些第三方公司的服務,尤其是需要和第三方合作的業務,這種依賴就比較普遍,與業務的關聯度也比較大了。
CDN服務算是第三方服務的一種,還有很多其他服務,比如短信發送服務,聲訊服務,關鍵詞過濾服務,第三方合作數據接口,酒店ota服務,運營數據統計服務,DNS解析服務 ,安全防范平臺服務等。如果要給這些第三方服務分個類的話可以將其分為三大類:基礎類,比如CDN服務,DNS解析,安全防范服務,這一類第三方服務屬于基礎服務,與具體的業務沒有關系,也不直接與用戶產生關聯,但是一旦基礎服務出現異常往往會導致整個業務完全不可用;業務類,比如酒店ota服務,短信發送服務,,聲訊服務,第三方數據合作接口(比如點評信息的引用,第三方登錄),業務類的服務會與業務緊密聯系在一起,必要的時候還是會業務密不可分的一部分,這一類服務出現異常,只會導致部分業務功能異常或者邏輯異常,將此類異常做好降級工作,業務的其余功能理論上是不受影響,繼續能夠為用戶提供服務的;第三類服務,運營輔助類服務,其實也可以歸為基礎類,但是第三類服務的重要性對于大部分網站遠遠沒有其他基礎類服務的重要性高,一旦出現異常頂多是運營數據的異常,對于用戶而言,這部分的異常是無感知的。很多公司在能力所及的范圍下都會將這一部分作為自身的運營工具來開發,對于一些業務規模還比較小的網站而言,這部分還是需要依賴一些專業的第三方數據運營平臺的,比如GA,站長工具,還有一些點擊統計的工具。
在實際的工作場景中,想必大家多數人和我一樣,多多少少都會遇到這三類服務中某些或者全部服務出現過異常從而影響到自身業務的可用性。
對此,我們也想過很多方法來規避這些第三方服務發生故障時對我們的業務造成不必要的影響,很多時候,對于基礎或者非常重要的服務,要做好備份,容錯,降級等準備工作,而且要定期對這些異常備用方案進行演練,切實驗證這些準備工作的可用性以及切換效率,避免出現關鍵時刻準備工作完全不起作用的情況。
針對基礎類的第三方服務,我們應該從系統架構著手去支持服務的冗余與高可用,盡量將基礎類的服務冗余散列在多個服務商處,就算是其中部分的服務商出現問題,我們也可以及時屏蔽掉這些有問題的服務,從而有效的保證業務的高可用。同時,***相應基礎服務的監控也是非常有必要的,因為基礎服務一旦出問題,對整個業務的影響那是非常嚴重的,基礎服務與業務的關系更像冰面上行走的人,一旦冰面破了,人就會掉到冰窟里面去了。比如DNS解析異常,那就會導致用戶完全無法訪問我們的站點,當然也就無法完成其他業務的處理了;CDN服務出現異常,那放在CDN服務上的靜態文件,影音文件無法正常訪問的話,就會導致用戶看不到正常的內容或者無法完成相關的交互操作,比如登錄,比如購買,整個業務站點基本上就處于全部癱瘓狀態了。基礎服務很多后尾效應比較嚴重,比如DNS服務出現異常后,我們自身是切換到正常的服務方了,但是有可能局部地區的DNS會很長時間出現異常;比如CDN服務異常,很多時候這些異常會被用戶或者一些小的運營商的內部代理服務器緩存掉。及時發現,處理基礎服務的異常,就是給我們的業務爭取可用的時間。
針對業務類的第三方服務,我們應該從業務設計出發,去掉強依賴,做好服務的降級和容錯,以便當部分第三方服務異常的時候可以保證業務的其他部分是可用的。業務類第三方服務往往存在著類似“握手”的關系,所以很少能夠做備份冗余的工作,而且這種備份冗余也***是第三方服務來做的,對于業務方而言,出現握手失敗的話就只能自己處理相關異常并做適當的降級,做到異常部分功能隱藏,同時其他部分的功能不受異常影響能夠繼續為用戶提供服務。
針對運營輔助類的第三方服務,我們首要要做的是,不要讓這類異常影響到任何業務功能,同時不要讓用戶感知到。對于運營工具服務的異常,完全可以臨時將此類服務關閉,相關數據可以用過往的數據進行填充,畢竟運營數據一時的異常不會對長遠的運營工作造成任何大的影響,但是如果影響到業務的可用性就得不償失了。
盡量找靠譜,質量有保證的第三方服務提供商,成本不是這么省的,有的時候為了節省成本而選擇了一家質量無保證的服務商***損失的也許比我們節省的要多得多。
第三方服務商的責任心與溝通渠道也很重要,需要我們關注的,除了服務商服務質量保證外,我們也需要關注服務商的責任心,出問題后是否會主動,及時通知以及迅速降低第三方服務異常對客戶造成的影響。另外,溝通渠道是否順暢,客服與技術人員是否可以及時有效處理用戶的問題也是非常重要的。服務商的改進是不是靈活可變的,對于客戶提出的需求,能否盡可能地去實現,很多第三方服務商要么需要花錢定制,要么直接告訴你我們系統就是這個樣子的,沒的改,雖然他也知道自己系統存在著諸多的不合理之處。
不要把雞蛋放在一個籃子里,對于大多數的網站,如果成本壓力不是很大的話,非常建議不要把所有的服務放在一家服務商身上,必要的時候要做好冗余備份,而且盡可能的在平時就利用其這些備份措施,以保證其可用性。