要知道,每壹個程序系統都不是單獨存在的,而是由眾多小系統組成的。
而今天我們就壹起來了解壹下,關於系統故障的問題應該如何發現和解決。
故障發現所謂“故障發現”,就是通過技術手段實時采集系統中每個節點的健康狀態,以及每2個節點之間鏈路的健康狀態,包括但不限於調用成功率、響應時間等等。
借此代替我們的眼睛去盯著整個系統,壹旦低於某個設定的閾值,就觸發報警給我們壹個提醒。
因為當妳的系統中存在成百上千的程序時,靠肉眼去找到發生故障的位置,簡直是天方夜譚。
哪怕找到了,也可能已經產生了巨大的損失。
負責故障發現的解決方案都屬於應用性能管理(APM)範疇。
我們在部署這個“眼睛”的時候,需要考慮到全方位的覆蓋,要包含所有的節點。
比如:在Web方面可以直接利用瀏覽器提供的導航計時(NavigationTiming)和資源計時(ResourceTiming)接口來采集性能數據,非常方便。
在iOS、Android這種App方面通過源代碼插樁的方式進行。
比如直接引入采集SDK然後硬編碼在源代碼中,或者通過AOP框架來進行動態代碼註入。
代碼的註入位置就在每個方法的執行前和執行後。
故障消除現在已經能夠很容易的發現故障了,我們就可以通過綜合運用隔離性、橫向擴展、代理、負載均衡、熔斷、限流、降級等等機制來快速的“掐滅故障”。
分布式系統的規模越大,耦合越嚴重,各個子系統之間通過網絡連接在壹起,就如赤壁之戰中的曹軍連在壹起的船舶壹樣,只要其中壹個著火了就會就近蔓延。
所以,成都IT培訓/建議壹旦發現某個子系統掛了,就需要盡快切斷與它的聯系,保證自己能夠不受連累,防止雪崩的發生。
我們可以先運用docker之類的技術將每個應用在運行時的環境層面隔離開來。
然後,通過橫向擴展讓每個應用允許被“Copy”,以此來部署多個副本。
接著,結合代理和負載均衡讓這些副本可以***同對外提供服務,使得每個應用程序本身先具備“高可用”。
後的三大防禦措施,熔斷、限流、降級來快速“掐滅故障”,避免故障在不同的應用程序間擴散。