ElasticSearch 作为一个基于 Apache Lucene 的分布式、可扩展、实时的搜索与数据分析引擎,具有十分强大的功能:
- 全文搜索——相关性得分—–自动排序
- 实时搜索
- 分析与聚合 通过 ES 可以很方便的使大量数据具有搜索、分析和探索的能力。ES出色的性能也让其备受各类公司的喜爱,譬如WikiPedia,StackOverflow以及Github。 同时ElasticSearch和关系型数据库比如MySQL有很多相似的概念,因此上手门槛很低:
ES 的几大优势:
- 具有高可用性、高扩展性: 很简便的横向扩容,分布式的架构,可以轻松地对资源进行横向纵向扩缩容,可以满足不同数据量级及查询场景对硬件资源的需求。能由数百台到万台机器搭建满足PB级的快速搜索,也能搭建单机版服务小公司。
- 查询速度快,性能佳(相较于其他大数据解决方案): ES底层采用Lucene作为搜索引擎,并在此之上做了多重优化,保证了用户对数据查询数据的需求。可”代替”传统关系型数据库,也可用于复杂数据分析,海量数据的近实时处理等。
- 搜索功能强大,高度匹配用户意图: ES 内部提供了完善的评分机制,会根据分词出现的频次等信息对文档进行相关性排序,保证相关性越高的文档排序越靠前。另外还提供了包括模糊查询,前缀查询,通配符查询等在内的多种查询手段,帮助用户快速高效地进行检索。
- 功能点多但使用比较简便,开箱即用,性能优化比较简单
- 生态圈丰富,社区活跃,适配多种工具。如下图,处理日志和输出到Elasticsearch,您可以使用日志记录工具,如Logstash(www.elastic.co/products/logstash),搜索和可视化界面分析这些日志,你可以使用 Kibana(www.elastic.co/产品/ kibana),即传说中的ELK技术栈。另外当前主流的大数据框架也几乎都支持ES,比如Flink和ES就是个完美搭档。
应用场景
- 日志实时分析: 这个是 ES 应用最广泛的领域,支持全栈的日志分析,包括各种应用日志、数据库日志、用户行为日志、网络数据、安全数据等等。ES 拥有一套完整的日志解决方案,可以秒级实现从采集到展示。
- 搜索服务: 例如像腾讯文档基于 ES 做全文检索,电商客户拼多多、蘑菇街等大量的商品搜索都是基于 ES。
- 时序分析: 典型的场景是监控数据分析,比如云监控,整个腾讯云的监控都是基于 ES 的。此外还包括物联网场景,也有大量的时序数据。时序数据的特点是写入吞吐量特别高,ES 支持的同时也提供了丰富的多维统计分析算子。
- 查询服务: ES 在某些复杂的查询场景下可代替关系型数据库。ES 的优点在于查询,然而实践证明,在被作为数据库来使用,即写完马上查询会有延迟。
日志实时分析
典型场景:
- 运营日志,比如慢日志、异常日志,用来定位业务问题;
- 业务日志,比如用户的点击、访问日志,可以用来分析用户行为;
- 审计日志,可以用于安全分析。ES 很完美的解决了日志实时分析的需求。
具有如下特点:
- Elastic 生态提供了完整的日志解决方案,任何一个开发、运维同学使用成熟组件,通过简单部署,即可搭建起一个完整的日志实时分析服务。
- 在 Elastic 生态中,日志从产生到可访问一般在 10s 级。相比于传统大数据解决方案的几十分钟、小时级,时效性非常高。ES 拥有一套完整的日志解决方案(ELK),可以秒级实现从采集到展示。
- 由于支持倒排索引、列存储等数据结构,ES 提供非常灵活的搜索分析能力。
- 支持交互式分析,即使在万亿级日志的情况下,ES 搜索响应时间也是秒级。
日志是互联网行业最基础、最广泛的数据形式,ES 非常完美的解决了日志实时分析场景,这也是近几年 ES 快速发展的一个重要原因。
搜索服务
典型场景:
- 商品搜索,类似京东、淘宝、拼多多中的商品搜索;
- APP 搜索,支持应用商店里的应用搜索;
- 站内搜索,支持论坛、在线文档等搜索功能。
具有如下特点:
- 高性能:单个服务最大达到 10w+ QPS,平响 20ms~,P95 延时小于 100ms。
- 强相关: 搜索体验主要取决于搜索结果是否高度匹配用户意图,需要通过正确率、召回率等指标进行评估。
- 高可用: 搜索场景通常要求高可用性,支持单机房故障容灾。任何一个电商服务,如淘宝、京东、拼多多,只要故障一个小时就可以上头条。
时序数据分析
典型场景:
- Metrics,即传统的服务器监控;整个腾讯云的监控都是基于 ES 的。
- APM,应用性能监控;
- 物联网数据,智能硬件、工业物联网等产生的传感器数据。时序数据的特点是写入吞吐量特别高,ES 支持的同时也提供了丰富的多维统计分析算子。
具有如下特点:
- 高并发写入:线上单集群最大规模达到 600+节点、1000w/s 的写入吞吐。
- 高查询性能:要求单条曲线 或者单个时间线的查询延时在 10ms~。
- 多维分析:要求灵活、多维度的统计分析能力,比如我们在查看监控的时候,可以按照地域、业务模块等灵活的进行统计分析。
应用场景划分
可以划分为两类:搜索类和时序类。
首先,我们一起看看搜索类业务的挑战。以电商搜索、APP 搜索、站内搜索为代表,这类业务非常重视可用性,服务 SLA 达到 4 个 9 以上,需要容忍单机故障、单机房网络故障等;同时要求高性能、低毛刺,例如 20w QPS、平响 20ms、P95 延时 100ms。总之,在搜索类业务场景下,核心挑战点在于高可用、高性能。
另一类我们称之为时序类业务挑战,包含日志、Metrics、APM 等场景。相比于搜索类业务重点关注高可用、高性能,时序类业务会更注重成本、性能。比如时序场景用户通常要求高写入吞吐,部分场景可达 1000w/sWPS;在这样写入吞吐下,保留 30 天的数据,通常可达到 PB 级的存储量。而现实是日志、监控等场景的收益相对较低,很可能用户用于线上实际业务的机器数量才是 100 台,而监控、日志等需要 50 台,这对多数用户来说,基本是不可接受的。所以在时序类业务中,主要的挑战在于存储成本、计算成本等方面。