日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

万亿条数据查询如何做到毫秒级响应?

發(fā)布時間:2024/4/11 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 万亿条数据查询如何做到毫秒级响应? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)”

回復(fù)”666“獲取公眾號專屬資料

知乎,在古典中文中意為“你知道嗎?”,它是中國的 Quora,一個問答網(wǎng)站,其中各種問題由用戶社區(qū)創(chuàng)建,回答,編輯和組織。作為中國最大的知識共享平臺,我們目前擁有 2.2 億注冊用戶,3000 萬個問題,網(wǎng)站答案超過 1.3 億。

隨著用戶群的增長,我們的應(yīng)用程序的數(shù)據(jù)大小無法實現(xiàn)。我們的 Moneta 應(yīng)用程序中存儲了大約 1.3 萬億行數(shù)據(jù)(存儲用戶已經(jīng)閱讀過的帖子)。

由于每月累計產(chǎn)生大約 1000?億行數(shù)據(jù)且不斷增長,這一數(shù)字將在兩年內(nèi)達(dá)到 3 萬億。在保持良好用戶體驗的同時,我們在擴(kuò)展后端方面面臨嚴(yán)峻挑戰(zhàn)。

在這篇文章中,我將深入探討如何在如此大量的數(shù)據(jù)上保持毫秒級的查詢響應(yīng)時間,以及 TiDB 是一個開源的 MySQL 兼容的 NewSQL 混合事務(wù)/分析處理( HTAP)數(shù)據(jù)庫,如何為我們提供支持獲得對我們數(shù)據(jù)的實時洞察。

我將介紹為什么我們選擇 TiDB,我們?nèi)绾问褂盟?#xff0c;我們學(xué)到了什么,優(yōu)秀實踐以及對未來的一些想法。?

我們的痛點


本節(jié)介紹了我們的 Moneta 應(yīng)用程序的體系結(jié)構(gòu),我們嘗試構(gòu)建的理想體系結(jié)構(gòu),以及數(shù)據(jù)庫可伸縮性作為我們的主要難點。

系統(tǒng)架構(gòu)要求


知乎的 Post Feed 服務(wù)是一個關(guān)鍵系統(tǒng),用戶可以通過該系統(tǒng)接收網(wǎng)站上發(fā)布的內(nèi)容。

后端的 Moneta 應(yīng)用程序存儲用戶已閱讀的帖子,并在知乎的推薦頁面的帖子流中過濾掉這些帖子。

Moneta 應(yīng)用程序具有以下特征:

  • 需要高可用性數(shù)據(jù):Post Feed 是第一個出現(xiàn)的屏幕,它在推動用戶流量到知乎方面發(fā)揮著重要作用。

  • 處理巨大的寫入數(shù)據(jù):例如,在高峰時間每秒寫入超過 4 萬條記錄,記錄數(shù)量每天增加近 30?億條記錄。

  • 長期存儲歷史數(shù)據(jù):目前,系統(tǒng)中存儲了大約 1.3 萬億條記錄。隨著每月累積約 1000?億條記錄并且不斷增長,歷史數(shù)據(jù)將在大約兩年內(nèi)達(dá)到 3 萬億條記錄。

  • 處理高吞吐量查詢:在高峰時間,系統(tǒng)處理平均每秒在 1200?萬個帖子上執(zhí)行的查詢。

  • 將查詢的響應(yīng)時間限制為 90 毫秒或更短:即使對于執(zhí)行時間最長的長尾查詢,也會發(fā)生這種情況。

  • 容忍誤報:這意味著系統(tǒng)可以為用戶調(diào)出許多有趣的帖子,即使有些帖子被錯誤地過濾掉了。

考慮到上述事實,我們需要一個具有以下功能的應(yīng)用程序架構(gòu):

  • 高可用性:當(dāng)用戶打開知乎的推薦頁面時,找到大量已經(jīng)閱讀過的帖子是一種糟糕的用戶體驗。

  • 出色的系統(tǒng)性能:我們的應(yīng)用具有高吞吐量和嚴(yán)格的響應(yīng)時間要求。

  • 易于擴(kuò)展:隨著業(yè)務(wù)的發(fā)展和應(yīng)用程序的發(fā)展,我們希望我們的系統(tǒng)可以輕松擴(kuò)展。

勘探


為了構(gòu)建具有上述功能的理想架構(gòu),我們在之前的架構(gòu)中集成了三個關(guān)鍵組件:

  • 代理:這會將用戶的請求轉(zhuǎn)發(fā)給可用節(jié)點,并確保系統(tǒng)的高可用性。

  • 緩存:這暫時處理內(nèi)存中的請求,因此我們并不總是需要處理數(shù)據(jù)庫中的請求。這可以提高系統(tǒng)性能。

  • 存儲:在使用 TiDB 之前,我們在獨立的 MySQL 上管理我們的業(yè)務(wù)數(shù)據(jù)。隨著數(shù)據(jù)量的激增,獨立的 MySQL 系統(tǒng)還不夠。

    然后我們采用了 MySQL 分片和 Master High Availability Manager( MHA)的解決方案,但是當(dāng)每月有 1000?億條新記錄涌入我們的數(shù)據(jù)庫時,這個解決方案是不可取的。

MySQL Sharding 和?MHA?的缺點

MySQL 分片和 MHA 不是一個好的解決方案,因為 MySQL 分片和 MHA 都有它們的缺點。

MySQL 分片的缺點:

  • 應(yīng)用程序代碼變得復(fù)雜且難以維護(hù)。

  • 更改現(xiàn)有的分片鍵很麻煩。

  • 升級應(yīng)用程序邏輯會影響應(yīng)用程序的可用性。


MHA 的缺點:

  • 我們需要通過編寫腳本或使用第三方工具來實現(xiàn)虛擬 IP(VIP)配置。

  • MHA 僅監(jiān)視主數(shù)據(jù)庫。

  • 要配置 MHA,我們需要配置無密碼安全 Shell( SSH)。這可能會導(dǎo)致潛在的安全風(fēng)險。

  • MHA 不為從屬服務(wù)器提供讀取負(fù)載平衡功能。

  • MHA 只能監(jiān)視主服務(wù)器(而不是從主服務(wù)器)是否可用。

在我們發(fā)現(xiàn) TiDB 并將數(shù)據(jù)從 MySQL 遷移到 TiDB 之前,數(shù)據(jù)庫可伸縮性仍然是整個系統(tǒng)的弱點。

什么是 TiDB?

TiDB 平臺是一組組件,當(dāng)它們一起使用時,它們將成為具有 HTAP 功能的 NewSQL 數(shù)據(jù)庫。

TiDB 平臺架構(gòu)
在 TiDB 平臺內(nèi)部,主要組件如下:

  • TiDB 服務(wù)器是一個無狀態(tài)的 SQL 層,它處理用戶的 SQL 查詢,訪問存儲層中的數(shù)據(jù),并將相應(yīng)的結(jié)果返回給應(yīng)用程序。它與 MySQL 兼容并且位于 TiKV 之上。

  • TiKV 服務(wù)器是數(shù)據(jù)持久存在的分布式事務(wù)鍵值存儲層。它使用 Raft 共識協(xié)議進(jìn)行復(fù)制,以確保強大的數(shù)據(jù)一致性和高可用性。

  • TiSpark 集群也位于 TiKV 之上。它是一個 Apache Spark 插件,可與 TiDB 平臺配合使用,支持商業(yè)智能(BI)分析師和數(shù)據(jù)科學(xué)家的復(fù)雜在線分析處理(OLAP)查詢。

  • 放置驅(qū)動程序(PD)服務(wù)器是由 etcd 支持的元數(shù)據(jù)集群,用于管理和調(diào)度 TiKV。

除了這些主要組件之外,TiDB 還擁有一個工具生態(tài)系統(tǒng),例如用于快速部署的 ?Ansible 腳本,用于從 MySQL 遷移的 Syncer 和 TiDB 數(shù)據(jù)遷移。

以及用于收集對 TiDB 群集進(jìn)行的邏輯更改并提供增量備份的 TiDB Binlog。復(fù)制到下游(TiDB,Kafka 或 MySQL)。
TiDB 的主要功能包括:

  • 水平可擴(kuò)展性。

  • MySQL 兼容的語法。

  • 具有強一致性的分布式事務(wù)。

  • 云原生架構(gòu)。

  • 使用 HTAP 進(jìn)行最小提取,轉(zhuǎn)換,加載( ETL)。

  • 容錯和 Raft 恢復(fù)。

  • 在線架構(gòu)更改。

我們?nèi)绾问褂?TiDB


在本節(jié)中,我將向您展示如何在 Moneta 的架構(gòu)中運行 TiDB 以及 Moneta 應(yīng)用程序的性能指標(biāo)。

我們架構(gòu)中的 TiDB

知乎的?Moneta 應(yīng)用程序中的?TiDB?架構(gòu)

我們在系統(tǒng)中部署了 TiDB,Moneta 應(yīng)用程序的整體架構(gòu)變?yōu)?#xff1a;

  • 頂層:無狀態(tài)和可伸縮的客戶端 API 和代理。這些組件易于擴(kuò)展。

  • 中間層:軟狀態(tài)組件和分層 Redis 緩存作為主要部分。當(dāng)服務(wù)中斷時,這些組件可以通過恢復(fù)保存在 TiDB 群集中的數(shù)據(jù)來自我恢復(fù)服務(wù)。

  • 底層:TiDB 集群存儲所有有狀態(tài)數(shù)據(jù)。它的組件高度可用,如果節(jié)點崩潰,它可以自我恢復(fù)其服務(wù)。

在該系統(tǒng)中,所有組件都是可自我恢復(fù)的,整個系統(tǒng)具有全局故障監(jiān)視機(jī)制。然后,我們使用 Kubernetes 來協(xié)調(diào)整個系統(tǒng),以確保整個服務(wù)的高可用性。

TiDB 的性能指標(biāo)


由于我們在生產(chǎn)環(huán)境中應(yīng)用了 TiDB,因此我們的系統(tǒng)具有高可用性和易于擴(kuò)展性,并且系統(tǒng)性能得到顯著改善。例如,在 2019 年 6 月為 Moneta 應(yīng)用程序采用一組性能指標(biāo)。

在高峰時間每秒寫入 40,000 行數(shù)據(jù):

每秒寫入的數(shù)據(jù)行(數(shù)千)

在高峰時段每秒檢查 30,000 個查詢和 1200?萬個帖子:

每秒寫入的數(shù)據(jù)行(數(shù)千)

第 99 百分位響應(yīng)時間約為 25 毫秒,第 999 百分位響應(yīng)時間約為 50 毫秒。實際上,平均響應(yīng)時間遠(yuǎn)遠(yuǎn)小于這些數(shù)字,即使對于需要穩(wěn)定響應(yīng)時間的長尾查詢也是如此。

第 99 百分位響應(yīng)時間

第 999 百分位響應(yīng)時間

我們學(xué)到了什么


我們遷移到 TiDB 并非順利,在這里,我們想分享一些經(jīng)驗教訓(xùn)。

更快地導(dǎo)入數(shù)據(jù)


我們使用 TiDB 數(shù)據(jù)遷移(DM)來收集 MySQL 增量 Binlog 文件,然后使用 TiDB Lightning 將數(shù)據(jù)快速導(dǎo)入 TiDB 集群。
令我們驚訝的是,將這 1.1 萬億條記錄導(dǎo)入 TiDB 只用了四天時間。如果我們邏輯地將數(shù)據(jù)寫入系統(tǒng),可能需要一個月或更長時間。如果我們有更多的硬件資源,我們可以更快地導(dǎo)入數(shù)據(jù)。

減少查詢延遲


完成遷移后,我們測試了少量的讀取流量。當(dāng) Moneta 應(yīng)用程序首次上線時,我們發(fā)現(xiàn)查詢延遲不符合我們的要求。為解決延遲問題,我們與 PingCap 工程師合作調(diào)整系統(tǒng)性能。
在此過程中,我們積累了寶貴的數(shù)據(jù)和數(shù)據(jù)處理知識:

  • 有些查詢對查詢延遲很敏感,有些則不然。我們部署了一個單獨的 TiDB 數(shù)據(jù)庫來處理對延遲敏感的查詢。(其他非延遲敏感的查詢在不同的 TiDB 數(shù)據(jù)庫中處理。)

    這樣,大型查詢和對延遲敏感的查詢在不同的數(shù)據(jù)庫中處理,前者的執(zhí)行不會影響后者。

  • 對于沒有理想執(zhí)行計劃的查詢,我們編寫了 SQL 提示來幫助執(zhí)行引擎選擇最佳執(zhí)行計劃。

  • 我們使用低精度時間戳 Oracle( TSO)和預(yù)處理語句來減少網(wǎng)絡(luò)往返。

評估資源


在我們嘗試 TiDB 之前,我們沒有分析我們需要多少硬件資源來支持 MySQL 端的相同數(shù)據(jù)量。
為了降低維護(hù)成本,我們在單主機(jī) - 單從機(jī)拓?fù)渲胁渴鹆?MySQL。相反,在 TiDB 中實現(xiàn)的 Raft 協(xié)議至少需要三個副本。
因此,我們需要更多的硬件資源來支持 TiDB 中的業(yè)務(wù)數(shù)據(jù),我們需要提前準(zhǔn)備機(jī)器資源。
一旦我們的數(shù)據(jù)中心設(shè)置正確,我們就可以快速完成對 TiDB 的評估。

對?TiDB 3.0 的期望


在知乎,反垃圾郵件和 Moneta 應(yīng)用程序的架構(gòu)相同。我們在用于生產(chǎn)數(shù)據(jù)的反垃圾郵件應(yīng)用程序中嘗試了 TiDB 3.0(TiDB 3.0.0-rc.1 和 TiDB 3.0.0-rc.2)的候選版本中的 Titan 和 Table Partition。?

①Titan 縮短了延遲

反垃圾郵件應(yīng)用程序一直受到嚴(yán)重的查詢和寫入延遲折磨。
我們聽說 TiDB 3.0 將引入 Titan,一種鍵值存儲引擎,用于在使用大值時減少 ?RocksDB(TiKV 中的底層存儲引擎)的寫入放大。為了嘗試這個功能,我們在 TiDB 3.0.0-rc.2 發(fā)布后啟用了 Titan。
下圖分別顯示了與 RocksDB 和 Titan 相比的寫入和查詢延遲:

在 RocksDB 和?Titan 中編寫和查詢延遲
統(tǒng)計數(shù)據(jù)顯示,在我們啟用 Titan 后,寫入和查詢延遲都急劇下降。這真是太驚人了!當(dāng)我們看到統(tǒng)計數(shù)據(jù)時,我們無法相信自己的眼睛。

②表分區(qū)改進(jìn)了查詢性能

我們還在反垃圾郵件應(yīng)用程序中使用了 TiDB 3.0 的表分區(qū)功能。使用此功能,我們可以按時將表分成多個分區(qū)。
當(dāng)查詢到來時,它將在覆蓋目標(biāo)時間范圍的分區(qū)上執(zhí)行。這大大提高了我們的查詢性能。
讓我們考慮一下如果我們將來在 Moneta 和反垃圾郵件應(yīng)用程序中實施 TiDB 3.0 會發(fā)生什么。

③Moneta 應(yīng)用程序中的?TiDB 3.0

TiDB 3.0 具有諸如 gRPC 中的批處理消息,多線程 Raftstore,SQL 計劃管理和 TiFlash 等功能。我們相信這些將為 Moneta 應(yīng)用增添光彩。

④gRPC 和多線程?Raftstore 中的批處理消息

Moneta 的寫入吞吐量超過每秒 4 萬次交易(TPS),TiDB 3.0 可以批量發(fā)送和接收 Raft 消息,并且可以在多個線程中處理 Region Raft 邏輯。我們相信這些功能將顯著提高我們系統(tǒng)的并發(fā)能力。

⑤SQL?計劃管理


如上所述,我們編寫了大量 SQL 提示,以使查詢優(yōu)化器選擇最佳執(zhí)行計劃。

TiDB 3.0 添加了一個 SQL 計劃管理功能,可以直接在 TiDB 服務(wù)器中將查詢綁定到特定的執(zhí)行計劃。使用此功能,我們不需要修改查詢文本以注入提示。

⑥TiFlash

在 TiDB DevCon 2019 上,我第一次聽說 TiFlash 是 TiDB 的擴(kuò)展分析引擎。

它使用面向列的存儲技術(shù)來實現(xiàn)高數(shù)據(jù)壓縮率,并在數(shù)據(jù)復(fù)制中應(yīng)用擴(kuò)展的 Raft 一致性算法以確保數(shù)據(jù)安全性。
由于我們擁有高寫入吞吐量的海量數(shù)據(jù),因此我們無法每天使用 ETL 將數(shù)據(jù)復(fù)制到 Hadoop 進(jìn)行分析。但是對于 TiFlash,我們樂觀地認(rèn)為我們可以輕松分析我們龐大的數(shù)據(jù)量。

⑦反垃圾郵件應(yīng)用程序中的 TiDB 3.0

與 Moneta 應(yīng)用程序的巨大歷史數(shù)據(jù)大小相比,反垃圾郵件應(yīng)用程序具有更高的寫入吞吐量。
但是,它僅查詢過去 48 小時內(nèi)存儲的數(shù)據(jù)。在此應(yīng)用程序中,數(shù)據(jù)每天增加 80?億條記錄和 1.5 TB。
由于 TiDB 3.0 可以批量發(fā)送和接收 Raft 消息,并且它可以在多個線程中處理 Region Raft 邏輯,因此我們可以用更少的節(jié)點管理應(yīng)用程序。
以前,我們使用了七個物理節(jié)點,但現(xiàn)在我們只需要五個。即使我們使用商用硬件,這些功能也可提升性能。

下一步是什么


TiDB 是一個與 MySQL 兼容的數(shù)據(jù)庫,因此我們可以像使用 MySQL 一樣使用它。
由于 TiDB 的橫向可擴(kuò)展性,現(xiàn)在我們可以自由擴(kuò)展我們的數(shù)據(jù)庫,即使我們有超過一萬億的記錄來應(yīng)對。?
到目前為止,我們已經(jīng)在我們的應(yīng)用程序中使用了相當(dāng)多的開源軟件。我們還學(xué)到了很多關(guān)于使用 TiDB 處理系統(tǒng)問題的知識。
我們決定參與開發(fā)開源工具,并參與社區(qū)的長期發(fā)展。基于我們與 PingCAP 的共同努力,TiDB 將變得更加強大。

作者:孫曉光(知乎搜索后端負(fù)責(zé)人)

出處:http://itindex.net/

想知道更多?描下面的二維碼關(guān)注我


怎么加群?:

怎么免費加入知識星球:

免費資料入口:后臺回復(fù)“666”

掘金小冊支付通道開啟,有需要購買電子版的《深入理解Kafka》的同學(xué)可以在公眾號后臺回復(fù):【電子版】 或者 【Kafka】獲取海報購買。

朕已閱?

總結(jié)

以上是生活随笔為你收集整理的万亿条数据查询如何做到毫秒级响应?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产91精品一区二区 | 神马三级我不卡 | 日产av在线 | 婷婷六月在线 | 日韩成人在线观看 | 体内精69xxxxx| 温柔女教师在线观看 | 精品精品| 超碰www| 久久精品性爱视频 | 巨乳女教师的诱惑 | 亚洲国产精品一区 | 一个色在线视频 | 无码精品a∨在线观看中文 福利片av | 久久黄色一级片 | 日b视频在线观看 | 激情丁香婷婷 | 少妇又色又紧又大爽又刺激 | 在线免费观看视频你懂的 | 日韩欧美中文在线 | 森泽佳奈中文字幕 | 国产精品无码一区二区三区 | 成年人视频在线 | 丁香婷婷在线 | 日本不卡一区二区 | 91视频成人| 不卡中文字幕在线观看 | 国产精品视频久久久久 | 99视频观看 | 黄色理伦 | 婷婷综合在线观看 | 中国精品视频 | 99在线看 | 极品少妇在线观看 | 91丨九色丨蝌蚪丨对白 | 无码人妻一区二区三区av | 中文字幕免费在线观看 | 欧美 日韩 人妻 高清 中文 | 老妇高潮潮喷到猛进猛出 | 久久亚洲精品国产 | 精品网站999 | 91在线精品播放 | 日本xxxxxwwwww | 欧美视频黄 | 精品久久久久久无码国产 | 在线成人免费 | 白丝动漫美女 | 亚洲色图清纯唯美 | 午夜影院 | 日本午夜视频在线观看 | 欧美a网| 色婷婷视频网 | 国产一国产二国产三 | 久久综合99 | 天堂中文在线免费观看 | 另类激情 | 夜夜嗨av| 国产免费观看av | 91久久精品国产 | 尤物网站在线播放 | yw在线观看 | 外国av在线| wwwxxx在线观看 | 欧美日韩一区二区三区国产精品成人 | 另类天堂| 最新激情网站 | av影片在线观看 | 欧美一区二区三区婷婷 | 欧美精产国品一二三区 | 91av视频在线免费观看 | 国产视频在线播放 | av福利在线 | www.youjizz.com国产 | 色窝av | 国产精品国产三级国产播12软件 | 91成人短视频| 久久精品国产成人av | 亚洲色图 美腿丝袜 | 久久久久久视 | 人妻无码中文久久久久专区 | 久久久久久久久久久久国产精品 | av在线不卡免费 | 亚洲人成影视 | 综合色av| 欧美日韩三级视频 | 天天躁日日躁狠狠躁av麻豆 | 99免费在线| 日本高清视频免费观看 | 国产精品久久久午夜夜伦鲁鲁 | 插插插网站 | 亚洲欧美日韩另类在线 | 黑人一级视频 | 日本免费一区二区三区四区 | 欧美精品一区二区不卡 | 国产无码日韩精品 | 亚洲国产精品国自产拍av | 国产无套在线观看 | 男女猛烈无遮挡免费视频 | 98堂 最新网名 |