本文来源于公众号【胖滚猪学编程】,转载请注明出处。mysql
从今天开始,想和你一块儿死磕ElasticSearch,学习分布式搜索引擎,跟着胖滚猪就对了!sql
既然是ES的第一课,那么最重要的是让你爱上它!不想说那些单纯的优点、概念了,直接上大厂的生产案例,才是最能吸引你的!跟着大厂走,没问题的!数据库
一个技术服务组件,首先须要了解全面它的使用场景,才能更针对性的去研究及推广。所以第一要务是搞懂为何要学习ElasticSearch,开头po先一张排行图,大哥的地位可不是瞎搞来的,没点实力能上位?凭这排名就是你要学习它的理由!编程
凭啥排这么前呢?不就是个搜索引擎吗。额,也许提到Elasticseach,你第一反应就是"搜索引擎"。相似百度搜索、淘宝搜索那种。而我写这篇文章就是为了纠正你这个"错误"的观点。后端
Elasticseach 确实是作搜索引擎出家的,可是到如今已经进化成了一个全能型的数据产品。所以你的思惟决不能限制在搜索引擎上。安全
本文经过一线大厂的八个案例,全方位让你了解ElasticSearch的应用场景和优点,包括:性能优化
ElasticSearch在腾讯的应用很是普遍,主要有三:日志实时分析场景、搜索服务、时序数据分析。服务器
典型日志以下:网络
Elastic 生态提供了完整的日志解决方案,任何一个开发、运维同窗使用成熟组件,经过简单部署,便可搭建起一个完整的日志实时分析服务。数据结构
在 Elastic 生态中,日志从产生到可访问通常在 10s 级。相比于传统大数据解决方案的几十分钟、小时级,时效性很是高。ES 拥有一套完整的日志解决方案(ELK),能够秒级实现从采集到展现。
因为支持倒排索引、列存储等数据结构,ES 提供很是灵活的搜索分析能力。
支持交互式分析,即便在万亿级日志的状况下,ES 搜索响应时间也是秒级。
日志是互联网行业最基础、最普遍的数据形式,ES 很是完美的解决了日志实时分析场景,这也是近几年 ES 快速发展的一个重要缘由
搜索服务,典型场景包含:商品搜索,相似京东、淘宝、拼多多中的商品搜索;APP 搜索,支持应用商店里的应用搜索;站内搜索,支持论坛、在线文档等搜索功能。咱们支持了大量搜索服务,它们主要有如下特色:
时序数据分析,典型的时序数据包含:Metrics,即传统的服务器监控;整个腾讯云的监控都是基于 ES 的。APM,应用性能监控;物联网数据,智能硬件、工业物联网等产生的传感器数据。时序数据的特色是写入吞吐量特别高,ES 支持的同时也提供了丰富的多维统计分析算子。这类场景具备如下特色:
高并发写入:线上单集群最大规模达到 600+节点、1000w/s 的写入吞吐。
高查询性能:要求单条曲线 或者单个时间线的查询延时在 10ms~。
多维分析:要求灵活、多维度的统计分析能力,好比咱们在查看监控的时候,能够按照地域、业务模块等灵活的进行统计分析。
上面经过腾讯的案例咱们了解了三大应用场景,
日志实时分析场景
搜索服务
时序数据分析
另外从这三大应用场景咱们也能够概括出ES的几大优点:
一、具备高可用性、高扩展性;
二、查询速度快,性能佳;
三、搜索功能强大,高度匹配用户意图。
所以,能够看出,ES在日志实时分析和搜索方面的应用优点简直是无敌的!起码目前,在这两方面,尚未强劲的对手!
经过京东的案例,聊一聊ES在查询、检索、数据分析方面的应用场景
因为较高的性能和较低的使用门槛,京东内部有不少的场景都在使用 Elasticsearch。覆盖了京东多条业务线,同时也覆盖了不少应用场景:
主要应用的业务是商品、促销、优惠券、订单、收银台、物流、对帐、评论等大数据量查询。此场景的核心诉求是高性能、稳定性和高可用性,部分场景会有检索要求,一般用于加速关系型数据库,业务系统经过 binlog 同步或业务双写完成数据同步。
主要的应用场景是应用、安全、风控、交易等操做日志,以及京东部分品类商品搜索。此类日志化场景对写要求很高,查询性能及高可用等要求相对较低,大的业务写会达到数千万 / 秒,存储以 PB 为单位来计算。
这些场景对磁盘、内存有比较高的要求,所以,京东也作了相应优化,用于减小内存消耗,提高磁盘总体使用率,使用更廉价的磁盘来下降成本等等。
主要应用的业务是物流单的各类分析、订单数据分析、用户画像等。由于业务数据分析纬度较多,flink、storm 等流式分析对于某些报表场景不太适用,批处理实时性又成为问题,因此近实时分析的 Elasticsearch 就成为了这些业务的选择。
从京东的案例中,咱们彷佛看到了,能够利用ES在某些场景下代替关系型数据库哦!不只如此,ES在实时数据分析领域,竟然也有一席之地!
经过去哪儿的案例,聊一聊ES在查询方面的应用场景,能够简单的理解为"代替"mysql。注意代替加了引号,闭着眼睛想都不可能彻底代替。好比事务性。
15年去哪儿网酒店日均订单量达到30w+,随着多平台订单的聚合日均订单能达到100w左右。
原来采用的热表分库方式,即将最近6个月的订单的放置在一张表中,将历史订单放在在history表中。history表存储全量的数据,当用户查询的下单时间跨度超过6个月即查询历史订单表,此分表方式热表的数据量为4000w左右,当时能解决的问题。可是显然不能知足携程艺龙订单接入的需求。
若是继续按照热表方式,数据量将超过1亿条。全量数据表保存2年的可能就超过4亿的数据量。因此寻找有效途径解决此问题迫在眉睫。因为对这预计4亿的数据量还需按照预约日期、入住日期、离店日期、订单号、联系人姓名、电话、酒店名称、订单状态……等多个条件查询。因此简单按照某一个维度进行分表操做没有意义。
显然只经过DB来支撑大量的查询是不可取的,同时对于一些复杂的查询,Mysql支持得不够友好,因此Elasticsearch分布式搜索储存集群的引入,就是为了解决订单数据的存储与搜索的问题。
对订单模型进行抽象和分类,将经常使用搜索字段和基础属性字段剥离。DB作分库分表,存储订单详情;Elasticsearch存储搜素字段。
订单复杂查询直接走Elasticsearch,基于OrderNo的简单查询走DB,以下图所示。
从去哪儿的案例中,咱们彷佛看到了,关系型数据库撑不起的复杂查询,ES能够胜任。
何时应该用ElasticSearch?
一、典型搜索场景:闭着眼用它!
二、典型日志分析场景:闭着眼用它!
三、关系型数据库查询有瓶颈:考虑下用它!为啥是考虑?ES的优势在于查询,然而实践证实,在被做为数据库来使用,即写完立刻查询会有延迟。
四、数据分析场景:考虑下用它!为啥是考虑?简单通用的场景需求能够大规模使用,但在特定业务场景领域,仍是要选择更加专业的数据产品,如复杂聚合,ClickHouse相比 Elasticserach 作亿级别数据深度聚合需求会更加合适。
ElasticSearch有什么优点呢?
一、很简便的横向扩容,分布式的架构,能够轻松地对资源进行横向纵向扩缩容,能够知足不一样数据量级及查询场景对硬件资源的需求。能由数百台到万台机器搭建知足PB级的快速搜索,也能搭建单机版服务小公司。
二、查询速度快:ES底层采用Lucene做为搜索引擎,并在此之上作了多重优化,保证了用户对数据查询数据的需求。可"代替"传统关系型数据库,也可用于复杂数据分析,海量数据的近实时处理等。
三、相关性高:ES内部提供了完善的评分机制,会根据分词出现的频次等信息对文档进行相关性排序,保证相关性越高的文档排序越靠前。另外还提供了包括模糊查询,前缀查询,通配符查询等在内的多种查询手段,帮助用户快速高效地进行检索。
四、功能点多但使用比较简便,开箱即用,性能优化比较简单
五、生态圈丰富,社区活跃,适配多种工具。以下图,处理日志和输出到Elasticsearch,您可使用日志记录工具,如Logstash(www.elastic.co/products/logstash),搜索和可视化界面分析这些日志,你可使用Kibana(www.elastic.co/产品/ kibana),即传说中的ELK技术栈。另外当前主流的大数据框架也几乎都支持ES,好比Flink和ES就是个完美搭档。
本文参考:
本文来源于公众号:【胖滚猪学编程】。一枚集颜值与才华于一身,不算聪明却足够努力的女程序媛。用漫画形式让编程so easy and interesting!求关注!