elasticsearch-進(jìn)階2

本文的主要內(nèi)容是筆者閱讀《ELK stack權(quán)威指南》和《深入理解ElasticSearch》的筆記,這兩本書在都微信閱讀可搜到(吐槽下微信閱讀募寨,只能在移動(dòng)端閱讀尚猿,費(fèi)眼睛啊)逼蒙。這兩本書使讀者對(duì)于ES有了更深刻的認(rèn)識(shí),在閱讀中吓坚,也糾正了筆者一些錯(cuò)誤的“自以為是”撵幽。

outline

  • 底層索引控制
  • Elasticsearch分布式索引架構(gòu)設(shè)計(jì)
  • 理解ES的緩存
  • 改善用戶的搜索體驗(yàn)
  • 關(guān)于ES的others

底層索引控制

準(zhǔn)實(shí)時(shí)搜索的實(shí)現(xiàn)

以在線動(dòng)態(tài)服務(wù)的層面看,要做到實(shí)時(shí)更新條件下數(shù)據(jù)的可用和可靠凌唬,就需要在倒排索引的基礎(chǔ)上再做一系列更高級(jí)的處理
新收到的數(shù)據(jù)寫到新的索引文件里并齐。Lucene把每次生成的額倒排索引叫做一個(gè)段(segment)

image

ES動(dòng)態(tài)更新的過程--實(shí)現(xiàn)準(zhǔn)實(shí)時(shí)索引的原理

  • 新數(shù)據(jù)進(jìn)入內(nèi)存buffer
  • 內(nèi)存buffer生成一個(gè)segment刷到文件系統(tǒng)緩存--此時(shí)Lucene可以檢索到這個(gè)segment
  • 文件緩存刷到磁盤,commit更新(Search實(shí)例重新打開) ---refresh
image

refresh:
通過API可強(qiáng)制刷新
默認(rèn)刷新間隔-1s

tarnslog(事務(wù)日志)

在refresh發(fā)生的時(shí)候客税,事務(wù)日志日志保持原樣--保證數(shù)據(jù)不丟失
等到refresh發(fā)生后况褪,事務(wù)日志才清空--flush
事務(wù)日志刷新--確保數(shù)據(jù)正確寫入索引并清空事務(wù)日志
通過APi可強(qiáng)制刷新
默認(rèn)flush間隔--30min或者事務(wù)日志文件>=512M
刷新設(shè)置:period,ops(操作數(shù)),size(日志容量)

實(shí)時(shí)讀取(readl-time GET):
從事務(wù)日志中讀取

在ES中更耻,索引是個(gè)集群概念测垛,Lucene索引對(duì)應(yīng)一個(gè)分片

控制索引合并-segment merging

段合并的主要代價(jià)---I/O操作和CPU
段合并策略

  • tiered策略--默認(rèn)-合并大小相似的索引段
  • log byte size 基于索引段的字節(jié)數(shù)
  • log doc 基于索引段的文檔書

段合并策略的執(zhí)行方式

  • 并發(fā)合并調(diào)度器:每次開啟新線程直到線程數(shù)達(dá)到上限 通過設(shè)置max_thread_count
  • 順序合并調(diào)度器:只使用同一個(gè)線程執(zhí)行所有的索引合并操作

段合并的過程

  • 如圖,未完成的較大segment被排除在檢索可見范圍內(nèi)
  • 歸并完成后秧均,較大的segment刷到磁盤食侮,commit文件變更
image
image

Elasticsearch分布式索引架構(gòu)設(shè)計(jì)

只有了解ES的索引架構(gòu),才能夠更好的使用ES目胡,優(yōu)化性能锯七!

副本一致性-replica + shard

默認(rèn)5個(gè)分片,一個(gè)副本
最理想的分片數(shù)量依賴于節(jié)點(diǎn)的數(shù)量
節(jié)點(diǎn)最大數(shù)=分片數(shù)(副本數(shù)+1)
多分片-多索引:一次查詢可以分配到不同的索引S骸眉尸!
或者使用別名,讓多個(gè)索引看起來像一個(gè)索引
分片處理使我們能夠存儲(chǔ)超過單機(jī)容量的數(shù)據(jù)
副本解決了日漸增長的吞吐量和數(shù)據(jù)安全方面的問題

路由-routing

路由是限定查詢?cè)趩蝹€(gè)分片上執(zhí)行的一個(gè)解決方案
shard=hash(routing) % number_of_primary_shards
取余
索引的主分片數(shù)不可以隨意修改
索引時(shí)使用路由
路由是優(yōu)化集群的一個(gè)很強(qiáng)大的機(jī)制
別名

分片分配器

分片策略-ShardAllocator(分片分配器-接口)

  • even_shard--確保每個(gè)節(jié)點(diǎn)上具有相同數(shù)量的分片
  • balanced(默認(rèn))
  • 自定義

裁決者 decider

理解ES的緩存

過濾器緩存

  • 索引級(jí)緩存--不建議
  • 節(jié)點(diǎn)級(jí)緩存(默認(rèn))--基于LRU
字段數(shù)據(jù)緩存-最重要
  • 索引級(jí) -- 不建議
  • 節(jié)點(diǎn)級(jí)(默認(rèn))
    應(yīng)用范圍是切面計(jì)算和排序
    加載相關(guān)字段的全部數(shù)據(jù)到內(nèi)存中
    代價(jià)較高

ES允許我們有選擇的將某些字段加載到字段數(shù)據(jù)緩存--字段數(shù)據(jù)緩存過濾

  • 基于詞頻
  • 基于正則表達(dá)式
  • 基于兩者的結(jié)合

引入字段數(shù)據(jù)緩存過濾:

  • 添加fielddata對(duì)象
  • 子對(duì)象filter


    image

ES的故障處理

故障可能發(fā)生的原因

  • Java垃圾回收
  • 內(nèi)存交換--指內(nèi)存中的頁(page)寫入磁盤(Linux系統(tǒng)指swap分區(qū))
  • 控制I/O 主要是索引的合并
    eg.只在節(jié)點(diǎn)上進(jìn)行索引合并
  • 使用預(yù)熱器提升查詢速度--預(yù)熱器是一些提前執(zhí)行的標(biāo)準(zhǔn)查詢
    不適合索引頻繁更新的情況
  • 熱點(diǎn)線程--hot_threads
Java內(nèi)存模型
  • Eden區(qū)--Java初次分配的大部分對(duì)象都在該區(qū)域
  • Survivor區(qū)(分為0區(qū)和1區(qū))--該區(qū)域儲(chǔ)存Eden區(qū)垃圾回收后仍然存活的對(duì)象
  • 年老代--存儲(chǔ)在survivor區(qū)存活較長時(shí)間的對(duì)象
  • 持久代-非堆空間巨双,存儲(chǔ)所有JVM自身的數(shù)據(jù)
  • 代碼緩存區(qū)
    Eden區(qū)和Survivor可以合稱為年輕代
    分代垃圾回收機(jī)制

改善用戶的搜索體驗(yàn)

自動(dòng)糾錯(cuò) suggest API
  • term suggester
  • phrase suggester
  • autoconplete
改善相關(guān)性搜索

這一部分可以參考我之前的文章
搜索-Elasticsearch-進(jìn)階1

關(guān)于ES的others

reroute接口---控制分片選擇
節(jié)點(diǎn)下線--transient
ES的讀寫分離

參考資料

  • 《ELK stack權(quán)威指南》
  • 《深入理解ElasticSearch》拉斐爾·酷奇(Rafa Ku) 馬雷克·羅戈任斯基(Marek Rogoziński)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末噪猾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筑累,更是在濱河造成了極大的恐慌袱蜡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慢宗,死亡現(xiàn)場(chǎng)離奇詭異坪蚁,居然都是意外死亡奔穿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門迅细,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巫橄,“玉大人淘邻,你說我怎么就攤上這事茵典。” “怎么了宾舅?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵统阿,是天一觀的道長。 經(jīng)常有香客問我筹我,道長扶平,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任蔬蕊,我火速辦了婚禮结澄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岸夯。我一直安慰自己麻献,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布猜扮。 她就那樣靜靜地躺著勉吻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旅赢。 梳的紋絲不亂的頭發(fā)上齿桃,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音煮盼,去河邊找鬼短纵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛僵控,可吹牛的內(nèi)容都是我干的香到。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喉祭,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼养渴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泛烙,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤理卑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蔽氨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藐唠,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帆疟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宇立。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踪宠。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妈嘹,靈堂內(nèi)的尸體忽然破棺而出柳琢,到底是詐尸還是另有隱情,我是刑警寧澤润脸,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布柬脸,位于F島的核電站,受9級(jí)特大地震影響毙驯,放射性物質(zhì)發(fā)生泄漏倒堕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一爆价、第九天 我趴在偏房一處隱蔽的房頂上張望垦巴。 院中可真熱鬧,春花似錦铭段、人聲如沸骤宣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涯雅。三九已至,卻和暖如春展运,著一層夾襖步出監(jiān)牢的瞬間活逆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工拗胜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔗候,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓埂软,卻偏偏與公主長得像锈遥,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勘畔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容