介紹:數(shù)據(jù)總線作為大數(shù)據(jù)架構(gòu)中的流量中樞,在各個(gè)大數(shù)據(jù)組件之間起著數(shù)據(jù)橋梁的作用。.服務(wù)器、K8、App、Web、物聯(lián)網(wǎng)/移動(dòng)終端等產(chǎn)生的各種異構(gòu)數(shù)據(jù),可以通過數(shù)據(jù)總線進(jìn)行實(shí)時(shí)訪問。可以進(jìn)行統(tǒng)一的數(shù)據(jù)管理,實(shí)現(xiàn)與上級(jí)系統(tǒng)的分離;然后可以異步實(shí)現(xiàn)數(shù)據(jù)清洗、數(shù)據(jù)分發(fā)、實(shí)時(shí)計(jì)算、離線計(jì)算等計(jì)算過程,然后將結(jié)構(gòu)化數(shù)據(jù)傳遞給下游分析和歸檔系統(tǒng),達(dá)到構(gòu)建清晰數(shù)據(jù)流的目的。廣義上包括數(shù)據(jù)采集與訪問、傳輸線路、數(shù)據(jù)存儲(chǔ)隊(duì)列、消費(fèi)計(jì)算、交付等。所有的。
本文由阿里云SLS的徐克佳撰寫
GIAC2022全球互聯(lián)網(wǎng)架構(gòu)大會(huì)上海
共享時(shí)的主題內(nèi)容。
云原生場(chǎng)景下的數(shù)據(jù)總線需求場(chǎng)景及挑戰(zhàn)
數(shù)據(jù)總線介紹
作為大數(shù)據(jù)架構(gòu)中的傳輸節(jié)點(diǎn),數(shù)據(jù)總線充當(dāng)各種大數(shù)據(jù)組件之間的數(shù)據(jù)橋梁。服務(wù)器、K8、APP、Web、物聯(lián)網(wǎng)/移動(dòng)終端等產(chǎn)生的各種異構(gòu)數(shù)據(jù),可以通過數(shù)據(jù)總線進(jìn)行實(shí)時(shí)訪問。可以進(jìn)行統(tǒng)一的數(shù)據(jù)管理,實(shí)現(xiàn)與上級(jí)系統(tǒng)的分離;然后可以異步實(shí)現(xiàn)數(shù)據(jù)清洗、數(shù)據(jù)分發(fā)、實(shí)時(shí)計(jì)算、離線計(jì)算等計(jì)算過程,然后將結(jié)構(gòu)化數(shù)據(jù)傳遞給下游分析和歸檔系統(tǒng),達(dá)到構(gòu)建清晰數(shù)據(jù)流的目的。廣義上包括數(shù)據(jù)采集與訪問、傳輸線路、數(shù)據(jù)存儲(chǔ)隊(duì)列、消費(fèi)計(jì)算、交付等。
所有的。
通過數(shù)據(jù)總線可以輕松實(shí)現(xiàn)以下目標(biāo):
生產(chǎn)者與消費(fèi)者分離:消費(fèi)者不需要感知作者的任何細(xì)節(jié),從而降低了對(duì)接系統(tǒng)的復(fù)雜度,增加了系統(tǒng)的可靠性。
應(yīng)對(duì)流量高峰,數(shù)據(jù)生產(chǎn)與數(shù)據(jù)消費(fèi)異步,消峰填谷。
定義統(tǒng)一的格式和操作語義:訪問不同的異構(gòu)數(shù)據(jù),通過數(shù)據(jù)處理創(chuàng)建統(tǒng)一的格式。
我舉一個(gè)簡(jiǎn)單的例子,在廣告搜索計(jì)算系統(tǒng)中,廣告點(diǎn)擊數(shù)據(jù)非常重要。部分點(diǎn)數(shù)據(jù)往往被多方訂閱和消費(fèi),應(yīng)用場(chǎng)景各不相同。有二階精度的實(shí)時(shí)計(jì)算服務(wù),也有每小時(shí)或每天的類Hadoop批處理作業(yè)。如果數(shù)據(jù)直接聯(lián)動(dòng),需要考慮各種異常場(chǎng)景,使得系統(tǒng)異常復(fù)雜。通過數(shù)據(jù)總線,可以顯著降低系統(tǒng)的復(fù)雜度,提高系統(tǒng)的可靠性。這可以確保任何數(shù)據(jù)收集系統(tǒng)在重新上線時(shí)都可以從之前的斷點(diǎn)繼續(xù)處理數(shù)據(jù),即使它經(jīng)歷了離線維護(hù)或中斷。處理。云原生場(chǎng)景的技術(shù)挑戰(zhàn)
面對(duì)每天百億級(jí)的讀寫,近百PB的數(shù)據(jù)流量,數(shù)以萬計(jì)的用戶,構(gòu)建高可用的數(shù)據(jù)總線將是一個(gè)非常具有挑戰(zhàn)性的任務(wù)。以下是某些場(chǎng)景的交通場(chǎng)景的簡(jiǎn)短列表:
制作人:由于商家宣傳等活動(dòng),幾分鐘內(nèi)流量增加了十倍、百倍;
消費(fèi)者:有幾十個(gè)訂閱者同時(shí)消費(fèi)某種數(shù)據(jù);
每天,以不同方式訪問數(shù)百個(gè)異構(gòu)數(shù)據(jù)源,需要進(jìn)行大量操作。
經(jīng)過幾十年的快速發(fā)展,整個(gè)開發(fā)模式、系統(tǒng)架構(gòu)、部署模式、基礎(chǔ)架構(gòu)都發(fā)生了數(shù)次革命性的變化,帶來了更快的開發(fā)和部署效率。然而,整個(gè)系統(tǒng)和網(wǎng)絡(luò)環(huán)境變得更加復(fù)雜,部署方式和運(yùn)行環(huán)境變得更加動(dòng)態(tài)和不確定,數(shù)據(jù)源的數(shù)量和數(shù)據(jù)量顯著增加,流量波動(dòng)等不確定因素增加。增加了原有結(jié)構(gòu)的難度和差異。這些都是云時(shí)代給數(shù)據(jù)總線帶來的新要求。
綜上所述,云原生時(shí)代數(shù)據(jù)總線的技術(shù)挑戰(zhàn)可以從采集訪問層、流水線層、計(jì)算層三個(gè)方面展開。采集與接入層側(cè)重于數(shù)據(jù)源的豐富接入、接入的易用性、資源開銷、數(shù)據(jù)采集的可靠性;管道層關(guān)注網(wǎng)絡(luò)質(zhì)量、帶寬和可擴(kuò)展性、安全性和隔離性、環(huán)境財(cái)富等;計(jì)算層側(cè)重于計(jì)算語法能力、流量處理帶寬和可擴(kuò)展性。
開源方案的選擇與比較
目前業(yè)界大數(shù)據(jù)的主流架構(gòu)大致可以分為五部分,其中前三部分構(gòu)成了數(shù)據(jù)總線。
采集端:承載可觀測(cè)數(shù)據(jù)采集和數(shù)據(jù)處理前的一些功能。隨著云原生的發(fā)展,端集也需要順應(yīng)時(shí)代潮流,提供
友好支持K8s合集。常見的采集終端包括Filebeat、FluentD/Fluent-bIt、Telegraf和我們開源的iLogtail。
消息隊(duì)列:集合
Agent往往不會(huì)將采集到的數(shù)據(jù)直接發(fā)送到存儲(chǔ)系統(tǒng),而是寫入消息隊(duì)列,起到削峰填谷的作用,避免流量泛洪導(dǎo)致存儲(chǔ)系統(tǒng)宕機(jī)。常見的消息隊(duì)列有Kafka、RabbitMQ等。
計(jì)算:用于消費(fèi)消息隊(duì)列中的數(shù)據(jù),經(jīng)過處理聚合后輸出到存儲(chǔ)系統(tǒng)。最常見的有Flink、Logstash等。值得注意的是,一些公司也開始部署開源版本的iLogtail作為協(xié)議架構(gòu)中的計(jì)算層。
StorageandAnalysisTool:提供采集數(shù)據(jù)進(jìn)行持久化存儲(chǔ)的能力,提供查詢分析能力。常見的存儲(chǔ)分析工具有
Elasticsearch、ClickHouse、Loki和Prometheus時(shí)序、influxdb等。
可視化:p
Kibana和Grafana提供了可視化收集數(shù)據(jù)的選項(xiàng)。
用戶可以使用采集端、消息隊(duì)列和計(jì)算提供的上述開源組件創(chuàng)建數(shù)據(jù)總線。雖然基于開源組件構(gòu)建數(shù)據(jù)總線在技術(shù)上是可行的,但整體實(shí)現(xiàn)復(fù)雜度較高,需要維護(hù)多個(gè)系統(tǒng)進(jìn)行協(xié)調(diào)。此外,也無法完全應(yīng)對(duì)上述云原生場(chǎng)景所面臨的技術(shù)挑戰(zhàn)。一個(gè)不可逾越的差距是,例如,網(wǎng)絡(luò)質(zhì)量和區(qū)域規(guī)劃。
整體數(shù)據(jù)總線架構(gòu)
一個(gè)可觀察的平臺(tái)不僅要解決數(shù)據(jù)的獲取和查詢問題,還要提供針對(duì)特定業(yè)務(wù)場(chǎng)景的應(yīng)用能力,幫助客戶從碎片化、低信息化的數(shù)據(jù)中獲取更多的數(shù)據(jù)價(jià)值。
典型的云原生可觀察平臺(tái)自下而上分為四層:數(shù)據(jù)總線、存儲(chǔ)分析、工具和應(yīng)用。其中,數(shù)據(jù)總線是整個(gè)可觀察平臺(tái)的數(shù)據(jù)基礎(chǔ),為數(shù)據(jù)分析和更高層次的業(yè)務(wù)應(yīng)用提供數(shù)據(jù)保障。正因?yàn)閿?shù)據(jù)總線足夠基礎(chǔ),必須足夠可靠和穩(wěn)定,才能保證業(yè)務(wù)數(shù)字化過程中數(shù)據(jù)的暢通,能夠靈活應(yīng)對(duì)運(yùn)營(yíng)變化的需求。接下來重點(diǎn)分享阿里云SLS數(shù)據(jù)總線的架構(gòu)和實(shí)踐。
在本文的第一部分,我們?cè)O(shè)想了一個(gè)典型的數(shù)據(jù)總線可以分為三層:采集訪問層、流水線層和計(jì)算層。同理,可以劃分對(duì)應(yīng)的SLS數(shù)據(jù)總線架構(gòu)。
采集接入層:承載對(duì)數(shù)據(jù)總線上所有數(shù)據(jù)的接入(支持Log、Metric、Trace、Event等),與阿里云服務(wù)深度集成。接入方式基于一個(gè)SDK/API擴(kuò)展了各種接入方式,如端部的iLogtail可觀察收集器、數(shù)據(jù)導(dǎo)入服務(wù)、標(biāo)準(zhǔn)開源協(xié)議等。
管道層:LogHub作為數(shù)據(jù)總線的主要流量節(jié)點(diǎn),其功能完全可以替代Kafka。通過RestfulAPI對(duì)外提供訪問服務(wù),通過消費(fèi)組提供實(shí)時(shí)消費(fèi)服務(wù)。
計(jì)算層:作為L(zhǎng)ogHub的下游服務(wù),基于實(shí)時(shí)消費(fèi)群體,提供各種數(shù)據(jù)處理和交付服務(wù);并在生態(tài)上支持主流開源流計(jì)算的對(duì)接。
以上,我們已經(jīng)對(duì)SLS數(shù)據(jù)總線有了大致的了解,接下來我們將從數(shù)據(jù)接入、運(yùn)營(yíng)中心、數(shù)據(jù)處理三個(gè)維度進(jìn)行詳細(xì)介紹。數(shù)據(jù)訪問技術(shù)架構(gòu)與實(shí)踐
數(shù)據(jù)訪問選項(xiàng)概述
LogHub作為數(shù)據(jù)總線的主要樞紐,默認(rèn)提供HTTP/HTTPSAPI編寫。同時(shí)還提供多種語言的SDK,簡(jiǎn)化接入場(chǎng)景,增加可靠性。SDK涵蓋JAVA、Go、C++等服務(wù)端應(yīng)用,Android、IOS等移動(dòng)端場(chǎng)景,甚至JavaScript等前端場(chǎng)景。
自主研發(fā)的開源可觀察數(shù)據(jù)采集器iLogtail,承載了跨windows、linux、X86、ARM架構(gòu)的服務(wù)器場(chǎng)景和容器場(chǎng)景可觀察數(shù)據(jù)采集能力。借助阿里云的優(yōu)勢(shì),無縫支持阿里云上各種常見云服務(wù)的日志、指標(biāo)和安全審計(jì)數(shù)據(jù)的采集。
對(duì)常用協(xié)議也有豐富的支持,兼容Syslog、Kafka、Promethous、JDBC、OpenTelemertry等開源協(xié)議;支持Logstash、Fluentd、Telegraf等多種開源采集工具。
制作人圖書館
針對(duì)Java、Go等大數(shù)據(jù)、高并發(fā)場(chǎng)景,我們提供基于SDK的JavaProducer和GoProducer;對(duì)于物聯(lián)網(wǎng)/嵌入式設(shè)備,我們運(yùn)行CProducer。
相較于直接通過API或SDK發(fā)送數(shù)據(jù),Producer提供了更高級(jí)別的封裝,極大地提升了性能和可靠性。
線程安全:Producer中所有的方法和暴露的接口都是線程安全的。
異步調(diào)度:客戶端計(jì)算與I/O邏輯分離。調(diào)用Producer發(fā)送接口通常會(huì)立即返回,Producer會(huì)在內(nèi)部存儲(chǔ)合并發(fā)送的數(shù)據(jù),然后分批發(fā)送,以提高吞吐量。
失敗重試:對(duì)于可重試的異常,Producer會(huì)根據(jù)用戶配置的最大重試次數(shù)和重試下載時(shí)間進(jìn)行重試。
Gracefulshutdown:當(dāng)用戶調(diào)用shutdown方法關(guān)閉時(shí),Producer發(fā)送所有緩存的數(shù)據(jù),防止日志丟失。
高性能:通過多線程、緩沖策略、批量發(fā)送等手段,有效提高發(fā)送效率。
iLogtail可觀察數(shù)據(jù)收集器
iLogtail是數(shù)據(jù)總線訪問的重要流量來源。具有重量輕、性能高、配置自動(dòng)化等生產(chǎn)級(jí)特點(diǎn)。可以部署在物理機(jī)、虛擬機(jī)、Kube.NETes等不同環(huán)境中,采集遙測(cè)數(shù)據(jù)。
iLogtail的核心定位是可觀察數(shù)據(jù)采集器,幫助開發(fā)者構(gòu)建統(tǒng)一的數(shù)據(jù)采集層,幫助可觀察平臺(tái)打造各種更高層次的應(yīng)用場(chǎng)景。通過iLogtail可以很好的解決數(shù)據(jù)總線數(shù)據(jù)的訪問問題。
憑借阿里巴巴/螞蟻集團(tuán)的持續(xù)訓(xùn)練和公有云場(chǎng)景,相比開源代理(如Fluentd、Logstash、Beats),iLogtail在性能、資源消耗、可靠性、多租戶隔離等硬指標(biāo)上具有優(yōu)勢(shì)。和K8s支持,可滿足各種業(yè)務(wù)場(chǎng)景的嚴(yán)苛要求。目前,iLogtail已于2022年6月29日全面開源,吸引了眾多開發(fā)者的關(guān)注,2022年11月7日GitHubstar數(shù)也突破1K。
高性能和低開銷是iLogtail的主要優(yōu)勢(shì)之一。iLogtail使用inotify作為L(zhǎng)inux下文件監(jiān)控的主要手段,提供毫秒級(jí)延遲的數(shù)據(jù)發(fā)現(xiàn)能力。同時(shí),考慮到不同的操作系統(tǒng),支持不同的特殊采集場(chǎng)景,iLogtail還采用了輪詢作為數(shù)據(jù)發(fā)現(xiàn)方式。使用輪詢和事件的混合方法,iLogtail創(chuàng)建了一種兼具性能和健壯性優(yōu)勢(shì)的文件發(fā)現(xiàn)機(jī)制。另外,iLogtail使用了非鎖定的事件處理模型。不同于業(yè)界其他開源代理每次配置分配獨(dú)立的線程/goroutine讀取數(shù)據(jù),iLogtail數(shù)據(jù)只配置一個(gè)線程讀取。
由于數(shù)據(jù)讀取的瓶頸不是計(jì)算機(jī)而是磁盤,所以一個(gè)線程足以完成配置事件和數(shù)據(jù)讀取的整個(gè)處理。使用單線程可以讓iLogtail中的事件處理和數(shù)據(jù)讀取發(fā)生在無鎖的環(huán)境中,數(shù)據(jù)結(jié)構(gòu)更輕量,相比多線程處理具有更好的性價(jià)比。
在生產(chǎn)環(huán)境中,一個(gè)服務(wù)有上百個(gè)采集配置是很正常的。每個(gè)配置的優(yōu)先級(jí)、日志生成速率、處理方式、上傳目的地址可能會(huì)有所不同。因此,需要有效解決如何隔離不同的適配。確保采集配置的QoS不受某些配置異常影響的配置。iLogtail利用基于時(shí)間片的收獲調(diào)度、多級(jí)高低水反饋隊(duì)列、非阻塞事件處理、流量控制/關(guān)閉策略、動(dòng)態(tài)配置更新等多項(xiàng)關(guān)鍵技術(shù),并將其集成實(shí)現(xiàn)隔離,公平性和可靠性。具有五個(gè)特點(diǎn)的多租戶絕緣解決方案:可控性和成本效益。經(jīng)過雙十一流量高峰期的多年考驗(yàn),該方案相較于其他開源方案具有更高的穩(wěn)定性和性價(jià)比優(yōu)勢(shì)。
毫不夸張的說,數(shù)據(jù)源的多樣性可以說是數(shù)據(jù)總線的生命線,否則聰明女人難做無米之炊。iLogtail通過插件化設(shè)計(jì),超越簡(jiǎn)單的文件采集,有效拓展上下游生態(tài),讓iLogtail成為真正的可觀察采集器。
目前,iLogtail已經(jīng)支持訪問很多數(shù)據(jù)源。數(shù)據(jù)源類型包括Log、Metric和Trace。數(shù)據(jù)源除了文件采集,還包括對(duì)HTTP、MySQLBinlog、Prometheus、Skywalking、Syslog等標(biāo)準(zhǔn)協(xié)議的支持;iLogtail還支持eBPF,實(shí)現(xiàn)非侵入式網(wǎng)絡(luò)數(shù)據(jù)采集功能。數(shù)據(jù)輸出的生態(tài)逐漸從SLS擴(kuò)展到Kafka、gPRC等。未來還將通過開源社區(qū)支持ClickHouse、ElasticSearch等。
面對(duì)眾多異構(gòu)數(shù)據(jù)的訪問,數(shù)據(jù)總線的職責(zé)之一就是通過數(shù)據(jù)處理創(chuàng)建統(tǒng)一的數(shù)據(jù)格式。iLogtail還提供了強(qiáng)大的數(shù)據(jù)處理能力,可以提前完成數(shù)據(jù)格式正則化、數(shù)據(jù)過濾、上下文賦值等工作。iLogtail整體采用PipeLine設(shè)計(jì)。首先,數(shù)據(jù)通過Input插件采集,經(jīng)過采集配置中設(shè)置的處理器處理,打包到Aggregator插件中,最后通過Flusher發(fā)送到存儲(chǔ)系統(tǒng)。數(shù)據(jù)處理環(huán)境包括數(shù)據(jù)切分、字段提取、過濾、數(shù)據(jù)增強(qiáng)等。所有插件模塊都可以根據(jù)需要進(jìn)行組合。
Logtail原生云實(shí)現(xiàn),全面支持Kubernetes,目前支持兩種常見的容器運(yùn)行時(shí)Docker和Containerd。
iLogtail通過實(shí)時(shí)監(jiān)控容器列表,維護(hù)容器和日志采集路徑映射,結(jié)合高效的文件采集能力,提供極致的容器數(shù)據(jù)采集體驗(yàn)。
iLogtail支持容器標(biāo)簽、環(huán)境變量、K8s標(biāo)簽、Pod名稱、命名空間等多種方式進(jìn)行容器篩選,為用戶配置采集資源提供便捷的選擇。支持DaemonSet、Sidecar、CRD等多種部署方式,針對(duì)不同的使用場(chǎng)景提供靈活的部署選擇。此外,對(duì)于對(duì)CICD的自動(dòng)化部署和運(yùn)維要求較高的用戶,iLogtail提供了原生的K8支持,支持通過CRD進(jìn)行采集和配置管理。在該方案中,iLogtailK8s增加了一個(gè)名為AliyunLogConfig的CustomResourceDefinition擴(kuò)展。同時(shí)開發(fā)了alibaba-log-controller,用于監(jiān)控AliyunLogConfig事件,自動(dòng)創(chuàng)建iLogtail采集配置,完成日志采集。
交通中心技術(shù)架構(gòu)與實(shí)踐
LogHub作為SLS數(shù)據(jù)總線傳輸樞紐,是一個(gè)高性能的數(shù)據(jù)管道,支持海量可觀察數(shù)據(jù)的實(shí)時(shí)訪問和消費(fèi)。在可觀察的數(shù)據(jù)場(chǎng)景中,可以使用像Kafka這樣的消息隊(duì)列產(chǎn)品,在性能、易用性和穩(wěn)定性上都更好。
LogHub可以理解為一個(gè)connection-only的日志隊(duì)列結(jié)構(gòu),通過多個(gè)shard的組合實(shí)現(xiàn)水平IO和存儲(chǔ)擴(kuò)展。并在隊(duì)列的基礎(chǔ)上創(chuàng)建多層索引,可以快速找到每條數(shù)據(jù)在隊(duì)列中的位置,為隊(duì)列模型配備隨機(jī)查詢能力。
彈性:支持1~512個(gè)分區(qū)(Shard),毫秒級(jí)擴(kuò)縮容。
高吞吐量:一個(gè)分片支持5MB/s的寫入和10MB/s的讀取。
容錯(cuò)性高:?jiǎn)为?dú)故障轉(zhuǎn)移不影響正常寫入。
去重:支持寫ExtractlyOnce去重。
隨機(jī)查詢:1%的額外存儲(chǔ)開銷,支持任意數(shù)據(jù)的隨機(jī)搜索(1IO)。
點(diǎn)擊查看原文,獲取更多福利!
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶創(chuàng)作,版權(quán)歸原作者所有。阿里云開發(fā)者社區(qū)不擁有自己的版權(quán),也不承擔(dān)相應(yīng)的法律責(zé)任。具體規(guī)則可以在《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》找到。如果您發(fā)現(xiàn)本社區(qū)涉嫌抄襲,請(qǐng)?zhí)顚懓鏅?quán)投訴表并舉報(bào)。一經(jīng)查實(shí),本社區(qū)將立即刪除涉嫌侵權(quán)的內(nèi)容。