MeiliSearch | 开源搜索引擎

  • 原文作者:Gints Dreimanis
  • 翻译/编辑:张汉东

原文:https://serokell.io/blog/rust-in-production-meilisearch


在这次采访中,我与MeiliSearch的联合创始人兼首席运营官 Thomas Payet 进行了交谈。 MeiliSearch 是一个开源搜索引擎,在撰写本文时,它是 GitHub 上最受瞩目的Rust项目之一。我们谈论MeiliSearch,以及 Rust 及其生态系统如何帮助他们创建它。

进一步阅读以了解他们在 Rust 方面的经验,并发现启动自己的开源项目的技巧。

能否向我们介绍一下您的公司以及您的角色?

MeiliSearch 是一个开源搜索 API。由于存在计算机,因此搜索一直是一个问题。如今,大多数人习惯使用Google或Amazon来获得出色的搜索结果,但是如果您没有这些大型高科技公司的能力,要提供这样的用户体验可能会面临挑战。在MeiliSearch,我们正在开发一种开源技术,我们认为该技术可以帮助许多开发人员立即提供出色的搜索体验。

我是 MeiliSearch 背后的公司 Meili 的联合创始人之一(公司三岁)。我的角色是使团队保持同步,以确保每个人都可以在我们公司内尽最大努力,同时遵循相同的目标。我们大多数人都是开发人员,因为我可能是技术水平较低的人之一,所以我是第一个改变角色以支持组织发展的人之一。

MeiliSearch代码库的哪些部分是用Rust编写的?

MeiliSearch 是一个由引擎以及针对不同语言和框架的多个SDK和库组成的项目,以简化核心引擎的使用。该引擎是100%用Rust编码的,并且我们与社区一起以8种不同的语言维护了20多个集成。

我们试图不成为任何特定技术的倡导者;在内部,我们将只为工作选择最佳工具。 :)

您是如何决定在项目中使用Rust的? Rust的任何优势(例如速度或类型/内存安全性)是否影响选择?

当然,速度和安全性是Rust的主要论点。

搜索引擎的两个关键要素是性能和相关性。只要您的算法和逻辑都不错,就可以使用任何语言进行关联。就今天的性能而言,您可以选择C ++,Rust或Go。

在以前的工作中,我们在Go中构建了一个搜索引擎,并且在设计面向性能的程序时,我们很快了解了垃圾收集语言的弊端。在运行基准测试时,我们发现了一些变慢的情况,然后我们很快意识到,正是常规的垃圾收集使整个系统变慢了。 ^^

对于C++,从长远来看,对于我们来说,维护C++代码库似乎更加困难。另外,自从第一个稳定版本发布以来,我们的CTO kero就一直是Rust的开发人员。

最后,我们从未做出使用Rust的“决定”,因为在我们看来这很明显,这就是我们完成这项工作所需要的工具!

Rust在哪里最适合使用,在堆栈中何处不足?

Rust生态系统是现代的,在实际的GitHub贡献流程中,它很容易用作日常语言。我们对使用Rust进行构建感到非常有信心,因为它消除了其他语言可能带来的许多不确定性。我们可以专注于我们面临的其他挑战,例如设计和性能。

强大的CS研究人员社区实现了底层库,以实现我们经常会从中受益的最新技术。另一方面,我们进行了多次迭代以找到适合的HTTP框架,最终选择了actix-web,这最适合我们的用例。

您发现有什么特别的Rust库在开发过程中非常有用并且想提及吗?

有很多,但这里只推荐三个:

  • 来自BurntSushi的fst。它使我们可以在单词词典中进行存储和搜索,并且性能非常好。
  • Levenshtein-automaton-来自fulmicoton。我们使用它从具有特定Levenshtein规则的字典中快速获取单词。
  • roaring-rs,我们用于优化设置操作。

用Rust开发MeiliSearch时最大的挑战是什么?

在MeiliSearch路线图中,我们希望提供一些分布式系统功能,例如高可用性和分片。

我们非常嫉妒Hashicorp的Go Raft库。我希望在Rust中也有类似的东西,但到目前为止,我们还没有找到这样的Crate可以帮助我们使用共识算法轻松构建MeiliSearch集群。

自从两年半前我们开始该项目以来,我们就已经想到了这一点,并且我们正在尝试集成不同的Raft实现库,但是我们发现还没有一个能够满足我们的期望。这是我们在路线图中面临的最大挑战之一。

我在MeiliSearch GitHub个人资料中看到了一个名为milli的项目。这是MeiliSearch的未来吗?您想谈谈吗?

当然。 ^^

随着我们不断壮大的团队和项目,我们正在不断学习。去年,我们意识到,为了简化外部贡献者的入门工作和开发新功能,我们需要重新架构整个代码库,以使其更具可读性和可维护性。

我们的首席技术官kero在大约一年前(2020年8月)开始研究这种新的引擎迭代,我们计划在未来几个月内发布它。

我们在内部面临一些困难,难以在新的引擎迭代上确定工作的优先级,同时又要保持MeiliSearch的最新稳定版本。不过,我们迫不及待要正式发布它。性能提升令人难以置信!

Milli存储库托管核心引擎库的第4次迭代,但是使用该库使之成为可用二进制文件的代码将在MeiliSearch存储库中发布。

据我了解,MeiliSearch是完全开源的。您如何支持它?

我们在担任路易威登的承包商的同时启动了该项目。在与他们合作的同时,我们开发了大多数项目。在某个时候,我们意识到我们必须从风投那里筹集资金,以专注于开源项目。

我们认为,可以通过围绕MeiliSearch开展业务来使MeiliSearch可持续发展,该业务将以云产品(SaaS)的形式出售MeiliSearch并根据业务许可向具有特定需求的公司出售特定功能。

您对想要启动自己的开源Rust项目(可以是技术性的也可以是非技术性的)的人有什么建议?

开发和维护开源项目可以很快成为整个团队的全职工作。我建议任何想要开始维护开源项目以寻找合作伙伴的人,因为还有很多其他事情要做:您将不得不编写文档,文稿指南,回答问题并提出要求!

与您可能永远都不会见面的陌生人一起工作真是太好了,但我担心如果您一个人做,它很快就会变得不知所措。