導(dǎo)語:一年一度的雙十一又雙叒叕來了,給技術(shù)人最好的禮物就是大促技術(shù)指南! 而經(jīng)過這些年的發(fā)展,大促早已不僅僅局限于電商行業(yè),現(xiàn)在各行各業(yè)其實(shí)都會采用類似方式做運(yùn)營活動,汽車界有 818,電商有 618 、11.11 等等,各種各樣的大促場景,對包括數(shù)據(jù)庫在內(nèi)的基礎(chǔ)軟件提出了很多新挑戰(zhàn),同時(shí)也積累了諸多最佳實(shí)踐。
在雙十一到來前,PingCAP 與汽車之家、易車網(wǎng)、京東、中通等用戶展開一系列深入探討,希望為大家揭秘逐年飆升的銷量背后隱藏著什么樣的技術(shù)難題?用什么技術(shù)架構(gòu)才能平穩(wěn)地扛住流量洪峰?
818 全球汽車節(jié)
中國互聯(lián)網(wǎng)有三大購物節(jié),11.11、618 還有 818。
618 與 11.11 都是大家非常熟悉的,818 則比較特殊,它是專為購車用戶打造的節(jié)日狂歡。汽車之家 “818 全球汽車夜” ,就是由汽車之家與湖南衛(wèi)視聯(lián)手打造的汽車行業(yè)頂級盛典,到今年已經(jīng)成功舉辦三屆。
相對于其它兩個購物節(jié),818 可以說是全世界唯一的,其他任何汽車最發(fā)達(dá)的國家也沒有這類活動。對此,汽車之家資深工程師張帆解釋道:“我個人感覺,現(xiàn)在做電商和線上交易的這一塊,地球上應(yīng)該沒有哪個國家能超越中國。而為什么汽車之家是最早來做這個事情的呢?首先,汽車之家是全球訪問量最大的汽車類型網(wǎng)站。正是有著這樣巨大的凝聚力與用戶基礎(chǔ),汽車之家才能做這個事情,才能在廣大用戶中帶來這樣的影響力。此外,這個活動的初衷就是希望為汽車用戶和汽車愛好者,提供一個類似于 11.11、618 一樣真正能在買車的時(shí)候得到優(yōu)惠的機(jī)會,因此廣受用戶歡迎。”
從 2019 年開始,汽車之家與湖南衛(wèi)視合作的 “818 全球汽車夜” 已經(jīng)持續(xù)了三年。與傳統(tǒng)大促不同,818 全球汽車夜通過電視直播和與 APP 活動同步的方式將汽車購物節(jié)推到高峰,為 8 月的汽車行業(yè)帶來一場購車盛宴。
818 直播活動帶來的挑戰(zhàn)
張帆坦言,在汽車之家的 818 活動中,直播環(huán)節(jié)是最難的。與錄播完全不同,直播的過程中,會有非常多的變數(shù),也許會有節(jié)目時(shí)間的拉長,也許會有主持人的即興發(fā)揮,也許后臺還會有一些突發(fā)的數(shù)據(jù)處理。而作為整場晚會的亮點(diǎn),一元秒殺車、紅包抽獎以及超級大錦鯉等活動,是用戶參與度最高,峰值流量出現(xiàn)的環(huán)節(jié)。這些活動開始與結(jié)束的時(shí)機(jī),必須以秒級的精度來讓前臺、后臺配合。
直播當(dāng)天,汽車之家通常會專門派一支團(tuán)隊(duì)到湖南衛(wèi)視直播現(xiàn)場,通過手機(jī)、電話、5G 對講機(jī)、在線視頻連線等多路通訊與位于北京的“作戰(zhàn)室”之間實(shí)時(shí)溝通。由于直播信號通常比現(xiàn)場信號晚一分鐘,當(dāng)前面主持人在說三二一秒殺開始后,后臺其實(shí)只有一分鐘的準(zhǔn)備時(shí)間。一分鐘后,就要讓電視機(jī)前的上百萬用戶在手機(jī)上真的能看到三、二、一,秒殺的按紐點(diǎn)亮,可以去按下它參與活動。這個過程完全不能出錯,必須實(shí)現(xiàn)一比一同步。
整個過程對于后方“作戰(zhàn)室”中的張帆他們來說,感受非常直觀。這個“作戰(zhàn)室”內(nèi)有數(shù)據(jù)大屏、監(jiān)控大屏,以及現(xiàn)場直播的信號和直播看到的電視信號。每一次秒殺開始或紅包開始時(shí),監(jiān)控大屏中的幾條線就會隨著參與人數(shù)和互動次數(shù)的增加呈現(xiàn)斷崖式的波動。這些代表著業(yè)務(wù)指標(biāo)的線被他們稱作“心電圖”,而在直播中某些高人氣明星出場時(shí),這個波動甚至?xí)绕渌麜r(shí)段高 2-4倍多。
與此同時(shí),現(xiàn)場的數(shù)據(jù)大屏也在以 1-2 秒的速度,實(shí)時(shí)展示大約 20 項(xiàng)數(shù)據(jù)指標(biāo),包括活動參與人數(shù)、用戶互動次數(shù)、獎品發(fā)放情況,甚至細(xì)化到這一輪一元秒殺車活動參與的用戶有哪些人,在什么地方,中了什么車。
這些實(shí)時(shí)的數(shù)據(jù)不僅會被后臺工作人員看到,同時(shí)數(shù)據(jù)也會實(shí)時(shí)展示到直播現(xiàn)場。這對現(xiàn)場活動的氣氛起到了非常重要的烘托作用。舉例來說,當(dāng)用戶在屏幕前看到這場晚會人氣火爆,并真的有許多人參與到一元搶車互動中,這對他而言就相當(dāng)于一個反向激勵,繼而也參與其中。
在這個過程中,實(shí)時(shí)數(shù)據(jù)大屏不僅要解決實(shí)時(shí)交易問題,還要將實(shí)時(shí)分析數(shù)據(jù)反饋給現(xiàn)場的主持人。當(dāng)主持人幾乎實(shí)時(shí)地將中獎信息公布出來時(shí),晚會氣氛也推到了高位,這對于吸引更多人參與其中起到了關(guān)鍵作用。而隨著秒殺的車越來越貴,越靠后系統(tǒng)所承受的波峰也越高。相對于汽車之家平時(shí)的業(yè)務(wù),晚會經(jīng)歷的流量翻了十倍都不止,對整個系統(tǒng)的壓力不言而喻。
汽車之家大促解決之道——分布式系統(tǒng)全家桶
大促場景通常要求系統(tǒng)具備快速擴(kuò)展與高可用的能力,而分布式系統(tǒng)天然就具有這種能力。汽車之家采用了全家桶式的分布式系統(tǒng),包括數(shù)據(jù)庫、隊(duì)列、緩存等。
其中,分布式數(shù)據(jù)庫主要表現(xiàn)出三種能力,分別是水平高擴(kuò)展性、容災(zāi)能力、云端能力?;诜植际郊軜?gòu)的 TiDB 從一開始就支持這些特性,并在汽車之家的場景中得到了很好的驗(yàn)證。
汽車之家數(shù)據(jù)庫負(fù)責(zé)人陶會祥表示,傳統(tǒng)關(guān)系型數(shù)據(jù)庫,如 MySQL 、SQL Server 等,在數(shù)據(jù)量特別大時(shí),常常會碰到一些數(shù)據(jù)庫單機(jī)承載能力上限的問題。 TiDB 從 TiDB Server,到 TiKV 、PD 都可以進(jìn)行水平擴(kuò)展,性能隨著水平擴(kuò)展可以得到線性提升,很好地滿足了汽車之家對于性能和擴(kuò)展性的要求。
818 對于汽車之家而言是一年中最重要的活動,系統(tǒng)必須保障絕對的可靠穩(wěn)定。所以這次 818 活動,汽車之家在公有云上采用了同城三中心部署 TiDB 集群,避免萬一某一個機(jī)房出了問題,影響整體活動的服務(wù)質(zhì)量。
同城三數(shù)據(jù)中心方案,即同城有三個機(jī)房部署 TiDB 集群,同城三數(shù)據(jù)中心間的數(shù)據(jù)同步通過集群自身內(nèi)部( Raft 協(xié)議)完成。同城三數(shù)據(jù)中心可同時(shí)對外進(jìn)行讀寫服務(wù),任意一個數(shù)據(jù)中心故障時(shí),集群能自動恢復(fù)服務(wù),不需要人工介入,并能保證數(shù)據(jù)一致性。TiDB 同城三中心架構(gòu)在 818 晚會期間順利地支撐了業(yè)務(wù),運(yùn)行表現(xiàn)十分穩(wěn)定。
汽車之家 818 TiDB 集群整體架構(gòu)圖
本次 818 項(xiàng)目中,汽車之家使用了 TiDB 最新的版本 5.1.1,MySQL 的版本是 Percona 5.7.25;
TiFlash 是 TiDB HTAP 形態(tài)的關(guān)鍵組件,它是 TiKV 的列存擴(kuò)展,主要用于 OLAP 業(yè)務(wù)。TiFlash 跨區(qū)部署提高容災(zāi)能力,汽車之家利用 TiFlash 解決統(tǒng)計(jì)分析類的 SQL,實(shí)時(shí)展示在大屏;
TiCDC 是一款通過拉取 TiKV 變更日志實(shí)現(xiàn)的 TiDB 增量數(shù)據(jù)同步工具,具有將數(shù)據(jù)還原到與上游任意 TSO 一致狀態(tài)的能力,支持其他系統(tǒng)訂閱數(shù)據(jù)變更。 TiCDC 跨區(qū)部署, 將 TiDB 集群數(shù)據(jù)實(shí)時(shí)同步至下游的 MySQL 數(shù)據(jù)庫,作為故障應(yīng)急的備份,實(shí)現(xiàn)業(yè)務(wù)容災(zāi)能力的提升;
MySQL 跨區(qū)部署主從,作為 TiDB 集群的應(yīng)急、降級之用,實(shí)現(xiàn)業(yè)務(wù)容災(zāi)能力的提升。
數(shù)據(jù)庫壓測
在 818 活動前,數(shù)據(jù)庫團(tuán)隊(duì)聯(lián)合業(yè)務(wù)方一起做了一輪一輪嚴(yán)格的故障演練壓測,確保后端的高可用。
陶會祥透露,汽車之家的故障演練分為多種,光數(shù)據(jù)庫就會演練主庫故障和機(jī)房故障,一共做了三輪。每一輪測試中 TiDB 的表現(xiàn)都非常優(yōu)秀,KV 故障基本在幾十秒,只需 20 秒即可恢復(fù),即使機(jī)房故障也能在一分鐘之內(nèi)進(jìn)行自動切換。
為了保障活動平穩(wěn)支撐,PingCAP 社區(qū)技術(shù)專家連續(xù)三年為汽車之家提供了社區(qū)技術(shù)支持。在今年的壓測環(huán)節(jié)中,社區(qū)技術(shù)專家與汽車之家 DBA 一起完成了調(diào)優(yōu),良好地解決了寫入熱點(diǎn)問題,將性能翻了好幾倍。最終在 818 高峰時(shí)期,TiDB 順利支撐了晚會期間 APP 用戶 9048 萬次互動,并抗住了最大每秒 40 萬行的寫入,SQL 99 穩(wěn)定在 30ms 以下。TiCDC 性能表現(xiàn)也十分強(qiáng)勁,向下游 MySQL 同步速度高達(dá) 13 萬行每秒 ??缰行牡?TiFlash MPP 架構(gòu),為大屏近實(shí)時(shí)展示助力總次數(shù)、秒殺和搖獎的每輪參與用戶等信息提供了強(qiáng)有力的支撐。
陶會祥都對大促中 TiDB 的表現(xiàn)給予十分高的評價(jià):TiDB 在這種十億以上的數(shù)據(jù)量級場景下是非常適合的,一是 TiDB 的分析能力是實(shí)時(shí)的,二是 TiDB 的數(shù)據(jù)存儲能力比傳統(tǒng)數(shù)據(jù)庫,如 SQL Server 之類強(qiáng)太多。 TiDB 結(jié)合了傳統(tǒng)數(shù)倉和傳統(tǒng)關(guān)系型數(shù)據(jù)庫的優(yōu)點(diǎn),非常適合應(yīng)用在大促這種量級的業(yè)務(wù)環(huán)境。
未來規(guī)劃
汽車之家的數(shù)據(jù)庫團(tuán)隊(duì)在本次 818 大促中,也總結(jié)出了非常多的最佳實(shí)踐:
如同城三中心五副本架構(gòu),機(jī)房之間延遲應(yīng)當(dāng)盡量小,最好控制在 2ms 以內(nèi);
OLTP 的業(yè)務(wù),通常壓測瓶頸在于 TiKV 的磁盤 IO 上,對于普通 SSD ,可以做成 RAID0 來提升 IOPS;
一旦某個可用區(qū)整體故障,正常不需要手動干預(yù),但是為了避免性能下降嚴(yán)重,建議手動將五副本調(diào)整為三副本;
合理設(shè)計(jì)表結(jié)構(gòu)和索引,盡量避免熱點(diǎn)問題,和業(yè)務(wù)一起做好充分壓測,壓測期間盡早發(fā)現(xiàn)問題并優(yōu)化。
基于本次活動中的良好表現(xiàn),陶會祥表示,汽車之家接下來還會在更多業(yè)務(wù)中推進(jìn) TiDB 上線。比如以前汽車之家的很多數(shù)據(jù)會跑在 Hive 里,需要到第二天才能知道昨天發(fā)生了什么事。如果應(yīng)用 TiDB ,可以針對運(yùn)營需要的用戶數(shù)據(jù)、業(yè)務(wù)指標(biāo)的分析,去做秒級的準(zhǔn)實(shí)時(shí)推送,預(yù)計(jì)能夠?qū)⑦@一時(shí)間壓縮到 5-10秒。業(yè)務(wù)方可以立即知道上一刻用戶有什么變化,數(shù)據(jù)有什么更新。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )