如何將Redis用于微服務(wù)通信的事件存儲(chǔ)-創(chuàng)新互聯(lián)

來源:Redislabs
作者:Martin Forstner

在謝通門等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),謝通門網(wǎng)站建設(shè)費(fèi)用合理。

翻譯:Kev×××)

以我的經(jīng)驗(yàn),將某些應(yīng)用拆分成更小的、松耦合的、可協(xié)同工作的獨(dú)立邏輯業(yè)務(wù)服務(wù)會(huì)更易于構(gòu)建和維護(hù)。這些服務(wù)(也被稱為微服務(wù))各自管理自己的技術(shù)棧,因此很容易獨(dú)立于其他服務(wù)進(jìn)行開發(fā)和部署。前人已經(jīng)總結(jié)了很多關(guān)于使用這種架構(gòu)設(shè)計(jì)的好處,在此我就不再贅述了。關(guān)于這種設(shè)計(jì),有一個(gè)方面我一直在重×××沒有它,將會(huì)導(dǎo)致一些有趣的挑戰(zhàn)。雖然構(gòu)建松耦合的微服務(wù)是一個(gè)非常輕量級(jí)和快速的開發(fā)過程,但是這些服務(wù)之間共享狀態(tài)、事件以及數(shù)據(jù)的通信模型卻不那么簡單。我使用過的最簡單的通信模型就是服務(wù)間直接通信,但是這種模型被 Fernando Dogio 明確地證明一旦服務(wù)規(guī)模擴(kuò)大就會(huì)失效,會(huì)導(dǎo)致服務(wù)崩潰、重載邏輯以及負(fù)載增加等問題,從而可能引起的巨大的麻煩,因此應(yīng)該盡量避免使用這種模型。還有一些其他通信模型,比如通用的發(fā)布/訂閱模型、復(fù)雜的 kafka 事件流模型等,但是最近我在使用 Redis 構(gòu)建微服務(wù)間的通信模型。

拯救者 Redis!

微服務(wù)通過網(wǎng)絡(luò)邊界發(fā)布狀態(tài),為了跟蹤這種狀態(tài),事件通常需要被保存在事件存儲(chǔ)中。由于事件通常是一種異步寫入操作的不可變流的記錄(又被稱為事務(wù)日志),因此適用于以下場景:

1.?順序很重要(時(shí)間序列數(shù)據(jù))

2.?丟失一個(gè)事件會(huì)導(dǎo)致錯(cuò)誤狀態(tài)

3.?回放狀態(tài)在任何給定時(shí)間點(diǎn)都是已知的

4.?寫操作簡單且快捷

5.?讀操作需要更多的時(shí)間,以至于需要緩存

6.?需要高可擴(kuò)展性,Service之間都是解耦的,沒有關(guān)聯(lián)

使用 Redis,我始終可以輕松實(shí)現(xiàn)發(fā)布-訂閱模式。但現(xiàn)在,Redis 5.0 提供了新的Streams 數(shù)據(jù)類型,我們可以以一種更加抽象的方式對(duì)日志數(shù)據(jù)結(jié)構(gòu)進(jìn)行建模-使之成為時(shí)間序列數(shù)據(jù)的理想用例(例如最多一次或最少一次傳遞語義的事務(wù)日志)?;陔p主功能,輕松簡單的部署以及內(nèi)存中的超快速處理能力,Redis 流成為一種管理大規(guī)模微服務(wù)通信的必備工具?;镜哪P捅环Q為命令查詢職責(zé)分離(CQRS),它將命令和查詢分開執(zhí)行,命令使用 HTTP 協(xié)議,而查詢采用 RESP(Redis 序列化協(xié)議)。讓我們使用一個(gè)例子來說明如何使用 Redis 作為事件存儲(chǔ)。

?

OrderShop簡單應(yīng)用概述

我創(chuàng)建了一個(gè)簡單但是通用的電子商務(wù)應(yīng)用作為例子。當(dāng)創(chuàng)建/刪除客戶、庫存物品或訂單時(shí),使用 RESP 將事件異步傳遞到 CRM 服務(wù),以管理 OrderShop 與當(dāng)前和潛在客戶的互動(dòng)。像許多常見應(yīng)用程序的需求一樣,CRM 服務(wù)可以在運(yùn)行時(shí)啟動(dòng)和停止,而不會(huì)影響其他微服務(wù)。這需要捕獲在其停機(jī)期間發(fā)送給它的所有消息以進(jìn)行后續(xù)處理。
下圖展示了 9 個(gè)解耦的微服務(wù)的互連性,這些微服務(wù)使用由 Redis 流構(gòu)建的事件存儲(chǔ)進(jìn)行服務(wù)間通信。他們通過偵聽事件存儲(chǔ)(即 Redis 實(shí)例)中特定事件流上的任何新創(chuàng)建的事件來執(zhí)行此操作。

如何將 Redis 用于微服務(wù)通信的事件存儲(chǔ)

圖1. OrderShop 架構(gòu)?

我們的 OrderShop 應(yīng)用程序的域模型由以下 5 個(gè)實(shí)體組成:

  • 顧客

  • 產(chǎn)品

  • 庫存

  • 訂單

  • 賬單

通過偵聽域事件并保持實(shí)體緩存為最新狀態(tài),事件存儲(chǔ)的聚合功能僅需調(diào)用一次或在響應(yīng)時(shí)調(diào)用。

如何將 Redis 用于微服務(wù)通信的事件存儲(chǔ)

圖2. OrderShop 域模型

?

安裝并運(yùn)行OrderShop

按照如下步驟安裝并運(yùn)行 OrderShop 應(yīng)用:

1. 從這里下載代碼倉庫:

https://github.com/Redislabs-Solution-Architects/ordershop

2.?確保已經(jīng)安裝了 Docker Engine和Docker Compose

3.?安裝 Python3:

https://python-docs.readthedocs.io/en/latest/starting/install3/osx.html

4.?使用 docker-compose up啟動(dòng)應(yīng)用程序

5.?使用 pip3 install -r client / requirements.txt 安裝需求

6.?然后使用 python3 -m unittest client / client.py 執(zhí)行客戶端

7.?使用 docker-compose stop crm-service 停止 CRM 服務(wù)

8.?重新執(zhí)行客戶端,您會(huì)看到該應(yīng)用程序正常運(yùn)行,沒有任何錯(cuò)誤

深入了解

以下是來自 client.py 的一些簡單測試用例,以及相應(yīng)的 Redis 數(shù)據(jù)類型和鍵。

如何將 Redis 用于微服務(wù)通信的事件存儲(chǔ)

我選擇流數(shù)據(jù)類型來保存這些事件,因?yàn)樗鼈儽澈蟮某橄髷?shù)據(jù)類型是事務(wù)日志,非常適合我們連續(xù)事件流的用例。我選擇了不同的鍵來分配分區(qū),并決定為每個(gè)流生成自己的條目 ID,ID 包含秒“-”微秒的時(shí)間戳(為了保持 ID 的唯一,并保留了鍵/分區(qū)之間事件的順序)。我選擇集合來存儲(chǔ) ID(UUID),并選擇列表和哈希來對(duì)數(shù)據(jù)建模,因?yàn)樗从沉怂鼈兊慕Y(jié)構(gòu),并且實(shí)體緩存只是域模型的簡單投影。

結(jié)論

Redis 提供的各種數(shù)據(jù)結(jié)構(gòu)-包括集合,有序集合,哈希,列表,字符串,位數(shù)組,HyperLogLogs,地理空間索引以及現(xiàn)在的流-可以輕松適應(yīng)任何數(shù)據(jù)模型。流包含的元素不僅是單個(gè)字符串,而且是由字段和值組成的對(duì)象。范圍查詢速度很快,并且流中的每個(gè)條目都有一個(gè) ID,這是一個(gè)邏輯偏移量。流提供了針對(duì)時(shí)間序列等應(yīng)用的解決方案,并可為其他應(yīng)用提供流消息,例如,替換需要更高可靠性的通用發(fā)布/ 訂閱應(yīng)用程序,以及其他全新的應(yīng)用。
您可以通過分片(聚集多個(gè)實(shí)例)來擴(kuò)展 Redis 實(shí)例并提供容災(zāi)恢復(fù)的持久性選項(xiàng),所以 Redis 可以作為企業(yè)級(jí)應(yīng)用的選擇。

更多優(yōu)質(zhì)中間件技術(shù)資訊/原創(chuàng)/翻譯文章/資料/干貨,×××

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

當(dāng)前標(biāo)題:如何將Redis用于微服務(wù)通信的事件存儲(chǔ)-創(chuàng)新互聯(lián)
當(dāng)前URL:http://muchs.cn/article12/dphpdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、云服務(wù)器、面包屑導(dǎo)航、全網(wǎng)營銷推廣、標(biāo)簽優(yōu)化、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)