说在前面的话

近年来,大数据,人工智能,机器学习以及众多其他词汇都是我们似乎不屑一顾的流行语。尽管它们彼此之间有很大的不同,但是它们都有一个共同点。数据!需要管理的大量数据。

不利之处在于,存储的数据越多,存储,查询和理解数据的麻烦就越大。

但是,在Kubernetes上运行Elasticsearch可以为您省去很多麻烦。Elasticsearch负责存储和查询数据,而Kubernetes负责底层基础架构。在本教程结束时,我会介绍在大规模实践下在Kubernetes上拥有一个正在运行的Elasticsearch集群,学习最佳实践以利用平台的功能,并获得有关内存需求和存储的一些技巧。

下面先来从入门开始学起

什么是Elasticsearch?

Elasticsearch是一个将数据存储在索引中的数据存储。它也是一个实时,分布式和可扩展的搜索引擎,可以进行全文本和结构化搜索以及分析。它非常适合存储和搜索大量文本数据(如日志),但也可以用于搜索许多不同类型的文档。

我们知道elasticsearch是一个开源的软件,它背后的公司其实已经在纽约上市了,18年10月份的时候美国的股市非常的萧条,但是有一家公司在上市的首天开盘的涨幅直接达到了94%,那么这就是elasticsearch背后的公司elastic

看一些数据,为什么elastic为什么在资本市场受到的追捧

从开源到上市
从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)
elasticsearch的上市到现在的下载目前已经超过3.5亿次,一共有10万+的社区成员,7200+个订阅用户,并分布在100+个国家,另外elastic公司也提供了云的服务,比如一些云计算的巨头亚马逊,阿里巴巴,腾讯都有在云上的支持,在国内阿里、腾讯也都有和elastic公司也有合作,在云上提供相应的服务

这里都是elastic的用户,也可以去到官网去看elastic.com,另外还有一些比较知名的公司,比如github,去做代码的搜索的,维基百科也是用es做它的搜索引擎的

从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)

当然db-engines在今年2020年9月份做了数据库管理系统的排名,我们可以看到排名在第八位的是es
DB-Engines排名根据其受欢迎程度对数据库管理系统进行排名,排名每月更新一次。
地址https://db-engines.com/en/ranking

我们可以在搜索引擎当中可以看到es是排名第一的位置

从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)
同类的产品我们还看到一个叫Solr,这个是apache开源的一个项目,还有一个商业公司叫Splunk,这家公司是全球第一家上市的大数据公司

而Sorl和elasticsearch提供的功能也比较类似
从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)

这张是google的一张对比es VS sorl的数据比对统计
从2011年开始这条蓝色的曲线是elasticsearch,它一直是呈一个上升的趋势,sorl还是一直处于一个比较平稳的曲线,在近几年也是处于一个比较下降的趋势了,其实很多人也都知道es以及sorl都是起源于一款开源的产品叫Lucene

从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)
Lucene是一款java语言开发的,属于搜索引擎的类库,这个项目在1999年正式创立,而在2005年的时候成为了Apache的一个顶级的开源项目,而lucene是由Doug Cutting 创建的,当然这个人也比较厉害,也是hadoop的创建人

Lucene这个产品是具有高性能、易扩展的优点

而它也在局限性上开源看出,但它只是一个java语言的类库,它的接口学习曲线比较陡峭,原生并不支持水平的扩展,我们知道搜索引擎是面对的一个海量的数据,如果原始的不支持海量数据的扩展,必须要自己做一些开发,这样才能做一个水平扩展的能力

那么elasticsearch是如何诞生的?

elasticsearch的创始人则是下面图片的shay banon,它说:“每一个软件搜索的功能应该都是一个必须拥有的功能,在2014年的时候shay banon基于lucene开发了第一个产品
叫compass,过了6年他决定重写compass,取名elasticsearch,在新的产品当中他还为产品加入了两个新的功能
1、支持分布式,可水平扩展的功能
2、提供了一个restful的API接口,降低去一个全文检索的学习曲线,当然restful的接口也可以让所有编程语言去使用
从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)

Elasticsearch的分布式架构

从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)

当集群规模增大的时候可以从单个节点扩展到数百个节点,另外elasticsearch还支持不同的数据节点类型,根据日志类的可以去做HOT&Swrm

还支持多种方式的接入
elasticsraech有一个restful的接口,它可以使多种语言进行集成,那么现在可以使用java,python,.NET,php,Ruby,Groovy,Perl,去访问elasticsearch,那么在最新的elasticsearch当中还支持JDBC&ODBC的应用的接入方式

Elasticsearch的主要功能

简单说就两块,一个是搜索一个是聚合,另外提到的是当海量数据不断增长的时候它还提供了一个分布式的存储还集群管理的能力,比如一个网站可以进行搜索,还有数据的过滤。

市场对elasticsearch的反馈,在2010年shay banon发布es,2012年成立商业的公司,当成立6个月的时候,用户已经下载量到达了160万,而shay banon也拿到了1000万的美元风险投资,投资比较知名的是Benchmark Capital /Data Collective, 还有大部分程序员都认识的Rod Johnson 而这个也是spark的创始人,那么为什么在用户当中受到很多的反馈呢,用户的体验是离不开的,它这么说的,不要求你是一个数据科学家,也可以把elasticsearch用的很好。

Elasticsearch的版本升级

2010年2月 第一个版本发布0.4
2014年 1月发布1.0版本
2015年10月发布2.0版本
2016年10月发布5.0版本
2017年10月发布6.0版本
2019年4月发布7.0版本

那么来看一下这几个重要的版本都进行了哪些升级
比如5.0的版本es在性能方面做了很多优化,比如在内部引擎移除了避免统一文档并发的竞争锁,就会为整个集群带来10%-15%的提升,另外新增了profile的API
从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)

比如6.0 Lucene从6.x升级到7.x,es提供了新的功能,比如跨集群复制,索引的生命周期管理,以及SQL功能的加入,那么在升级方便版本变的更加简化更加简单,在性能方面也同样做了很多的工作,比如有效存储稀疏字段的方面,可以大大降低存储方面的成本
从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)

比如7.0版本,Lucene升级到了8.0,另外还将安全的功能开发给了用户,部署方面还支持把es部署到k8s上面,性能优化,默认的primary shard数从5改为1,也从而避免了over sharding的情况
从入门到精通Elasticsearch (大规模k8s-elasticsearch最佳实践篇一)