摘要:對(duì)此,公司內(nèi)部決定將票務(wù)訂單庫(kù)進(jìn)行分片來(lái)降低單庫(kù)壓力,應(yīng)對(duì)即將到來(lái)的國(guó)慶高峰訂單爆發(fā)。從將數(shù)據(jù)實(shí)時(shí)同步到來(lái)確保數(shù)據(jù)的一致。至本文截稿時(shí),在同程內(nèi)部,目前共有數(shù)套集群,部署服務(wù)器數(shù)量近百臺(tái),總數(shù)據(jù)量數(shù)十。作者瞿鍇,同程網(wǎng)資深。
項(xiàng)目背景
初次接觸 TiDB,是通過(guò)同程網(wǎng)首席架構(gòu)師王曉波先生的分享,當(dāng)時(shí)同程網(wǎng)正在使開(kāi)發(fā)和數(shù)據(jù)庫(kù)全面往開(kāi)源方向轉(zhuǎn)型,由于業(yè)務(wù)需要,很多在線業(yè)務(wù)數(shù)據(jù)量和訪問(wèn)量都非常的大,而 MySQL 無(wú)法滿(mǎn)足大數(shù)據(jù)量下的復(fù)雜查詢(xún)需求,為了使數(shù)據(jù)庫(kù)分片對(duì)開(kāi)發(fā)透明,同程自研了 DBrouter 。但分片后的合并、實(shí)時(shí)匯總統(tǒng)計(jì)及全量數(shù)據(jù)的監(jiān)控仍然是困擾我們的一個(gè)難點(diǎn)。一直沒(méi)有特別好的辦法解決。
急速增長(zhǎng)的業(yè)務(wù)2016 年國(guó)慶前,同程的票務(wù)項(xiàng)目(微信九宮格中的火車(chē)票、機(jī)票等票務(wù)業(yè)務(wù)背后是同程在提供)由于流量激增,訂單庫(kù)壓力越來(lái)越大,同時(shí)相關(guān)業(yè)務(wù)需求也在增加,開(kāi)發(fā)不斷的在訂單庫(kù)上新增各種查詢(xún),例如為了及時(shí)定位異常而增加的限定各類(lèi)條件的分鐘級(jí)訂單量監(jiān)控(每分鐘執(zhí)行根據(jù)不同的條件進(jìn)行匯總的訂單量)。這樣的功能越來(lái)越多,同時(shí)訂單庫(kù)總大小數(shù) T 左右。對(duì)此,公司內(nèi)部決定將票務(wù)訂單庫(kù)進(jìn)行分片來(lái)降低單庫(kù)壓力,應(yīng)對(duì)即將到來(lái)的國(guó)慶高峰訂單爆發(fā)。
引入 TiDB經(jīng)過(guò)評(píng)估,發(fā)現(xiàn)公司自研的分片可以滿(mǎn)足絕大多數(shù)的查詢(xún)需求,但是部分復(fù)雜條件的查詢(xún)將會(huì)影響整個(gè)分片集群的性能,少量的全片掃描 SQL 經(jīng)常會(huì)占用 80% 以上的 IO 資源,導(dǎo)致其他的查詢(xún)性能下降。這時(shí),剛好我們的首席架構(gòu)師提議,使用 TiDB 試試,經(jīng)過(guò)中間件組和 DBA 組的配合測(cè)試,我們嘗試將 TiDB 作為所有數(shù)據(jù)的集合庫(kù)提供復(fù)雜查詢(xún),分片集群則提供簡(jiǎn)單查詢(xún),同時(shí)由于 TiDB 高度兼容 MySQL 的連接協(xié)議,我們基于 PingCAP 提供的數(shù)據(jù)同步工具 Syncer 進(jìn)行了二次開(kāi)發(fā),可以自定義庫(kù)名和表名(后來(lái)同 TiDB 工程師交流,他們最新的 Wormhole & Syncer 也都已經(jīng)支持了自定義選項(xiàng)),同時(shí)新增了同步狀態(tài)監(jiān)控,如 TPS、延遲等,如果出現(xiàn)異常,會(huì)通過(guò)微信告警。從 MySQL 將數(shù)據(jù)實(shí)時(shí)同步到 TiDB 來(lái)確保數(shù)據(jù)的一致。
確定方案后,我們連夜安排壓測(cè)同事和開(kāi)發(fā)同事協(xié)作,緊急測(cè)試,發(fā)現(xiàn)這套分片集群+TiDB 的方案能夠滿(mǎn)足我們的功能和性能方面的需求,于是迅速調(diào)整了該項(xiàng)目的架構(gòu),我們將數(shù)千個(gè) MySQL 分片匯總到一個(gè) TiDB 集群,保障了 2016 年國(guó)慶的高峰平穩(wěn)渡過(guò)。當(dāng)時(shí)的流量達(dá)到了我們平時(shí)流量的 2 倍,然而并沒(méi)有出現(xiàn)異常。
該實(shí)時(shí)同步查詢(xún)系統(tǒng)架構(gòu)如下所示:
在該項(xiàng)目實(shí)施成功后,我們加深了對(duì)于 TiDB 的使用。并根據(jù) PingCAP 的建議和協(xié)助部署了各類(lèi)監(jiān)控。
同時(shí),為了更好的關(guān)注數(shù)據(jù)庫(kù)的情況,第一時(shí)間發(fā)現(xiàn)異常,我們將 TiDB 的異常報(bào)警接入了公司的監(jiān)控系統(tǒng)和自愈系統(tǒng)。當(dāng)發(fā)生異常的時(shí)候,監(jiān)控系統(tǒng)會(huì)第一時(shí)間發(fā)現(xiàn),然后自愈系統(tǒng)會(huì)依據(jù)提前制定的愈合邏輯處理對(duì)應(yīng)異常,在第一時(shí)間恢復(fù)應(yīng)用的可用。
更大規(guī)模的使用業(yè)務(wù)上線以后,我們很快又遷移了機(jī)票業(yè)務(wù)實(shí)時(shí)同步業(yè)務(wù)到 TiDB。至本文截稿時(shí),在同程內(nèi)部,目前共有數(shù)套 TiDB 集群,部署服務(wù)器數(shù)量近百臺(tái),總數(shù)據(jù)量數(shù)十 TB。其中最大的一個(gè)集群 10 多個(gè)數(shù)據(jù)節(jié)點(diǎn),近十 TB 數(shù)據(jù),數(shù)據(jù)量過(guò)百億,支撐了每天過(guò)億的訪問(wèn),并提供千萬(wàn)級(jí)別的數(shù)據(jù)監(jiān)控服務(wù),平均 QPS 在 5000,高峰 QPS 過(guò)萬(wàn)。
同時(shí),由于 TiDB 的易用性(高度兼容 MySQL 協(xié)議和標(biāo)準(zhǔn)的 SQL 語(yǔ)法),我們目前已將 TiDB 作為一個(gè)很重要的數(shù)據(jù)庫(kù)部署方案,在項(xiàng)目啟動(dòng)時(shí)就會(huì)考慮是否可以在初期就開(kāi)始使用。在持續(xù)一年多的使用中,我們與 PingCAP 工程師一直保持著溝通和交流,互相之間也經(jīng)常會(huì)進(jìn)行一些技術(shù)和使用方面的溝通。目前最新版的 TiDB 我們也積極與 PingCAP 一起進(jìn)行測(cè)試和問(wèn)題反饋,他們也非常及時(shí)的給予我們反饋并很快的 fix 掉一些 BUG。
展望現(xiàn)在公司內(nèi)部越來(lái)越多的開(kāi)發(fā)在聯(lián)系 DBA 咨詢(xún) TiDB 的信息,我們給他們的反饋就是:這是一個(gè)高度兼容 MySQL 協(xié)議和語(yǔ)法的數(shù)據(jù)庫(kù),非常簡(jiǎn)單易用,基本上看下相關(guān)文檔就可以上手。你們?cè)谟玫臅r(shí)候就可以當(dāng)它就是一個(gè) MySQL 來(lái)使用,只是它能存放的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)超過(guò) MySQL。而對(duì)于 DBA 來(lái)講,這就是一個(gè)自帶高可用和可動(dòng)態(tài)擴(kuò)容的數(shù)據(jù)庫(kù),對(duì)外是個(gè) MySQL,對(duì)內(nèi)是個(gè)分布式數(shù)據(jù)庫(kù)。業(yè)務(wù)側(cè)的開(kāi)發(fā)人員基本沒(méi)有學(xué)習(xí)成本,DBA 維護(hù)起來(lái)也和 MySQL 有很多相似點(diǎn),系統(tǒng)生態(tài)非常好。
可以預(yù)見(jiàn),隨著項(xiàng)目繼續(xù)以及新項(xiàng)目建設(shè),TiDB 的實(shí)例數(shù)和機(jī)器數(shù)又會(huì)繼續(xù)以較快的速度增長(zhǎng),目前線上用的版本還不是最新的版本,正在做升級(jí)到 1.05 的準(zhǔn)備工作。我們預(yù)計(jì) 2018 年底,TiDB 的集群數(shù)很快就會(huì)有 20 套,機(jī)器數(shù)數(shù)百臺(tái),這給開(kāi)發(fā)和運(yùn)維都帶來(lái)了一定的挑戰(zhàn)。如果我們?nèi)匀话凑漳壳暗姆绞浇ㄔO(shè)和運(yùn)維 TiDB 集群,可能就要面臨增加相關(guān)人力的處境。我們一直在尋找多 TiDB 集群的便捷管理方案,這時(shí)一篇文章引起了我們的注意——《Cloud+TiDB 技術(shù)解讀》。我們迅速和 TiDB 工程師取得聯(lián)系,了解到 TiDB 最新的 DBaaS 方案基于 K8S 來(lái)自動(dòng)管理和調(diào)度多個(gè) TiDB 實(shí)例,這和我們目前大量 docker 化業(yè)務(wù)和數(shù)據(jù)庫(kù)的戰(zhàn)略方向是一致的。通過(guò) TiDB-Operator 使可以自動(dòng)化部署和管理 TiDB 及周邊工具,自動(dòng)化部署這些應(yīng)用以及使后端獲得故障轉(zhuǎn)移能力,這樣可以大大降低運(yùn)維成本,同時(shí)提供豐富的接口方便后續(xù)對(duì)其進(jìn)行擴(kuò)展。
我們計(jì)劃 2018 年開(kāi)始和 PingCAP 合作嘗試引入 TiDB DBaaS 方案。
另外,我們通過(guò)同 PingCAP 工程師的深度交流,了解到了 TiDB 的子項(xiàng)目 TiSpark ,后續(xù)計(jì)劃引入 TiSpark 來(lái)對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析、實(shí)時(shí)數(shù)倉(cāng)等工作的嘗試,讓技術(shù)對(duì)業(yè)務(wù)產(chǎn)生更大的價(jià)值。
作者:瞿鍇,同程網(wǎng)資深 DBA 。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/17734.html
摘要:它是第一個(gè)把數(shù)據(jù)分布在全球范圍內(nèi)的系統(tǒng),并且支持外部一致性的分布式事務(wù)。目的是使得開(kāi)發(fā)者閱讀之后,能對(duì)項(xiàng)目有一個(gè)初步了解,更好的參與進(jìn)入的開(kāi)發(fā)中。深度探索數(shù)據(jù)庫(kù)并發(fā)控制技術(shù)并發(fā)控制技術(shù)是數(shù)據(jù)庫(kù)事務(wù)處理的核心技術(shù)。 存儲(chǔ)過(guò)程高級(jí)篇 講解了一些存儲(chǔ)過(guò)程的高級(jí)特性,包括 cursor、schema、控制語(yǔ)句、事務(wù)等。 數(shù)據(jù)庫(kù)索引與事務(wù)管理 本篇文章為對(duì)數(shù)據(jù)庫(kù)知識(shí)的查缺補(bǔ)漏,從索引,事務(wù)管理,...
閱讀 3095·2023-04-26 00:32
閱讀 570·2019-08-30 15:52
閱讀 2172·2019-08-30 15:52
閱讀 3449·2019-08-30 15:44
閱讀 3341·2019-08-30 14:09
閱讀 1478·2019-08-29 15:15
閱讀 3454·2019-08-28 18:12
閱讀 1165·2019-08-26 13:55