美文网首页
ElasticSearch(一)基础介绍

ElasticSearch(一)基础介绍

作者: frederickhou | 来源:发表于2020-03-18 10:27 被阅读0次
    1_BmvPfSSm2G8C-khX1rhCGg.png

    ElasticSearch介绍

    Elasticsearch(ES) 是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库 ,可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。

    具有以下特点:

    • 分布式的实时文件存储,每个字段都被索引并可被搜索
    • 分布式的实时分析搜索引擎
    • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

    Elasticsearch(ES)集群架构图如下图所示:


    kisspng-elasticsearch-computer-cluster-node-relativity-tec-relativity-5b3e5bb51abf47.6045839215308133651096.jpg

    Elasticsearch用于构建高可用和可扩展的系统。扩展的方式可以是购买更好的服务器(纵向扩展(vertical scale or scaling up))或者购买更多的服务(横向扩展(horizontal scale or scaling out))。Elasticsearch虽然能从更强大的硬件中获得更好的性能,但是纵向扩展有它的局限性。真正的扩展应该是横向的,它通过增加节点来均摊负载和增加可靠性。对于大多数数据库而言,横向扩展意味着你的程序将做非常大的改动才能利用这些新添加的设备。对比来说,Elasticsearch天生就是分布式的:它知道如何管理节点来提供高扩展和高可用。这意味着你的程序不需要关心这些。

    Elasticsearch 生活运用场景

    当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用ElasticSearch来存储你的整个产品目录和库存信息,为客户提供精准搜索,可以为客户推荐相关商品。

    当你想收集日志或者交易数据的时候,需要分析和挖掘这些数据,寻找趋势,进行统计,总结,或发现异常。在这种情况下,你可以使用Logstash或者其他工具来进行收集数据,当这引起数据存储到ElasticsSearch中。你可以搜索和汇总这些数据,找到任何你感兴趣的信息。

    生活中运用的手机APP用户发布信息的快速搜索以及存储,并且运营商可以根据存储的数据进行大数据分析,和个性推荐机制等场景。

    如下图是推特的使用场景图:


    kisspng-diagram-elasticsearch-architecture-kibana-github-5b804d3aab7978.3267572115351350347024.jpg

    Elasticsearch基本概念

    Near Realtime(NRT) 几乎实时:
    Elasticsearch是一个几乎实时的搜索平台。意思是,从索引一个文档到这个文档可被搜索只需要一点点的延迟,这个时间一般为毫秒级。

    Cluster 集群:
    群集是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入群集,一个节点只能是群集的一部分

    确保在不同的环境中不要使用相同的群集名称,否则可能会导致连接错误的群集节点。例如,你可以使用logging-dev、logging-stage、logging-prod分别为开发、阶段产品、生产集群做记录。

    Node节点:
    节点是单个服务器实例,它是群集的一部分,可以存储数据,并参与群集的索引和搜索功能。就像一个集群,节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。如果不希望默认,可以定义任何节点名。这个名字对管理很重要,目的是要确定你的网络服务器对应于你的ElasticSearch群集节点。

    我们可以通过群集名配置节点以连接特定的群集。默认情况下,每个节点设置加入名为“elasticSearch”的集群。这意味着如果你启动多个节点在网络上,假设他们能发现彼此都会自动形成和加入一个名为“elasticsearch”的集群。

    在单个群集中,您可以拥有尽可能多的节点。此外,如果“elasticsearch”在同一个网络中,没有其他节点正在运行,从单个节点的默认情况下会形成一个新的单节点名为"elasticsearch"的集群。

    Index索引:
    索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,您可以定义尽可能多的索引。

    Type类型:
    在索引中,可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全取决于您。一般来说,类型定义为具有公共字段集的文档。例如,假设你运行一个博客平台,并将所有数据存储在一个索引中。在这个索引中,您可以为用户数据定义一种类型,为博客数据定义另一种类型,以及为注释数据定义另一类型。

    Document文档:
    文档是可以被索引的信息的基本单位。例如,您可以为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。本文件的表示形式为JSON(JavaScript Object Notation)格式,这是一种非常普遍的互联网数据交换格式。

    在索引/类型中,您可以存储尽可能多的文档。请注意,尽管文档物理驻留在索引中,文档实际上必须索引或分配到索引中的类型。

    Shards & Replicas分片与副本:

    索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。

    为了解决这一问题,Elasticsearch提供细分你的指标分成多个块称为分片的能力。当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的“指数”,可以托管在集群中的任何节点。

    Shards分片的重要性主要体现在以下两个特征:

    分片允许您水平拆分或缩放内容的大小
    分片允许你分配和并行操作的碎片(可能在多个节点上)从而提高性能/吞吐量
    这个机制中的碎片是分布式的以及其文件汇总到搜索请求是完全由ElasticSearch管理,对用户来说是透明的。

    在同一个集群网络或云环境上,故障是任何时候都会出现的,拥有一个故障转移机制以防分片和结点因为某些原因离线或消失是非常有用的,并且被强烈推荐。为此,Elasticsearch允许你创建一个或多个拷贝,你的索引分片进入所谓的副本或称作复制品的分片,简称Replicas。

    Replicas的重要性主要体现在以下两个特征:

    副本为分片或节点失败提供了高可用性。为此,需要注意的是,一个副本的分片不会分配在同一个节点作为原始的或主分片,副本是从主分片那里复制过来的。
    副本允许用户扩展你的搜索量或吞吐量,因为搜索可以在所有副本上并行执行。

    此分片副本存储方式和GLUSTER FS 分布式条带卷存储方式类似。

    ElasticSearch和关系型数据库相关概念的对应关系:

    Elasticsearch 关系型数据库
    数据库(Database) 索引(Index),支持全文检索
    表(Table) 类型(Type)
    数据行(Row) 文档(Document),但不需要固定结构,不同文档可以具有不同字段集合
    数据列(Column) 字段(Field)
    模式(Schema) 映像(Mapping)

    相关文章

      网友评论

          本文标题:ElasticSearch(一)基础介绍

          本文链接:https://www.haomeiwen.com/subject/wacqyhtx.html