PayPal 最近開源了JunoDB,這是一個底層使用 RocksDB 存儲引擎的分布式鍵值存儲。JunoDB 是一個高度可用且非常注重安全的數(shù)據(jù)庫。在 PayPal,它每天處理 3500 億次請求。
JunoDB是用 Golang 編寫的,采用了基于代理的設(shè)計,支持連接的線性橫向擴展。它使用一致性哈希算法對數(shù)據(jù)進行分區(qū),最大限度地減少了集群擴展或收縮時的數(shù)據(jù)移動。為了實現(xiàn)零停機,JunoDB 使用了數(shù)據(jù)中心內(nèi)和跨數(shù)據(jù)中心復(fù)制,并通過基于仲裁的協(xié)議和兩階段提交確保數(shù)據(jù)一致性。PayPal 首席 MTS Yaping Shi寫道:
實際上,PayPal 的每一個核心后端服務(wù)都依賴于 JunoDB,從登錄到風(fēng)險再到最終的交易處理。使用 JunoDB,應(yīng)用程序可以有效地存儲和緩存數(shù)據(jù),以便在關(guān)系數(shù)據(jù)庫和其他服務(wù)上快速訪問以及降低負載。

圖片來源:https://medium.com/paypal-tech/unlocking-the-power-of-junodb-paypals-key-value-store-goes-open-source-ee85f935bdc1
該數(shù)據(jù)庫主要包含三個組件:JunoDB 客戶端庫(有面向不同語言的版本)、JunoDB 客戶端代理(一個連接存儲服務(wù)器并負責(zé)分片的負載平衡器),以及 JunoDB 存儲(基于高性能嵌入式數(shù)據(jù)庫RockDB,同時提供了內(nèi)存和磁盤持久化存儲)。
如果出現(xiàn)節(jié)點故障,那么它提供的自動化即時故障轉(zhuǎn)移功能避免了集群領(lǐng)導(dǎo)的重新選舉或數(shù)據(jù)的重新分配。
對于這個新的 NoSQL 解決方案,其建議的應(yīng)用場景包括緩存、存儲用戶首選項、帳戶詳情和 API 響應(yīng)等信息、冪等性(確保操作冪等并消除任何重復(fù)處理)和延遲橋接(幫助解決由跨區(qū)域的分布式數(shù)據(jù)庫所造成的復(fù)制延遲)。Shi 介紹了該項目在 PayPal 內(nèi)部的演進情況:
它最初是一個單線程的 C++程序,但后來,為了實現(xiàn)高并發(fā)和多核友好性,我們用 Golang 進行了重寫。JunoDB 還從一個短 TTL(生存時間)的內(nèi)存數(shù)據(jù)存儲演變?yōu)橐粋支持長 TTL 的持久數(shù)據(jù)存儲。默認情況下,它通過磁盤加密和 TLS 傳輸來提升數(shù)據(jù)的安全性。
Mercado Libre 高級軟件工程師 Nahim Felicito Gomez評論道:
使用 Golang 重寫 JunoDB,PayPal 充分利用了該語言的并發(fā)性和多核能力,那也是 Golang 成為構(gòu)建 JunoDB 客戶端庫的理想選擇的原因。
在Hacker News上,許多用戶討論了該項目及鍵值存儲的好處,并將 JunoDB 與FoundationDB等其他數(shù)據(jù)庫進行了比較,而用戶 gregwebs 則質(zhì)疑公告中缺乏數(shù)據(jù):
如果能看到一些基準(zhǔn)測試,或者只是提供一些數(shù)據(jù),那就太好了。TiKV是 CNCF 捐贈的項目,具有大致相同的架構(gòu),并已部署在超過 200 個節(jié)點的大型集群中。
JunoDB 是GitHub上的一個開源項目,遵循 Apache 2 許可。為了幫助開發(fā)人員有效地使用該數(shù)據(jù)庫,PayPal 發(fā)布了服務(wù)器設(shè)置和客戶端構(gòu)建視頻教程。該項目的路線圖上還包括 Golang 客戶端和 Kubernetes JunoDB 操作符。 |