深度|不同數據系統中的“一致性”(Consistency)含義的區別

“你們的系統能實現強一致性嗎?”作為過去幾年一直在開發流處理系統的從業者,我經常被問到這個問題。我時常想自信地推銷我們的產品,但現實情況是,回答這個問題并不簡單。其中的挑戰并不在于問題本身,而在于 “一致性”(Consistency) 對于不同技術背景的人來說有不同的含義。

實際上,來自以下不同背景的人:

  • 數據庫
  • 分布式系統
  • 流處理系統

對“一致性”都有自己的理解。沒有了解清楚背景就回答可能會導致誤解。在本文中,我將澄清在這些不同的數據系統中“一致性”究竟意味著什么。

1. 數據庫中的“一致性”

在傳統數據庫中,“一致性”是 ACID 原則(Atomicity, Consistency, Isolation, Durability)中的一個基石,它保證了每個事務將數據庫從一個合法狀態轉換到另一個合法狀態。例如,在一個銀行交易中,一個賬戶被扣款,另一個賬戶被存款,“一致性”確保總余額保持不變。需要注意的是,這與“原子性”(Atomicity)不同,“原子性”指的是事務的要么成功要么失效特性。例如,“原子性”確保事務中的所有操作要么全部成功,要么全部失敗,確保數據庫中不會留下不完整的事務。

總而言之,數據庫的“一致性”指的是確保事務處理前后數據的正確性和有效性。
數據庫中 ACID 模型中的“一致性”指的是數據庫從一個合法狀態過渡到另一個合法狀態。

2. 分布式系統中的“一致性”

在討論分布式系統時,“一致性”常常指的是 CAP 定理中的一個基本概念,該定理最初由加州大學伯克利分校的研究人員提出,目前已成為分布式系統學術課程和專業討論中的基礎話題。

在 CAP 定理中,“一致性”具體指的是在不同節點分布的各種副本的數據一致性。在分布式系統中確保這種“一致性”尤其具有挑戰性。該定理強調了三個關鍵屬性之間的權衡:consistency, availability, 和 partition tolerance(一致性、可用性和分區容錯性)。根據 CAP 定理,分布式系統在同一時間只能實現這三個屬性中的兩個。

在這個背景下,“一致性”確保在任何給定時間,不同節點的所有數據副本都顯示相同的信息。這對于維護數據的完整性至關重要,特別是在涉及網絡故障或延遲的情況下。該定理揭示了在多個節點間保持數據同步的固有困難,突出了在設計和維護強大的分布式系統時,平衡這三個競爭需求的持續挑戰。
分布式系統中的“一致性”確保不同節點的所有數據副本在任何給定時間都顯示相同的信息。

3. 流處理系統中的“一致性”

圍繞流處理系統中“一致性”的討論通常與涉及數據庫或分布式系統時不同,反映出其獨特的需求和挑戰。在文章《一致性與完整性:重新思考 Apache Kafka 中的分布式流處理》中,作者將“exactly-once” semantics(精確一次性)語義定義為流處理環境中“一致性”的一個關鍵特性。

在流處理系統中,維護“一致性”不是圍繞replicating data,而是確保每個數據事件只被處理一次,即使是在系統故障的情況下。以一個實時處理的金融交易為例,如果系統在處理過程中崩潰,系統恢復后我們必須確保交易不會被重復處理。保證“exactly-once”對于維護流數據的一致性和完整性至關重要,它確保了無論系統中斷與否,每個交易都被準確處理且僅處理一次。
流處理系統中的“一致性”通常指的是“exactly-once”

4. 用戶真正需要什么?

為了突出不同數據系統中“一致性”需求的差異,請看下表:

系統類型一致性需求示例
數據庫事務完整性銀行交易應始終保持賬戶平衡
分布式系統跨節點的數據一致性社交媒體上的個人資料更新必須在各處一致
流處理系統消息順序和消息處理語義保證每筆金融交易實時處理且只處理一次

實際上,用戶和企業真正需要的是可靠性和數據完整性,這超出了標準教科書對“一致性”的定義。他們需要系統不僅強大可靠,還能有效處理現實世界的復雜性。對于用戶來說真正成功的系統是能夠始終如一地提供正確的結果,實現這種級別的“一致性”不僅僅需要系統“看起來”正確,而是理論上合理且功能上可靠。

5. 分布式流數據庫中的“一致性”

接下來讓我們深入探討更有趣的內容:分布式流數據庫中的“一致性”。如果你不熟悉流數據庫是什么,可以參考如 KsqlDB 和 PipelineDB 的傳統系統。本質上,流數據庫是專為流處理定制的數據庫,感興趣的讀者可以參考我之前的文章《什么是流式數據庫》。為了降低執行流處理的成本和復雜性,我們開發了一個名為 RisingWave 的分布式流數據庫。

分布式流數據庫是數據庫、分布式系統和流處理系統的結合體。那么,它的“一致性”是什么含義呢?理想情況下,分布式流數據庫的“一致性”應該同時滿足上述三種系統的需求,但當然這也取決于具體的系統實現。無法在此詳細介紹所有分布式流數據庫的一致性模型,讓我們重點關注 RisingWave:RisingWave 中的“一致性”是什么樣的?讓我們從三個維度來探討。

5.1 數據庫背景下的“一致性”

RisingWave 能夠實現。RisingWave 能有效地確保內部狀態無縫地從一個合法狀態轉變到另一個合法狀態。但需要注意的是,雖然 RisingWave 支持只讀事務,但它不支持跨不同表的讀寫事務。因此,如果有人需要一個 OLTP 數據庫來管理復雜的事務負載,他們可能會選擇 MySQL、Postgres、CockroachDB 或 TiDB 等解決方案。出現這個方案設計主要有以下兩個原因:

  • 專注于流數據處理:RisingWave 專注于優化流數據處理。完整的事務處理能力可能會給系統帶來顯著的復雜性。
  • 與傳統 OLTP 數據庫的集成:通常,傳統的 OLTP 數據庫在上游處理事務,序列化事務變更。RisingWave 作為下游系統,專注于實時分析。整合復雜的事務處理可能會導致顯著的性能下降,特別是在現實操作的苛刻條件下。

RisingWave 保留了上游 OLTP 數據庫的事務語義。

此外,RisingWave 能夠理解和處理來自上游 OLTP 數據庫的事務語義,這對于金融等領域的客戶來說是一個關鍵特性。

5.2 分布式系統背景下的“一致性”

RisingWave 能夠實現。RisingWave 可以在多個區域內實現高可用性。雖然 RisingWave 沒有實施如 Paxos 或 Raft 這樣的復雜一致性協議來確保跨副本的一致性,但它利用 S3 進行數據存儲。S3 不僅存儲數據庫表,還存儲流處理的內部狀態,有效地在多個副本間復制數據以保持一致性。

5.3 流處理系統背景下的“一致性”

RisingWave 能夠實現。RisingWave 通過確保exactly-once semantics 和 adeptly managing out-of-order data processing 而表現出色。這種能力確保無論數據流如何混亂,每個數據事件都能被準確地處理一次,從而保持流數據的一致性。

6. 總結

“一致性”的含義在數據庫、分布式系統和流處理系統中有顯著差異:

  • 數據庫注重事務完整性。
  • 分布式系統強調跨節點的數據一致性。
  • 流處理系統優先考慮保證處理上的“exactly-once ”。

RisingWave 作為一個強大且適應性強的分布式流數據庫,有效地滿足了這些多樣化的“一致性”需求。不僅能在理論上達到這些“一致性”標準,還在實際應用中表現出色,使得 RisingWave 始終是實現數據“一致性”的可靠解決方案。

7. 關于 RisingWave

RisingWave 是一款開源的分布式流處理數據庫,旨在幫助用戶降低實時應用的開發成本。RisingWave 采用存算分離架構,提供 Postgres-style 使用體驗,具備比 Flink 高出 10 倍的性能以及更低的成本。

👨?🔬加入 RW 社區,歡迎關注公眾號:RisingWave 中文開源社區

🧑?💻快速上手 RisingWave,歡迎體驗入門教程:github.com/risingwave

💻深入使用 RisingWave,歡迎閱讀用戶文檔:zh-cn.risingwave.com/docs

🔍更多常見問題及答案,歡迎搜索留言: risingwavelabs/discussions

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

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

相關文章

字節8年經驗之談!好用移動APP自動化測試框架有哪些?

移動App自動化測試框架是為了提高測試效率、降低測試成本而開發的一套工具和方法。好用的移動App自動化測試框架有很多,下面將介紹一些常用的框架,并提供一篇超詳細和規范的文章,從零開始幫助你搭建一個移動App自動化測試框架。 1. Appium&a…

筆記:在Entity Framework Core中使用DeleteBehavior配置外鍵級聯刪除

一、目的: 在Entity Framework Core中,DeleteBehavior枚舉定義了在刪除主實體時如何處理與之關聯的外鍵約束。DeleteBehavior.Cascade是DeleteBehavior枚舉的一個選項,它指定當刪除主實體時,所有具有外鍵引用的相關實體也將被自動…

十大優秀AI人工智能作詞軟件有哪些?

1、妙筆生詞:國內專業智能作詞工具,是一款非常優秀的國內作詞軟件,它可以選擇語言,風格,韻腳一鍵生成歌詞,也可以仿寫歌詞,可以續寫歌詞,可以智能取歌名,找優秀詞句&…

神經網絡識別數字圖像案例

學習資料:從零設計并訓練一個神經網絡,你就能真正理解它了_嗶哩嗶哩_bilibili 這個視頻講得相當清楚。本文是學習筆記,不是原創,圖都是從視頻上截圖的。 1. 神經網絡 2. 案例說明 具體來說,設計一個三層的神經網絡。…

如何找工作 校招 | 社招 | 秋招 | 春招 | 提前批

馬上又秋招了,作者想起以前讀書的時候,秋招踩了很多坑,但是第一份工作其實挺重要的。這里寫一篇文章,分享一些校招社招的心得。 現在大學的情況是,管就業的人,大都是沒有就業的輔導員(筆者見過…

億發512版本更新,看數據駕駛艙、掃碼揀貨、UDI序列號的新功能

如果您正尋求突破傳統業務模式的束縛,希望擁抱數字化轉型帶來的無限可能,我們誠邀您體驗億發軟件。億發專業團隊將為您提供個性化的咨詢和定制服務,幫助您的企業快速適應市場變化,實現業務模式和商業模式的創新。

【騰訊云生成式AI產品解決方案深度分析 2024】

文末有福利! 騰訊云生成式AI產品解決方案 (一) 基于生成式AI的騰訊云產品架構升級 (二) 騰訊云完善的產品矩陣,滿足不同路線客戶需求 1. 路線一 標準軟件 (1) 騰訊樂享AI助手 落地背景及挑戰在企業知識管理、培訓學習、辦公協同場景中,存…

初識C++ | 基本介紹、命名空間、輸入輸出、缺省函數、函數重載、引用、內聯函數、nullptr

基本介紹 C的起源 1979年,當時的 Bjarne Stroustrup 正在?爾實驗室從事計算機科學和軟件?程的研究?作。?對項?中復雜的軟件開 發任務,特別是模擬和操作系統的開發?作,他感受到了現有語?(如C語?)在表達能?、可…

無法定位程序輸入點kernel32.dll ——一鍵修復丟失kernel32.dll方案

無法定位程序輸入點" 錯誤通常發生在 Windows 操作系統中,當一個程序試圖加載一個 DLL(動態鏈接庫)文件中的特定函數,但無法找到該函數的入口點時。kernel32.dll 是 Windows 操作系統中的一個關鍵 DLL 文件,它包含…

Backyard二指夾爪硬件安裝與軟件配置

一、背景 每次要用機械臂做實驗時,都要重新配置好一會,尤其這個Backyard二指夾爪,各種連接線和外接電源。雖然很麻煩,但理清思路后,10分鐘就可以搞定。所以說腦力勞動的效率永遠大于體力勞動,要多想&#…

HiFi音頻pro和普通HiFi音頻

針對那些對音質要求極高、追求專業級音頻表現的用戶,音頻設備公司專門設計了HiFi 音頻Pro系列。它們在設計和性能上更為精細和高級,當然價格通常也會反映其高端定位和專業水準。相比之下,普通HiFi音頻設備雖然也能提供良好的音質,…

設置DepthBufferBits和設置DepthStencilFormat的區別

1)設置DepthBufferBits和設置DepthStencilFormat的區別 2)Unity打包exe后,游戲內拉不起Steam的內購 3)Unity 2022以上Profiler.FlushMemoryCounters耗時要怎么關掉 4)用GoodSky資產包如何實現晝夜播發不同音樂功能 這是…

【北京迅為】《i.MX8MM嵌入式Linux開發指南》-第一篇 嵌入式Linux入門篇-第十八章 Linux編寫第一個自己的命令

i.MX8MM處理器采用了先進的14LPCFinFET工藝,提供更快的速度和更高的電源效率;四核Cortex-A53,單核Cortex-M4,多達五個內核 ,主頻高達1.8GHz,2G DDR4內存、8G EMMC存儲。千兆工業級以太網、MIPI-DSI、USB HOST、WIFI/BT…

Python-找客戶軟件

軟件功能 請求代碼: 填充表格: 可以search全國各個區縣的所有企業信息,過濾手機號、查看是否續存/在業狀態。方便找客戶。 支持定-制-其他引-留-阮*件(XHSS,DYY,KS,Bi-li*Bi-li) V*…

AutoHotKey自動熱鍵(八)腳本快速暫停與重新加載

我們在編輯腳本的時候,可以添加快捷鍵來改變腳本的狀態 ;暫停腳本 F11::Suspend;重置腳本 F12::Reloadreload用來重置腳本 我們可以在腳本開頭加上標簽提示腳本重啟成功 ToolTip, 腳本已經重啟 Sleep, 1000 ToolTip第二個ToolTip是用來關閉提示器用的 這個提示功能一定要寫…

oracle dba常用腳本2

11、表空間實有、現有、使用情況查詢對比 SELECT TABLESPACE_NAME 表空間,TO_CHAR(ROUND(BYTES / 1024, 2), 99990.00) || 實有,TO_CHAR(ROUND(FREE / 1024, 2), 99990.00) || G 現有,TO_CHAR(ROUND((BYTES - FREE) / 1024, 2), 99990.00) || G 使用,TO_CHAR(ROUND(10000 * US…

【開源合規】開源許可證風險場景詳細解讀

文章目錄 前言關于BlackDuck許可證風險對比圖弱互惠型許可證舉個例子具體示例LGPL系列LGPL-2.0-onlyLGPL-2.0-or-laterLGPL-2.1-onlyLGPL-2.1-or-laterLGPL-3.0-onlyLGPL-3.0-or-laterMPL系列MPL-1.0MPL-1.1MPL-2.0EPL系列EPL-1.0EPL-2.0互惠型許可證GPL系列GPL-1.0GPL-2.0GPL-…

常用錄屏軟件,分享這四款寶藏軟件!

在數字化時代,錄屏軟件已經成為我們日常工作、學習和娛樂中不可或缺的工具。無論你是需要錄制教學視頻、游戲過程,還是進行產品演示,一款高效、易用的錄屏軟件都能讓你的工作事半功倍。今天,就為大家揭秘四款寶藏級錄屏軟件&#…

重磅|九科信息完成諾輝領投的B1輪融資,累計融資已達億級

近日,九科信息宣布B1輪融資順利完成。本輪由深圳諾輝嶺南投資管理有限公司領投,深創投索斯福(深圳)私募創業投資基金跟投。 截至本輪,九科信息累計融資達億級。但真正讓九科人驕傲的,并非融資本身&#xff…

無法找到模塊“@wangeditor/editor-for-vue”的聲明文件

vue3項目中使用wangeditor/editor遇到的問題 開發環境不管紅線報錯正常使用 打包的時候就會報錯了 1.安裝依賴 pnpm install --save wangeditor/editor wangeditor/editor-for-vuenext 2.遇到的問題 3.解決方法 在src目錄下面創建 wangeditor-types.d.ts 文件 代碼如下 de…