1、走近 elastic search分享人 林云霞概念解释Part 01系统原理Part 02分布式集群Part 03应用场景Part 04概念解释01概念解释RESTful APIfull text searchreal timesearch andanalytics engineElasticsearchJSONover HTTPdistributedLucenebasedmulti tenancyopen - sourcehign availabilityscales massivelyschema free 概念解释 Elastic Search 是一个基于 Lucene 构建的开源,分
2、布式,RESTful 搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过 HTTP 使用 JSON 进行数据索引,它能够快速搜索数十亿的文件以及 PB 级的数据,结构化或者非结构化的数据都可以。简介 概念解释节点一个节点就是集群中的一个服务器集群点多台Es服务器的结合的统称叫ES集群,一个集群包含多台服务器,多个节点。分片主分片和副本分片 主分片1 N 复制分片概念解释索引中的索引是组织数据的逻辑空间,一个索引就是一个拥有几分相似特征的文档的集合类型在一个索引中,你可以定义一种或多种类型文档一个文档是一个可被索引的基础信息单元数据库表行概念解释 索引 ( i
3、ndex ) 类型( type) 文档( doc )1 N1 N点此添加标题集群节点主分片副本分片索引概念解释文档概念解释主节点 控制集群,负责集群中的操作,协调创建索引、查询请求客户端节点负载 均衡,组装返回的数据给客户端节点类型节点类型对应节对应节点点相关配置相关配置主节点Node1node.master=true数据节点Node2node.date=true客户端节点Node3node.data=false;node.master=false集群中有很多结点,可以配置为3种不同的角色系统原理02系统原理 Elasticsearch使用了Apache Lucene,其内部使用的是被称为倒排
4、索引的数据结构。存储模型 倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。倒排索引系统原理文档是Elasticsearch的数据单位,对文档中的词项进行分词,并创建去重词项的有序列表,将词项与其在文档中出现的位置列表关联,便形成了倒排索引。我们来看下如下2个文档是如何被倒排索引的: 文档1(Doc 1): 零售应用开发一室主题分享文档2(Doc 2): 数据仓库团队主题分享文档1(Doc 1): 零售/应用/开发/一室/
5、主题/分享文档2(Doc 2): 数据/仓库/团队/主题 分享系统原理倒排索引词项词项文档文档零售doc1应用doc1开发doc1一室doc1主题doc1、doc2分享doc1、doc2数据doc2仓库doc2团队doc2文档1(Doc 1): 零售/应用/开发/一室/主题/分享文档2(Doc 2): 数据/仓库/团队/主题 分享系统原理当我们查询“数据分享”这一个中文分词时,只需要知道他在哪个文档即可。Termsdoc1doc2数据X分享xXSCORE(相关度)12 两个文档都匹配,但是DOC2比其它的有更多的匹配项。相关度评分为2,如果我们加入简单的相似度算法(similarityAndl
6、gorithm),计算匹配单词的数目,这样我们就可以说DOC2这个 文档比其它的匹配度更高,这对于我们的查询结果具有更多相关性。系统原理 当我们发送索引一个新文档的请求到协调节点后,将发生如下一组操作: Elasticsearch集群中的每个节点都包含了改节点上分片的元数据信息。协调节点(默认)使用文档ID参与计算,以便为路由提供合适的分片。Elasticsearch使用MurMurHash3函数对文档ID进行哈希,其结果再对分片数量取模,得到的结果即是索引文档的分片。shard = hash(document_id) % (num_of_primary_shards)新建索引系统原理coor
7、dinatingnodeshardmemorybuildertranslogfilesystemcacheempotytranslogdiskwrite requestroute requestrefresh every 1 secflush every 30 min or when gets too bigcommit when every 5 sec with every write operation and when flushedcommit to dish with translog flushinside a shard添加标题posthttp:/localhost:9200/b
8、log/newarticle/1 author:林云霞, creatDate:20170729, content:elastic search 是一个非常优秀的搜索引擎, place:招银网络科技新建索引 _index: blog, _type: newarticle, _id: 1, _version: 1, result: created, _shards: total: 3, successful: 2, failed: 0 , created: true系统原理删除 磁盘上的每个段都有一个相应的.del文件。当删除请求发送后,文档并没有真的被删除,而是在.del文件中被标记为删除。该文
9、档依然能匹配查询,但是会在结果中被过滤掉。当段合并(我们将在本系列接下来的文章中讲到)时,在.del文件中被标记为删除的文档将不会被写入新段。更新接下来我们看更新是如何工作的。在新的文档被创建时,Elasticsearch会为该文档指定一个版本号。当执行更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。更新和删除添加标题posthttp:/localhost:9200/blog/newarticle/1 author:林云霞, creatDate:20170729, content:简单介绍elastic sea
10、rch的基本原理, place:招银网络科技, updateDate:20170804 更新 _index: blog, _type: newarticle, _id: 1, _version: 2, result: updated, _shards: total: 3, successful: 2, failed: 0 , created: false添加标题deletehttp:/localhost:9200/blog/newarticle/1删除 found: true, _index: blog, _type: newarticle, _id: 1, _version: 3, resu
11、lt: deleted, _shards: total: 3, successful: 2, failed: 0 系统原理 查询阶段查协调节点向索引中的每个分片(原本或副本)广播。每个分片在本地执行搜索并且建立了匹配document的优先队列(priority queue)并将document IDs 返回协调节点 取回阶段协调节点将向包含原始文档的分片发起请求。全部分片填充文档信息并将其返回给协调节点。查询系统原理search requestPriority queuePriority queuePriority queuePriority queuequery phase send req
12、uest to all shards create a priority queue to globally sort results returned by shards fetch phase request documents to returned to the client from individual shardsfetch phase return documents request by the coordinating node after enriching themquery phase each shards performs search locally creat
13、e a priority queue of size from+size and sorts results by relevance send document IDs and scores of matching documents to the coordinating nodecoordinatingnodeshardshardshard添加标题gethttp:/localhost:9200/blog/newarticle/1查询 _index: blog, _type: newarticle, _id: 1, _version: 2, found: true, _source: au
14、thor: 林云霞, creatDate: 20170729, content: 基本原理了已经介绍完了!, place: 招银网络科技, updateDate: 20170804 分布式集群03分布式集群空集群分布式集群http:/localhost:9200/_cluster/health cluster_name: my-application, status: green, timed_out: false, number_of_nodes: 1, number_of_data_nodes: 1, active_primary_shards: 0, active_shards: 0,
15、relocating_shards: 0, initializing_shards: 0, unassigned_shards: 0, delayed_unassigned_shards: 0, number_of_pending_tasks: 0, number_of_in_flight_fetch: 0, task_max_waiting_in_queue_millis: 0, active_shards_percent_as_number: 100集群健康颜色颜色意义意义green所有主要分片和复制分片都可用yellow所有主要分片可用,但不是所有复制分片都可用red不是所有的主要分片都
16、可用分布式集群 http:/localhost:9200/blogsettings:number_of_shards:3,number_of_replicas:1添加索引分布式集群添加索引分布式集群故障转移分布式集群 随着应用需求的增长,我们该如何扩展?如果我们启动第三个节点,我们的集群会自我感知,这时便成为了三节点集群横向扩展分布式集群http:/localhost:9200/blog/_settingsnumber_of_replicas:2更多扩展分布式集群 我们已经说过Elasticsearch可以应对节点失效,所以让我们继续尝试。如果我们杀掉第一个节点的进程(以下简称杀掉节点),看起
17、来像如此:应对故障应用场景04应用场景场景:使用Elasticsearch作为主要的后端应用场景场景二:在现有系统中增加elasticsearch应用场景 例如,假设要部署一个大规模的日志框架存储,搜索,并分析了大量的事件。 场景三:使用elasticsearch和现有的工具应用场景1、Wikipedia(维基百科)使用ES提供全文搜索并高亮关键字2、StackOverflow(IT问答网站)结合全文搜索与地理位置查询3、Github 使用 Elasticsearch 搜索 20TB 的数据,包括 13 亿的文件和 1300 亿行的代码4、Mozilla 5、Sony 公司使用 elasticsearch 作为信息搜索引擎国外应用示例应用场景 百度(在云分析、网盟、预测、文库、钱包、风控等业务上都应用了ES,单集群每天导入30TB+数据,总共每天60TB+)、新浪 、阿里巴巴、腾讯等公司均有对ES的使用国内使用案例谢谢