Java開發知識體系!我用2個月的時間破繭成蝶

CAP原則

在分布式系統要滿足CAP原則,一個提供數據服務的存儲系統無法同時滿足:數據一致性、數據可用性、分區耐受性。

image.png

C數據一致性:所有應用程序都能訪問到相同的數據。 A數據可用性:任何時候,任何應用程序都可以讀寫訪問。 P分區耐受性:系統可以跨網絡分區線性伸縮。(通俗來說就是數據的規模可擴展) 在大型網站中通常都是犧牲C,選擇AP。為了可能減小數據不一致帶來的影響,都會采取各種手段保證數據最終一致。

  • 數據強一致:各個副本的數據在物理存儲中總是一致的。

  • 數據用戶一致:數據在物理存儲的各個副本可能是不一致的,但是通過糾錯和校驗機制,會確定一個一致的且正確的數據返回給用戶。

  • 數據最終一致:物理存儲的數據可能不一致,終端用戶訪問也可能不一致,但是一段時間內數據會達成一致。

一致性算法

  • 使一組服務器在一個值上達成一致,所以活躍的特征在于最終每個服務器都可以決定一個值。

  • 通過值的一致能夠實現對同一個數據的請求會讓同一個服務器來處理。

  • Paxos和Raft都是通過選取master來實現多節點下值的一致性,從而借助一致性hash算法來分配請求。

一致性Hash算法 一致性Hash算法可以根據不同的屬性參數(通常是IP和端口號),生成一串不相同的Hash值,并將Hash值轉換成0-2^32-1的整數, 不同范圍的值由不同服務器進行處理。(B-C之間的由B處理)。

image

Raft算法和Paxos算法

Raft算法是在Paxos算法的基礎上的進行優化。 Raft在Paxos的基礎上主要做了兩個方向的優化: 1.將復雜的分布式共識問題拆分成領導選舉、日志復制和安全性三個問題 2.壓縮狀態空間:相對于Paxos施加了更合理的限制,減少了系統狀態過多而產生的不確定因素。

領導選舉(具體以zookeeper舉例) 其基本的特性有:

  • zookeeper在配置集群時節點數不可小于3

  • 節點只有獲得半數以上的投票才能當選Leader

  • zookeeper在啟動時會通過廣播機制來把投票結果告訴其他的節點

  • zookeeper在啟動時首先會給自己投票,然后與其他已啟動的節點進行通信,通過比較id從而判斷是否能獲取其他節點的投票

zookeeper在選舉過程中的角色:領導者、跟隨者、觀察者、競選者

日志復制 在共識算法中,所有服務器節點都會包含一個有限狀態自動機,名為復制狀態機(replicated state machine)。每個節點都維護著一個復制日志(replicated logs)的隊列,復制狀態機會按序輸入并執行該隊列中的請求,執行狀態轉換并輸出結果。可見,如果能保證各個節點中日志的一致性,那么所有節點狀態機的狀態轉換和輸出也就都一致。

image

可見,日志由一個個按序排列的entry組成。每個entry內包含有請求的數據,還有該entry產生時的領導任期值。每個節點上的日志隊列用一個數組log[]表示。

領導節點選舉出來后,集群就可以開始處理客戶端請求了。當客戶端發來請求時,領導節點首先將其加入自己的日志隊列,再并行地發送AppendEntries RPC消息給所有跟隨節點。最終實現節點數據的一致性。

安全性 Raft安全保障機制有5種:

  • 選舉安全性:節點要3個以上,避免“腦裂”的方式

  • 領導者只追加:客戶端發出的請求都是插入領導者日志隊列的尾部,沒有修改或刪除的操作。

  • 日志匹配:每條AppendEntries都會包含最新entry之前那個entry的下標與任期值,如果跟隨節點在對應下標找不到對應任期的日志,就會拒絕接受并告知領導節點。(避免追隨者故障,導致數據不一致)

  • 領導者完全性:如果有一條日志在某個任期被提交了,那么它一定會出現在所有任期更大的領導者日志里。(master會優先獲取日志的更新)

  • 狀態機安全性:如果一個節點已經向其復制狀態機應用了一條日志中的請求,那么對于其他節點的同一下標的日志,不能應用不同的請求。(避免master宕機時,重新選舉,導致部分節點數據不一致)

Raft算法和Paxos算法在分布式中的使用

Consul vs Eureka vs Zookeeper

image.png

注: CAP: 數據一致性、數據可用性、分區耐受性 AP: 犧牲強一致性,部分節點宕機,不會影響正常工作的節點。 CP: 犧牲數據可用性,為了保證數據的一致性,當一臺機器出現故障時,所有節點的數據都不能使用。

最后

如果覺得本文對你有幫助的話,不妨給我點個贊,關注一下吧!

資料免費領取方式:點擊這里

tps://gitee.com/vip204888/java-p7)**

[外鏈圖片轉存中…(img-oyLzmMyL-1625742233774)]

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

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

相關文章

你真的了解Java系統啟動流程嗎?mysql不包含多個字符

Kubernetes(k8s)理論與實戰雙飛 ①理解控制器: ②網絡詳解: ③伸縮原理: ④認證與調度: ⑤服務原理: ⑥鏡像自動拉取: ⑦節點就緒問題之一: ⑧節點就緒問題之二&#xf…

你花了多久弄明白架構設計?多個java應用同時訪問數據庫

01 分布式限流:NginxZooKeeper 1.1 分布式限流之Nginx 請解釋一下什么是 Nginx? 請列舉 x Nginx 的一些特性。 請列舉 x Nginx 和 和 Apache 之間的不同點 請解釋 x Nginx 如何處理 P HTTP 請求。 在 x Nginx 中,如何使用未定義的服務器名稱來阻止…

保潔阿姨看完都會了!java面向對象編程開發證書

一、什么是ZooKeeper ZooKeeper是一個分布式服務協調框架,提供了分布式數據一致性的解決方案,基于ZooKeeper的數據結構,Watcher,選舉機制等特點,可以實現數據的發布/訂閱,軟負載均衡,命名服務&…

做了6年的Java,docker端口映射無法外部訪問

1.1. 操作系統簡介 我通過以下四點介紹什么是操作系統: 操作系統(Operating System,簡稱 OS)是管理計算機硬件與軟件資源的程序,是計算機的基石。操作系統本質上是一個運行在計算機上的軟件程序 ,用于管理…

做了6年的Java,mysql配置環境變量mac

一:打破狹窄的技術視野 ①真實項目對外開發系統性講解 ②例如電商、教育行業、社區網站等主流互聯網場景的商業解決方案講解 ③針對不同業務場景海量數據或者訪問量以及及時響應等所面臨的挑戰進行對應的瓶頸分析。 ④拓展技術視野,與一線大廠零距離…

做了三年Java,docker網絡映射配置

數據庫 2.1 池化技術:如何減少頻繁創建數據庫連接的性能損耗?2.2 數據庫優化方案(一):查詢請求增加時,如何做主從分離?2.3 數據庫優化方案(二):寫入數據量增…

入職阿里啦!docker-e命令參數

JAVA基礎 JAVA異常分類及處理異常分類異常的處理方式Throw和throws的區別JAVA反射動態語言反射機制概念 (運行狀態中知道類所有的屬性和方法)Java反射API反射使用步驟(獲取Class對象、調用對象方法)獲取Class對象的3種方法創建對…

算法 | 快速排序

【算法圖解】&#xff1a;數據結構教程李春葆版P378 1. 遞歸代碼&#xff1a; #include<iostream> #include<vector> using namespace std;void quicksort(vector<int> &v, int left, int right) {if (left < right){int key v[left];int low le…

全套學習!java排序sort方法

字節跳動 ?試前?????結 ?試前 頭條的?試是三家?最專業的&#xff0c;每次?試前有專?的HR和你約時間&#xff0c;確定OK后再進??試。每次都是通過視頻?試&#xff0c;因為都是之前都是電話?或現場?&#xff0c;所以視頻?試還是有點不?然。也有?覺得視頻?試…

【排序算法】計數排序

當輸入的元素是 n 個 0 到 k 之間的整數時&#xff0c;它的運行時間是 Θ(n k)。計數排序不是比較排序&#xff0c;排序的速度快于任何比較排序算法。 由于用來計數的數組B的長度取決于待排序數組中數據的范圍&#xff08;等于待排序數組的最大值與最小值的差加上1&#xff0…

全套學習!mysql2003錯誤代碼

正文 在寫這個文章之前&#xff0c;我花了點時間&#xff0c;自己臆想了一個電商系統&#xff0c;基本上算是麻雀雖小五臟俱全&#xff0c;我今天就用它開刀&#xff0c;一步步剖析&#xff0c;我會講一下我們可能會接觸的技術棧可能不全&#xff0c;但是夠用&#xff0c;最后…

全套學習!mysql命令窗口執行sql文件

阿里P8級架構師核心理論落地篇 再造淘寶&#xff0c;貫穿全系&#xff0c;阿里團隊代碼落地&#xff0c;詳細每個版本迭代&#xff0c;拒絕2-3個月PPT架構師再造淘寶之咚寶-技術支撐-完整搭建DevOps再造淘寶之咚寶-統一規則-代碼規范落地解析再造淘寶之咚寶搭建基礎服務再造淘…

java招聘職位描述,附學習筆記+面試整理+進階書籍

面&#xff1a;為什么要使用雙親委派機制去加載類&#xff1f; 答&#xff1a;避免多份同樣字節碼的加載&#xff0c;浪費內存。 類的加載方式 隱式加載&#xff1a;new顯示加載&#xff1a;loadClass、forName等 類的裝載過程如下圖&#xff1a; 面&#xff1a;loadClass和…

94. 二叉樹的中序遍歷

給定一個二叉樹&#xff0c;返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 進階: 遞歸算法很簡單&#xff0c;你可以通過迭代算法完成嗎&#xff1f; 來源&#xff1a;力扣&#xff08;LeetCode&#xff09; 鏈接&#xff1a;http…

判斷兩個結構體是否相等

一、判斷兩個結構體是否相等 判斷兩個結構體是否相等&#xff1a;重載操作符""不能用函數memcpy來判斷兩個結構體是否相等&#xff1a;memcmp函數是逐個字節進行比較的&#xff0c;而struct存在字節對齊&#xff0c;字節對齊時補的字節內容是隨機的&#xff0c;會產生…

java攔截器和過濾器,2021最新版!

正文 現在市面上的算法資料也五花八門&#xff0c;種類繁多&#xff0c;小編也整理了一份不同于市面且有意思的算法資料&#xff0c;不能說多全面&#xff0c;但是是小編花了很長時間整理歸納出來的&#xff0c;自我感覺還行。分享給同事及群里反響都不錯&#xff0c;所以小編…

java排列組合算法優缺點,一招徹底弄懂!

一. 為什么使用spring cloud alibaba 很多人可能會問&#xff0c;有了spring cloud這個微服務的框架&#xff0c;為什么又要使用spring cloud alibaba這個框架了&#xff1f; 最重要的原因在于spring cloud中的幾乎所有的組件都使用Netflix公司的產品&#xff0c;然后在其基礎…

001 出錯處理

函數strerror() 1.1 函數原型 char *strerror(int errnum)分析&#xff1a;此函數將errnum&#xff08;它通常就說errno值&#xff09;映射為一個出錯信息字符串&#xff0c;并返回錯誤此字符串 。 1.2 代碼清單 #include <stdio.h> #include <string.h> #inclu…

java接口作用和好處,持續更新大廠面試筆試題

業界常用的服務注冊與發現組件對比 了解服務注冊與發現的基本原理后&#xff0c;如果你要在項目中使用服務注冊與發現組件&#xff0c;當面對眾多的開源組件該如何進行技術選型&#xff1f; 在互聯網公司里&#xff0c;有研發實力的大公司一般會選擇自研或者基于開源組件進行…