在高併發場景下,當系統中的一些功能元件出現異常,無法繼續提供伺服器的時候,為了保證整體系統可用性,可以犧牲一部分功能依舊提供有損服務
服務等級定義 sla(service level agreement)是判定壓測是否異常的重要依據。壓測過程中,通過監控核心服務狀態的 sla 指標資料,您可以更直觀地了解壓測業務的狀態。
sla則是服務商與您達成的正常執行時間保證。
詳見2個9 = (1-99%)x24 x 365 = 87.6 小時 = 3.65天
3個9 = (1-99.9%)x24 x 365 = 8.76 小時
4個9 = (1-99.99%)x24 x 365 = 0.876 小時 = 52.56分鐘
5個9 = (1-99.999%)x24 x 365 = 0.0876 小時 = 5.256分鐘
6個9 = (1-99.9999%)x24 x 365 = 0.00876 小時 = 0.5256分鐘 = 31秒
ap
12306 強一致性
預設值: 設定安全的預設值,不會引起資料問題,比如庫存為0
靜態值:請求的頁面或api無法返回資料,提供一套靜態資料展示,比如載入失敗提示重試,或缺省選單
快取: 快取無法更新便使用舊的快取
當流量洪峰到達的時候,對於丟棄的使用者可以提供友好的提示
比如提示使用者當前繁忙稍後重試等
對呼叫的資料設定超時時間,當呼叫失敗,對服務降級
微服務重試:dubbo重試機制
api呼叫重試:當達到重試次數後,增加訪問標記,服務降級,非同步探測服務是否恢復。
web端:在服務不可用時,web端增加重試按鈕或自動重試可以提供更友好的體驗。
自動重試需設定重試次數和資料冪等處理
在服務呼叫方設定乙個flag,標記服務是否可用
儲存在第三方,配置檔案、資料庫、redis、zookeeper中。
多庫/多維度組裝json/xml時,如果有一些不重要的資料無法獲取或資料出錯,可以忽略繼續。
分析機械人行為:短時間連續操作,agent,行為軌跡、拖拽(模擬登陸/秒殺/灌水)
爬蟲:引到到靜態頁或快取頁
在乙個請求內,多級快取架構下,後端快取或db不可用,可以使用前端快取或兜底資料
在cap原理和base理論中寫操作存在於資料一致性這個環節,
降級的目的是為了提供高可用性,在多數的網際網路架構中,可用性是大於資料一致性的。
所以喪失寫入資料同步,通過上面的理論,我們也能勉強接受資料最終一致性。
高併發場景下,寫入操作無法及時到達或抗壓,可以非同步消費資料/cache更新/log等方式
當系統出現問題的時候,盡量讓請求隔離在離使用者最近的位置,避免無效鏈路訪問
在後端服務部分或完全不可用的時候,可以使用本地快取或兜底資料
在一些特殊場景下,對資料一致性要求不高的時候,比如秒殺、**等可以做假資料
js降級
在js中埋降級開關,在訪問不到達,系統閾值的時候可以避免傳送請求
接入層可以在接入層,在使用者請求還沒到達服務的時候,通過、nginx + lua、haproxy + lua
過濾無效請求和服務降級
應用層降級
參考常老師專案中的springcloud
頁面中非同步載入的資料,有一部分無法得到
js、css無法載入 -> 兜底 css
在活動前可以通過靜態化技術,把原來需要呼叫多個動態介面的頁面整體快取下來儲存成乙個靜態檔案
當動態服務無法支撐的時候,降級為靜態化服務
靜態檔案內盡量不去非同步載入資料
靜態檔案包含可變內容,可以使用模板技術定時生成更新
億級流量系統多級快取架構9 分布式事務
mysql中,我們可以使用begin開始事務,rollback回滾事務,commit提交事務 redolog 記錄變更 undolog回滾 spring中,使用 transaction標記事務 原子性 atomic 要麼全部成功,要麼全部失敗,沒有中間狀態 一致性 consistency 指的是在執...
億級請求下多級快取那些事
什麼是多級快取 所謂多級快取,即在整個系統架構的不同系統層級進行資料快取,以提公升訪問效率,這也是應用最廣的方案之一。我們應用的整體架構如圖1所示 圖1 多級快取方案 整體流程如上圖所示 1 首先接入nginx將請求負載均衡到應用nginx,此處常用的負載均衡演算法是輪詢或者一致性雜湊,輪詢可以使伺...
億級流量架構之服務降級思路與方法
如果看過我前面對服務限流的分析,理解服務降級就很容易了,對於乙個景區,平時隨便進出,但是一到春節或者十一國慶這種情況客流量激增,那麼景區會限制同時進去的人數,這叫限流,那麼什麼是服務降級呢?簡單來說就是,將一些不太重要的景區專案砍掉,平時就那麼三五八個人,景區可以開放湖中游泳啦,摸魚啦,捉蝦啦,有情...