如何建設高可用系統?這個問題可大可小,大到幾十本書都在說這個話題,小到一篇部落格也可以指點一二。
“高可用性”(High Availability)通常來描述一個系統經過專門的設計,從而減少停工時間,而保持其服務的高度可用性。說白了就是7*24小時不間斷、高質量響應來自使用者、其他業務系統的請求。
首先我們講高可用,多高算是高可用?99.9%?99.99%?99.999%?...比較典型的就是淘寶的雙十一、螞蟻金服的支付寶那一定是高可用的,達到99.9999也是可以的。
針對一般企業,個人覺得能到99.9%就已經很不錯了,或多或少都有一些小的bug,或是一些錯誤的資料導致了少數個別人的系統不可用。那麼回到問題本身上來,要設計一個高可用的系統需要從以下幾方面來講:
系統的bug要麼是程式碼產生的要麼是資料產生的,那麼做好資料模型設計、資料最終一致性就很重要,同時代碼層面也要充分考慮、相容一些邊界資料、異常資料的場景,如何對這些非健康資料做到可監控、規避、修復也是需要考慮的一個點,很多時候我們的系統經過充分測試終於可以上線了,運行了一段時間總是出現各種各種的錯誤,常見的下標越界、空指標都出來了,查了半天發現是資料的問題。本身並不難,難得是把握好每一個數據細節,做好程式碼控制即可。
基礎監控:基礎監控包含伺服器監控、資料庫監控、服務監控,其中伺服器監控指標有:TCP連線數、記憶體使用率、CPU使用率、磁碟IO讀寫、網路狀態等等,資料庫監控指標有:連線數、記憶體使用率、磁碟使用率、慢sql查詢等,服務監控指標有:程序是否存活、程序下執行緒數及狀態、佔用記憶體走勢(是否持續上升)、平均請求響應時間等等,以上只是列舉了部分常見監控。
業務監控:業務監控基本上就是:日誌監控(日誌分級,不同範圍的日誌寫不同的檔案,按時間、按業務分割日誌)、核心API監控、核心資料監控等等,日誌監控可以透過linux指令碼或者第三方開源專案(例如sentry)做監控告警機制,API監控可以透過APM效能監測工具(例如pinpoint)來進行鏈路跟蹤。
告警送達:一旦系統產生了告警資訊,要根據告警的嚴重等級觸發對應的告警機制,嚴重的直接電話相關人員、期次簡訊、釘釘告警,可每日發一次系統整體執行監控情況郵件到相關係統維護人員。
資料安全:資料備份、防止SQL注入、主從同步,資料上傳&修改介面保證內網訪問
系統安全:開放指定埠、內網訪問、VPC網路,基於devops做運維,VPN代理等等,該上的就上,該用的就用,不能抱有僥倖心理
網路安全:閘道器、限流、IP白名單等等
如何建設高可用系統?這個問題可大可小,大到幾十本書都在說這個話題,小到一篇部落格也可以指點一二。
“高可用性”(High Availability)通常來描述一個系統經過專門的設計,從而減少停工時間,而保持其服務的高度可用性。說白了就是7*24小時不間斷、高質量響應來自使用者、其他業務系統的請求。
首先我們講高可用,多高算是高可用?99.9%?99.99%?99.999%?...比較典型的就是淘寶的雙十一、螞蟻金服的支付寶那一定是高可用的,達到99.9999也是可以的。
針對一般企業,個人覺得能到99.9%就已經很不錯了,或多或少都有一些小的bug,或是一些錯誤的資料導致了少數個別人的系統不可用。那麼回到問題本身上來,要設計一個高可用的系統需要從以下幾方面來講:
設計&程式碼一個優秀的系統一定要有優秀的設計,做好服務劃分,模組解耦,介面職責單一,介面冪等性等等。程式碼層面要嚴格執行業內通用的程式碼開發規範,公司技術部門可參考一些書籍制定適合自己的程式碼開發規範,參考書籍:《阿里巴巴Java開發手冊》、《重構-改善及有程式碼的設計》,也可以透過安裝一些程式碼掃描外掛:阿里規約掃描外掛、Sonarlint等來約束每一個開發人員的程式碼,並逐步建立起code review機制,盡最大努力保障程式碼的健康。介面必須經過壓測,壓測可以達到兩個目的:1.當前系統可支撐的QPS最大是多少?2.透過一段時間的壓測能夠驗證開發的介面是否經得住線上使用者長時間正常使用?只有透過壓測了才能做到心中有數,在有推廣或者流量高峰時間段時候能夠做到胸有成竹。資料系統的bug要麼是程式碼產生的要麼是資料產生的,那麼做好資料模型設計、資料最終一致性就很重要,同時代碼層面也要充分考慮、相容一些邊界資料、異常資料的場景,如何對這些非健康資料做到可監控、規避、修復也是需要考慮的一個點,很多時候我們的系統經過充分測試終於可以上線了,運行了一段時間總是出現各種各種的錯誤,常見的下標越界、空指標都出來了,查了半天發現是資料的問題。本身並不難,難得是把握好每一個數據細節,做好程式碼控制即可。
監控基礎監控:基礎監控包含伺服器監控、資料庫監控、服務監控,其中伺服器監控指標有:TCP連線數、記憶體使用率、CPU使用率、磁碟IO讀寫、網路狀態等等,資料庫監控指標有:連線數、記憶體使用率、磁碟使用率、慢sql查詢等,服務監控指標有:程序是否存活、程序下執行緒數及狀態、佔用記憶體走勢(是否持續上升)、平均請求響應時間等等,以上只是列舉了部分常見監控。
業務監控:業務監控基本上就是:日誌監控(日誌分級,不同範圍的日誌寫不同的檔案,按時間、按業務分割日誌)、核心API監控、核心資料監控等等,日誌監控可以透過linux指令碼或者第三方開源專案(例如sentry)做監控告警機制,API監控可以透過APM效能監測工具(例如pinpoint)來進行鏈路跟蹤。
告警送達:一旦系統產生了告警資訊,要根據告警的嚴重等級觸發對應的告警機制,嚴重的直接電話相關人員、期次簡訊、釘釘告警,可每日發一次系統整體執行監控情況郵件到相關係統維護人員。
安全資料安全:資料備份、防止SQL注入、主從同步,資料上傳&修改介面保證內網訪問
系統安全:開放指定埠、內網訪問、VPC網路,基於devops做運維,VPN代理等等,該上的就上,該用的就用,不能抱有僥倖心理
網路安全:閘道器、限流、IP白名單等等