穩定性「三十六計」- 配額管控

来源:https://www.cnblogs.com/xiexj/archive/2019/04/08/10661166.html
-Advertisement-
Play Games

背景 《SRE Google運維解密》里提到SRE自動化系統的一個bug導致幾乎所有的數據中心機器被成功下線併進行硬碟擦除。當然這本書出版之後又業界也進行了很多的演進。在我們團隊現在很難發生這樣的事情。因為團隊內人人要遵循的一個設計原則是:原則上禁止批量操作。如需批量,需要有審核流程。批量設置上限。 ...


背景

《SRE Google運維解密》里提到SRE自動化系統的一個bug導致幾乎所有的數據中心機器被成功下線併進行硬碟擦除。當然這本書出版之後又業界也進行了很多的演進。在我們團隊現在很難發生這樣的事情。因為團隊內人人要遵循的一個設計原則是:原則上禁止批量操作。如需批量,需要有審核流程。批量設置上限。

這個原則在我以後會發佈的系列文章《架構設計「三大紀律八項註意」》中也會介紹一些。今天先從另一個角度系統的看這個問題。

 

配額管控策略-邏輯管控

我所在的HULK調度系統團隊因為從大的方面將調度系統分成資源和調度兩個方面,所以衍生出來就有物理和邏輯兩個層次。在運用方面可以用一個簡單的例子來解釋:秒殺。

在秒殺場景中,假設實際物品庫存有10件。這是一個物理概念,被別人訂走一個少一個。但是秒殺開始的時候,有100個請求過來,每個人都不知道下一時刻庫存有多少。這時候實時感知物理上有多少庫存來給用戶反饋顯然是不合適的。這時候就衍生出來邏輯的概念。

這個邏輯的庫存可以用一個計數器來實現,或者是漏斗,不重要。關鍵是邏輯庫存要卡住流程,不能讓物理庫存為負數。

在我們HULK調度系統中,涉及到硬體資源,一個策略是為應急場景留下一定配額。對於不同的來源的請求給予不同的配額以避免一個來源方未知問題導致所有的資源耗盡。

總結一下上面提到的策略:物理感知是必要的,但是不能代替邏輯管控。邏輯管控包括:不能讓資源總量低於實際;必要時留有配額;針對不同來源需要不同的配比。

 

配額管控策略-批量管控

「核心流程都需要是點對點的。保障流程原則上禁止批量操作。如需批量,需要有審核流程。批量設置上限。」這是我們團隊的一個重要的設計原則。

舉個我們團隊的具體應用:是人都是要死的,是機器都是要壞的。機器故障既然不可避免,那就需要進行自動化處理。HULK調度系統這邊有專門的物理機宕機流程。這個流程在設計中做了下麵兩件事情:1是限量,2是限速。

限量:

按照物理機宕機率統計數據來看,一天理論上不可能有100台物理機同時宕機。如果1天中宕機數超過一定配額,則停止自動化宕機處理,併發出異常報警。

限速:

如果1秒中100台機器同時宕機,更可能發生的事情是網路抖動之類的其他現象。而非真宕機,所以此時也會停止自動化宕機處理,併發出異常報警。

 

總結

與用戶一同工作,以像用戶一樣思考  --《程式員修煉之道》

 

相關閱讀

編寫代碼的「八榮八恥」(上篇)

編寫代碼的「八榮八恥」- 以開關上線為榮,以自信編碼為恥

《程式員修煉之道》解讀

Elasticsearch的基本概念和指標

程式常用的設計技巧

到底多大才算高併發?

美團分散式服務通信框架及服務治理系統OCTO

學會用數據說話-分散式鎖究竟可以多少併發?

大話高可用

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • "use strict": 1、它是 ES5 引入的一條指令,指令不是語句,但非常接近於語句 2、不包含任何語言的關鍵字,指令僅僅是一個包含一個特殊字元串直接量的表達式。對於那些沒有實現 ES5 的 JavaScript 解釋器來說,它只是一條沒有副作用的表達式語句 3、只能出現在腳本代碼的開始或函 ...
  • HTML部分 js部分 ...
  • 接手項目之後,在安裝依賴後,再npm start的過程中報錯./node_modules/history/esm/history.js Module not found: Can't resolve '@babel/runtime/helpers/esm/extends' ...
  • 最近一個星期準備學習一下angular前端框架,因為之前在學習abp框架的時候,都要求前端要掌握angular,所以不得不回來惡補一下了,學習的過程有時間的話會記錄在這裡,方便以後複習。 閑言少敘,下麵來介紹開發環境搭建的步驟: 開發環境搭建 1.安裝node和npm(其實只需要安裝node,因為n ...
  • 前言: 相信大家都打開過層級很多很多的文件夾。如果把第一個文件夾看作是樹的根節點的話,下麵的子文件夾就可以看作一個子節點。不過最終我們尋找的還是文件夾中的文件,文件可以看做是葉子節點。下麵我們介紹一種模式,與這種樹級結構息息相關。當然,今天的主角是HashMap。接下來我們一起來看HashMap中到 ...
  • 一、引言 我們都知道,資料庫連接是很珍貴的資源,頻繁的開關資料庫連接是非常浪費伺服器的CPU資源以及記憶體的,所以我們一般都是使用資料庫連接池來解決這一問題,即創造一堆等待被使用的連接,等到用的時候就從池裡取一個,不用了再放回去,資料庫連接在整個應用啟動期間,幾乎是不關閉的,除非是超過了最大閑置時間。 ...
  • 歡迎大家的不嫌棄,繼續和我一起學習設計模式。上一篇已經把裝飾者模式的類圖有了一個整體的出來,末尾說的去想想實現的代碼,你實踐了嗎?是什麼原因讓你實踐了呢?又是什麼原因讓你沒有動手呢?沒動手,可能是思路還不夠明確是嗎? 接下來,我們繼續學習。通過代碼實現的方式,來搞定裝飾者模式。 寫下代碼 動手的時候 ...
  • JAVA的主要優勢:跨平臺性,可以在Linux,windows,mac三個系統上運行。 跨平臺的核心:JAVA虛擬機--JVM 原理就是將Java語言在這個系統上翻譯。JAVA在jvm上運行,jvm進行翻譯。 JRE:java的運行環境,包括JVM和所需要的核心類。 JDK:java程式的開發包,包 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...