1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        分布式理論CAP、BASE

        共 2617字,需瀏覽 6分鐘

         ·

        2021-06-13 10:03

        前言

        隨著業(yè)務(wù)的拓展,功能越來越多。把所有的功能都放在同一個(gè)服務(wù)下,代碼混合交錯(cuò),造成維護(hù)困難,也容易造成某一小bug導(dǎo)致整個(gè)服務(wù)不可用。因此我們會(huì)按業(yè)務(wù)功能會(huì)拆分成多個(gè)不同的服務(wù)(微服務(wù)的形成),多個(gè)服務(wù)組成的系統(tǒng),有個(gè)響亮的名字:分布式系統(tǒng);而系統(tǒng)中的服務(wù)狀態(tài)我們該怎么去管理,有什么相關(guān)的理論呢?

        • 分布式和集群
        • 數(shù)據(jù)庫事務(wù)
        • 分布式事務(wù)
        • 分布式數(shù)據(jù)一致性
        • CAP 理論
        • BASE理論

        分布式和集群

        • 分布式是指通過網(wǎng)絡(luò)連接的多個(gè)服務(wù)或組件,通過交換信息協(xié)作而形成的系統(tǒng)
        • 集群是指同一種服務(wù)組件的多個(gè)實(shí)例形成的整體
        • 這兩個(gè)概念并不完全沖突,分布式系統(tǒng)也可以是一個(gè)集群。zookeeper集群也是一種分布式系統(tǒng),它的服務(wù)之間會(huì)互相通信協(xié)作
        • 集群不是分布式系統(tǒng)的情況,比如多個(gè)經(jīng)過負(fù)載均衡的HTTP服務(wù)器,它們之間不會(huì)互相通信,如果不帶上負(fù)載均衡的部分的話,則不能稱作分布式系統(tǒng)

        數(shù)據(jù)庫事務(wù)

        • 事務(wù)是基于數(shù)據(jù)進(jìn)行操作,需要保證事務(wù)的數(shù)據(jù)通常存儲(chǔ)在數(shù)據(jù)庫中,所以介紹到事務(wù),就不得不介紹數(shù)據(jù)庫事務(wù)的 ACID 特性
        • 原子性(Atomicity),整個(gè)事務(wù)中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個(gè)環(huán)節(jié)
        • 一致性(Consistency),在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫數(shù)據(jù)的一致性約束沒有被破壞
        • 隔離性(Isolation),隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致
        • 持久性(Durability),事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失

        分布式事務(wù)

        • 分布式系統(tǒng)一般由多個(gè)獨(dú)立的子系統(tǒng)組成,多個(gè)子系統(tǒng)通過網(wǎng)絡(luò)通信互相協(xié)作配合完成各個(gè)功能;這個(gè)協(xié)作過程需要保證各個(gè)系統(tǒng)的數(shù)據(jù)一致性,我們稱這種跨系統(tǒng)的事務(wù)為分布式事務(wù)
        • 上面的場景會(huì)存在多種情況;庫存服務(wù)和訂單服務(wù)全部成功?;蛘邘齑娣?wù)和訂單服務(wù)部分成功,而傳統(tǒng)的單機(jī)事務(wù)理論不再適用

        分布式事務(wù)的難點(diǎn)

        • 原子性:事務(wù)操作跨不同節(jié)點(diǎn),當(dāng)多個(gè)節(jié)點(diǎn)某一節(jié)點(diǎn)操作失敗時(shí),需要保證多節(jié)點(diǎn)操作的要么什么都不做,要么都做
        • 一致性:當(dāng)發(fā)生網(wǎng)絡(luò)傳輸故障或者節(jié)點(diǎn)故障,節(jié)點(diǎn)間數(shù)據(jù)復(fù)制通道中斷,在進(jìn)行事務(wù)操作時(shí)需要保證數(shù)據(jù)一致性
        • 隔離性:在分布式事務(wù)控制中,可能會(huì)出現(xiàn)提交不同步的現(xiàn)象,會(huì)出現(xiàn)“部分已經(jīng)提交”的事務(wù)

        分布式數(shù)據(jù)一致性

        • ACID并不適合分布式事務(wù),而分布式事務(wù)的難點(diǎn)涉及的問題,最終影響是導(dǎo)致數(shù)據(jù)出現(xiàn)不一致,因此在分布式系統(tǒng)會(huì)著重關(guān)注保證系統(tǒng)的一致性。

        CAP理論

        • 前面介紹到的分布式事務(wù)的難點(diǎn)涉及的問題,最終影響是導(dǎo)致數(shù)據(jù)出現(xiàn)不一致,下面對分布式系統(tǒng)的一致性問題進(jìn)行理論分析,后面將基于這些理論進(jìn)行分布式方案的介紹(可用性和一致性的沖突:CAP理論)
        • 一致性(Consistence): 所有節(jié)點(diǎn)訪問最新相同的數(shù)據(jù)副本
        • 可用性(Availability): 非故障的節(jié)點(diǎn)在合理的時(shí)間內(nèi)返回合理的響應(yīng)(不是錯(cuò)誤或者超時(shí)的響應(yīng))
        • 分區(qū)容錯(cuò)性(Partition tolerance): 分布式系統(tǒng)出現(xiàn)網(wǎng)絡(luò)分區(qū)的時(shí)候,仍然能夠?qū)ν馓峁┓?wù)
        ?

        當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)的時(shí)候,如果我們要繼續(xù)服務(wù),那么強(qiáng)一致性和可用性只能 2 選 1。也就是說當(dāng)網(wǎng)絡(luò)分區(qū)之后 P 是前提,決定了 P 之后才有 C 和 A 的選擇。也就是說分區(qū)容錯(cuò)性(Partition tolerance)我們是必須要實(shí)現(xiàn)的

        ?

        為啥無法同時(shí)保證 CA 呢?

        若系統(tǒng)出現(xiàn)“分區(qū)”,系統(tǒng)中的某個(gè)節(jié)點(diǎn)在進(jìn)行寫操作。為了保證一致性C, 必須要禁止其他節(jié)點(diǎn)的讀寫操作,這就和 A 發(fā)生沖突了;如果為了保證A,其他節(jié)點(diǎn)的讀寫操作正常的話,那就無法保證數(shù)據(jù)一致性,和C沖突

        CAP 實(shí)際應(yīng)用案例

        • ZooKeeper保證的是CP。任何時(shí)刻對ZooKeeper的讀請求都能得到一致性的結(jié)果,但是ZooKeeper不保證每次請求的可用性比如在Leader選舉過程中或者半數(shù)以上的機(jī)器不可用的時(shí)候服務(wù)就是不可用的
        • Eureka保證的則是AP。Eureka在設(shè)計(jì)的時(shí)候就是優(yōu)先保證A(可用性)。在 Eureka中不存在什么Leader節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都是一樣的、平等的。因此 Eureka 不會(huì)像 ZooKeeper 那樣出現(xiàn)選舉過程中或者半數(shù)以上的機(jī)器不可用的時(shí)候服務(wù)就是不可用的情況。Eureka 保證即使大部分節(jié)點(diǎn)掛掉也不會(huì)影響正常提供服務(wù),只要有一個(gè)節(jié)點(diǎn)是可用的就行了。只不過這個(gè)節(jié)點(diǎn)上的數(shù)據(jù)可能并不是最新的

        BASE理論

        • BASE是Basically Available(基本可用) 、Soft-state(軟狀態(tài)) 和 Eventually Consistent(最終一致性)。BASE理論是對CAP中一致性(C)和可用性(A)權(quán)衡的結(jié)果
        • 最終一致性是弱一致性的一個(gè)特例,系統(tǒng)會(huì)保證在一定時(shí)間內(nèi),能夠達(dá)到一個(gè)數(shù)據(jù)一致的狀態(tài)

        基本可用

        基本可用是指分布式系統(tǒng)在出現(xiàn)不可預(yù)知故障的時(shí)候,允許損失部分可用性;那什么又是允許損失部分可用性呢?

        • 響應(yīng)時(shí)間上的損失: 正常情況下,處理用戶請求需要0.5s返回結(jié)果,但是由于系統(tǒng)出現(xiàn)故障,處理用戶請求的時(shí)間變?yōu)?s
        • 系統(tǒng)功能上的損失:正常情況下,用戶可以使用系統(tǒng)的全部功能,但是由于系統(tǒng)訪問量突然劇增,系統(tǒng)的部分非核心功能無法使用

        軟狀態(tài)

        • 軟狀態(tài)指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài)(CAP理論中的數(shù)據(jù)不一致),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整體可用性,即允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步的過程存在延時(shí)

        最終一致性

        • 最終一致性強(qiáng)調(diào)的是系統(tǒng)中所有的數(shù)據(jù)副本,在經(jīng)過一段時(shí)間的同步后,最終能夠達(dá)到一個(gè)一致的狀態(tài)。因此,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達(dá)到一致,而不需要實(shí)時(shí)保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致性

        歡迎指正文中錯(cuò)誤

        參考文章

        • CAP和BASE理論了解么?可以結(jié)合實(shí)際案例說下不?
        • 分布式與集群的區(qū)別是什么?[1]
        • 數(shù)據(jù)一致性問題[2]

        Reference

        [1]

        分布式與集群的區(qū)別是什么?: https://www.zhihu.com/question/20004877

        [2]

        數(shù)據(jù)一致性問題: https://blog.csdn.net/qq_30420359/article/details/82744767


        瀏覽 60
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            无遮挡免费观看 | 日本少妇做爰全过程 | 爱情岛成人亚洲www论坛 | 俺去俺来也在线www色情网 | 国产亚洲精品成人a v久久ww | 别揉了别揉了在揉就尿出来了 | 国产一级a毛一级a毛免费观看 | asian河北少妇pics | 亚洲a网| 护士丝袜脚交footjob 女人被狂躁到高潮嗷嗷叫 噜噜噜av |