作者 | Andreas Evers
編譯 | 言征
長(zhǎng)期以來(lái),數(shù)據(jù)庫(kù)一直充當(dāng)著記錄系統(tǒng),它們以可靠且持久的方式存儲(chǔ)和管理關(guān)鍵數(shù)據(jù),也贏得了大多數(shù)公司的信賴。
但時(shí)代在變。許多新興趨勢(shì)正在影響當(dāng)今數(shù)據(jù)的存儲(chǔ)和管理方式,不得不讓一些技術(shù)決策者們重新考慮數(shù)據(jù)存儲(chǔ)究竟還有哪些創(chuàng)新途徑。或許,關(guān)系型數(shù)據(jù)庫(kù)開始變得不合時(shí)宜了。
本篇文章為諸君提供了一種“跳出框框”的記錄系統(tǒng)的新玩法——為什么組織需要以不同的方式思考數(shù)據(jù)存儲(chǔ)、使用 Kafka 作為記錄系統(tǒng)的好處以及有哪些好的實(shí)現(xiàn)思路等,希望對(duì)諸君有所啟發(fā)。
1、用Kafka替代關(guān)系數(shù)據(jù)庫(kù)
KOR Financial是一家金融服務(wù)初創(chuàng)公司,他們?yōu)楹螘?huì)選擇Kafka,而不是依賴關(guān)系數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù)呢?該公司的首席技術(shù)官Andreas,曾在Pivotal Software和VMware任職,主導(dǎo)過(guò)全球范圍內(nèi)的應(yīng)用程序轉(zhuǎn)型架構(gòu)實(shí)踐,他的這一決策有什么玄機(jī)?
先說(shuō)結(jié)果,使用Kafka方案,能夠“經(jīng)濟(jì)高效、安全地存儲(chǔ)數(shù)十甚至數(shù)百PB的數(shù)據(jù),并且保留數(shù)十年?!盇ndreas稱,“采用這種方法不僅為數(shù)據(jù)架構(gòu)提供了巨大的靈活性和可擴(kuò)展性,而且還實(shí)現(xiàn)了精益和敏捷的運(yùn)營(yíng)?!?/p>
2、打破定式:數(shù)據(jù)庫(kù)沒有為規(guī)模設(shè)計(jì)
時(shí)代變了!身處數(shù)字化轉(zhuǎn)型時(shí)代,數(shù)據(jù)驅(qū)動(dòng)決策要求企業(yè)具備現(xiàn)代靈活的數(shù)據(jù)架構(gòu)。而要實(shí)現(xiàn)這樣的架構(gòu),成功的關(guān)鍵就在于,數(shù)據(jù)存儲(chǔ)能否做到強(qiáng)大、可靠和靈活。
誠(chéng)然,也看到了近二十年來(lái),大數(shù)據(jù)、分布式系統(tǒng)、云計(jì)算和實(shí)時(shí)數(shù)據(jù)處理的興起,但傳統(tǒng)的數(shù)據(jù)庫(kù)就成了掣肘的瓶頸,已無(wú)法跟上每秒生成數(shù)據(jù)的速度和數(shù)量。
首先,這是因?yàn)閿?shù)據(jù)庫(kù)并不是為規(guī)模而設(shè)計(jì)的。它們固有的僵化結(jié)構(gòu)只會(huì)阻礙企業(yè)數(shù)據(jù)架構(gòu)所需的靈活性。
作為服務(wù)全球企業(yè)金融貿(mào)易存儲(chǔ)庫(kù)以及互補(bǔ)模塊化服務(wù)的運(yùn)營(yíng)商,數(shù)據(jù)的處理級(jí)別堪比煉獄。KOR Financial創(chuàng)新式地采取了數(shù)據(jù)流優(yōu)先的方法,這也是它區(qū)別于競(jìng)爭(zhēng)對(duì)手的地方?!暗哪繕?biāo):徹底改變衍生品市場(chǎng)和全球監(jiān)管機(jī)構(gòu)對(duì)交易報(bào)告、數(shù)據(jù)管理和合規(guī)性的思考方式?!?/p>
以Kafka為架構(gòu)核心,是一個(gè)思考方式上“質(zhì)”的變化:因?yàn)檫@種架構(gòu)能夠捕獲事件而不僅僅是狀態(tài)。“將數(shù)據(jù)存儲(chǔ)在Kafka而不是數(shù)據(jù)庫(kù)中,并將其用作記錄系統(tǒng),就可以實(shí)現(xiàn)跟蹤所有這些事件、處理它們并根據(jù)現(xiàn)在或?qū)?lái)的用例創(chuàng)建數(shù)據(jù)的物化視圖?!?/p>
雖然其他貿(mào)易存儲(chǔ)庫(kù)和中介服務(wù)提供商經(jīng)常使用Oracle Exadata 等數(shù)據(jù)庫(kù)來(lái)滿足其數(shù)據(jù)存儲(chǔ)需求,但它可能非常昂貴并帶來(lái)數(shù)據(jù)管理挑戰(zhàn)。雖然它允許執(zhí)行 SQL 查詢,但挑戰(zhàn)在于管理大型SQL數(shù)據(jù)庫(kù)并確保這些系統(tǒng)內(nèi)的數(shù)據(jù)一致性。
從事全球強(qiáng)制貿(mào)易報(bào)告業(yè)務(wù),意味著要為多個(gè)管轄區(qū)提供服務(wù),每個(gè)管轄區(qū)都有自己獨(dú)特的數(shù)據(jù)模型和解釋。如果將所有數(shù)據(jù)合并到單個(gè)架構(gòu)或模型中,統(tǒng)一管理的任務(wù)就會(huì)變得越來(lái)越復(fù)雜。如果沒有數(shù)據(jù)的歷史概覽,模式演變就具有挑戰(zhàn)性,因?yàn)樗窃谔囟ò姹镜臓顟B(tài)中具體化的,這進(jìn)一步加劇了數(shù)據(jù)管理的困境。
另外,在處理大量數(shù)據(jù)時(shí),傳統(tǒng)數(shù)據(jù)庫(kù)的可擴(kuò)展性受到限制。相比之下,將Confluence Cloud用于Kafka及其無(wú)限存儲(chǔ),就可以允許用戶在Kafka中存儲(chǔ)任意數(shù)量的數(shù)據(jù),只要需要,就可以存儲(chǔ)任意長(zhǎng)時(shí)間,而只需為所使用的存儲(chǔ)付費(fèi)。
雖然分區(qū)數(shù)量是一個(gè)考慮因素,但可以放入 Confluence Cloud 中的數(shù)據(jù)量是無(wú)限的,并且存儲(chǔ)空間會(huì)根據(jù)需要自動(dòng)增長(zhǎng),并且保留時(shí)間不受限制。
它使技術(shù)人員能夠完全抽象出數(shù)據(jù)在底層的存儲(chǔ)方式,并提供一種經(jīng)濟(jì)高效的方式來(lái)保存所有數(shù)據(jù)。更好地是,這使企業(yè)能夠以一種不受限制的方式擴(kuò)展自身的運(yùn)維,并以想要的任何表示方式來(lái)解釋事件,自由度很高。
3、會(huì)整活的Kafka:重播事件、回放數(shù)據(jù)
使用Kafka作為記錄系統(tǒng)的顯著優(yōu)勢(shì)之一在于它能夠回放數(shù)據(jù),這是傳統(tǒng)數(shù)據(jù)庫(kù)所缺乏的原生功能。對(duì)于金融場(chǎng)景來(lái)說(shuō)來(lái)說(shuō),此功能與“存儲(chǔ)事件與狀態(tài)”的偏好非常契合,這對(duì)于準(zhǔn)確計(jì)算交易狀態(tài)至關(guān)重要。
“我們收到一大堆delta(增量),我們稱之為提交或消息,它們?cè)诮o定的時(shí)間點(diǎn)對(duì)貿(mào)易狀態(tài)有貢獻(xiàn)。每個(gè)傳入的消息或事件都會(huì)修改交易并更改其當(dāng)前狀態(tài)。如果在我們的流處理邏輯過(guò)程中發(fā)生任何錯(cuò)誤,都可能導(dǎo)致不正確的狀態(tài)輸出。”
如果該信息直接存儲(chǔ)在固定表示或傳統(tǒng)數(shù)據(jù)庫(kù)中,則導(dǎo)致該狀態(tài)的事件就會(huì)丟失。即使對(duì)這些事件的解釋不正確,也無(wú)法重新審視導(dǎo)致該解釋的背景。
然而,通過(guò)在不可變且僅追加的日志中保留事件的歷史順序,Kafka 提供了重播這些事件的能力。
鑒于業(yè)務(wù)的監(jiān)管要求,必須以不可變的方式存儲(chǔ)所有內(nèi)容。需要捕獲并保留最初收到的所有數(shù)據(jù)。雖然大多數(shù)數(shù)據(jù)庫(kù)(包括SQL)都允許修改,但 Kafka 在設(shè)計(jì)上禁止對(duì)其不可變?nèi)罩具M(jìn)行任何更改。
使用 Kafka 作為記錄系統(tǒng)并擁有無(wú)限存儲(chǔ)意味著可以回到過(guò)去,分析事情是如何展開的,更改的解釋,管理時(shí)間點(diǎn)歷史更正并創(chuàng)建替代表示,而不會(huì)影響當(dāng)前的操作工作負(fù)載。
這種靈活性提供了顯著的優(yōu)勢(shì),尤其是在高度監(jiān)管的市場(chǎng)中運(yùn)營(yíng)時(shí),能及時(shí)有效地糾正錯(cuò)誤,這一點(diǎn)至關(guān)重要。
4、靈活性征服一切
使用 Kafka 作為記錄系統(tǒng)為的數(shù)據(jù)架構(gòu)帶來(lái)了顯著的靈活性??梢葬槍?duì)每個(gè)用例建立特定的視圖,并使用與這些需求精確一致的專用數(shù)據(jù)庫(kù)或技術(shù),然后讀取包含這些事件來(lái)源的 Kafka 主題。
以客戶數(shù)據(jù)管理為例??梢允褂脤iT為該用例設(shè)計(jì)的圖數(shù)據(jù)庫(kù),而無(wú)需圍繞圖數(shù)據(jù)庫(kù)構(gòu)建整個(gè)系統(tǒng),因?yàn)樗皇腔?Kafka 的視圖或投影。
這種方法允許根據(jù)用例使用不同的數(shù)據(jù)庫(kù),而無(wú)需將它們指定為的記錄系統(tǒng)。相反,它們充當(dāng)數(shù)據(jù)的表示,使能夠保持靈活性。否則,就將被插入數(shù)據(jù)庫(kù)、數(shù)據(jù)湖或數(shù)據(jù)倉(cāng)庫(kù),這些都是僵化的,不允許將數(shù)據(jù)轉(zhuǎn)換為針對(duì)特定用例優(yōu)化的表示形式。
從初創(chuàng)公司的角度來(lái)看,這種靈活性也使能夠避免過(guò)早地被鎖定在某個(gè)特定的技術(shù)方向。KOR成立于2021年,遵循將決策推遲到最后一個(gè)負(fù)責(zé)時(shí)刻的架構(gòu)最佳實(shí)踐,可以推遲對(duì)特定技術(shù)選擇的承諾,直到它是必要的并且符合的要求。這種方法意味著,可以隨著業(yè)務(wù)需求的發(fā)展而調(diào)整和發(fā)展的技術(shù)環(huán)境,并實(shí)現(xiàn)未來(lái)的可擴(kuò)展性和靈活性。
除了靈活性之外,模式注冊(cè)表(Schema Registry)的使用還確保了數(shù)據(jù)的一致性,因此開發(fā)者就可以知道數(shù)據(jù)的來(lái)源和與之相關(guān)的模式。Confluence Cloud 還允許通過(guò)架構(gòu)注冊(cè)表設(shè)置明確的演進(jìn)策略。例如,如果將所有數(shù)據(jù)放入數(shù)據(jù)湖中,那么管理該數(shù)據(jù)的所有不同版本、不同模式和不同表示就會(huì)變得更加困難。
5、切換技術(shù)的背后:事件驅(qū)動(dòng)思維
放棄數(shù)據(jù)庫(kù),而采用 Kafka 作為存儲(chǔ)數(shù)據(jù)的記錄系統(tǒng),看起來(lái)是一件非常新鮮的做法。
并不是所有公司上來(lái)就能接受這種做法,Andreas認(rèn)為,這需要公司培育“事件驅(qū)動(dòng)模型”的文化,并且這種思維轉(zhuǎn)變還應(yīng)該擴(kuò)展到通過(guò)流處理開發(fā)應(yīng)用程序的方式,不然就會(huì)引起兼容性不匹配的問(wèn)題。
這樣做的目的,是幫助團(tuán)隊(duì)成員意識(shí)到:他們正在處理不可變的數(shù)據(jù),如果他們編寫了某些內(nèi)容,他們就不能直接進(jìn)去更改它。
Andreas還建議道,要實(shí)現(xiàn)以Kafka為核心的架構(gòu),可以從理解“流處理和事件作為證明系統(tǒng)的重要性”的團(tuán)隊(duì)開始。通過(guò)展示該團(tuán)隊(duì)內(nèi)的優(yōu)勢(shì),他們可以充當(dāng)其他團(tuán)隊(duì)的大使,鼓勵(lì)采用事件作為最終真相,并采用以狀態(tài)作為最終表示的流處理。
6、寫在最后:Kafka可以取代數(shù)據(jù)庫(kù)嗎?
早在2017年,Apache Kafka和Confluent的共同創(chuàng)始人Jay Kreps就明確表示過(guò)“ 可以在Apache Kafka中存儲(chǔ)數(shù)據(jù) ”。
而且,數(shù)據(jù)可以在Kafka中想保存多久就保存多久。《紐約時(shí)報(bào)》的Apache Kafka發(fā)布是用Kafka永遠(yuǎn)存儲(chǔ)數(shù)據(jù)的著名例子。Kafka被用來(lái)存儲(chǔ)《紐約時(shí)報(bào)》曾經(jīng)發(fā)布的所有文章,并取代了他們基于API的方式。
那么Kafka可以取代數(shù)據(jù)庫(kù)嗎?顯然并不現(xiàn)實(shí),即便文中提到了許多傳統(tǒng)數(shù)據(jù)庫(kù)的“不合時(shí)宜”之處,比如,“數(shù)據(jù)庫(kù)并不是為規(guī)模設(shè)計(jì)的”等觀點(diǎn),但也僅限于金融等強(qiáng)實(shí)時(shí)性場(chǎng)景中的方案。
不過(guò),倡導(dǎo)的打破傳統(tǒng)數(shù)據(jù)庫(kù)的思維定式去重新設(shè)計(jì)底層架構(gòu)的方法,值得反思和借鑒。
原文鏈接:https://thenewstack.io/ditching-databases-for-apache-kafka-as-system-of-record/