超全面!Java核心知識總結
超全面!Java核心知識總結
超全面!Java核心知識總結
知乎,在古典中文中意爲“你知道嗎?”,它是中國的 Quora,一個問答網站,其中各種問題由用戶社區創建,回答,編輯和組織。
我們的痛點
系統架構要求
-
需要高可用性數據: Post Feed 是第一個出現的屏幕,它在推動用戶流量到知乎方面發揮着重要作用。 -
處理巨大的寫入數據: 例如,在高峯時間每秒寫入超過 4 萬條記錄,記錄數量每天增加近 30 億條記錄。 -
長期存儲歷史數據:目前,系統中存儲了大約 1.3 萬億條記錄。隨着每月累積約 1000 億條記錄並且不斷增長,歷史數據將在大約兩年內達到 3 萬億條記錄。 -
處理高吞吐量查詢: 在高峯時間,系統處理平均每秒在 1200 萬個帖子上執行的查詢。 -
將查詢的響應時間限制爲 90 毫秒或更短: 即使對於執行時間最長的長尾查詢,也會發生這種情況。 -
容忍誤報: 這意味着系統可以爲用戶調出許多有趣的帖子,即使有些帖子被錯誤地過濾掉了。
-
高可用性: 當用戶打開知乎的推薦頁面時,找到大量已經閱讀過的帖子是一種糟糕的用戶體驗。 -
出色的系統性能: 我們的應用具有高吞吐量和嚴格的響應時間要求。 -
易於擴展: 隨着業務的發展和應用程序的發展,我們希望我們的系統可以輕鬆擴展。
勘探
-
代理: 這會將用戶的請求轉發給可用節點,並確保系統的高可用性。 -
緩存: 這暫時處理內存中的請求,因此我們並不總是需要處理數據庫中的請求。這可以提高系統性能。 -
存儲: 在使用 TiDB 之前,我們在獨立的 MySQL 上管理我們的業務數據。隨着數據量的激增,獨立的 MySQL 系統還不夠。 然後我們採用了 MySQL 分片和 Master High Availability Manager( MHA)的解決方案,但是當每月有 1000 億條新記錄湧入我們的數據庫時,這個解決方案是不可取的。
MySQL Sharding 和 MHA 的缺點
MySQL 分片的缺點:
-
應用程序代碼變得複雜且難以維護。 -
更改現有的分片鍵很麻煩。 -
升級應用程序邏輯會影響應用程序的可用性。
MHA 的缺點:
-
我們需要通過編寫腳本或使用第三方工具來實現虛擬 IP(VIP)配置。 -
MHA 僅監視主數據庫。 -
要配置 MHA,我們需要配置無密碼安全 Shell( SSH)。這可能會導致潛在的安全風險。 -
MHA 不爲從屬服務器提供讀取負載平衡功能。 -
MHA 只能監視主服務器(而不是從主服務器)是否可用。
什麼是 TiDB?
-
TiDB 服務器是一個無狀態的 SQL 層,它處理用戶的 SQL 查詢,訪問存儲層中的數據,並將相應的結果返回給應用程序。它與 MySQL 兼容並且位於 TiKV 之上。 -
TiKV 服務器是數據持久存在的分佈式事務鍵值存儲層。它使用 Raft 共識協議進行復制,以確保強大的數據一致性和高可用性。 -
TiSpark 集羣也位於 TiKV 之上。它是一個 Apache Spark 插件,可與 TiDB 平臺配合使用,支持商業智能(BI)分析師和數據科學家的複雜在線分析處理(OLAP)查詢。 -
放置驅動程序(PD)服務器是由 etcd 支持的元數據集羣,用於管理和調度 TiKV。
-
水平可擴展性。 -
MySQL 兼容的語法。 -
具有強一致性的分佈式事務。 -
雲原生架構。 -
使用 HTAP 進行最小提取,轉換,加載( ETL)。 -
容錯和 Raft 恢復。 -
在線架構更改。
我們如何使用 TiDB
我們架構中的 TiDB
-
頂層:無狀態和可伸縮的客戶端 API 和代理。這些組件易於擴展。 -
中間層: 軟狀態組件和分層 Redis 緩存作爲主要部分。當服務中斷時,這些組件可以通過恢復保存在 TiDB 羣集中的數據來自我恢復服務。 -
底層: TiDB 集羣存儲所有有狀態數據。它的組件高度可用,如果節點崩潰,它可以自我恢復其服務。
TiDB 的性能指標
我們學到了什麼
減少查詢延遲
-
有些查詢對查詢延遲很敏感,有些則不然。我們部署了一個單獨的 TiDB 數據庫來處理對延遲敏感的查詢。(其他非延遲敏感的查詢在不同的 TiDB 數據庫中處理。) 這樣,大型查詢和對延遲敏感的查詢在不同的數據庫中處理,前者的執行不會影響後者。 -
對於沒有理想執行計劃的查詢,我們編寫了 SQL 提示來幫助執行引擎選擇最佳執行計劃。 -
我們使用低精度時間戳 Oracle( TSO)和預處理語句來減少網絡往返。
對 TiDB 3.0 的期望
④gRPC 和多線程 Raftstore 中的批處理消息
⑤SQL 計劃管理
⑥TiFlash
⑦反垃圾郵件應用程序中的 TiDB 3.0
下一步是什麼
---END---
本文分享自微信公衆號 - Java專欄(finishbug)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。