热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch简史:源自给老婆开发烹饪App

作者|DianaKupfer译者|张健欣策划|万佳原文链接:https:jaxenter.comelasticsearch-founder-interview-112

作者 | Diana Kupfer  译者 | 张健欣  策划 | 万佳

原文链接:https://jaxenter.com/elasticsearch-founder-interview-112677.html

Elasticsearch 是如何诞生的?本文回顾了 Elasticsearch 创始人 Shay Banon 的创业经历和 Elasticsearch 的诞生历程。

当今,Elasticsearch 如此出名,从 GitHub 到 Guardian,许多大型企业都用它来帮助自己理解用户交互数据并提升它们的搜索结果。

1从一个简单的烹饪 App 说起

2004 年,Shay Banon 开发了 Compass,这是一个基于 Lucene 技术的应用。回忆起 Compass 的诞生,他的脸上总会挂满微笑。某种意义上,Shay Banon、Compass 与 Lucene 的关系是一种偶然。

那时,他刚结婚。为支持妻子成为厨师的梦想,他们搬到伦敦。Shay Banon 正值失业状态,急需一份工作,所以他决定试试一些新技术,让自己的技能更符合当前时代的需求。因为只有真正尝试构建一些东西时,新技术才能发挥作用,所以他决定构建一个烹饪 App,让妻子可以用来搜索她在烹饪课程中收集的烹饪信息。

为开发这款 App,他认真比较了很多不同技术的优缺点。在他眼里,这款 App 的核心是一个搜索框。只要你在这个搜索框中输入一个概念、一个想法或者一种配料,它就可以开始搜索可能相关的烹饪知识。很快,他接触到 Lucene,它当时是 Java 上可用的搜索库。他说:“我沉浸其中,尝试在典型的 Java 应用中简化 Lucene 的使用。这个过程中诞生了 Compass。”

Shay Banon 被这个项目深深吸引,把更多的时间和精力转向这个项目,而非烹饪 App 本身。几个月后,他决定把它开源,而 Compass 很快流行起来。Compass 允许用户轻松地将他们的领域模型(在典型程序中映射应用程序或业务概念的代码)映射到 Lucene,方便地索引,然后轻松地搜索它们。这种自由让越来越多的人开始使用 Compass 和 Lucene,但是他从未预料到这种情况。

假设在你的金融应用程序中有一个交易模型,你可以轻松地使用 Compass 将该交易索引到 Lucene 中,然后搜索它,并自由地搜索交易的任何方面信息,并允许用户将这种自由传递给他们的用户,这被证明是一个功能非常强大的概念。

“实际上,这让我可以与实际用户交谈和工作,他们和我一样,发现了搜索在向用户提供业务价值方面所具有的惊人能力。”Shay Banon 说。

10 年后的今天,它就是 Elasticsearch 的基础!

2Apache Lucene

Shay Banon 认为,虽然自己可能比大多数 Apache Lucene 开发者更早参与这个项目,但是许多开发者的全心投入,将 Lucene 带入一个全新的发展水平。

在 Compass 和 Elasticsearch 早期,他花费无数个小时,与 Mike McCandless 和 Simon Willnauer 这样的人讨论 Lucene 的方方面面。

他说:“当开始 Elasticsearch 时,我想确保我们建立的公司能保持 Apache Lucene 的快速发展速度和卓越水平。让我兴奋的是,从一开始就有 Simon、Uri Boness 和 Martijn Van Groningen 这样的 Lucene 专家参与其中。即便如此,如果你当时问我,我也绝不会想到今天我们能吸引如此强大的专注于 Apache Lucene 的团队。“

3“推动”和“扩展”Lucene

在 Shay Banon 看来,Elasticsearch“扩展了”Apache Lucene 的领域。例如,推动 Apache Lucene 变得更具弹性的需要,意外地(从 Lucene 的角度)强调索引速度,或者在工具方面对 Lucene 的可见性。

“每一天,我都会听到一个 Lucene 开发人员说‘我从未想过 Lucene 能用来解决这种问题’,或以这种方式使用。对我来说,这太棒了!因为我们正在创造一个环境,在这个环境中,使用 Elasticsearch 平台的个人之间存在着一种创造性的联系,正是这种联系促使 Apache Lucene 向前发展。同时,作为一家公司,我们有能力为我合作过的最有才华的开发群体之一提供机会去实现它。”

当 Elasticsearch 不再是个人项目时,他们围绕它成立了一家公司,一个很大的好处是可以在 Elasticsearch 本身的发展上投入更多资金。除了 Shay Banon,公司的另一位创始人 Simon Willnauer 带领 Elasticsearch 和团队,开始将它推向一个全新的水平。他的首要任务之一是为 Elasticsearch 创建一个全新的测试基础设施(灵感来自 Apache Lucene 测试基础设施,包括随机测试,顺便说一句,这是一个很棒的话题)。

4创建一个新的测试基础设施

随着测试工作的不断深入,在 Shay Banon 看来,构建分布式系统最重要的一个方面就是测试和验证其行为的能力。从概念上讲,很多人都能想到分布式系统,它意味着不同的进程,在不同的机器上,通过网络运行。当涉及到测试时,紧随其后的一个想法是,它应该被如何测试。这将创造一个非常复杂的测试工具,需要很长时间才能运行,而且故障发生时,它很难进行调试。


“异常快速的”数据搜索 – 通过 elasticsearch.com

在 Elasticsearch,这家公司投入了大量时间来构建一个测试工具,它能作为“常规”集成测试的一部分运行其分布式测试。这意味着,在单个 JVM 中,运行 Elasticsearch 的每一次测试时,用户就可以启动并操作整个集群。这包括一些简单的事情,例如在索引数据时回滚重启,也包括一些更有趣的测试,例如网络断联,一直到模拟长 GC 暂停,所有这些都是验证一个分布式系统行为的关键。

能依赖这样的基础设施,并且可以非常简单快速地运行这些测试,能构建一个更具弹性的系统,并且更容易暴露“阴暗角落”和边缘情况。

显然,构建一个分布式系统还需要很多,但正如 Simon 所说,“如果它没有测试,你怎么知道它能工作呢?”这是构建一个分布式系统的最基本的部分之一。

当今的企业正被数据淹没,他们希望能理解这些数据并从中有所洞见。他们希望以最简单的方式实现这一点,获得最大的价值。

“事实证明,搜索是实现这种目标一种很好的方式。当我说搜索时,指的是更广泛意义上的搜索,就像我个人最初开发烹饪 App 一样,个人希望从数据中获得见解和知识。当我们说 Elasticsearch 中的搜索时,指的是自由文本搜索、结构化搜索和分析的结合,以最纯粹的方式,无论数据量多大,都是实时的。”Shay Banon 说。

5受《少数派报告》启发的技术

还记得《少数派报告》(Minority Report)中 Tom Cruise 的角色与他所探索的数据交互场景吗?不断地学习和塑造他所追求的东西,在没有任何限制的情况下实时放大缩小?这就是这家公司试图让用户用 Elasticsearch 做的事(虽然没有花哨的挥手互动,至少现在还没有)。

这是一个宏伟目标。Shay Banon 坚信有能力实现它。“我们的用户不断鼓励我们,并验证了我们走在正确的路上。用户每天都告诉我们,他们用我们产品实现的目标是他们从未想过的。他们一直寻找创新的方法来使用 Elasticsearch,而且,我认为这是一个伟大产品的标志,它允许用户达到他们最初从未想象过的创造性水平”。

6Elasticsearch 成功的核心之一

Shay Banon 在 Elasticsearch 中遇到的第一个障碍是,之前的开源项目 Compass 试图让用户在更窄的范围内了解他所看到的。那时,当对用户说“搜索”时,他们不会立即掌握可以实现的所有可能性。

他回忆说:“10 年前,我对它一无所知。但是,通过构建一种允许用户将任何领域模型映射到“搜索”(即 Lucene),使得跨越这种心理障碍变得更加简单,突然之间,使用案例爆炸性增长,Compass 和 Lucene 被用来赋能‘非典型搜索用例’。”

使用 Elasticsearch,通过标准化 JSON 和 RESTful 接口,用户借此可以做很多事。很快,在一种更广泛的基础上:从各种各样的开发人员,从不同的编程语言,到不同的框架,到许许多多不同的用例。

最后,这一切归结为搜索的力量,从技术上来说,是 Elasticsearch 和 Apache Lucene 的力量。就实现而言,数据是典型的 Web 页面或者 word 文档,还是 Foursquare 上的地理位置、银行里的一笔交易、web 服务器上的一条日志,或者一种度量标准,其实并不重要。所有这些数据实际上都是结构化和非结构化数据的组合,无论数据的形式或大小如何,人们都希望对其进行探寻、搜索并拥有《少数派报告》那样的体验。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢


推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
author-avatar
bakurei_492
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有