架構師訓練營第 1 期 - 第 11 周作業

用户头像
Panda
关注
发布于: 2020 年 12 月 07 日

导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

系統不可用原因

  • 硬體故障

  • 儲存裝置

  • 記憶體

  • 網路卡

  • 伺服器故障

  • 軟體有 bug

  • 系統發布時,環境不匹配

  • 測試環境與生產環境設置不同

  • 並發壓力超過系統負荷

  • 頻寬超出負荷

  • 請求超出系統處理能力

  • 網路攻擊

  • 惡意攻擊

  • 外部災害

  • 天然災害

  • 人為災害

高可用方案

解耦

  • 高內聚、低耦合的組件設計原則

  • 面向對象基本設計原則

  • 面向對象設計模式

  • 領域驅動設計建模

隔離

  • 業務與子系統隔離

  • 前提是業務解耦合

  • 微服務與中台架構

  • 將系統的服務拆分,部署在不同的服務器上

  • 服務的故障,不會影響到整體系統

  • 生產者消費者隔離

  • 利用消息對列隔離

  • 虛擬機與容器隔離

  • 不同服務部署在不同虛擬機或容器內

異步

  • 多線程編程

  • 反應式編程

  • 異步通信網路編程

  • 事件驅動異步架構

備份

  • 集群設計

  • 將服務部署在多台服務器上

  • 再利用負載均衡分配用戶請求

  • 多台服務器互為備份

  • 數據庫複製

  • 數據庫冗餘並保持一致

失效轉移 (Failover)

  • 備份後,遇到失效,轉移至其他服務器

  • 數據庫主主失效轉移

  • 負載均衡失效轉移

  • 設計無狀態的服務

冪等

  • 與失效轉移相關,調用服務失敗後,重新發送請求給其他服務器

  • 服務重複調用有時候無法避免

  • 比如服務處理成功,但應用沒有收到響應,導致應用重新提交請求

  • 必須保證服務重複調用和調用一次產生的結果相同

  • 通過交易編號信息進行服務調用有效性校驗

  • 有效的操作才繼續執行

事務補償

  • 分布式的環境中比較難保證事務的一致姓

  • 可能是不同程序對數據庫發出同一事務中的請求

  • 也可能對不同數據庫發出同一事務中的請求

  • 通過執行業務邏輯逆操作,使事務回滾到事務前狀態

重試

  • 通過重試的方式修復單次調用故障

  • 注意上游調用者超時時間要大於下游調用者超時時間總和

熔斷

  • 當某個服務出現故障、響應延遲或失敗率增加,繼續調用這個服務會出現服務級聯失效

  • 因為請求阻塞、資源消耗增加

  • 級聯失效:因服務失效造成系統失效的連鎖反應

  • 緩存失效--> 資料庫調用失效 --> 系統崩潰

  • 使用斷路器阻斷對故障服務的調用

  • 監控服務的響應失敗率或延遲率

  • 動態決定斷路器的關閉、打開、半開的狀態

限流

  • 對進入系統的用戶請求進行流量限制

  • 超過系統最大處理能力,則丟棄一部分的用戶請求,保證整個系統可用

  • 限流算法

  • 計數器算法 (固定窗口、滑動窗口)

  • 令牌統算法

  • 漏桶算法

  • 自適應限流

降級

  • 系統高並發的時候,將非核心的功能關閉,提高核心功能的處理能力

  • 某些非核心功能會給系統產生非常大的壓力

  • 如確認收貨,對數據庫產生很大的壓力

  • 更改訂單狀態

  • 完成支付確認

  • 進行評價

  • 非核心功能通常不需要即時處理

異地多活

  • 將數據中心分布在多個不同地點的機房

  • 每個機房都可以對外提供完整的系統服務

  • 用戶可以連接任何一個機房進行訪問

  • 是高可用的最高顯示,投入成本也最多,部署難度最大

  • 異地多活的難點在保持數據的一致性及同步



发布于: 2020 年 12 月 07 日阅读数: 16
用户头像

Panda

关注

还未添加个人签名 2015.06.29 加入

还未添加个人简介

评论

发布
暂无评论
架構師訓練營第 1 期 - 第 11 周作業