如何進行分布式系統(tǒng)架構(gòu)以及CAP原理的分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
政和網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
一、什么是分布式系統(tǒng)?
關(guān)于分布式系統(tǒng)的定義,《分布式系統(tǒng)原理和范型》一書中是這樣定義分布式系統(tǒng)的:“分布式系統(tǒng)是若干獨立計算機的集合,這些計算機對于用戶來說就像是單個系統(tǒng)”。
(圖片選自《分布式系統(tǒng)常用技術(shù)及案例分析》)
設(shè)計一個分布式系統(tǒng),需要考慮很多方面。比如系統(tǒng)如何拆分子系統(tǒng)?如何規(guī)劃子系統(tǒng)中的通信?通信是否安全?系統(tǒng)是否具有擴展性?子系統(tǒng)如何讓實現(xiàn)可靠性?數(shù)據(jù)的一致性如何保證?等等,都不是很好解決。
但是對于我們一般的用戶來說,開源世界已經(jīng)有完善的解決方案和工具了,比如,我們在設(shè)計通信時,我們可以采用面向消息的中間件,比如Apache ActiveMQ、RabbitMQ、Apache RocketMQ、Apache Kafka等,也有類似與 Google Protocol Buffer、Thrift等 RPC框架。在設(shè)計分布式計算時,我們分布式計算可以采用 MapReduce、Apache Hadoop、Apache Spark 、Apache Flink 等。在大數(shù)據(jù)分布式存儲方面,我們可以選擇 HDFS、Apache HBase、Apache Cassandra、Memcached、redis、MongoDB等。在分布式監(jiān)控方面,常用的技術(shù)包括Nagios、Zabbix、Consul、ZooKeeper等。
二、對 CAP 的一點理解
2000 年 7 月,加州大學(xué)伯克利分校的 Eric Brewer 教授在 ACM PODC 會議上提出 CAP 猜想。2 年后,麻省理工學(xué)院的 Seth Gilbert 和 Nancy Lynch 從理論上證明了 CAP。之后,CAP理論正式成為分布式計算領(lǐng)域的公認定理。
首先我們先來看看 CAP 分別代表什么?
一致性:更新操作成功并返回客戶端完成后,分布式的所有節(jié)點在同一時間的數(shù)據(jù)完全一致。(注意:這里說的是強一致性。)
可用性: 讀和寫操作都能成功。無論何時,都可以在有效時間內(nèi)返回用戶的請求。
分區(qū)容錯性:再出現(xiàn)網(wǎng)絡(luò)故障導(dǎo)致分布式節(jié)點間不能通信時,系統(tǒng)能否繼續(xù)服務(wù)
需要注意的是:在分布式系統(tǒng)中,沒有一種設(shè)計可以同時滿足一致性、可用性、分區(qū)容錯性 3 個特性。CAP 三者不是對等的,其中 P 是基礎(chǔ),CA 之前需要權(quán)衡。
如果說Spanner真有什么特別之處,那就是谷歌的廣域網(wǎng)。Google通過建立私有網(wǎng)絡(luò)以及強大的網(wǎng)絡(luò)工程能力來保證P,在多年運營改進的基礎(chǔ)上,在生產(chǎn)環(huán)境中可以最大程度的減少分區(qū)發(fā)生,從而實現(xiàn)高可用性。
CAP之父在《Spanner,真時,CAP理論》一文中寫到
在全球廣域地理分布環(huán)境下(全球規(guī)模的分布式系統(tǒng)),網(wǎng)絡(luò)分區(qū)是一個自然的事實,甚至有人認為是必然的。(用來解釋為什么 P 是基礎(chǔ)。)
上面提到的一致性可以分為幾類:強一致性、單調(diào)一致性、弱一致性、會話一致性、最終一致性。
強一致性 | 任何時刻,任何用戶都能讀取到最近一次成功更新的數(shù)據(jù)。 |
單調(diào)一致性 | 任何時刻,任何用戶一旦讀到某個數(shù)據(jù)在某次更新后的值,那么就不會再讀到比這個值更舊的值。也就是說,可獲取的數(shù)據(jù)順序必是單調(diào)遞增的。 |
弱一致性 | 用戶無法在確定時間內(nèi)讀到最新更新的值。 |
會話一致性 | 任何用戶在某次會話中,一旦讀到某個數(shù)據(jù)在某次更新后的值,那么在本次會話中就不會再讀到比這值更舊的值,會話一致性是在單調(diào)一致性的基礎(chǔ)上進一步放松約束,只保證單個用戶單個會話內(nèi)的單調(diào)性,在不同用戶或同一用戶不同會話間則沒有保障。 |
最終一致性 | 用戶只能讀到某次更新后的值,但系統(tǒng)保證數(shù)據(jù)將最終達到完全一致的狀態(tài),只是所需時間不能保障。 |
三、總結(jié)
文章開頭部分也提到了,現(xiàn)在的開源世界已有完善的分布式系統(tǒng)解決方案了,我們沒有必要重復(fù)造輪子,難度也可想而知。我們可以在使用的過程中倒推這個系統(tǒng)滿足了 CAP 的哪兩個特性。比如:Zookpper 是 CP,P 是基礎(chǔ)的,所有分布系統(tǒng)需要優(yōu)先考慮這個,Zookeeper 從順序一致性、原子性、單一鏡像、持久性、實時性保證了數(shù)據(jù)的一致性。但是它在某些情況(重啟或網(wǎng)絡(luò)節(jié)點故障)下會重新選舉 Leader,此時整個集群是不可用的。問題在于,選舉leader的時間太長,30 ~ 120s, 且選舉期間整個zk集群都是不可用的,這就導(dǎo)致在選舉期間注冊服務(wù)癱瘓,雖然服務(wù)能夠最終恢復(fù),但是漫長的選舉時間導(dǎo)致的注冊長期不可用是不能容忍的。所以說,ZooKeeper不能保證服務(wù)可用性。所以 Zookepper 保證了 CP,而不是 AP。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。