摘要:阿毛哥是組的開發(fā),同時(shí)也是語(yǔ)言圈的大佬。阿毛哥那邊計(jì)劃是魔改一版,來(lái)達(dá)成特定表的數(shù)據(jù)從遠(yuǎn)程服務(wù)加載這個(gè)需求。下午的我們排在最后出場(chǎng),由胡爭(zhēng)出場(chǎng)演示。略有遺憾的是當(dāng)時(shí)胡爭(zhēng)可能是過(guò)于激動(dòng),關(guān)于具體有哪些實(shí)用場(chǎng)景沒有細(xì)說(shuō)。
本文作者是來(lái)自 TiNiuB 隊(duì)的黃夢(mèng)龍同學(xué),他們的項(xiàng)目 TiQuery 在本屆 TiDB Hackathon 2018 中獲得了三等獎(jiǎng)。 TiQuery 可以搜集診斷集群?jiǎn)栴}所需要的信息,包括集群拓?fù)?,Region 分布,配置,各種系統(tǒng)信息,整理成結(jié)構(gòu)化的數(shù)據(jù),并在 TiDB 中支持直接使用 SQL 語(yǔ)言進(jìn)行查詢,開發(fā)和運(yùn)維人員可以在 SQL 環(huán)境方便高效地進(jìn)行問(wèn)題診斷。
“距離 Hackathon 結(jié)束已經(jīng)一個(gè)多星期了,感覺心情還是沒有從激情中平復(fù)過(guò)來(lái)。不過(guò)由于我讀書少,這時(shí)候好像只能感慨一句,黑客馬拉松真是太好玩了……”
組隊(duì)和選題組隊(duì)的過(guò)程有些崎嶇,過(guò)程不細(xì)表,總之最后我們湊成了 4 人團(tuán)隊(duì):
我(menglong)和阿毛哥是 PingCAP 內(nèi)部員工,我在 TiKV 團(tuán)隊(duì),目前主要是負(fù)責(zé) PD 部分的。阿毛哥是 TiDB 組的開發(fā),同時(shí)也是 Go 語(yǔ)言圈的大佬。
曉峰(ID 米麒麟)是大數(shù)據(jù)圈的網(wǎng)紅,可能很多人都在各種社區(qū)或各種微信群偶遇過(guò),另外他的公司其實(shí)也是上線了 TiDB 集群的客戶之一。
胡爭(zhēng)來(lái)自小米,是 HBase 的 committer,在分布式系統(tǒng)方面有豐富的經(jīng)驗(yàn),Hackathon 的過(guò)程中還順便給 TiKV 集群的全局備份方案提了幾個(gè)很好的建議,也是不得不服……他還有另外一個(gè)身份,是我們 TiKV 組員大妹子的老公,大妹子回老家休產(chǎn)假了于是只得派家屬來(lái)代為過(guò)個(gè)癮。
**我們大約從一周之前開始討論選題的事情,我們所有人都是第一次參加 Hackathon,也沒什么選題的經(jīng)驗(yàn),經(jīng)過(guò)微信語(yǔ)音長(zhǎng)時(shí)間的頭腦風(fēng)暴,前后大約提了有五六個(gè)方案,最終敲定了 TiQuery 這個(gè)方案。
方案的主要靈感是來(lái)自 facebook 的開源項(xiàng)目 osquery,它能把系統(tǒng)的各種信息(CPU,內(nèi)存,文件,掛載,設(shè)備,網(wǎng)絡(luò)連接,crontab,ulimit,iptable,等等等等)整理成結(jié)構(gòu)化數(shù)據(jù)并支持以 SQL 的方式進(jìn)行查詢。當(dāng)然它是一個(gè)單機(jī)的,我們需要做個(gè) proxy 把集群中所有節(jié)點(diǎn)的數(shù)據(jù)收集在一起,放在 TiDB 里供用戶查詢。再考慮 TiDB 產(chǎn)品生態(tài)的實(shí)際情況,我們還可以搜集 region 分布,配置,日志,metrics 等診斷所需要信息統(tǒng)一到 SQL 接口里,這樣就升級(jí)成了一套完整的診斷工具。**
最后選 TiQuery 這個(gè)方案主要考慮了這幾點(diǎn):
不需要寫前端。我們幾個(gè)雖然說(shuō)平時(shí)或多或少寫過(guò)點(diǎn)前端,但是畢竟手生,短時(shí)間可能很難搞出酷炫的效果,而且還有翻車的風(fēng)險(xiǎn)。事后證明這個(gè)揚(yáng)長(zhǎng)避短的思路無(wú)疑是正確的,最后拿到名次的 6 個(gè)團(tuán)隊(duì)只有 2 個(gè)是重點(diǎn)在可視化這塊的,而且呈現(xiàn)出來(lái)的效果以我們的水平應(yīng)該難以企及。
不容易翻車。因?yàn)橛?facebook/osquery 這個(gè)強(qiáng)力項(xiàng)目做后盾,基本上不存在翻車的可能。做完 osquery 后,計(jì)劃的其他部分可以到時(shí)候根據(jù)情況決定要不要做,可以說(shuō)是既穩(wěn)又浪。
實(shí)用性強(qiáng)。我們?cè)谌粘椭脩襞挪閱?wèn)題的時(shí)候,經(jīng)常需要在 SQL / 日志 / Grafana / pd-ctl / tidb-ctl / ssh 各種工具來(lái)回切換搜集各種信息。甚至有時(shí)候無(wú)法直接訪問(wèn)用戶的環(huán)境,需要一步一步向用戶說(shuō)明如何去排查,在交流上花費(fèi)了大量不必要的時(shí)間和精力。所以 TiQuery 這個(gè)項(xiàng)目解決的是切實(shí)存在的痛點(diǎn),聽聞已經(jīng)有客戶準(zhǔn)備在生產(chǎn)集群中把 TiQuery 上線,也是很好的佐證。
比賽過(guò)程 Day1比賽第一天。早上 10 點(diǎn)踩著點(diǎn)來(lái)到公司,在前臺(tái)簡(jiǎn)單簽了到領(lǐng)了周邊,轉(zhuǎn)身進(jìn)入辦公區(qū)域,一瞬間就被撲面而來(lái)的熱烈的氣氛給感染到了。平常安靜空曠的工作空間此時(shí)已是濟(jì)濟(jì)一堂,各路大神有的圍在一起探討方案,有的已經(jīng)打開電腦開始攻克技術(shù)難題,還有不少相互網(wǎng)上熟識(shí)已久的網(wǎng)友們?cè)跓崆榈卮蛑泻簟?/p>
我也很快找到 TiNiuB 隊(duì)的根據(jù)地,短暫寒暄后就進(jìn)入了工作狀態(tài)。根據(jù)之前商量的分工,我主要負(fù)責(zé)把 PD 相關(guān)的數(shù)據(jù)轉(zhuǎn)成 table 的形式。因?yàn)閷?duì) Go 語(yǔ)言和 PD 的接口都很熟悉,很快就把 TiQuery 的大體框架給擼出來(lái)了,PD 相關(guān)的數(shù)據(jù)源也依次給整理出來(lái)了。
阿毛哥那邊計(jì)劃是魔改一版 TiDB,來(lái)達(dá)成特定表的數(shù)據(jù)從遠(yuǎn)程服務(wù)加載這個(gè)需求。本來(lái)我們想的是需要 hack 一下 physical plan,或者實(shí)現(xiàn)一個(gè)新的 storage 什么的,想想還有些復(fù)雜。到他具體做的時(shí)候猛然發(fā)現(xiàn) InformationSchema 這個(gè)神奇的存在,簡(jiǎn)單介紹下,InformationSchema 包含了 TiDB 中一系列特殊的表,它們的數(shù)據(jù)是直接從內(nèi)存中撈來(lái)的,不需要經(jīng)過(guò) physical plan,也不需要走 storage。所以我們仿照 InformationSchema 的方式處理一下就行了,只不過(guò)數(shù)據(jù)是從 TiQuery 獲取而不是直接在內(nèi)存里。
兩邊寫完之后我們很快進(jìn)行了簡(jiǎn)單的聯(lián)調(diào),直接就通過(guò)測(cè)試了??吹?“SELECT * FROM pd_store”跑出結(jié)果后大家不由地一陣歡呼。不得不說(shuō),當(dāng)不需要考慮異常錯(cuò)誤處理,不需要寫測(cè)試,不需要 review 的時(shí)候?qū)懘a的效率是真高……
中午我們?cè)趫@區(qū)的“那家小館”吃午餐。這里有個(gè)小插曲,胡爭(zhēng)早了為了方便進(jìn)園區(qū)把大妹子的員工卡給帶來(lái)了,我們一合計(jì)估摸她休假之前應(yīng)該卡里還留了不少錢,便決定飽餐一頓后強(qiáng)行用她的卡買單。等到了結(jié)賬的時(shí)候才發(fā)現(xiàn)卡里只給留了 8 分錢……最后只好我掏了卡,并暗地里下決心好歹得拿個(gè)獎(jiǎng)回來(lái),不然偷雞不成還蝕把米,與此同時(shí)不禁為胡爭(zhēng)未來(lái)漫長(zhǎng)的婚姻生活捏了把汗。
下午我們加入了 osquery-agent 服務(wù)負(fù)責(zé)從不同節(jié)點(diǎn)搜集上報(bào)系統(tǒng)信息,并用腳本把 osquery 的所有 schema 轉(zhuǎn)成了 MySQL 兼容的形式導(dǎo)入進(jìn) TiDB。跑通后簡(jiǎn)單的試玩了下,基本上能按預(yù)期的方式運(yùn)行,但是實(shí)用性方面有一些不足。隨后我們主要從這幾個(gè)方面進(jìn)行優(yōu)化:
增加集群拓?fù)浣Y(jié)構(gòu)的信息。osquery-agent 變身成 tiquery-agent,除了 wrap osquery 之外還上報(bào)節(jié)點(diǎn)所運(yùn)行的所有服務(wù)信息。
引入 psutil 庫(kù),tiquery-agent 支持查詢針對(duì)單個(gè)服務(wù)更精確的 CPU,內(nèi)存等信息。
調(diào)研 prometheus 轉(zhuǎn)成 table 的可行性,這個(gè)我們發(fā)現(xiàn)短時(shí)間不太好做,就放棄了。
其他同步在做的事情包括用 ansible 部署了一套測(cè)試集群,開始做演示用的 slides,梳理 TiQuery 能提供的功能整理一個(gè)有說(shuō)服力的 user story。期間我還客串了下導(dǎo)師的角色,支持了幾個(gè)涉及到 PD 的項(xiàng)目。
到了晚上,測(cè)試集群上已經(jīng)能完全順暢地跑起來(lái)了,slides 基本上完成,演示要用的查詢也都準(zhǔn)備好了。霸哥(導(dǎo)師團(tuán)成員韓飛,人稱 SQL 小王子)幫我們手寫了一個(gè)復(fù)雜的 4 表 JOIN,一氣呵成,大家紛紛表示向大佬低頭。
23 點(diǎn)左右,我又去整個(gè)賽場(chǎng)溜達(dá)了一圈,發(fā)現(xiàn)比較有競(jìng)爭(zhēng)力的幾個(gè)項(xiàng)目要么還在埋頭苦干,要么就是 block 在技術(shù)難點(diǎn)上痛不欲生。當(dāng)時(shí)我們就感覺勝券在握了,簡(jiǎn)單商量了一下就各自回家休息。
Day2第二天早上過(guò)來(lái)先是又轉(zhuǎn)了一圈探查敵情,當(dāng)時(shí)腦海里就冒出來(lái)“龜兔賽跑”的故事。
幾個(gè)可視化的項(xiàng)目,昨天晚上走之前還幾乎是白板一片,一夜之間就酷炫到?jīng)]朋友了,尤其是鳳凰隊(duì),真給人一種山雞變鳳凰的感覺。還有 TiBoys,昨天我琢磨著項(xiàng)目太宏大,鐵定沒法搞出來(lái)的,早上去一看,readme 里的 todo list 已經(jīng)基本上全給勾上了,很難想像這一夜他們經(jīng)歷了什么……
我們當(dāng)天其實(shí)就沒做什么事情了,就整理了下項(xiàng)目文檔什么的,還找了個(gè)馬里奧的圖片 ps 了下。
下午的 Demo 我們排在最后出場(chǎng),由胡爭(zhēng)出場(chǎng)演示。整個(gè)過(guò)程出奇地順暢,評(píng)委的疑問(wèn)也順暢的解答了,其實(shí)我們的項(xiàng)目本身比較簡(jiǎn)單,要做的事情一兩句話就能說(shuō)清楚。略有遺憾的是當(dāng)時(shí)胡爭(zhēng)可能是過(guò)于激動(dòng),關(guān)于 TiQuery 具體有哪些實(shí)用場(chǎng)景沒有細(xì)說(shuō)。
最后我們?cè)诒姸鄡?yōu)秀的作品中殺出重圍,僥幸拿到了三等獎(jiǎng),第一次參賽的大家都很興奮,晚上自然是又出去好好腐敗了一把,并相約以后再找機(jī)會(huì)參加類似的活動(dòng)……
感想和總結(jié)我本人喜歡跑步,也參加過(guò)多次馬拉松賽,其實(shí)馬拉松賽不僅在于競(jìng)技,也不僅在于堅(jiān)持跑完那 42km,更重要的是它是一大群有共同愛好的人聚在一起的一次狂歡。從這個(gè)角度看,“黑客馬拉松”真的是非常貼切的一個(gè)名字。在這里我想感謝 PingCAP 和志愿者們的精心組織,提供了這么好的一個(gè)機(jī)會(huì)讓大家有機(jī)會(huì)互相欣賞,切磋,交流,學(xué)習(xí)。
通過(guò)這次比賽我也積攢了一些經(jīng)驗(yàn),或者說(shuō)下次參加 Hackathon 會(huì)去考慮的一些點(diǎn)吧,在這里分享出來(lái)供大家探討:
THINK BIG。我們?cè)谶x方案的時(shí)候特別怕想復(fù)雜了到時(shí)候做不出來(lái)然后翻車,實(shí)際上在 Hackathon 比賽時(shí)爆發(fā)出的潛能會(huì)遠(yuǎn)超自己的想象,結(jié)果就是我們迅速就完工了后面其實(shí)無(wú)所事事……可以簡(jiǎn)單針對(duì)編程速度算下賬:不用考慮異常處理,效率 x2,不用寫單元測(cè)試,效率 x3,不用 code review,效率 x2,不用考慮優(yōu)雅設(shè)計(jì)前后兼容,效率 x2,全天 24 小時(shí)工作,效率 x3(根據(jù)貴司具體情況可調(diào)整為 x2),再加上是幾個(gè)人一起做的,粗略算下來(lái) 24 小時(shí)內(nèi)足以做完平時(shí)需要幾個(gè)月才能完成的事情,因此我們?cè)O(shè)計(jì)方案時(shí)可以盡管往大了想。
SHOW OFF ALL。比賽之前我們就已經(jīng)意識(shí)到 Demo 展示環(huán)節(jié)非常關(guān)鍵,但是可惜這塊還是做得不夠好,有些花力氣做了的功能最終沒有最后在 Demo 時(shí)展現(xiàn)出來(lái),今后參加類似的比賽時(shí)會(huì)更加注意這一點(diǎn)。
TiQuery 項(xiàng)目及其未來(lái)最后再花一些篇幅來(lái)推廣下 TiQuery 這個(gè)項(xiàng)目吧。
首先明確一點(diǎn),它不是要替換掉已有的查日志,看 metrics,調(diào)用 PD API 等現(xiàn)有的診斷問(wèn)題手段,而是提供一種新的途徑和可能,即直接使用 SQL 語(yǔ)言,并且這種途徑在很多場(chǎng)景下會(huì)更方便甚至是變不可能為可能。
比如我們平常定位一個(gè)慢 SQL,可能需要先在 SQL 環(huán)境中確認(rèn)有問(wèn)題的語(yǔ)句,然后去日志中找出響應(yīng)時(shí)間長(zhǎng)的 Region,隨后使用 pd-ctl 去查詢 Region 的信息,然后再根據(jù) leader 所在的 TiKV ID 查詢到對(duì)應(yīng) TiKV 所在的節(jié)點(diǎn),然后再 ssh 登錄到對(duì)應(yīng)的節(jié)點(diǎn)查詢關(guān)鍵線程的 CPU 占用情況……
如果部署了 TiQuery,以上操作都可以在 SQL 環(huán)境中搞定,不用各種工具來(lái)回切換,而且通過(guò) SQL 的關(guān)聯(lián)查詢功能,以上整個(gè)流程甚至只需要一條語(yǔ)句。
再比如,客戶的環(huán)境可能對(duì)訪問(wèn)某些資源有限制,比如沒有權(quán)限 ssh 登錄對(duì)應(yīng)的服務(wù)器,防火墻的原因無(wú)法查看 Grafana,這時(shí) TiQuery 就能幫且我們拿到原本拿不到的信息。還有的時(shí)候,我們無(wú)法直接連接客戶的集群,只能遠(yuǎn)程指導(dǎo)客戶去診斷問(wèn)題,這種情況下不用去費(fèi)力教會(huì)客戶用各種工具了,直接扔過(guò)去一條 SQL,豈不美哉。
另外,SQL 作為一門標(biāo)準(zhǔn)化的查詢語(yǔ)言,在易用性方面有著天然的優(yōu)勢(shì),不僅方便不了解 TiDB 的 DBA 快速上手,其他外部系統(tǒng)也能方便地對(duì)接(比如外部監(jiān)控報(bào)警系統(tǒng))。
當(dāng)然了,TiQuery 項(xiàng)目如果真要在嚴(yán)肅的生產(chǎn)環(huán)境上線,還有許多工作要做:
完善異常處理,重構(gòu),文檔的完善
更多 schema 支持,包括日志文件,prometheus metrics 等
tidb-ansible 集成,包括部署 tiquery-agent 服務(wù),配置生成,安裝 osquery 等
TiDB 支持外部數(shù)據(jù)源加載數(shù)據(jù)(這個(gè)特性在 Hackathon 其他項(xiàng)目也有各自的實(shí)現(xiàn),期待能合入 TiDB 主干)
最后,項(xiàng)目的地址在
https://github.com/TiNiuB/tiquery
期待大家來(lái)共同完善!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/17847.html
摘要:在上,我司聯(lián)合創(chuàng)始人崔秋帶大家一起回顧了年社區(qū)成長(zhǎng)足跡,在社區(qū)榮譽(yù)時(shí)刻環(huán)節(jié),我們?yōu)樾聲x授予了證書,并為年度最佳貢獻(xiàn)個(gè)人團(tuán)隊(duì)頒發(fā)了榮譽(yù)獎(jiǎng)杯。同時(shí),我們也為新晉授予了證書,并為年最佳社區(qū)貢獻(xiàn)個(gè)人最佳社區(qū)貢獻(xiàn)團(tuán)隊(duì)頒發(fā)了榮譽(yù)獎(jiǎng)杯。 2018 年 TiDB 產(chǎn)品變得更加成熟和穩(wěn)定,同時(shí) TiDB 社區(qū)力量也在發(fā)展壯大。在 TiDB DevCon 2019 上,我司聯(lián)合創(chuàng)始人崔秋帶大家一起回顧了 ...
閱讀 2787·2023-04-25 14:59
閱讀 996·2021-11-22 11:59
閱讀 704·2021-11-17 09:33
閱讀 2524·2021-09-27 13:34
閱讀 4003·2021-09-09 11:55
閱讀 2380·2019-08-30 15:44
閱讀 1193·2019-08-30 14:06
閱讀 1984·2019-08-29 16:55