BASE理論(基本可用策略+ 最終一致性實現)

目錄

  • 實現基本可用的幾個策略
    • 1、流量削峰(不同地區售票時間錯峰出售)
    • 2、延遲響應,異步處理(買票排隊,基于隊列先收到用戶買票請求,排隊異步處理,延遲響應)
    • 3、體驗降級(看到非實時數據,采用緩存數據提供服務)
    • 4、過載保護熔斷/限流,直接拒絕掉一部分請求,或者當請求隊列滿了,移除一部分請求,保證整體系統可用)
    • 5、 故障隔離(出現故障,做到故障隔離,避免影響其他服務)
    • 6.、彈性擴容(基于Metric和Monitor實現系統態勢感知,做到彈性伸縮)
  • 實現最終一致性的具體方式
    • 1、讀時修復
    • 2、寫時修復
    • 3、異步修復
  • 使用BASE理論
  • 總結
  • reference

BASE理論是CAP理論中AP的延申,強調可用性。它的核心是基本可用(Basically Available)最終一致性(Eventually consistent)

實現基本可用的幾個策略

基本可用本質是一種妥協,也就是出現節點故障或者系統過載時,通過犧牲非核心功能的可用性,保障核心功能的穩定運行。
實現基本可用的幾個策略:

1、流量削峰(不同地區售票時間錯峰出售)

以訂票系統設計為例,在春運期間,開始售票前后會出現及其海量的請求峰值。
可以在不同的時間,出售不同區域的票,將訪問請求錯開,削弱請求峰值。

2、延遲響應,異步處理(買票排隊,基于隊列先收到用戶買票請求,排隊異步處理,延遲響應)

還以訂票系統為例。用戶提交購票請求后,往往會在隊列中排隊等待處理,可能幾分鐘或十幾分鐘后,系統才開始處理,然后響應處理結果。

3、體驗降級(看到非實時數據,采用緩存數據提供服務)

以互聯網系統為例,若出現網絡熱點事件,產生了海量的突發流量,系統過載,大量圖片因為網絡超時無法顯示,那么可以用小圖片代替原始圖片,降低圖片的清晰度和大小,提升系統處理能力。

4、過載保護熔斷/限流,直接拒絕掉一部分請求,或者當請求隊列滿了,移除一部分請求,保證整體系統可用)

把接收到的請求放在指定的隊列中排隊處理,如果請求等待時間超時,這時直接拒絕超時請求;如果隊列滿了之后,就清除隊列中一定數量的排隊請求,保護系統不過載,實現系統基本可用。

5、 故障隔離(出現故障,做到故障隔離,避免影響其他服務)

6.、彈性擴容(基于Metric和Monitor實現系統態勢感知,做到彈性伸縮)

實現最終一致性的具體方式

最終一致性是指:系統中所有的數據副本在經過一段時間的同步后,最終能夠達到一個一致的狀態。也就是說在數據一致性上存在一個短暫的延遲。
實現最終一致性有幾種具體的方式:

1、讀時修復

在讀取數據時,檢測數據的不一致,進行修復。
如Cassandra 的 Read Repair,在Cassandra 系統查詢數據的侍好,如果檢測到不同節點的副本數據不一致,系統就自動修復數據

2、寫時修復

在寫入數據時,檢測數據的不一致,進行修復,主要通過失敗重試。
如Cassandra 的Hinted Handoff實現,Cassandra 集群的節點之間遠程寫數據的時候,如果寫失敗就將數據緩存下來,然后定時重傳,修復數據的不一致。

3、異步修復

通過定時對賬檢測副本數據的一致性,并修復。

寫時修復不需要做數據一致性比對,性能消耗較低,推薦使用。
在實現最終一致性的時候,推薦同時實現自定義寫一致性級別(比如 All、Quorum、One、Any)讓用戶可以自主選擇相應的一致性級別。

使用BASE理論

DATA節點的核心功能是讀和寫,所以基本可用是指讀和寫的基本可用。可以通過分片和多副本,實現讀和寫的基本可用。即將同一業務的數據先分片,然后以多份副本的形式分布在不同的節點上。保障多節點多副本集群。
在這里插入圖片描述
為了達到最終一致性,通過寫時修復和異步修復。并且實現自定義寫一致性級別,用戶在寫數據的時候,可以根據業務數據的特點設置不同的寫一致性級別。

總結

ACID 理論是傳統數據庫常用的設計理念,追求強一致性模型。BASE 理論支持的是大型分布式系統,通過犧牲強一致性獲得高可用性。BASE 理論在很大程度上,解決了事務型系統在性能、容錯、可用性等方面痛點。BASE 理論在 NoSQL 中應用廣泛,是 NoSQL 系統設計的事實上的理論支撐。
對于任何集群而言,不可預知的故障的最終后果,都是系統過載。如何設計過載保護,實現系統在過載時的基本可用,是開發和運營互聯網后臺的分布式系統的重中之重。

reference

《分布式協議與算法實戰.韓健》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376889.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376889.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一天一道算法題--6.15--卡特蘭數

感謝微信平臺---一天一道算法題---每天多一點進步- problem: 12個高矮不同的人 排成兩排 每排必須是從矮到高排列 而且第二行比對應的第一排的人高 問排列方式有多少種? analyse: 據說 這題 是來自于 阿里巴巴的面試題 果然 很有分量 ~~ 我反正 胡思亂想了好多 沒搞…

現有一些開源ESB總線的比較

現有的開源ESB總線中,自從2003年第一個開源總線Mule出現后,如今已經是百花爭鳴的景象了。如今我就對現有的各種開源ESB總線根據性能、可擴展性、資料文檔完整程度以及整合難易程度等方面展開。 一.CXF CXF的定位不是ESB總線,而是一…

Paxos算法(Basic Paxos 與 Multi-Paxos思想)

目錄Basic Paxos三個角色達成共識的方法對于Basic Paxos的總結Multi-Paxos領導者優化 Basic Paxos 執行referencePaxos 算法包含 2 個部分: 1、Basic Paxos : 描述多節點之間如何就某個值達成共識 2、Multi-Paxos : 描述執行多個Basic Paxos實…

vs2012下調試mvc4源代碼

當前流行的應該是mvc3才對。然后在研究mvc3的源代碼時候,Html這個屬性下的擴展方法Partial()都沒有。IntelliSense不會提示該方法,找了半天的資料也問了一些博友,沒看到好的解決棒法。最后沒轍另辟蹊蹺,就開始著手研究mvc4的源代碼…

JAVA UDP網絡編程學習筆記

一、UDP網絡編程概述 采用TCP協議通信時,客戶端的Socket必須先與服務器建立連接,連接建立成功后,服務器端也會持有客戶端連接的Socket,客戶端的Socket與服務器端的Socket是對應的,它們構成了兩個端點之間的虛擬通信鏈路…

firefox 插件開發

IDE,你可以嘗試下NetBeans foxbeans這個插件。轉載于:https://www.cnblogs.com/sode/archive/2013/01/25/2876562.html

13種負載均衡算法

目錄前言(1)輪轉調度(Round-Robin Scheduling)算法(2)加權輪轉調度(Weighted Round-Robin Scheduling)算法(3)隨機均衡調度(Random Scheduling&am…

對于shell腳本參數獲取時的一點小技巧

問題如下: 根據腳本參數的個數$#進行一個循環,在依次輸出每個參數$1 $2 $3...... 我有一個循環變量i $i 取到這時的i為1,我想使用這個1再去調用$1,也是就是打印出第一個參數 就是$($i)的意思來取到第幾個參數,當然$($i)是不好用的…

(轉)頁游安全攻與防,SWF加密和隱藏密匙

原文鏈接:http://netsecurity.51cto.com/art/201211/364775.htm 頁游,最最核心的就是客戶端(swf)與服務端的游戲通信了。游戲通信產生的封包,內容是否可識別,可篡改,可重放,處理邏輯…

C++自動類型推導 : auto 與 decltype 用法

基本用法與區別 auto 總是推導出“值類型”,絕不會是“引用”,如果有引用,auto會把引用去掉,推導出值類型; auto 可以附加上 const、volatile、*、& 這樣的類型修飾符,得到新的類型。 auto x 10L; // auto推導為…

C++智能指針使用指南 part1:基本使用

加粗樣式>TOC 智能指針是代理模式的具體應用,它使用 RAII 技術代理了裸指針,能夠自動釋放內存, 無需程序員干預,所以被稱為“智能指針”。 智能指針不是指針,而是一個對象,所以不要對其調用delete&…

AS3.0 BitmapData類介紹

注:文中的Bitmapdata和BMD均為同一意思BitmapData,BMD為其縮寫一,概括: Bitmapdata繼承Object對象,實現IBitmapDrawable接口,這個接口有什么用,你可以理解為Drawable,能被畫。官方介紹是:IBitma…

C++使用JSON的序列化與反序列化

這里使用的json解析工具為JSON for Modern C,使用的話僅需要包含頭文件。 獲取方式:wget https://github.com/nlohmann/json/releases/download/v3.7.3/json.hpp JSON json的序列化功能和map一樣,用關聯數組的"[]"來任意添加數據&#xff0c…

iOS判斷為空或者只為空格

本文轉載至 :http://www.cnblogs.com/superhappy/archive/2012/11/08/2761403.html 經常有需求 要判斷不能為空,后臺老是鄙視不做非空判斷的前端 ,木辦法 只能寫一個。 第一種想法:我不就是判斷 是不是nil就可以了么。結果發現太天…

Hyper-V

Hyper-V:也就是虛擬化技術,允許終端用戶在同一臺機器上運行多個操作系統,支持32位和64位系統,可以直接在Windows 8上創建自己的虛擬機。開啟Hyper-V虛擬機需要更多的內存,正常運行需要至少4GB以上內存,所以…

sdut 1451 括號東東 DP

http://acm.sdut.edu.cn/sdutoj/problem.php?actionshowproblem&problemid1451 題意:中文..... 思路: pku有一道題,經典的括號匹配(區間DP)題目,那道題目是求的最長滿足條件的子串的長度,那…

CDN緩存替代算法

CDN緩存工作過程如下:用戶發出一個請求,如果請求被命中,緩存將對用戶的請求進行響應,返回其請求的數據;如果未被命中,緩存向上拉取用戶需要的數據,并對其存儲的數據進行替換。 緩存算法的意義在…

前端開發常用正則表達式

1、電話 var phone /(^[^1][0-9\-]{6,20}$)|(^(134|135|136|137|138|139|150|151|152|157|158|159|182|183|187|188|147|130|131|132|155|156|185|186|145|133|153|180|189|181|184)\d{8}$)/ 2、郵箱 var email /^([a-zA-Z0-9_.-])([a-zA-Z0-9_-])((\.[a-zA-Z0-9_-]{2,3}){1,…

android 中調用接口發送短信

轉載:http://ziyu-1.iteye.com/blog/1013932 android中可以通過兩種方式發送短信 第一:調用系統短信接口直接發送短信;主要代碼如下: Java代碼//直接調用短信接口發短信 SmsManager smsManager SmsManager.getDefault(); List…

linux 命令案例學習——文件搜索

兩個搜索文件的工具 locate ——僅僅通過文件名查找文件find ——依據文件的各種屬性在既定目錄(包括子目錄)里查找一個通常與文件搜索命令一起使用、處理搜索結果文件列表的命令 xargs1 locate 1.1 查找文件名中含有zip的文件名 locate zip 看下結…