主頁(yè) > 知識(shí)庫(kù) > eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)

eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)

熱門標(biāo)簽:熱血傳奇沃瑪森林地圖標(biāo)注 南召400電話辦理資費(fèi) 地圖標(biāo)注審核工作怎么樣注冊(cè) 鄭州中國(guó)移動(dòng)400電話申請(qǐng) 揭陽(yáng)外呼系統(tǒng)公司 福建ai電銷機(jī)器人加盟公司 地圖標(biāo)注植物名稱 去哪里辦卡 無(wú)錫電銷機(jī)器人銷售 招聘信息

首先需要注意的是,本文即將提到的 Druid,并非阿里巴巴的 Druid 數(shù)據(jù)庫(kù)連接池,而是另一個(gè)大數(shù)據(jù)場(chǎng)景下的解決方案:Apache Druid。

Apache Druid 是一個(gè)用于大數(shù)據(jù)實(shí)時(shí)查詢和分析的高容錯(cuò)、高性能開(kāi)源分布式時(shí)序數(shù)據(jù)庫(kù)系統(tǒng),旨在快速處理大規(guī)模的數(shù)據(jù),并能夠?qū)崿F(xiàn)快速查詢和分析。尤其是當(dāng)發(fā)生代碼部署、機(jī)器故障以及其他產(chǎn)品系統(tǒng)遇到宕機(jī)等情況時(shí),Druid 仍能夠保持 100% 正常運(yùn)行。創(chuàng)建 Druid 的最初意圖主要是為了解決查詢延遲問(wèn)題,當(dāng)時(shí)試圖使用 Hadoop 來(lái)實(shí)現(xiàn)交互式查詢分析,但是很難滿足實(shí)時(shí)分析的需要。而 Druid 提供了以交互方式訪問(wèn)數(shù)據(jù)的能力,并權(quán)衡了查詢的靈活性和性能而采取了特殊的存儲(chǔ)格式。

目前 Druid 廣泛應(yīng)用在國(guó)內(nèi)外各個(gè)公司,比如阿里,滴滴,知乎,360,eBay,Hulu 等。

本文 作者 Mohan Garadi 披露了 eBay 如何使用 Druid 進(jìn)行監(jiān)控的技術(shù)細(xì)節(jié)。

在 eBay 中,我們將監(jiān)控技術(shù)棧從傳統(tǒng)的本地架構(gòu)轉(zhuǎn)換為基于 Druid 的實(shí)時(shí)監(jiān)控系統(tǒng)。在本文中,我們將討論如何過(guò)渡到新技術(shù)棧,以及它為我們帶來(lái)了什么好處。

eBay 每天要支撐數(shù)百萬(wàn)用戶進(jìn)行電子商務(wù)交易。隨著支持不同產(chǎn)品的各種應(yīng)用所產(chǎn)生的數(shù)據(jù)爆炸式增長(zhǎng),用戶數(shù)量也在大幅增長(zhǎng)。日志是應(yīng)用程序的核心,用于決定應(yīng)用程序執(zhí)行哪些操作。隨著應(yīng)用程序大小的增長(zhǎng),日志變得很難進(jìn)行可視化。我們還有一個(gè)集中式日志存儲(chǔ)來(lái)處理所有日志,要直接從日志中獲取有用的信息非常困難,而且從日志中實(shí)時(shí)獲取有用信息的想法也不可行。在 eBay 中,監(jiān)控團(tuán)隊(duì)以不同的方式對(duì)問(wèn)題進(jìn)行可視化。解決問(wèn)題的更好方法是:從日志中提取有用事件并通過(guò)數(shù)據(jù)管理處理這些事件。

事件的數(shù)量直接與根據(jù)當(dāng)前系統(tǒng)的流量生成的日志數(shù)量相關(guān)。一些應(yīng)用程序可能會(huì)生成數(shù)百到數(shù)千個(gè)事件,而其他應(yīng)用程序可能會(huì)生成數(shù)百萬(wàn)個(gè)事件。我們的興趣是基于從日志中提取的事件來(lái)監(jiān)控各個(gè)應(yīng)用程序的執(zhí)行情況,以及在系統(tǒng)中出現(xiàn)太多錯(cuò)誤或異常行為時(shí)提醒用戶的能力。

應(yīng)用程序事件包括錯(cuò)誤狀態(tài)代碼、url 事務(wù)、命令執(zhí)行以及在不同主機(jī)上的應(yīng)用程序項(xiàng)目的構(gòu)建 ID 等。這些事件都有不同的目的。

應(yīng)用程序開(kāi)發(fā)人員和網(wǎng)站可靠性管理(Site reliability engineering,SRE)團(tuán)隊(duì)都會(huì)對(duì)這些事件感興趣,因?yàn)樗麄兛梢詫?shí)時(shí)監(jiān)控應(yīng)用程序的性能。它們能夠?qū)⑾到y(tǒng)中發(fā)生的錯(cuò)誤數(shù)量以可視化的形式呈現(xiàn),通過(guò)命令執(zhí)行對(duì)這些錯(cuò)誤進(jìn)行切片和切塊,并構(gòu)建導(dǎo)致這些錯(cuò)誤的程序,然后根據(jù)可能影響應(yīng)用程序性能的錯(cuò)誤閾值設(shè)置警報(bào)。

當(dāng)應(yīng)用程序開(kāi)發(fā)團(tuán)隊(duì)必須在生產(chǎn)中部署應(yīng)用程序的新項(xiàng)目時(shí),這些信息提供了關(guān)鍵的洞見(jiàn)。他們將能夠在一小部分主機(jī)上進(jìn)行代碼的抽樣部署(sampled rollout),并可視化實(shí)時(shí)儀表盤(pán),以確定新代碼在生成錯(cuò)誤方面的行為,然后將實(shí)時(shí)數(shù)據(jù)與歷史數(shù)據(jù)進(jìn)行比較,從而提供一定程度的可信度。

傳統(tǒng)架構(gòu)

傳統(tǒng)架構(gòu)是多年前設(shè)計(jì)的,當(dāng)時(shí)整個(gè)站點(diǎn)每天生成的事件數(shù)量大約為 1000 萬(wàn)次。這在當(dāng)時(shí)是可擴(kuò)展的,并且在未來(lái)幾年內(nèi)也可以進(jìn)行擴(kuò)展。

隨著時(shí)間的推移,傳統(tǒng)架構(gòu)暴露了一些缺點(diǎn):

多維數(shù)據(jù)集生成是每個(gè)時(shí)間間隔的自定義編寫(xiě)代碼。生成當(dāng)前時(shí)間的數(shù)據(jù)通常需要幾分鐘,這對(duì)于實(shí)時(shí)監(jiān)控而言是不可接受的。而且這種延遲隨著數(shù)據(jù)量的增加而增加。

隨著數(shù)據(jù)量的增加,自定義多維數(shù)據(jù)生成的可擴(kuò)展性隨時(shí)間的推移效果變得較差。

在維度基數(shù)非常高(幾十萬(wàn)到幾百萬(wàn)種組合)的情況下,生成速度緩慢或無(wú)法創(chuàng)建多維數(shù)據(jù)集。

新架構(gòu)

在新的架構(gòu)中,已刪除 Tibco 依賴項(xiàng),并將 Kafka 用做臨時(shí)保存信息以供使用的層。Tranquilty 用于使用來(lái)自 Kafka 的數(shù)據(jù)并輸入 Druid。

新架構(gòu)的要點(diǎn)如下:

從時(shí)間生成到出口實(shí)現(xiàn)的最小端到端延遲(對(duì)于非常大的應(yīng)用程序,最大不超過(guò) 10 秒)。

使用 Druid 處理多種粒度的數(shù)據(jù),如 1 分鐘、1 刻鐘、1 小時(shí)等。重新索引 1 天間隔的數(shù)據(jù)。

Kubernetes 部署使我們?cè)谏?jí)或維護(hù)時(shí),能夠在幾分鐘之內(nèi)刪除集群并重新創(chuàng)建集群。使用 100 個(gè)節(jié)點(diǎn)執(zhí)行滾動(dòng)更新非常容易。

Druid 可有效地處理高基數(shù)數(shù)據(jù),只要為索引任務(wù)提供足夠的可擴(kuò)展性,即使是數(shù)以百萬(wàn)計(jì)的緯度值,也可以使用 Druid 來(lái)處理,而不會(huì)產(chǎn)生任何額外的延遲,索引任務(wù)可在零停機(jī)時(shí)間內(nèi)實(shí)現(xiàn)。

(Tibco 是一種用于數(shù)據(jù)傳輸?shù)钠髽I(yè)消息總線。Tranquilty 是 Druid-io 的一部分,它帶了一個(gè)將數(shù)據(jù)流發(fā)送到 Druid 的 API。)

事件處理

事件包括系統(tǒng)中發(fā)生的事情,這些事情從本質(zhì)上來(lái)講是零星的。一些應(yīng)用程序每天會(huì)生成一些事件,而其他應(yīng)用程序在一分鐘內(nèi)會(huì)生成數(shù)百萬(wàn)個(gè)事件。不同類型的事件可根據(jù)它們的用途來(lái)生成。我們?cè)诖吮尘跋掠懻摫O(jiān)控事件。

在我們的用例中,數(shù)據(jù)具有一個(gè)固定的維度鍵(11 維),一個(gè)時(shí)間戳和兩個(gè)要計(jì)算的度量:計(jì)數(shù)和延遲。計(jì)數(shù)是在特定時(shí)間戳收集數(shù)據(jù)時(shí)主機(jī)發(fā)生的事件數(shù)量。延遲表示所有事務(wù)的延遲總和??鐟?yīng)用程序的數(shù)千個(gè)主機(jī)可能會(huì)生成數(shù)以百萬(wàn)計(jì)的事件,每個(gè)事件可以包含不同的緯度值集。每個(gè)應(yīng)用程序的每個(gè)維度的緯度值可以從十到幾千不等。

開(kāi)發(fā)團(tuán)隊(duì)和 SRE 團(tuán)隊(duì)對(duì)上述事件很感興趣,以了解特定應(yīng)用程序或多個(gè)應(yīng)用程序在網(wǎng)站上發(fā)生錯(cuò)誤的數(shù)量,這些錯(cuò)誤可能會(huì)造成很大影響。將每分鐘幾百萬(wàn)個(gè)事件實(shí)時(shí)收集到集中式存儲(chǔ)并對(duì)其進(jìn)行處理,會(huì)帶來(lái)一系列事關(guān)準(zhǔn)確性、速度、可靠性和彈性方面的挑戰(zhàn)。

擴(kuò)展

監(jiān)控事件在整個(gè)集群中,以每秒 800 萬(wàn)個(gè)事件的速度生成,在高峰流量時(shí)平均為每秒 1000 萬(wàn)個(gè)事件,這些來(lái)自 5000 多個(gè)應(yīng)用程序。監(jiān)控事件需要跨多個(gè)維度進(jìn)行切片和切塊,例如應(yīng)用程序名稱、應(yīng)用程序類型、操作名稱、錯(cuò)誤狀態(tài)、運(yùn)行應(yīng)用程序的構(gòu)建、主機(jī)等。所有數(shù)據(jù)都應(yīng)以近實(shí)時(shí)服務(wù)級(jí)別協(xié)議進(jìn)行匯總和提供。共有 11 個(gè)固定維度,所有維度的緯度值基數(shù)在 140 萬(wàn)到 200 萬(wàn)個(gè)唯一組合之間。

我們的 Druid 集群部署在多個(gè)可用區(qū)域,以實(shí)現(xiàn)高可用性,并保持每個(gè)數(shù)據(jù)中心的每個(gè)示例保留 2 個(gè)副本。這使得我們可以在 2 個(gè)數(shù)據(jù)中心共有 4 個(gè)副本可用。每個(gè)數(shù)據(jù)中心都有幾百個(gè)中間管理器、2 個(gè)統(tǒng)治 + 協(xié)調(diào)(Overlord+Coordinator)節(jié)點(diǎn),15 個(gè)代理節(jié)點(diǎn)和 80 個(gè)歷史節(jié)點(diǎn)。

峰值數(shù)據(jù)流量如下圖所示。

出口設(shè)計(jì)

數(shù)據(jù)出口的設(shè)計(jì)目標(biāo)是保持?jǐn)?shù)據(jù)的高可用性。Druid 代理前面的一層被設(shè)計(jì)用于查詢 Druid 的數(shù)據(jù),以確定每個(gè)數(shù)據(jù)中心的健康狀況。我們希望兩個(gè)數(shù)據(jù)中心的運(yùn)行狀況始終保持在最佳狀態(tài),且高度可用。如果任何數(shù)據(jù)中心出現(xiàn)任何數(shù)據(jù)丟失的情況,出口會(huì)切換到數(shù)據(jù)質(zhì)量更好的集群。

我們每分鐘從每個(gè)集群中獲取事件計(jì)數(shù),以確定兩個(gè)集群是否具有相似的數(shù)據(jù)(偏差小于集群之間的事件計(jì)數(shù)差異的 0.5%)。如果偏差過(guò)大,我們則選擇事件計(jì)數(shù)更好的集群。計(jì)算每分鐘進(jìn)行一次,我們繼續(xù)更新集群的運(yùn)行狀況,以確定能夠在一段時(shí)間內(nèi)為數(shù)據(jù)提供服務(wù)的最佳集群。如果檢測(cè)到任何數(shù)據(jù)丟失,我們還會(huì)標(biāo)記集群,這樣就不會(huì)有任何查詢進(jìn)入有問(wèn)題的集群的代理節(jié)點(diǎn)進(jìn)行查詢。

我們支持早期版本的 Druid 所支持的各種粒度(1 分鐘、1 刻鐘、1 小時(shí)、1 天),這取決于查詢數(shù)據(jù)的時(shí)間長(zhǎng)度。這種粒度的選擇是自動(dòng)進(jìn)行的。在需要時(shí),由于查詢的數(shù)據(jù)量很大,可以強(qiáng)制粒度以更長(zhǎng)的時(shí)間段獲取更細(xì)粒度的數(shù)據(jù),但要付出響應(yīng)時(shí)間的代價(jià)。

結(jié)論

對(duì)于站點(diǎn)監(jiān)控和事件跟蹤而言,帶有需要實(shí)時(shí)或近實(shí)時(shí)聚合的高基數(shù)數(shù)據(jù)的用例,對(duì)于像 eBay 這樣的大型生態(tài)系統(tǒng)做出數(shù)據(jù)驅(qū)動(dòng)的決策至關(guān)重要。像 Druid 這樣的分析存儲(chǔ)可以提供洞見(jiàn)的能力,從監(jiān)控的角度來(lái)說(shuō)非常有價(jià)值,也很重要;很多團(tuán)隊(duì)和開(kāi)發(fā)人員都依賴維護(hù) eBay 客戶系統(tǒng)的可用性和可靠性。

參考資料

本文中對(duì) Druid 的所有引用都是指 Druid 開(kāi)源版本,請(qǐng)參考以下鏈接:

 http://druid.io/ 

https://github.com/apache/incubator-druid/

總結(jié)

以上所述是小編給大家介紹的eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言小編會(huì)及時(shí)回復(fù)大家的!

您可能感興趣的文章:
  • Android實(shí)現(xiàn)與Apache Tomcat服務(wù)器數(shù)據(jù)交互(MySql數(shù)據(jù)庫(kù))
  • Linux+php+apache+oracle環(huán)境搭建之CentOS下安裝Oracle數(shù)據(jù)庫(kù)
  • 建立Apache+PHP+MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)的動(dòng)態(tài)網(wǎng)站
  • 使用 Apache Superset 可視化 ClickHouse 數(shù)據(jù)的兩種方法

標(biāo)簽:鹽城 文山 宣城 南昌 東莞 景德鎮(zhèn) 黔南 桂林

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)》,本文關(guān)鍵詞  eBay,打造,基于,Apache,Druid,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于eBay 打造基于 Apache Druid 的大數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章