摘要:為此,一款高性能的分布式數據庫,日漸成為剛需?;谌缟系脑?,我們選擇了,作為豐巢的核心系統的分布式數據庫,來取代和。
作者:豐巢技術團隊
隨著豐巢業務系統快速增長,其核心系統的數據量,早就跨越了億級別,而且每年增量仍然在飛速發展。整個核心系統隨著數據量的壓力增長,不但系統架構復雜度急劇增長,數據架構更加復雜,傳統的單節點數據庫,已經日漸不能滿足豐巢的需求,當單表數量上億的時候,Oracle 還能勉強抗住,而 MySQL 到單表千萬級別的時候就難以支撐,需要進行分表分庫。為此,一款高性能的分布式數據庫,日漸成為剛需。
思考在互聯網公司業務量增大之后,并行擴展是最常用、最簡單、最實時的手段。例如負載均衡設備拆流量,讓海量流量變成每個機器可以承受的少量流量,并且通過集群等方式支撐起來整個業務。于是當數據庫扛不住的時候也進行拆分。
但有狀態數據和無狀態數據不同,當數據進行拆分的時候,會發生數據分區,而整個系統又要高可用狀態下進行,于是數據的一致性變成了犧牲品,大量的核對工具在系統之間跑著保證著最終的一致性。在業務上,可能業務同學經常會遇到分過庫的同學說,這個需求做不了,那個需求做不了,如果有 sql 經驗的業務同學可能會有疑問不就是一條 sql 的事情么,其實這就是分庫分表后遺癥。
為此,我們需要有個數據庫幫我們解決以上問題,它的特性應該是:
數據強一致:支持完整的 ACID
不分表分庫:無論多少數據我們只管插入不需要關心啥時候擴容,會不會 有瓶頸
數據高可用:當我們某臺數據庫的少部分機器磁盤或者其他掛了的時候,我們業務上可以無感知,甚至某個城市機房發生災難的時候還可以持續提供服務,數據不丟失
復雜 SQL 功能:基本上單庫的 SQL,都可以在這個數據庫上運行,不需要修改或者些許修改
高性能:在滿足高 QPS 的同時,保證比較低的延時
選型根據以上期望進行分析,我們分析了目前市面上存在的 NewSQL 分布式數據庫,列表如下:
在綜合考慮了開源協議,成熟度,可控度,性能,服務支撐等綜合因素之后,我們選擇了 TiDB,它主要優勢如下:
高度兼容 MySQL
大多數情況下,無需修改代碼即可從?MySQL?輕松遷移至 TiDB,分庫分表后的 MySQL 集群亦可通過 TiDB 工具進行實時遷移。? ??
水平彈性擴展
通過簡單地增加新節點即可實現 TiDB 的水平擴展,按需擴展吞吐或存儲,輕松松應對高并發、海量數據場景。
分布式事務?
TiDB 100% 支持標準的 ACID 事務。
金融級別的高可用性
相比于傳統主從(M-S)復制方案,基于 Raft 的多數派選舉協議可以提供金融級的 100% 數據強一致性保證,且在不丟失大多數副本的前提下,可以實現故障的自動恢復(auto-failover),無需人工介入。
基于如上的原因,我們選擇了 TiDB,作為豐巢的核心系統的分布式數據庫,來取代? ?Oracle 和 MySQL。
評估 1. 性能測試TiDB 的基準測試,使用的工具是 sysbanch 進行測試,使用了 8 張基礎數據為一千萬的表,分別測試了 insert,select,oltp 和 delete 腳本得到數據如下,查詢的 QPS 達到了驚人的 14 萬每秒,而插入也穩定在 1 萬 4 每秒。
核心服務器配置:
測試結果:
通過~
2. 功能測試通過~
接入因為是核心系統,安全起見,我們采取了多種方案保證驗證項目接入的可靠性,保證不影響業務。
1. 項目選擇在尋找第一個接入項目的時候,我們以一下 4 個特征,進行了選擇。
最終,我們選擇了推送服務。因為推送服務是豐巢用來發送取件通知的核心服務,量非常大,但邏輯簡單,而且有備選外部推送方案,所以即便萬一出現問題,而不會影響用戶。
2. 代碼修改因為 TiDB 是完全兼容 MySQL 語法的,所以在這個項目的接入過程中,我們對代碼的修改是很細微的。SQL 基本零改動,主要是外圍代碼,包括:
異步接口修改,數據異步化入庫
同步接口修改,實現異常熔斷
停止內嵌數據遷移代碼
以上三點,保證了整個系統在不強依賴于數據庫,并且能在高并發的情況下通過異步落庫保護數據庫不被壓垮,并且在數據庫發生問題的時候,核心業務可以正常進行下去。
效果 1. 查詢能力接入 TiDB 之后,原先按照時間維度來拆分的十幾個分表,變成了一張大表。最明顯的變化,是在大數據量下,數據查詢能力有了顯著的提升。
2. 監控能力TiDB 擁有很完善的監控平臺,可以直觀的看到容量,以及節點狀態。
還能了解每個節點負載和 sql 執行的延時:
當然還能了解所在機器上的位置,CPU 內存等負載情況:
網絡狀態也能清晰的監控到:
所有這些能讓團隊能分析出來有問題的 sql,以及數據庫本身的問題。
小結TiDB 的接入過程,整體還是非常順利的,由于之前做了很多接入的保障工作,當天切換流量到 TiDB 的過程只用了 10 分鐘的時間,在此也要感謝 TiDB 對于 MySQL 語法的兼容性的支持,以及 PingCAP 提供的各種有用的工具。到目前為止,系統的穩定運行了一個多月,很好的滿足了豐巢的業務需求。
TiDB 的改造完成之后,豐巢推送服務對大部分消息進行了落地和查詢,截止目前為止,推送服務最大的日落地量已經達到了 5 千萬,而如果現在推送服務還使用的還是 MySQL 的方案,就需要上各種的分庫分表方案,很多細致的業務就無法或者難以開展。
此次 TiDB 的改造,只是豐巢對于分布式數據技術探索的一小步,未來豐巢會將更多的分布式技術,引入到更多的業務系統,打造更加極致的產品和服務。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17812.html
摘要:作者申礫今年月份,我們發布了版本,上也對這個版本做了介紹,經過兩個月的努力,今天推出了下一個版本。新增通過語句方式管理狀態,簡化狀態管理,當前僅支持查看狀態。支持通過配置文件管理發送策略豐富管理方式。在這里對各位貢獻者表示由衷的感謝。 作者:申礫 今年 1 月份,我們發布了 TiDB 3.0.0 Beta 版本,DevCon 上也對這個版本做了介紹,經過兩個月的努力,今天推出了下一個 ...
閱讀 2178·2021-11-24 09:38
閱讀 3241·2021-11-08 13:27
閱讀 3082·2021-09-10 10:51
閱讀 3142·2019-08-29 12:20
閱讀 662·2019-08-28 18:28
閱讀 3458·2019-08-26 11:53
閱讀 2705·2019-08-26 11:46
閱讀 1514·2019-08-26 10:56