1.Elasticsearch的由来
许多年前,一个叫Shay Banon的待业工程师跟随他的新婚妻子来到伦敦,他的妻子想在伦敦学习做一名厨师。而他在伦敦寻找工作的期间,接触到了Lucene的早期版本,他想为自己的妻子开发一个方便搜索菜谱的应用。直接使用Lucene构建搜索会有很多的坑以及重复性的工作,所以Shay便在Lucene的基础上不断进行抽象来让Java程序嵌入搜索变得更容易一些,经过一段时间的打磨,就诞生了他的第一个开源作品,他给自己的这个作品起了个名字,叫 “Compass”,中文即“指南针”的意思。之后,Shay找到了一份新工作,新工作是处在一个高性能分布式的开发环境中。他在工作中渐渐发现,越来越需要一个易用的高性能、实时、分布式搜索服务,于是他决定重写Compass,将它从一个库打造成了一个独立的server,并将其改名为Elasticsearch。Elasticsearch发布的第1个版本是在2010年的2月份,从那之后,Elasticsearch便成了Github上最受人瞩目的项目之一,并且很快就有超过300名开发者加入进来贡献了自己的代码。后来Shay和另一位合伙人成立了公司专注打造Elasticsearch,他们对Elasticsearch进行了一些商业化的包装和支持。但是,Elasticsearch承诺,永远都将是开源并且免费的。
2.ElasticSearch的定义?
ElasticSearch是使用Java语言,基于Lucene开发的一个分布式的、高扩展性的、高实时性的、支持PB级数据存储的搜索和数据分析引擎,以优雅的RestfulAPI的方式供外部调用,避免了原来繁琐复杂的Lucene的操作。它能够很方便的使大量数据具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸缩性,能使数据库在生产环境变得更有价值。而且Elasticsearch在Apache 2 license下许可使用,可以免费下载、使用和修改。
3.为什么学习ElasticSearch?
我们先看看ElasticSearch热度:
ElasticSearch是一个存储引擎,所以我们看看ElasticSearch在DB-Engines 的2020年12月份最新排名依然位居前8(https://db-engines.com/en/ranking)。
DB-Engines排行评分方法是从网站上提及的次数、搜索的热度、论坛上提及的次数、相关职位的数量、相关的个人主页的数量和社交网络中的相关性等6个纬度进行打分,评分相对客观。技术是我们谋生的工具,我们在选择技术的时候要选择评分高的技术学习,这样无论是就业也好,还是工作中做出突出的成绩都是有帮助的。
db-engines2020年12月排行我们来看看国外哪些公司在使用ElasticSearch:
1)Github(一个面向开源及私有软件项目的托管平台)。
“Github使用Elasticsearch搜索20TB的数据,包括13亿的文件和1300亿行的代码”。Github在2013年1月升级了他们的代码搜索,由solr转为Elasticsearch,目前集群规模为26个索引存储节点和8个客户端节点(负责处理搜索请求),详情请看官方博客:https://github.com/blog/1381-a-whole-new-code-search
2)Foursquare
”实时搜索5千万地点信息?Foursquare每天都用Elasticsearch做这样的事“。Foursquare是一家基于用户地理位置信息的手机服务网站,并鼓励手机用户同他人分享自己当前所在地理位置等信息。与其他老式网站不同,Foursquare用户界面主要针对手机而设计,以方便手机用户使用。
3)SoundCloud
“SoundCloud使用Elasticsearch来为1.8亿用户提供即时精准的音乐搜索服务”。SoundCloud是一家德国网站,提供音乐分享社区服务,成长很快,Alexa世界排名已达第236位。你可以在线录制或上传任何声音到SoundCloud与大家分享,可在线上传也可以通过软件客户端来上传音乐文件,没有文件大小限制,但免费版限制上传音频总长不可超过2个小时播放时长,每首歌曲限最多100次下载。SoundCloud允许音乐通过Flash播放器方式嵌入到网页中。
4)Fog Creek(美国的一家软件公司)
“Elasticsearch使Fog Creek可以在400亿行代码中进行一个月3千万次的查询“。
5)StumbleUpon
”Elasticsearch是StumbleUpon的关键部件,它每天为社区提供百万次的推荐服务“。StumbleUpon是个能发现你喜欢的网页的网站,进去时先注册,注册完就选择你感兴趣的东西,它会自动帮你推荐一些网页,如果你喜欢这个网页就点喜欢按钮,按 stumble按钮就会推荐下一个网页。目前其数据量达到 25亿,基本数据存储在HBase中,并用 elasticsearch建立索引,elasticsearch 在其中除了用在搜索功能还有在推荐和统计功能。之前他们是使用solr作为搜索,由于solr满足不了他们的业务增长需要而替换为 elasticsearch。
6)Mozilla
Mozilla公司以火狐著名,它目前使用 WarOnOrange 这个项目来进行单元或功能测试,测试的结果以 json的方式索引到elasticsearch中,开发人员可以非常方便的查找 bug。Socorro是Mozilla 公司的程序崩溃报告系统,一有错误信息就插入到 Hbase和Postgres 中,然后从 Hbase中读取数据索引到elasticsearch中,方便查找。
7)Sony
Sony公司使用elasticsearch 作为信息搜索引擎
8)Infochimps
“在 Infochimps,我们已经索引了25亿文档,总共占用 4TB的空间”。Infochimps是一家位于德克萨斯州奥斯丁的创业公司,为大数据平台提供商。它主要提供基于hadoop的大数据处理方案。
国外使用ElasticSearch的案例我们来看看国内哪些公司在使用ElasticSearch:
在国内,阿里巴巴、腾讯、滴滴、今日头条、饿了么、360安全、小米,vivo 等诸多知名公司都在使用Elasticsearch,多到不能穷举,主要用于日志搜集分析、用于APP综合搜索、订单系统搜索、企业级网站搜索等方面,以下就举几个典型的案例。如果有兴趣可以去搜索案例相关的架构方案文章,参考学习。
1.京东到家
Elasticsearch 做为一款功能强大的分布式搜索引擎,支持近实时的存储、搜索数据,在京东到家订单系统中发挥着巨大作用,目前订单中心ES集群存储数据量达到10亿个文档,日均查询量达到5亿。
2.携程网
选择对分片后的数据库建立实时索引,把查询收口到一个独立的 Web Service,在保证性能的前提下,提升业务应用查询时的便捷性。目前,最大的日志单集群有120个data node,运行于70台物理服务器上。数据规模如下:单日索引数据条数600亿,新增索引文件25TB (含一个复制片则为50TB),业务高峰期峰值索引速率维持在百万条/秒,历史数据保留时长根据业务需求制定,从10天 - 90天不等,集群共3441个索引、17000个分片、数据总量约9300亿, 磁盘总消耗1PB。
3.去哪儿
Elasticsearch分布式搜索储存集群的引入,就是为了解决订单数据的存储与搜索的问题。订单复杂查询直接走Elasticsearch,基于OrderNo的简单查询走DB,Elasticsearch 中索引设置了8个分片,目前ES单个索引的文档达到1.4亿,合计达到2亿条数据占磁盘大小64G,集群机器磁盘容量240G。
4.滴滴出行
滴滴 2016 年初开始构建 Elasticsearch 平台,如今已经发展到超过 3500+ Elasticsearch 实例,超过 5PB 的数据存储,峰值写入 tps 超过了 2000w/s 的超大规模。Elasticsearch 在滴滴有着非常丰富的使用场景,例如线上核心的打车地图搜索,客服、运营的多维度查询,滴滴日志服务等近千个平台用户。
总体来说,在这个大数据爆发的时代,用户体验至上的时代,5G极速带宽的时代,高延迟几乎是一种不能接受的事情,无论是实时搜索业务还是数据分析业务,性能和巨量的数据又是我们提升体验的一对矛盾,ElasticSearch利用其低延迟、轻量级、易维护、分布式、高可用、高扩展性的特点,很好的解决了很多互联网产品的业务问题,大大提升了用户体验,让很多中小型公司的提供高性能的互联网产品成为可能。
网友评论