摘要:下需要為每個多帶帶進(jìn)行采集配置采集日志目錄,采集規(guī)則,存儲目標(biāo)等,不易維護(hù)。日志服務(wù)的日志架構(gòu)實踐我們提出基于阿里云日志服務(wù)的日志處理架構(gòu),用以補充社區(qū)的方案,來嘗試解決場景下日志處理的一些細(xì)節(jié)體驗問題。
摘要: 在Kubernetes服務(wù)化、日志處理實時化以及日志集中式存儲趨勢下,Kubernetes日志處理上也遇到的新挑戰(zhàn),包括:容器動態(tài)采集、大流量性能瓶頸、日志路由管理等問題。本文介紹了“Logtail + 日志服務(wù) + 生態(tài)”架構(gòu),介紹了:Logtail客戶端在Kubernetes日志采集場景下的優(yōu)勢;日志服務(wù)作為基礎(chǔ)設(shè)施一站式解決實時讀寫、HTAP兩大日志強需求;日志服務(wù)數(shù)據(jù)的開放性以及與云產(chǎn)品、開源社區(qū)相結(jié)合,在實時計算、可視化、采集上為用戶提供的豐富選擇。
Kubernetes日志處理的趨勢與挑戰(zhàn)
Kubernetes的serveless化
Kubernetes容器技術(shù)促進(jìn)了技術(shù)棧的去耦合,通過引入棧的分層使得開發(fā)者可以更加關(guān)注自身的應(yīng)用程序和業(yè)務(wù)場景。從Kubernetes本身來看,這個技術(shù)解耦也在更進(jìn)一步發(fā)展,容器化的一個發(fā)展的趨勢是:這些容器都將會在無服務(wù)器的基礎(chǔ)設(shè)施上運行。
談到基礎(chǔ)設(shè)施,首先可以聯(lián)想到云,目前在AWS、阿里云、Azure的云上都提供了無服務(wù)器化的Kubernetes服務(wù)。在serverless Kubernetes上,我們將不再關(guān)心集群與機(jī)器,只需要聲明容器的鏡像、CPU、內(nèi)存、對外服務(wù)方式就可以啟動應(yīng)用。
如上圖,左右兩邊分別是經(jīng)典Kubernetes、serverless Kubernetes的形態(tài)。在從左向右發(fā)展的過程中,日志采集也變得復(fù)雜:
在一個Kubernetes node上,可能會運行更大規(guī)模量級的pod,每個pod上都可能有日志或監(jiān)控指標(biāo)采集需求,意味著單node上的日志量會更大。
一個Kubernetes node上可能會運行更多種類的pod,日志采集來源變得多樣化,各類日志的管理、打標(biāo)需求越來越迫切。
日志實時性需求越來越強
首先要強調(diào)的是,并非所有日志都需要實時處理,當(dāng)前很多"T+1"時效的日志交付依然非常重要,比如:做BI可能天級別延遲足夠,ctr預(yù)估可能1小時延遲的日志也可以。
但是,在有些場景下,秒級或更高時效性的日志是必備前提條件,下圖橫坐標(biāo)從左到右的對比展示了數(shù)據(jù)實時性對于決策的重要性。
舉兩個場景來談一下實時日志對于決策的重要性:
告警處理。搞devops同學(xué)都深有體會,線上問題越早發(fā)現(xiàn)、越早處理我們就可以更淡定,處理時間拖得久了故障就可能跟著升級。實時日志幫助我們更快發(fā)現(xiàn)系統(tǒng)的異常指標(biāo),觸發(fā)應(yīng)急處理流程。
AIOps。目前已經(jīng)有一些算法基于日志做異常點檢測、趨勢預(yù)測:根據(jù)日志的pattern變化態(tài)勢發(fā)現(xiàn)正常和異常情況下各類型日志出現(xiàn)的分布;針對IT業(yè)務(wù)系統(tǒng),給定參數(shù)因子、變量對諸如硬盤故障等問題進(jìn)行建模,加以實時日志來實現(xiàn)故障事件預(yù)警。
日志的集中式存儲
日志來源有很多,常見的有:文件,數(shù)據(jù)庫audit log,網(wǎng)絡(luò)數(shù)據(jù)包等等。并且,針對同一份數(shù)據(jù),對于不同的使用者(例如:開發(fā)、運維、運營等)、不同的用途(例如:告警、數(shù)據(jù)清洗、實時檢索、批量計算等),存在使用多種方式重復(fù)消費日志數(shù)據(jù)的情況。
在日志數(shù)據(jù)的系統(tǒng)集成上,從數(shù)據(jù)源到存儲節(jié)點再到計算節(jié)點,可以定義為一個pipeline。如下圖,從上到下的變化是:日志處理正在從O(N^2) pipelines向O(N) pipelines演進(jìn)。
在過去,各類日志用特定的方式來存儲,采集到計算鏈路不具被通用和復(fù)用條件,pipeline非常復(fù)雜,數(shù)據(jù)存儲也可能重復(fù)冗余。當(dāng)前日志數(shù)據(jù)集成上,通過依賴一個中樞(Hub)來簡化日志架構(gòu)的復(fù)雜度、優(yōu)化存儲利用率。這個基礎(chǔ)設(shè)施級別的Hub非常重要,需要支持實時pub/sub,能夠處理高并發(fā)的寫入、讀取請求,提供海量的存儲空間。
Kubernetes日志采集方案的演進(jìn)
前面一節(jié)總結(jié)了Kubernetes日志處理上的趨勢,那么家下來會盤點一下Kubernetes上幾種常見日志采集的做法。
命令行工具
Kubernetes集群上要看日志,最基礎(chǔ)的做法就是登機(jī)器,運行kubectl logs就可以看到容器寫出的stdout/stderr。
基礎(chǔ)的方案沒法滿足更多需求:
只支持標(biāo)準(zhǔn)輸出
數(shù)據(jù)不能持久化
除了看做不了別的事
節(jié)點日志文件落盤
在Kubernetes node維度去處理日志,docker engine將容器的stdout/stderr重定向到logdriver,并且在logdriver上可以配置多種形式去持久化日志,比如以json格式保存文件到本地存儲。
和kubectl命令行相比,更進(jìn)一步是把日志做到了本地化存儲。可以用grep/awk這些Linux工具去分析日志文件內(nèi)容。
這個方案相當(dāng)于回到了物理機(jī)時代,但仍然存在很多問題沒有解決:
基于docker engine和logdriver,除了默認(rèn)的標(biāo)準(zhǔn)輸出,不支持應(yīng)用程序的日志
日志文件rotate多次或者Kubernetes node被驅(qū)逐后數(shù)據(jù)會丟失
沒法跟開源社區(qū)、云上的數(shù)據(jù)分析工具集成
基于這個方案的一個進(jìn)化版本是在node上部署日志采集客戶端,將日志上傳到中心化日志存儲的設(shè)施上去。目前這也是推薦的模式,會在下一節(jié)再做介紹。
sidecar模式日志客戶端采集
一種伴生模式,在一個pod內(nèi),除了業(yè)務(wù)容器外,還有一個日志客戶端容器。這個日志客戶端容器負(fù)責(zé)采集pod內(nèi)容器的標(biāo)準(zhǔn)輸出、文件、metric數(shù)據(jù)上報服務(wù)端。
這個方案解決了日志持久化存儲等基本的功能需求,但兩個地方有待提升:
一個節(jié)點上如果運行了N個pod,就意味著會同時運行著N個日志客戶端,造成CPU、內(nèi)存、端口等資源的浪費。
Kubernetes下需要為每個pod多帶帶進(jìn)行采集配置(采集日志目錄,采集規(guī)則,存儲目標(biāo)等),不易維護(hù)。
日志直寫
直寫方案一般是通過修改應(yīng)用程序本身來實現(xiàn),在程序內(nèi)部組織幾條日志,然后調(diào)用類似HTTP API將數(shù)據(jù)發(fā)送到日志存儲后端。
帶來的好處是:日志格式可以按需DIY,日志源和目標(biāo)的路由可以任意配置。
也可以看到使用上的限制:
侵入代碼會對業(yè)務(wù)改造有直接的依賴,推動業(yè)務(wù)改造一般比較漫長。
應(yīng)用程序在發(fā)數(shù)據(jù)到遠(yuǎn)端遇到異常(比如網(wǎng)絡(luò)抖動,接收服務(wù)端內(nèi)部錯誤)時,需要在有限內(nèi)存中緩存數(shù)據(jù)做重試,最終還是有概率造成數(shù)據(jù)丟失。
Kubernetes日志處理架構(gòu)
來自社區(qū)的架構(gòu)
目前見到比較多的架構(gòu)中,采集工作通過每個Kubernetes node上安裝一個日志客戶端完成:
Kubernetes官方推薦的是treasure data公司開源的fluentd,它的性能現(xiàn)、插件豐富度比較均衡。
社區(qū)有也不少在使用elastic公司開源的beats系列,性能不錯,插件支持略少一些。針對一種數(shù)據(jù)需要部署特定的客戶端程序,比如文本文件通過filebeats來采集。
也有些架構(gòu)在使用logstash,ETL支持非常豐富,但是JRuby實現(xiàn)導(dǎo)致性能很差。
日志客戶端把數(shù)據(jù)格式化好之后用指定協(xié)議上傳到存儲端,常見的選擇有Kafka。Kafka支持實時訂閱、重復(fù)消費,后期可以再根據(jù)業(yè)務(wù)需要把數(shù)據(jù)同步到其它系統(tǒng)去,比如:業(yè)務(wù)日志到Elastic Search做關(guān)鍵詞查詢,結(jié)合Kibana做日志可視化分析;金融場景日志要長期留存,可以選擇投遞Kafka數(shù)據(jù)到AWS S3這樣的高性價比存儲上。
這個架構(gòu)看起來簡潔有效,但在Kubernetes下距離完美還有些細(xì)節(jié)問題要解決:
首先,這是一個標(biāo)準(zhǔn)的節(jié)點級采集方案,Kubernetes下fluentd等客戶端的程序部署、采集配置管理是個難題,在日志采集路由、數(shù)據(jù)打標(biāo)、客戶端配置等問題沒有針對性優(yōu)化。
其次,在日志的消費上,雖然Kafka的軟件生態(tài)足夠豐富,但是仍然需要專業(yè)人員來維護(hù),要做業(yè)務(wù)規(guī)劃、考慮機(jī)器水位、處理硬件損壞。如果要查詢分析日志,還需要有對Elastic Search系統(tǒng)有足夠了解。我們知道在PB級數(shù)據(jù)場景下,分布式系統(tǒng)的性能、運維問題開始凸顯,而駕馭這些開源系統(tǒng)需要很強的專業(yè)能力。
日志服務(wù)的Kubernetes日志架構(gòu)實踐
我們提出基于阿里云日志服務(wù)的Kubernetes日志處理架構(gòu),用以補充社區(qū)的方案,來嘗試解決Kubernetes場景下日志處理的一些細(xì)節(jié)體驗問題。這個架構(gòu)可以總結(jié)為:“Logtail + 日志服務(wù) + 生態(tài)”。
首先,Logtail是日志服務(wù)的數(shù)據(jù)采集客戶端,針對Kubernetes場景下的一些痛點做了針對性設(shè)計。也是按照Kubernetes官方建議的方式,在每個node上只部署一個Logtail客戶端,負(fù)責(zé)這個node上所有的pod日志采集。
其次,針對關(guān)鍵詞搜索和SQL統(tǒng)計這兩個基本的日志需求:日志服務(wù)提供了基礎(chǔ)的LogHub功能,支持?jǐn)?shù)據(jù)的實時寫入、訂閱;在LogHub存儲的基礎(chǔ)上,可以選擇開啟數(shù)據(jù)的索引分析功能,開啟索引后可以支持日志關(guān)鍵詞查詢以及SQL語法分析。
最后,日志服務(wù)的數(shù)據(jù)是開放的。索引數(shù)據(jù)可以通過JDBC協(xié)議與第三方系統(tǒng)對接,SQL查詢結(jié)果與諸如阿里云DataV、開源社區(qū)的Grafana系統(tǒng)很方便地集成;日志服務(wù)的高吞吐的實時讀寫能力支撐了與流計算系統(tǒng)的對接,spark streaming、blink、jstorm等流計算系統(tǒng)上都有connector支持;用戶還可以通過全托管的投遞功能把數(shù)據(jù)寫入到阿里云的對象存儲OSS,投遞支持行存(csv、json)、列存(parquet)格式,這些數(shù)據(jù)可以用作長期低成本備份,或者是通過“OSS存儲+E-MapReduce計算”架構(gòu)來實現(xiàn)數(shù)據(jù)倉庫。
日志服務(wù)的優(yōu)勢
從四個點上來描述日志服務(wù)的特點:
在可靠性和穩(wěn)定性上,它支撐了阿里集團(tuán)和螞蟻金服多次雙十一和雙十二的大促。
在功能上一站式覆蓋了Kafka + ElasticSearch大部分場景。
作為云上的基礎(chǔ)設(shè)施可以方便地實現(xiàn)彈性伸縮,對于用戶來說,大促時不需要操心買機(jī)器擴(kuò)容、每天壞上數(shù)十個盤需要維修等問題。
日志服務(wù)也同樣具備云的0預(yù)付成本、按需付費的特點,并且目前每月有500MB的免費額度。
回顧第一節(jié)中提到的Kubernetes日志處理的趨勢與挑戰(zhàn),這里總結(jié)了日志服務(wù)的三個優(yōu)勢:
作為日志基礎(chǔ)設(shè)施,解決了各種日志數(shù)據(jù)集中化存儲問題。
服務(wù)化的產(chǎn)品帶給用戶更多的易用性,與Kubernetes在serverless的目標(biāo)上也是契合的。
功能上同時滿足實時讀寫、HTAP需求,簡化了日志處理的流程與架構(gòu)。
日志服務(wù)結(jié)合社區(qū)力量進(jìn)行Kubernetes日志分析
Kubernetes源自社區(qū),使用開源軟件進(jìn)行Kubernetes日志的處理也是一些場景下的正確選擇。
日志服務(wù)保證數(shù)據(jù)的開放性,與開源社區(qū)在采集、計算、可視化等方面進(jìn)行對接,幫助用戶享受到社區(qū)技術(shù)成果。
如下圖,舉一個簡單的例子:使用流計算引擎flink實時消費日志服務(wù)的日志庫數(shù)據(jù),源日志庫的shard并發(fā)與flink task實現(xiàn)動態(tài)負(fù)載均衡,在完成與MySQL的meta完成數(shù)據(jù)join加工后,再通過connector流式寫入另一個日志服務(wù)日志庫做可視化查詢。
Logtail在Kubernetes日志采集場景下的設(shè)計
在本文第二節(jié)我們回顧了Kubernetes日志采集方案演進(jìn)過程中遇到的問題,第三節(jié)介紹了基于阿里云日志服務(wù)的功能、生態(tài)。在這一節(jié)會重點對Logtail采集端的設(shè)計和優(yōu)化工作做一些介紹,細(xì)數(shù)Logtail如何解決Kubernetes日志采集上的痛點。
Kubernetes采集的難點
采集目標(biāo)多樣化
容器stdout/stderr
容器應(yīng)用日志
宿主機(jī)日志
開放協(xié)議:Syslog、HTTP等
采集可靠性
性能上需要滿足單node上大流量日志場景,同時兼顧采集的實時性
解決容器日志易失性問題
在各種情況下盡量保證采集數(shù)據(jù)的完整性
動態(tài)伸縮帶來的挑戰(zhàn)
容器擴(kuò)、縮容對自動發(fā)現(xiàn)的要求
降低Kubernetes部署的復(fù)雜度
采集配置易用性
采集配置怎么部署、管理
不同用途的pod日志需要分門別類存儲,數(shù)據(jù)路由怎么去管理
Logtail高可靠采集
Logtail支持至少at-least-once采集的語義保證,通過文件和內(nèi)存兩種級別的checkpoint機(jī)制來保證在容器重啟場景下的斷點續(xù)傳。
日志采集過程中可能遇到各種各樣的來自系統(tǒng)或用戶配置的錯誤,例如日志格式化解析出錯時我們需要及時調(diào)整解析規(guī)則。Logtail提供了采集監(jiān)控功能,可以將異常和統(tǒng)計信息上報日志庫并支持查詢、告警。
優(yōu)化計算性能解決單節(jié)點大規(guī)模日志采集問題,Logtail在不做日志字段格式化的情況(singleline模式)下做到單cpu核100MB/s左右的處理性能。針對網(wǎng)絡(luò)發(fā)送的慢IO操作,客戶端將多條日志batch commit到服務(wù)端做持久化,兼顧了采集的實時性與高吞吐能力。
在阿里集團(tuán)內(nèi)部,Logtail目前有百萬級規(guī)模的客戶端部署,穩(wěn)定性是不錯的。
豐富的數(shù)據(jù)源支持
應(yīng)對Kubernetes環(huán)境下復(fù)雜多樣的采集需求,Logtail在采集源頭上可以支持:stdout/stderr,容器、宿主機(jī)日志文件,syslog、lumberjack等開放協(xié)議數(shù)據(jù)采集。
將一條日志按照語義切分為多個字段就可以得到多個key-value對,由此將一條日志映射到table模型上,這個工作使得在接下來的日志分析過程中事半功倍。Logtail支持以下一些日志格式化方式:
多行解析。比如Java stack trace日志是由多個自然行組成的,通過行首正則表達(dá)式的設(shè)置來實現(xiàn)日志按邏輯行切分。
自描述解析。支持csv、json等格式,自動提取出日志字段。
通過正則、自定義插件方式滿足更多特定需求。
對于一些典型的日志提供內(nèi)置解析規(guī)則。比如,用戶只需要在web控制臺上選擇日志類別是Nginx訪問日志,Logtail就可以自動把一條訪問日志按照Nginx的log format配置抽取出client_ip、uri等等字段。
應(yīng)對節(jié)點級容器動態(tài)伸縮
容器天生會做常態(tài)化擴(kuò)容、縮容,新擴(kuò)容的容器日志需要及時被采集否則就會丟失,這要求客戶端有能力動態(tài)感知到采集源,且部署、配置需要做到足夠的易用性。Logtail從以下兩個維度來解決數(shù)據(jù)采集的完整性問題:
部署
通過DaemonSet方式來快速部署Logtail到一個Kubernetes node上,一條指令就可以完成,與K8S應(yīng)用發(fā)布集成也很方便。
Logtail客戶端部署到node上以后,通過domain socket與docker engine通信來處理該節(jié)點上的容器動態(tài)采集。增量掃描可以及時地發(fā)現(xiàn)node上的容器變化,再加上定期全量掃面機(jī)制來保證不會丟失掉任何一個容器更改事件,這個雙重保障的設(shè)計使得在客戶端上可以及時、完整發(fā)現(xiàn)候選的監(jiān)控目標(biāo)。
采集配置管理
Logtail從設(shè)計之初就選擇了服務(wù)端集中式采集配置管理,保證采集指令可以從服務(wù)端更高效地傳達(dá)給客戶端。這個配置管理可以抽象為"機(jī)器組+采集配置"模型,對于一個采集配置,在機(jī)器組內(nèi)的Logtail實例可以即時獲取到機(jī)器組上所關(guān)聯(lián)的采集配置,去開啟采集任務(wù)。
針對Kubernetes場景,Logtail設(shè)計了自定義標(biāo)識方式來管理機(jī)器。一類pod可以聲明一個固定的機(jī)器標(biāo)識,Logtail使用這個機(jī)器標(biāo)識向服務(wù)端匯報心跳,同時機(jī)器組使用這個自定義標(biāo)識來管理Logtail實例。當(dāng)Kubernetes節(jié)點擴(kuò)容時,Logtail上報pod對應(yīng)的自定義機(jī)器標(biāo)識到服務(wù)端,服務(wù)端就會把這個機(jī)器組上的掛載的采集配置下發(fā)給Logtail。目前在開源采集客戶端上,常見的做法是使用機(jī)器ip或hostname來標(biāo)識客戶端,這樣在容器伸縮時,需要及時去增刪機(jī)器組內(nèi)的機(jī)器ip或hostname,否則就會導(dǎo)致數(shù)據(jù)采集的缺失,需要復(fù)雜的擴(kuò)容流程保證。
解決采集配置管理難題
Logtail提供兩種采集配置的管理方式,用戶根據(jù)自己的喜好任選來操作:
CRD。與Kubernetes生態(tài)深度集成,通過在客戶端上事件監(jiān)聽可以聯(lián)動創(chuàng)建日志服務(wù)上的日志庫、采集配置、機(jī)器組等資源。
WEB控制臺。上手快,可視化方式來配置日志格式化解析規(guī)則,通過wizard完成采集配置與機(jī)器組的關(guān)聯(lián)。用戶只需要按照習(xí)慣來設(shè)置一個容器的日志目錄,Logtail在上開啟采集時會自動渲染成宿主機(jī)上的實際日志目錄。
我們將日志從源到目標(biāo)(日志庫)定義為一個采集路由。使用傳統(tǒng)方案實現(xiàn)個性化采集路由功能非常麻煩,需要在客戶端本地配置,每個pod容器寫死這個采集路由,對于容器部署、管理會有強依賴。Logtail解決這個問題的突破點是對環(huán)境變量的應(yīng)用,Kubernetes的env是由多個key-value組成,在部署容器時可以進(jìn)行env設(shè)置。Logtail的采集配置中設(shè)計了IncludeEnv和ExcludeEnv配置項,用于加入或排除采集源。在下面的圖中,pod業(yè)務(wù)容器啟動時設(shè)置log_type環(huán)境變量,同時Logtail采集配置中定義了IncludeEnv: log_type=nginx_access_log,來指定收集nginx類用途的pod日志到特定日志庫。
所有在Kubernetes上采集到的數(shù)據(jù),Logtail都自動進(jìn)行了pod/namesapce/contanier/image維度的打標(biāo),方便后續(xù)的數(shù)據(jù)分析。
日志上下文查詢的設(shè)計
上下文查詢是指:給定一條日志,查看該日志在原機(jī)器、文件位置的上一條或下一條日志,類似于Linux上的grep -A -B。
在devops等一些場景下,邏輯性異常需要這個時序來輔助定位,有了上下文查看功能會事半功倍。然后在分布式系統(tǒng)下,在源和目標(biāo)上都很難保證原先的日志順序:
在采集客戶端層面,Kubernetes可能產(chǎn)生大量日志,日志采集軟件需要利用機(jī)器的多個cpu核心解析、預(yù)處理日志,并通過多線程并發(fā)或者單線程異步回調(diào)的方式處理網(wǎng)絡(luò)發(fā)送的慢IO問題。這使得日志數(shù)據(jù)不能按照機(jī)器上的事件產(chǎn)生順序依次到達(dá)服務(wù)端。
在分布式系統(tǒng)的服務(wù)端層面,由于水平擴(kuò)展的多機(jī)負(fù)載均衡架構(gòu),使得同一客戶端機(jī)器的日志會分散在多臺存儲節(jié)點上。在分散存儲的日志基礎(chǔ)上再恢復(fù)最初的順序是困難的。
傳統(tǒng)上下文查詢方案,一般是根據(jù)日志到達(dá)服務(wù)端時間、日志業(yè)務(wù)時間字段做兩次排序。這在大數(shù)據(jù)場景下存在:排序性能問題、時間精度不足問題,無法真實還原事件的真實時序。
Logtail與日志服務(wù)(關(guān)鍵詞查詢功能)相結(jié)合來解決這個問題:
一個容器文件的日志在采集上傳時,其數(shù)據(jù)包是由一批的多條日志組成,多條日志對應(yīng)特定文件的一個block,比如512KB。在這一個數(shù)據(jù)包的多條日志是按照源文件的日志序排列,也就意味著某日志的下一條可能是在同一個數(shù)據(jù)包里也可能在下一個數(shù)據(jù)包里。
Logtail在采集時會給這個數(shù)據(jù)包設(shè)置唯一的日志來源sourceId,并在上傳的數(shù)據(jù)包里設(shè)置包自增Id,叫做packageID。每個package內(nèi),任意一條日志擁有包內(nèi)的位移offset。
雖然數(shù)據(jù)包在服務(wù)端后存儲可能是無序狀態(tài),但日志服務(wù)有索引可以去精確seek指定sourceId和packageId的數(shù)據(jù)包。
當(dāng)我們指定容器A的序號2日志(source_id:A,package_id:N,offset:M)查看其下文時,先判斷日志在當(dāng)前數(shù)據(jù)包的offset是否為數(shù)據(jù)包的末尾(包的日志條數(shù)定義為L,末尾的offset為L-1):如果offset M小于(L-1),則說明它的下一條日志位置是:source_id:A,package_id:N,offset:M+1;而如果當(dāng)前日志是數(shù)據(jù)包的最后一條,則其下一條日志的位置是:source_id:A,package_id:N+1,offset:0。
在大部分場景下,利用關(guān)鍵詞隨機(jī)查詢獲取到的一個package,可以支持當(dāng)前包長度L次數(shù)的上下文翻頁,在提升查詢性能同時也大大降低的后臺服務(wù)隨機(jī)IO的次數(shù)。
原文鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/11901.html
摘要:月日,國家會議中心,由主辦的合稱將強勢登陸北京這是首次來華,在這場三合一的開源技術(shù)盛會中,來自國內(nèi)外的開發(fā)人員架構(gòu)師系統(tǒng)管理員專家商業(yè)領(lǐng)袖等數(shù)千名專業(yè)人士將匯聚一堂。后被收購,梁勝出任云平臺首席技術(shù)官,也成為首位華人。 6月19-20日,國家會議中心,由The Linux Foundation主辦的LinuxCon + ContainerCon + CloudOpen (合稱LC3) ...
摘要:容器云的背景伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的和等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。 容器云的背景 伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的Dubbo和Spring Cloud等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。應(yīng)用從有狀態(tài)到無狀態(tài),具體來說將業(yè)務(wù)狀態(tài)數(shù)據(jù)如:會話、用戶數(shù)據(jù)等存儲到中間件中服務(wù)中。 showI...
摘要:容器云的背景伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的和等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。 容器云的背景 伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的Dubbo和Spring Cloud等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。應(yīng)用從有狀態(tài)到無狀態(tài),具體來說將業(yè)務(wù)狀態(tài)數(shù)據(jù)如:會話、用戶數(shù)據(jù)等存儲到中間件中服務(wù)中。 showI...
摘要:華為云華為云在云原生這場游戲中,最具競爭力的玩家之一。年,金山云在云原生領(lǐng)域推出了三款重磅產(chǎn)品星曜裸金屬服務(wù)器云服務(wù)器和云盤。在線上智博會上,浪潮云發(fā)布了經(jīng)過全新迭代升級的浪潮云,進(jìn)一步提升平臺云原生服務(wù)能力。面對數(shù)字時代復(fù)雜系統(tǒng)的不確定性,傳統(tǒng)的 IT 應(yīng)用架構(gòu)研發(fā)交付周期長、維護(hù)成本高、創(chuàng)新升級難,煙囪式架構(gòu),開放性差、組件復(fù)用度低,這些都成為了企業(yè)業(yè)務(wù)快速增長的瓶頸。而云原生以其敏捷、...
閱讀 1699·2021-11-02 14:47
閱讀 3647·2019-08-30 15:44
閱讀 1333·2019-08-29 16:42
閱讀 1731·2019-08-26 13:53
閱讀 934·2019-08-26 10:41
閱讀 3458·2019-08-23 17:10
閱讀 596·2019-08-23 14:24
閱讀 1716·2019-08-23 11:59