ES概述Elasticsearch开源的Elasticsearch是怎么产生的?(组图)
优采云 发布时间: 2021-06-29 03:44ES概述Elasticsearch开源的Elasticsearch是怎么产生的?(组图)
ES 概览
弹性搜索
开源
弹性搜索
目前是全文搜索引擎的首选。
它可以快速存储、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用了它。
Elasticsearch 底层是一个开源库
Lucene
。但是,您不能直接使用 Lucene,您必须编写自己的代码来调用它的接口。 Elastic是Lucene的一个包,提供了REST API的操作接口,开箱即用。
Elasticsearch 是用 Java 实现的。
搜索引擎在索引数据时需要进行分词。分词是指将一个句子拆解成多个词或词。这些词或词是句子的关键词。
0.ES 是怎么来的?
(
1)question
比如:当数据量达到10亿、100亿时,我们在做系统架构的时候,通常会从以下几个角度考虑问题:
1) 我应该使用什么数据库? (mysql、sybase、oracle、大萌、魔力、mongodb、hbase...)
2) 如何解决单点故障; (lvs, F5、A10、Zookeep, MQ)
3) 如何保证数据安全; (热备、冷备、多活动异地)
4) 如何解决检索问题; (数据库代理中间件:mysql-proxy、Cobar、MaxScale等;)
5) 如何解决统计分析问题; (离线,近乎实时)
(2)传统解决方案
对于关系数据,我们通常使用以下或类似的架构来解决查询瓶颈和写入瓶颈:
解决方案:
1)通过主从备份解决数据安全问题;
2)通过数据库代理中间件的心跳监控解决单点故障问题;
3)通过代理中间件将查询语句分发到各个从节点进行查询,并汇总结果
(3)非关系型数据库解决方案
对于Nosql数据库,以mongodb为例,其他原理类似:
解决方案:
1)通过副本备份保证数据安全;
2)通过节点选举机制解决单点问题;
3)首先从配置数据库中获取分片信息,然后将请求分发给各个节点,最后路由节点合并汇总结果
另一种方法——将数据完全放入内存如何?
我们知道将数据完全放在内存中是不可靠的,实际上也是不现实的。当我们的数据达到PB级别时,按照每个节点96G内存计算,内存完全填满数据。接下来我们需要的机器是:1PB=1024T=1048576G
节点数=1048576/96=10922
其实考虑到数据备份,节点数往往在2.500万个左右。巨大的成本让它变得不现实!
从前面的讨论中我们了解到,将数据存储在内存中或不在内存中并不能完全解决问题。
所有内存速度问题都解决了,但成本问题来了。
为了解决以上问题,从源头上分析,通常可以通过以下方式找到方法:
1、有序存储数据;
2、分离数据和索引;
3、压缩数据;
这导致了 Elasticsearch。
1. ES 基础介绍
1.1 ES 定义
ES=elaticsearch 的缩写,Elasticsearch 是一个开源的、高扩展性的分布式全文搜索引擎,可以近乎实时地存储和检索数据;具有良好的可扩展性,可扩展至数百台服务器,处理PB级数据。
Elasticsearch 同样采用 Java 开发,以 Lucene 为核心,实现所有索引和搜索功能,但其目的是通过简单的 RESTful API 隐藏 Lucene 的复杂性,让全文搜索变得简单。
1.2 Lucene 和 ES 是什么关系?
1)Lucene 只是一个库。要使用它,您必须使用 Java 作为开发语言并将其直接集成到您的应用程序中。更糟糕的是,Lucene 非常复杂,你需要对检索知识有深入的了解才能理解它是如何工作的。
2)Elasticsearch 同样采用Java开发,以Lucene为核心,实现所有索引和搜索功能,但其目的是通过简单的RESTful API隐藏Lucene的复杂性,从而让全文搜索变得简单。
1.3 ES主要解决问题:
1)检索相关数据;
2)返回统计结果;
3)要快。
1.4 ES 工作原理
ElasticSearch 的节点启动时,会使用组播(或单播,如果用户更改配置)来查找集群中的其他节点并与其建立连接。这个过程如下图所示:
1.5
ES 核心概念
1)Cluster:集群。
ES 可以用作独立的单一搜索服务器。但是,为了处理大数据集,实现容错和高可用,ES可以运行在多台相互协作的服务器上。这些服务器的集合称为集群。
2)Node:节点。
形成集群的每个服务器称为一个节点。
3)Shard:分片。
当文档数量较多时,由于内存限制、磁盘处理能力不足、无法足够快地响应客户端请求,一个节点可能不够用。在这种情况下,可以将数据分成更小的片段。每个分片都放置在不同的服务器上。
当你查询的索引分布在多个分片上时,ES会将查询发送到每个相关的分片,并将结果组合在一起,应用不知道分片的存在。即:这个过程对用户是透明的。
4)Replia:复制。
为了提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是分片的精确副本,每个分片可以有零个或多个副本。 ES中可以有很多相同的shard,选择其中一个来改变索引操作。这个特殊的分片称为主分片。
当主分片丢失时,例如分片的数据不可用时,集群会将副本提升到新的主分片。
5)全文搜索。
全文搜索是索引一个文章,可以根据关键字进行搜索,类似于mysql中的like语句。
全文索引就是根据词义对内容进行切分,然后单独建立索引。比如“你的*敏*感*词*来自什么”可以细分为:“你”、“*敏*感*词*”、“什么事”、“让”等token,这样当你搜索“你”或“*敏*感*词*”,就会找到这句话。
1.6 ES数据架构的主要概念(与关系型数据库Mysql对比)
(关系型数据库中1)Database,相当于ES中的索引
(2)一个数据库下有N个表,相当于N个多种类型(Type)下有1个索引,
(3)一个数据库表(Table)下的数据由多行(ROW)和多列(属性)组成,相当于1个类型由多个文档(Document)和多个字段组成。
(4)在关系型数据库中,schema定义了表,每个表的字段,以及表与字段的关系。相应地,在ES:Mapping中定义了索引下的Type字段处理规则索引,即如何建立索引,索引的类型,是否保存原创索引的JSON文档,是否压缩原创JSON文档,是否需要分词处理,如何进行分词处理等.
(5)在数据库中添加插入、删除删除、更改更新、搜索搜索操作相当于在ES中添加PUT/POST、删除Delete、更改_update、检查GET。
1.7 什么是麋鹿?
ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储和全文搜索
logstash:日志处理,“搬运工”
kibana:数据可视化展示。
ELK 架构为分布式数据存储、可视化查询和日志分析创建了强大的管理链。三者相互配合,取长补短,共同完成分布式大数据处理。
2. ES 特性和优势
1)分布式实时文件存储,每个字段都可以存储在索引中,以便检索。
2)用于实时分析的分布式搜索引擎。
分布式:索引被拆分成多个分片,每个分片可以有零个或多个副本。集群中的每个数据节点可以承载一个或多个分片,协调处理各种操作;
负载重新平衡和路由在大多数情况下自动完成。
3)可以扩展到数百台服务器来处理PB级结构化或非结构化数据。它也可以在单台 PC 上运行(已测试)
4)支持插件机制、分词插件、同步插件、Hadoop插件、可视化插件等
3、ES 性能
3.1 性能结果展示
(1)硬件配置:
CPU 16 核 AuthenticAMD
总内存:32GB
总硬盘:500GB 非固态硬盘
(2)基于以上硬件指标的测试性能如下:
1)平均索引吞吐量:12307docs/s(每个文档大小:40B/docs)
2)平均CPU使用率:887.7%(16核,平均每核:55.48%)
3)构建索引大小:3.30111 GB
4)总写入量:20.2123 GB
5)总测试时间:28m 54s。
3.2 性能测试工具(推荐)
使用参考:/laoyang360/...
4、使用ES的原因?
4.1 ES *敏*感*词*优秀用例
1) 2013 年初,GitHub 放弃了 Solr,采用 ElasticSearch 进行 PB 级搜索。 “GitHub 使用 ElasticSearch 搜索 20 TB 的数据,包括 13 亿个文件和 1300 亿行代码。”
2)Wikipedia:开始基于elasticsearch的核心搜索架构。
3)SoundCloud:“SoundCloud 使用 ElasticSearch 为1.80 亿用户提供即时准确的音乐搜索服务。”
4)百度:百度目前广泛使用ElasticSearch进行文本数据分析,采集百度所有服务器上的各类索引数据和自定义数据,通过各种数据的多维分析和展示,辅助定位分析示例 业务层面的异常或异常。目前覆盖百度内部20余条业务线(包括卡西欧、云分析、网络联盟、预测、库、直号、钱包、风控等),单个集群最大100台机器,200个ES节点,每天导入 30TB 以上的数据。
4.2 我们也需要
在实际项目开发中,几乎每个系统都会有搜索功能。当搜索达到一定程度后,维护和扩展的难度会逐渐变大,所以很多公司将搜索模块分离出来,用ElasticSearch等方式实现。
近年来,ElasticSearch 发展迅速,已经超越了其原本作为纯搜索引擎的角色。现在它增加了数据聚合和分析(aggregation)和可视化功能。如果你有数百万的文档,需要通过关键词定位,此时ElasticSearch绝对是最好的选择。当然,如果你的文档是 JSON,你也可以把 ElasticSearch 当作“NoSQL 数据库”,应用 ElasticSearch 的数据聚合分析(aggregation)特性,对数据进行多维分析。
[知乎: Reku 架构师潘飞] ES在某些场景下替代传统DB
个人认为Elasticsearch内部存储还是不错的,效率基本够用。也可以在某些方面替代传统的DB,前提是您的业务对运营事项没有特殊要求;和权限管理不需要说的那么详细,因为ES权限还没有完善。
由于我们对ES的应用场景只是针对一定时间内的数据聚合操作,所以没有大量的单文档请求(比如通过userid查找用户的文档,类似NoSQL的应用场景),所以我们可以决定是否替换NoSQL需要你自己测试。
如果我选择,我会尝试用 ES 来代替传统的 NoSQL,因为它的横向扩展机制太方便了。
5. ES 应用场景
通常我们面临两个问题:
1)新系统开发尝试使用ES作为存储和检索服务器;
2)现有系统升级需要支持全文搜索服务,需要使用ES。
以上两种架构的使用在以下链接中有详细说明。
/laoyang360/...
一线企业ES使用场景:
1)SinaES 如何分析处理32亿条实时日志dockone.io/article/505
2)阿里ES 建立自己的日志采集和分析系统afoo.me/columns/tec...
3)有赞ES业务日志处理/you-zan-ton...
4)ES 实现站点搜索...
6. ES 部署
6.1 ES 部署(无需安装)
1)零配置,开箱即用
2)无需繁琐的安装和配置
3)java 版本要求:最低1.7
我使用1.8
[root@laoyang config_lhy]# echo $JAVA_HOME
/opt/jdk1.8.0_91
4)下载地址:
download.elastic.co/elas ... ...
5)START
cd /usr/local/elasticsearch-2.3.5
./bin/elasticsearch
bin/elasticsearch -d(后台运行)
6.2 ES必备插件
必备Head、kibana、IK(中文分词)、graph等插件的详细安装和使用
/column/deta...
6.3 ES windows下一键安装
自己编写的bat脚本,实现windows的下一步安装。
1)一键安装ES及必要插件(head、kibana、IK、logstash等)
2)安装后将 ES 作为服务运行。
3)比自己摸索安装至少节省了2个小时的时间,效率很高。
脚本说明:
/laoyang360/...
更多免费技术信息请关注:annalin1203