#題記: Elasticsearch研究有一段時間了,現特將Elasticsearch相關核心知識、原理從初學者認知、學習的角度,從如下9個方面進行詳細梳理。歡迎討論...... #0. 帶着問題上路——ES是如何產生的? ##(1)思考:大規模數據如何檢索? 如:當系統數據量上了10億、100億條的時候,咱們在作系統架構的時候一般會從如下角度去考慮問題: 1)用什麼數據庫好?(mysql、sybase、oracle、達夢、神通、mongodb、hbase…) 2)如何解決單點故障;(lvs、F五、A十、Zookeep、MQ) 3)如何保證數據安全性;(熱備、冷備、異地多活) 4)如何解決檢索難題;(數據庫代理中間件:mysql-proxy、Cobar、MaxScale等;) 5)如何解決統計分析問題;(離線、近實時)html
##(2)傳統數據庫的應對解決方案 對於關係型數據,咱們一般採用如下或相似架構去解決查詢瓶頸和寫入瓶頸: 解決要點: 1)經過主從備份解決數據安全性問題; 2)經過數據庫代理中間件心跳監測,解決單點故障問題; 3)經過代理中間件將查詢語句分發到各個slave節點進行查詢,並彙總結果 java
從前面討論咱們瞭解到,把數據放在內存也好,不放在內存也好,都不能完徹底全解決問題。 所有放在內存速度問題是解決了,但成本問題上來了。 爲解決以上問題,從源頭着手分析,一般會從如下方式來尋找方法: 一、存儲數據時按有序存儲; 二、將數據和索引分離; 三、壓縮數據; 這就引出了Elasticsearch。mysql
#1. ES 基礎一網打盡程序員
##1.1 ES定義 ES=elaticsearch簡寫, Elasticsearch是一個開源的高擴展的分佈式全文檢索引擎,它能夠近乎實時的存儲、檢索數據;自己擴展性很好,能夠擴展到上百臺服務器,處理PB級別的數據。 Elasticsearch也使用Java開發並使用Lucene做爲其核心來實現全部索引和搜索的功能,可是它的目的是經過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。sql
##1.2 Lucene與ES關係? 1)Lucene只是一個庫。想要使用它,你必須使用Java來做爲開發語言並將其直接集成到你的應用中,更糟糕的是,Lucene很是複雜,你須要深刻了解檢索的相關知識來理解它是如何工做的。mongodb
2)Elasticsearch也使用Java開發並使用Lucene做爲其核心來實現全部索引和搜索的功能,可是它的目的是經過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。數據庫
##1.3 ES主要解決問題: 1)檢索相關數據; 2)返回統計結果; 3)速度要快。windows
##1.4 ES工做原理 當ElasticSearch的節點啓動後,它會利用多播(multicast)(或者單播,若是用戶更改了配置)尋找集羣中的其它節點,並與之創建鏈接。這個過程以下圖所示: 安全
##1.6 ES數據架構的主要概念(與關係數據庫Mysql對比) 服務器
##1.7 ELK是什麼? ELK=elasticsearch+Logstash+kibana elasticsearch:後臺分佈式存儲以及全文檢索 logstash: 日誌加工、「搬運工」 kibana:數據可視化展現。 ELK架構爲數據分佈式存儲、可視化查詢和日誌解析建立了一個功能強大的管理鏈。 三者相互配合,取長補短,共同完成分佈式大數據處理工做。
#2. ES特色和優點 1)分佈式實時文件存儲,可將每個字段存入索引,使其能夠被檢索到。 2)實時分析的分佈式搜索引擎。 分佈式:索引分拆成多個分片,每一個分片可有零個或多個副本。集羣中的每一個數據節點均可承載一個或多個分片,而且協調和處理各類操做; 負載再平衡和路由在大多數狀況下自動完成。 3)能夠擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。也能夠運行在單臺PC上(已測試) 4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等。
#三、ES性能 ##3.1 性能結果展現 (1)硬件配置: CPU 16核 AuthenticAMD 內存 總量:32GB 硬盤 總量:500GB 非SSD
(2)在上述硬件指標的基礎上測試性能以下: 1)平均索引吞吐量: 12307docs/s(每一個文檔大小:40B/docs) 2)平均CPU使用率: 887.7%(16核,平均每核:55.48%) 3)構建索引大小: 3.30111 GB 4)總寫入量: 20.2123 GB 5)測試總耗時: 28m 54s.
##3.2 性能esrally工具(推薦) 使用參考:blog.csdn.net/laoyang360/…
#四、爲何要用ES? ##4.1 ES國內外使用優秀案例 1) 2013年初,GitHub拋棄了Solr,採起ElasticSearch 來作PB級的搜索。 「GitHub使用ElasticSearch搜索20TB的數據,包括13億文件和1300億行代碼」。
2)維基百科:啓動以elasticsearch爲基礎的核心搜索架構。 3)SoundCloud:「SoundCloud使用ElasticSearch爲1.8億用戶提供即時而精準的音樂搜索服務」。 4)百度:百度目前普遍使用ElasticSearch做爲文本數據分析,採集百度全部服務器上的各種指標數據及用戶自定義數據,經過對各類數據進行多維分析展現,輔助定位分析實例異常或業務層面異常。目前覆蓋百度內部20多個業務線(包括casio、雲分析、網盟、預測、文庫、直達號、錢包、風控等),單集羣最大100臺機器,200個ES節點,天天導入30TB+數據。
##4.2 咱們也須要 實際項目開發實戰中,幾乎每一個系統都會有一個搜索的功能,當搜索作到必定程度時,維護和擴展起來難度就會慢慢變大,因此不少公司都會把搜索單獨獨立出一個模塊,用ElasticSearch等來實現。
近年ElasticSearch發展迅猛,已經超越了其最初的純搜索引擎的角色,如今已經增長了數據聚合分析(aggregation)和可視化的特性,若是你有數百萬的文檔須要經過關鍵詞進行定位時,ElasticSearch確定是最佳選擇。固然,若是你的文檔是JSON的,你也能夠把ElasticSearch看成一種「NoSQL數據庫」, 應用ElasticSearch數據聚合分析(aggregation)的特性,針對數據進行多維度的分析。
【知乎:熱酷架構師潘飛】ES在某些場景下替代傳統DB 我的覺得Elasticsearch做爲內部存儲來講仍是不錯的,效率也基本可以知足,在某些方面替代傳統DB也是能夠的,前提是你的業務不對操做的事性務有特殊要求;而權限管理也不用那麼細,由於ES的權限這塊還不完善。 因爲咱們對ES的應用場景僅僅是在於對某段時間內的數據聚合操做,沒有大量的單文檔請求(好比經過userid來找到一個用戶的文檔,相似於NoSQL的應用場景),因此可否替代NoSQL還須要各位本身的測試。 若是讓我選擇的話,我會嘗試使用ES來替代傳統的NoSQL,由於它的橫向擴展機制太方便了。
#5. ES的應用場景是怎樣的? ##一般咱們面臨問題有兩個: 1)新系統開發嘗試使用ES做爲存儲和檢索服務器; 2)現有系統升級須要支持全文檢索服務,須要使用ES。 以上兩種架構的使用,如下連接進行詳細闡述。 blog.csdn.net/laoyang360/…
##一線公司ES使用場景: 1)新浪ES 如何分析處理32億條實時日誌 dockone.io/article/505 2)阿里ES 構建挖財本身的日誌採集和分析體系 afoo.me/columns/tec… 3)有贊ES 業務日誌處理 tech.youzan.com/you-zan-ton… 4)ES實現站內搜索 www.wtoutiao.com/p/13bkqiZ.h…
#6. 如何部署ES? ##6.1 ES部署(無需安裝) 1)零配置,開箱即用 2)沒有繁瑣的安裝配置 3)java版本要求:最低1.7 我使用的1.8 [root@laoyang config_lhy]# echo $JAVA_HOME /opt/jdk1.8.0_91 4)下載地址: download.elastic.co/elasticsear… 5)啓動 cd /usr/local/elasticsearch-2.3.5 ./bin/elasticsearch bin/elasticsearch -d(後臺運行)
##6.2 ES必要的插件 必要的Head、kibana、IK(中文分詞)、graph等插件的詳細安裝和使用。 blog.csdn.net/column/deta…
##6.3 ES windows下一鍵安裝 自寫bat腳本實現windows下一鍵安裝。 1)一鍵安裝ES及必要插件(head、kibana、IK、logstash等) 2)安裝後以服務形式運行ES。 3)比本身摸索安裝節省至少2小時時間,效率很是高。 腳本說明: blog.csdn.net/laoyang360/…
#7. ES對外接口(開發人員關注) ##1)JAVA API接口 www.ibm.com/developerwo…
##2)RESTful API接口 常見的增、刪、改、查操做實現: blog.csdn.net/laoyang360/…
#8.ES遇到問題怎麼辦? 1)國外:discuss.elastic.co/ 2)國內:elasticsearch.cn/
#參考: [1] www.tuicool.com/articles/7f… [2] zhaoyanblog.com/archives/49… [3]《Elasticsearch服務器開發》 [4]《實戰Elasticsearch、Logstash、Kibana》 [5]《Elasticsearch In Action》 [6]《某ES大牛PPT》
#九、還有嗎? 《死磕 Elasticsearch 方法論》:普通程序員高效精進的 10 大狠招!(免費完整版) blog.csdn.net/laoyang360/… —————————————————————————————————— 更多ES相關實戰乾貨經驗分享,請掃描下方【銘毅天下】微信公衆號二維碼關注。 (每週至少更新一篇!)
2016-08-18 21:10 思於家中牀前
做者:銘毅天下 轉載請標明出處,原文地址: blog.csdn.net/laoyang360/… 若是感受本文對您有幫助,請點擊‘頂’支持一下,您的支持是我堅持寫做最大的動力,謝謝!