掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
?雖然流可以是處理大量數(shù)據(jù)的有效方式,但它們也有自己的挑戰(zhàn)。讓我們看看其中的一些。

成都做網(wǎng)站、網(wǎng)站建設(shè)服務(wù)團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務(wù)是我們的理念。成都創(chuàng)新互聯(lián)把每個網(wǎng)站當做一個產(chǎn)品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!
1. 如果消費者無法像制作人創(chuàng)建塊那樣快速處理塊,會發(fā)生什么?一個例子:如果消費者比生產(chǎn)者慢50%,會怎么樣?如果我們從一個10GB的文件開始,這意味著當生產(chǎn)者處理完所有10GB時,消費者只處理了5GB。剩余的5GB在等待處理時會發(fā)生什么情況?突然之間,分配給仍然需要處理的數(shù)據(jù)的50到100字節(jié)必須擴展到5GB。
圖1:如果消費者的速度比生產(chǎn)者慢,則需要額外的內(nèi)存
2. 這只是一個噩夢場景。還有其他的。例如,如果消費者在處理一條生產(chǎn)線時突然失效,會發(fā)生什么情況?你需要一種跟蹤正在處理的行的方法,以及一種允許重新讀取該行和隨后的所有行的機制。
圖2:當消費者失效時
3. 最后,如果你需要能夠處理不同的事件并將其發(fā)送給不同的消費者,會發(fā)生什么?此外,如果增加額外的復(fù)雜性,一個消費者的進程依賴于另一個消費者,那么就有相互依賴的進程,會怎么樣?一個真正的風(fēng)險是,你最終會遇到一個復(fù)雜的、緊耦合的、難以管理的單體系統(tǒng)——隨著不斷添加和刪除不同的生產(chǎn)者和消費者,這些需求將不斷變化。
舉個例子(圖3),假設(shè)我們有一家大型零售店,擁有數(shù)千臺服務(wù)器,支持通過網(wǎng)絡(luò)應(yīng)用和移動應(yīng)用進行購物。
假設(shè)我們正在處理三種與支付、庫存和Web服務(wù)器日志相關(guān)的數(shù)據(jù),每種數(shù)據(jù)都有一個相應(yīng)的消費者:“支付處理器”、“庫存處理器”和“Web服務(wù)器事件處理器”。此外,兩個消費者之間存在著重要的相互依賴關(guān)系。在處理庫存之前,需要先驗證付款。最后,每種類型的數(shù)據(jù)都有不同的目的地。如果是支付事件,則將輸出發(fā)送到所有系統(tǒng),如數(shù)據(jù)庫、電子郵件系統(tǒng)、CRM等。如果是Web服務(wù)器事件,則僅將其發(fā)送到數(shù)據(jù)庫。如果是庫存事件,則將其發(fā)送到數(shù)據(jù)庫和CRM。
你可以想象,這很快就會變得非常復(fù)雜和混亂。這還不包括我們需要為每個消費者處理的慢消費者和容錯問題。
圖3:緊耦合的挑戰(zhàn),因為有多個生產(chǎn)者和消費者
當然,所有這些都假設(shè)你正在處理一個單體架構(gòu),你有一臺服務(wù)器接收和處理所有事件。你將如何處理微服務(wù)架構(gòu)?在這種情況下,許多小型服務(wù)器,即微服務(wù),將處理事件,它們都需要能夠相互通信。突然間,你不僅僅有多個生產(chǎn)者和消費者,它們還分散在多個服務(wù)器上。
微服務(wù)的一個關(guān)鍵好處是,它們解決了根據(jù)不斷變化的需求擴展特定服務(wù)的問題。不幸的是,微服務(wù)只解決了一些問題。我們的生產(chǎn)者和消費者之間仍然存在緊耦合,我們保留了庫存微服務(wù)和支付服務(wù)之間的依賴關(guān)系。我們在最初的流媒體示例中指出的問題仍然存在:
這些只是一些主要挑戰(zhàn)。讓我們看看如何解決這些問題。
圖4:微服務(wù)世界中緊耦合的挑戰(zhàn)
正如我們所看到的,流可以非常適合處理大量數(shù)據(jù),但也帶來了一系列挑戰(zhàn)。為了解決這些挑戰(zhàn),引入了新的專用系統(tǒng),如Apache Kafka和Redis Streams。在Kafka和Redis流的世界中,服務(wù)器不再像流那樣位于中心,其他一切都圍繞著它們。
數(shù)據(jù)工程師和數(shù)據(jù)架構(gòu)師經(jīng)常共享這種以流為中心的世界觀。當流成為中心時,一切都是流水線型的,這并不奇怪。
圖5顯示了前面看到的緊耦合示例的直接映射。讓我們看看它在高層次上是如何工作的。
許多流挑戰(zhàn)一度看似艱巨,甚至無法克服,但只要把流放在中心,就可以輕易解決。這就是為什么越來越多的人在他們的數(shù)據(jù)層中使用Kafka和Redis Streams,這也是為什么數(shù)據(jù)工程師將流視為世界的中心。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流