在計算機發展的早期,一直都是集中式計算,計算能力依賴大型計算機。隨著網際網路的發展,繁重的業務需要巨大的計算能力才能完成,而集中式計算無法滿足要求,大型計算機的價格也非常昂貴。分散式計算將任務分解成更小的部分,分配給多臺計算機處理,這樣可以節約整體計算時間,大大提高計算效率。
網際網路大型網站往往面臨高並行存取、海量資料處理等問題,必須保證系統高可用、易伸縮等等。分散式架構採用多臺機器協同工作,動態伸縮容量,使用冗餘節點來消除單點故障,提高系統可用性。
軟體開發沒有銀彈,任何系統結構都有利有弊,分散式系統的挑戰有三點:
分散式系統的三個特性Consistency(一致性)、Availability(可用性)、Partition tolerance(分割區容錯性),最多隻能同時滿足其中兩個,三者不可兼得。
大型網際網路應用的叢集節點非常多,發生節點或者網路故障是常態。系統必須要滿足分割區容錯性,最終只能在C和A之間取捨。
傳統行業專案有所不同,以金融系統為例,涉及到金錢的操作,必須要滿足資料一致性。出現網路故障寧可停止服務,也要保證C,最終只能在A和P之間取捨。
CAP理論並不能很好的指導現實的系統架構。比如Availability (可用性),如果介面長時間才返回結果,固然可用,但是業務上不能接受。大部分情況下,系統分割區都是平穩執行的,系統設計要權衡延遲與資料一致性的問題。為了保證資料一致性,讀寫的延遲必然升高。
在分割區錯誤的情況下,在C和A中取捨,縮寫為 PAC。分割區正確的情況下,取 Latency(延遲)與 Consistency(一致性),縮寫為LC。PACELC 中的 E 代表 Else,連起來就是PACELC。
很多儲存軟體實現了 PACELC 的策略,使用者根據不同業務場景使用不同的設定。以MySQL主從複製為例,提供了三種模式:
BASE模型全稱是Basically Available(基本可用)、Soft-state(軟狀態/柔性事務)、Eventually Consistent(最終一致性)。絕大部分分散式系統,實現分割區容忍性是基本要求,因此要平衡一致性和可用性。BASE強調犧牲高一致性,獲得可用性。允許資料在一段時間內不一致,只要保證最終一致就可以了。
分散式系統中的資料一致性問題,是系統設計中最關鍵、最有難度的領域,業界提出了很多成熟的一致性共識演演算法。
1998年,萊斯利·蘭伯特(Leslie Lamport)在《The Part-Time Parliament》論文中首次公開Paxos協定。他使用希臘的小島Paxos作為比喻,描述了Paxos小島中通過決議的流程。2001年,Lamport重新發表了樸實的演演算法描述版本《Paxos Made Simple》。
由於Paxos演演算法太難以理解和實現,斯坦福大學的 Diego Ongaro 和 John Ousterhout 提出了更容易理解的 Raft 演演算法。相比傳統的 Paxos 演演算法,Raft 將大量的計算問題分解成簡單的相對獨立的子問題,並且和 Multi-Paxos 有同樣的效能,
有興趣的朋友,可以看看Raft演演算法的動畫演示。
ZAB協定全稱 Zookeeper Atomic Broadcast(Zookeeper 原子廣播協定)。分散式協調服務ZooKeeper設計了支援崩潰恢復的一致性協定。基於該協定,ZooKeeper 實現了一種主從模式的系統架構來保持叢集中各個副本之間的資料一致性。從設計上看,ZAB 協定和 Raft 很相似。
資料庫是一個悠久歷史的行業,從誕生到現在也有接近五十年的歷史了。資料庫一直在技術、業務以及應用場景等方面不停地演進和發展。上世紀九十年代,針對個人辦公、個人娛樂以及企業資訊化的場景,基於X86伺服器誕生了像MySQL、MS SQL Server這些著名的關係型資料庫。
NoSQL資料庫是由於網際網路業務的誕生而產生的。2006年,谷歌引入了BigTable,後續出現了HBase、Cassandra、MongoDB和Redis,這些資料庫都是由不同的底層資料組織形式去解決不同的問題。在2010年前後,谷歌又引入了以Spanner為代表的新產品,出現了F1、SequoiaDB、TiDB等NewSQL資料庫,使用SQL解決應用性問題,也保留了NoSQL的可延伸性問題。
NoSQL資料庫是為了解決傳統關係型資料庫的弊端,它有四個特點:
從業務場景來看,資料處理可以分為OLTP和OLAP。這兩種場景採用何種資料庫,取決於開發人員的技術水平和經驗。通常來說,OLTP採用強一致性的關係型資料庫,OLAP採用NoSQL或者列式資料庫。
OLTP為聯機事務處理,主要用來記錄業務事件的發生。當行為產生後,系統記錄事件是誰在什麼時候什麼地方做了什麼事,在資料庫中進行資料的增刪改查,要求高實時性、強穩定性、資料一致性。
OLAP為聯機分析處理,側重巨量資料量查詢。當業務發展到一定程度,要利用離線資料做分析,為決策提供支援。
MongoDB是一個面向檔案的資料庫,以JSON格式儲存資料。它主要用於網站的資料儲存、內容管理與快取應用。MongoDB支援全文檢索,查詢方式非常豐富,在資料處理與聚合等方面具有很強的靈活性,同時具備極高的擴充套件性和可用性。
Cassandra是一套開源分散式資料庫系統。最初由Facebook開發,用於儲存收件箱等簡單格式資料,集Google BigTable的資料模型與Amazon Dynamo的完全分散式的架構於一身。由於Cassandra良好的可延伸性,被Digg、Twitter等知名Web 2.0網站所採納,成為了一種流行的分散式結構化資料儲存方案。
CouchDB是一個面向檔案的資料庫,以JSON格式儲存資料。CouchDB可以用於儲存網站的資料與內容,以及提供快取等。支援通過JavaScript在CouchDB上執行MapReduce查詢。CouchDB還提供了一個非常方便的基於Web的管理控制檯。
Redis是一個記憶體中的鍵值資料庫。Redis具備儲存和操作高階資料型別的能力。這些資料型別是大多數開發人員熟悉的基本資料結構(列表、對映、集合)。Redis的讀寫資料的效率極高,遠遠超過常規資料庫,常常用於大型專案的快取層。
HBase 是一個面向列式儲存的分散式資料庫,其設計思想來源於 Google 的 BigTable 論文。HBase 底層儲存基於 HDFS 實現,叢集的管理基於 ZooKeeper 實現。HBase 良好的分散式架構設計為海量資料的快速儲存、隨機存取提供了可能,基於資料副本機制和分割區機制可以輕鬆實現線上擴容、縮容和資料容災,是巨量資料領域中 Key-Value 資料結構儲存最常用的資料庫方案。
Elasticsearch 是一個分散式、高擴充套件、高實時的搜尋與資料分析引擎。它提供了一個多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放原始碼釋出,是一種流行的企業級搜尋引擎。
ClickHouse 是俄羅斯的Yandex(類似百度)開源的列式儲存資料庫,主要用於線上分析處理查詢,能夠使用SQL查詢實時生成分析資料包告。使用場景與Elasticsearch類似,甚至有更高的效能。
Oracle是全球最大的資訊管理軟體及服務供應商,總部位於美國加州Redwoodshore。Oracle資料庫產品為財富排行榜上的前1000家公司採用,是最知名、使用最廣泛的企業資料庫。
DB2是IBM公司開發的關聯式資料庫管理系統,主要用於大型應用系統,具有較好的可伸縮性 。DB2是IBM推出的第二個關係型資料庫,所以稱為DB2。它提供了高層次的資料利用性、完整性、安全性、並行性、可恢復性,以及小規模到大規模應用程式的執行能力,具有與平臺無關的基本功能和SQL命令執行環境。可以同時在不同作業系統使用,包括Linux、UNIX 和 Windows。
Microsoft SQL Server 是一個全面的資料庫平臺,使用整合的商業智慧 (BI)工具提供了企業級的資料管理。Microsoft SQL Server資料庫引擎為關係型資料和結構化資料提供了更安全可靠的儲存功能,使您可以構建和管理用於業務的高可用和高效能的資料應用程式。
MySQL是使用最廣泛的開源關係型資料庫,由瑞典MySQL AB公司開發,現在已被 Oracle收購。MySQL與常用的主流資料庫Oracle、SQL Server相比,特點就是免費,並且在任何平臺上都能使用,佔用的資源較小,受個人使用者以及中小企業青睞。對於大型專案來說,MySQL的承載能力和安全性就略遜於Oracle資料庫。
MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社群在維護,採用GPL授權許可。MariaDB的目的是完全相容MySQL,包括API和命令列,使之能輕鬆成為MySQL的代替品。在儲存引擎方面,使用XtraDB來代替MySQL的InnoDB。MariaDB名稱來自創始人Michael Widenius的女兒Maria的名字。
PostgreSQL 是一個強大的開源物件關聯式資料庫系統,它使用並擴充套件了SQL語言,並結合了許多安全儲存和擴充套件最複雜資料工作負載的功能。PostgreSQL的起源可以追溯到 1986 年作為加州大學伯克利分校POSTGRES專案的一部分。PostgreSQL的架構、可靠性、資料完整性、功能集、可延伸性得到充分的驗證,開源社群也非常活躍。它是最接近工業標準SQL92的查詢語言,至少實現了SQL:2011標準中要求的179項主要功能中的160項(注:目前沒有哪個資料庫管理系統能完全實現SQL:2011標準中的所有主要功能)。
TiDB是PingCAP公司自主設計、研發的開源分散式關係型資料庫,是一款同時支援線上事務處理與線上分析處理 (Hybrid Transactional and Analytical Processing,HTAP)的融合型分散式資料庫產品,具備水平擴容或者縮容、金融級高可用、實時 HTAP、雲原生的分散式資料庫、相容 MySQL 5.7 協定和MySQL生態等重要特性,為使用者提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。TiDB適合高可用、強一致要求較高、資料規模較大等各種應用場景。
TiDB是騰訊在Postgres-XC基礎上開發的資料庫。Postgres-XC(eXtensible Cluster)是一個提供寫可延伸、同步、對稱的和透明的PostgreSQL群集解決方案的開源專案。相較於Postgres-XC,TBase的穩定性得到了較大提高,通過在核心中引入GROUP概念,提出了雙Key分佈策略,有效地解決了資料傾斜的問題。它根據資料的時間戳,將資料分為冷資料和熱資料,分別儲存於不同的儲存裝置中,有效地解決了儲存成本的問題。
OceanBase是由螞蟻集團自主研發的企業級分散式關聯式資料庫,始創於2010年。OceanBase在TPC-C和TPC-H測試上都重新整理了世界紀錄的國產原生分散式資料庫。OceanBase具有資料強一致、高可用、高效能、線上擴充套件、高度相容SQL標準和主流關聯式資料庫、低成本等特點。
SequoiaDB巨杉資料庫是一款金融級分散式關係型資料庫,主要面對高並行聯機交易型場景提供高效能、可靠穩定以及無限水平擴充套件的資料庫服務。使用者可以在 SequoiaDB 巨杉資料庫中建立多種型別的資料庫範例,以滿足上層不同應用程式各自的需求。SequoiaDB 巨杉資料庫支援 MySQL、MariaDB、PostgreSQL 和 SparkSQL四種關係型資料庫範例、JSON檔案類資料庫範例、以及 S3物件儲存的非結構化資料範例。
https://www.yisu.com/zixun/323416.html
https://blog.csdn.net/qq_16933229/article/details/109729522
https://www.jianshu.com/p/794ba6b42dcc
https://www.cnblogs.com/lidabo/p/15822815.html
https://blog.csdn.net/qq_31960623/article/details/116308332
https://www.cnblogs.com/lidabo/p/15822815.html
https://blog.csdn.net/qq_43413788/article/details/119171555
https://blog.csdn.net/yuhaiyang_1/article/details/80862914
https://blog.csdn.net/TJtulong/article/details/106510970
https://blog.51cto.com/u_14637492/5260036