Elasticsearch內(nèi)部探秘

Neil Zhu陈瘦,簡書ID Not_GOD,University AI 創(chuàng)始人 & Chief Scientist悔常,致力于推進世界人工智能化進程护赊。制定并實施 UAI 中長期增長戰(zhàn)略和目標,帶領團隊快速成長為人工智能領域最專業(yè)的力量舀武。
作為行業(yè)領導者拄养,他和UAI一起在2014年創(chuàng)建了TASA(中國最早的人工智能社團), DL Center(深度學習知識中心全球價值網(wǎng)絡),AI growth(行業(yè)智庫培訓)等奕剃,為中國的人工智能人才建設輸送了大量的血液和養(yǎng)分。此外捐腿,他還參與或者舉辦過各類國際性的人工智能峰會和活動纵朋,產(chǎn)生了巨大的影響力,書寫了60萬字的人工智能精品技術(shù)內(nèi)容茄袖,生產(chǎn)翻譯了全球第一本深度學習入門書《神經(jīng)網(wǎng)絡與深度學習》操软,生產(chǎn)的內(nèi)容被大量的專業(yè)垂直公眾號和媒體轉(zhuǎn)載與連載。曾經(jīng)受邀為國內(nèi)頂尖大學制定人工智能學習規(guī)劃和教授人工智能前沿課程宪祥,均受學生和老師好評聂薪。

Elasticsearch內(nèi)部探秘

by Njal Karevoll

什么是module?

ES中的module是一個Guice Module部件完成配置信息和綁定ES各類接口的特定實現(xiàn)蝗羊。

Guice: lightweight dependency injection framework for Java 5 and above, brought to you by Google.

不含任何插件的標準的ES服務器擁有超過112個模塊:(原文100藏澳,最新數(shù)據(jù)112個模塊)

?  elasticsearch git:(master) find src/main -name \*Module\* | grep -v common | wc -l
     112

ES在啟動時,基于其配置文件和運行時環(huán)境來搜集不同模塊耀找,并創(chuàng)建一個稱為Injector的東西翔悠。簡單說,Injector就是一個不需要提供構(gòu)建參數(shù)可以構(gòu)建類的實例的對象野芒。Injector將會使用它的配置完的模塊來定位所有請求的依賴蓄愁,并以一種拓撲順序來為我們創(chuàng)建出這些實例。這樣的做法為我們節(jié)約了大量時間狞悲,并幫助我們創(chuàng)建出來一個可復合的模塊系統(tǒng)撮抓。這樣的系統(tǒng)ES所需的規(guī)模需要可控。

用更加專業(yè)的術(shù)語摇锋,這就是一個依賴注入(dependency injection)丹拯,用James Shore的話說就是:

Dependency injection means giving an object its instance variables

本文后面將解釋為何ES如此易插件化和可擴展站超。我們首先看看ES的HTTP部分來弄清Guice和依賴注入是如何運作的。

HTTP服務模塊

ES抽象為一個HttpServer類咽笼,在構(gòu)建期間獲得一個HttpServerTransport顷编,這默認綁定在一個稱為NettyHttpServerTransport的具體實現(xiàn)上。換句話說剑刑,HttpServer不清楚請求或者響應是如何接受和發(fā)送的媳纬,它只需要處理應用邏輯(application logic)(i.e. 幫助到來的請求找到一個合適的請求處理者)。

如果施掏,由于某些原因(如性能钮惠,安全,特性等)七芭,ES打算切換HTTP層(layer)素挽,如同對換出一個配置值那樣簡單(http.type)。因此狸驳,Sonian基于Jetty發(fā)布了一個ES的HTTP層预明,這個東西剛好解決這個問題“夜浚可以在這里下載撰糠。基于Jetty的實現(xiàn)支撐了諸如驗證這樣的特性辩昆,這在一些應用場景種肯定有相應的需求阅酪。

命名空間

下圖展示了ES的模塊和命名空間:


elasticsearch_internal.png

多個模塊基于他們在源代碼樹或者代碼中的調(diào)用情況被放進了不同的命名空間中。ES不同的側(cè)面汁针,諸如REST接口术辐,插件,River和傳輸服務是分割的實體施无,他們之間沒有模塊層面的依賴辉词。模塊可能已經(jīng)太過龐大或者難以復合使用的將會被進一步分割成嵌套命名空間中的稍小的模塊。

所有模塊

所有模塊的全圖是相當大的猾骡。下圖展示了這個情況:
其中的注釋命名規(guī)則是:Namespaces-Module names-Bound classes

modules-all.png

新模塊的產(chǎn)生

大多數(shù)模塊僅僅會提供一個或者多個類或接口较屿,但是某些模塊可以產(chǎn)生它們需要的新模塊。這些模塊通常依賴當前Setting對象而產(chǎn)生卓练,這是在啟動ES的時候從elasticseasrch.yml中讀取的隘蝎。這就讓插件作者能夠?qū)懗鎏娲蛘邤U展ES內(nèi)置功能,可以通過默認的配置系統(tǒng)來開啟和配置這些插件襟企。

這里有個例子嘱么,Discovery Module,默認使用Zen或者Local發(fā)現(xiàn)模塊顽悼,但是可能有其通過設置discovery.type配置值來實現(xiàn)完成另外模塊的對換曼振。此乃Sonian的ZooKeeper Discovery的工作原理几迄。

擴展和對換的實現(xiàn)

當我們需要完全對換出ES中整個部件的實現(xiàn)時,這些模塊提供給我們一種簡單增加ES能力的的方法冰评。因為所有由模塊系統(tǒng)實例化的類可能需要一個到任何其他由同一個系統(tǒng)實例化的類的引用映胁,于是通過良定義的接口很容易擴展功能。

AnalysisModule是使用ES和Lucene的開發(fā)者最最關心的模塊之一甲雅。分析模塊負責提供索引和搜索時分析器解孙、分詞詞、字符過濾器和token過濾器抛人。使用這個模塊提供的API弛姜,很容易增加Lucene適用的分析器、分詞器或者過濾器進入ES妖枚,只需要幾行代碼就可以完成廷臼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绝页,隨后出現(xiàn)的幾起案子荠商,更是在濱河造成了極大的恐慌,老刑警劉巖续誉,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莱没,死亡現(xiàn)場離奇詭異,居然都是意外死亡屈芜,警方通過查閱死者的電腦和手機郊愧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門朴译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來井佑,“玉大人,你說我怎么就攤上這事眠寿」蹋” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵盯拱,是天一觀的道長盒发。 經(jīng)常有香客問我,道長狡逢,這世上最難降的妖魔是什么宁舰? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮奢浑,結(jié)果婚禮上蛮艰,老公的妹妹穿的比我還像新娘。我一直安慰自己雀彼,他們只是感情好壤蚜,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布即寡。 她就那樣靜靜地躺著,像睡著了一般袜刷。 火紅的嫁衣襯著肌膚如雪聪富。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天著蟹,我揣著相機與錄音墩蔓,去河邊找鬼。 笑死草则,一個胖子當著我的面吹牛钢拧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播炕横,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼源内,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了份殿?” 一聲冷哼從身側(cè)響起膜钓,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卿嘲,沒想到半個月后颂斜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡拾枣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年沃疮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梅肤。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡司蔬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姨蝴,到底是詐尸還是另有隱情俊啼,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布左医,位于F島的核電站授帕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浮梢。R本人自食惡果不足惜跛十,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秕硝。 院中可真熱鬧芥映,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霎苗,卻和暖如春姆吭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唁盏。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工内狸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厘擂。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓昆淡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刽严。 傳聞我的和親對象是個殘疾皇子昂灵,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 此文為本人學習guice的過程中,翻譯的官方文檔舞萄,如有不對的地方眨补,歡迎指出。另外還有一些附件說明倒脓、吐槽撑螺、疑問點,持...
    李眼鏡閱讀 3,473評論 2 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理崎弃,服務發(fā)現(xiàn)甘晤,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,519評論 25 707
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議饲做。它實...
    香橙柚子閱讀 23,728評論 8 183
  • 夜晚思緒總是豐富多彩的线婚,突然想起了9歲的自己,那次一個人的“冒險之旅”艇炎。 心里竟有說不出的苦澀酌伊。 那時候是冬天腾窝,很...
    謝_十三幺閱讀 276評論 2 4