Elasticsearch 是一款分布式,RESTful 风格的搜索和数据分析引擎,可以从海量的数据中高效的找到相关信息。如 wiki 用 ES 进行全文检索及其高亮,Github 用其检索代码,电商平台用其做一些商品推荐等,具有丰富的使用场景。
在本篇文章中,主要涉及以下内容:
-
ES 的核心功能及其应用场景的介绍
-
ES 逻辑架构(文档,索引)的介绍
-
ES 物理架构(集群,节点,shard 等)的介绍
-
ES 环境安装
-
ES 倒排索引
基础介绍
ES 介绍
Elasticsearch 核心功能:
-
海量数据分布式存储及其集群管理
-
- 服务高可用 - 允许有节点停止服务,但集群可正常服务
-
- 数据高可用 - 允许节点丢失,但不会丢失数据
-
- 可拓展性 - 很好的面对请求量的提升,和数据的不断增长。
-
大数据实时搜索引擎
-
- 结构化数据
-
- 全文数据
-
- 地理位置
-
近实时分析
-
- 聚合
Elasticsearch 核心特性:
-
高性能,非 T +1
-
- 相较于传统关系型数据库,在搜索,算分,模糊查询上有非常好的体验。
-
- 相较于大数据分析 Hadoop,具有更高效率的统计和分析能力。
-
容易扩展
-
- 本身分布式架构
-
- 丰富的社区生态
ES 起源历史
Lucene 是由 Java 开发的一款搜索引擎类库,具有高性能,易拓展的优点,但由于其接口只能为 Java ,并且不支持水平拓展的局限性。
2004 年 Shay Banon 基于 Lucene 开发了 Compass,2010 年 重写了 Compass,取名 Elasticsearch,使其支持分布式,可水平拓展,并提供 restful 接口,让任何编程语言进行使用。
ES 生态圈
ES 常常搭配一些产品提供一些解决方案,如常提到的 ELK 就是,ES,Logstash 和 Kibana 的统称,下图很好的描述了 ES 家族及其生态。
其中 Beat 相较于 Logstash 更加轻量和便携。
ES 常用案例架构
ES 搜索案例,ES 虽然可以单独可以存储引擎,但其无法满足一些事务性的需要,所以常和关系型数据库搭配,采用如下架构:
ES 日志和指标分析案例,一般就是指数据收集,入库,可视化的过程,常采用如下的架构: