Rust в производстве: MeiliSearch
Перевод | Автор оригинала: Gints Dreimanis
В этом интервью я разговариваю с Томасом Пайетом, соучредителем и главным операционным директором MeiliSearch. MeiliSearch - это поисковая система с открытым исходным кодом, входящая в топ-20 самых популярных проектов Rust на GitHub на момент написания. Мы говорим о MeiliSearch и о том, как Rust и его экосистема помогли им в его создании.
Читайте дальше, чтобы узнать об их опыте работы с Rust и найти советы по запуску собственного проекта с открытым исходным кодом.
Не могли бы вы рассказать нам немного о своей компании и своей роли в ней?
MeiliSearch - это поисковый API с открытым исходным кодом. С тех пор, как существуют компьютеры, поиск всегда был проблемой. Сегодня большинство людей привыкли к очень хорошим результатам поиска при использовании Google или Amazon, но может быть сложно предложить такой пользовательский интерфейс, когда у вас нет средств, которые предоставляют эти крупные технологические компании. В MeiliSearch мы разрабатываем технологию с открытым исходным кодом, которая, как мы думаем, может помочь многим разработчикам предложить фантастические возможности поиска прямо из коробки.
Я один из соучредителей (нас трое) и главный операционный директор Meili, компании, стоящей за MeiliSearch. Моя роль состоит в том, чтобы синхронизировать команды, чтобы каждый мог делать все возможное в нашей компании, преследуя одну и ту же цель. Большинство из нас в душе разработчики, и поскольку я был, возможно, одним из менее технических людей, я был одним из первых, кто изменил свою роль, чтобы поддержать рост нашей организации.
Какие части кодовой базы MeiliSearch написаны на Rust?
MeiliSearch - это проект, состоящий из движка и нескольких SDK и библиотек для разных языков и фреймворков, чтобы упростить использование основного движка. Движок на 100% написан на Rust, и мы поддерживаем более 20 интеграций на 8 разных языках вместе с сообществом.
Мы стараемся не быть сторонниками каких-либо конкретных технологий; внутри мы просто выберем лучший инструмент для работы. :)
Как вы решили использовать Rust для проекта? Повлияли ли на выбор какие-либо преимущества Rust, такие как скорость или безопасность типов / памяти?
Скорость и безопасность - это, конечно, главные аргументы в пользу Rust.
Две важные вещи для поисковых систем - это производительность и релевантность. Релевантность может быть сделана на любом языке, если у вас хороший алгоритм и логика. Что касается производительности, сегодня вы выбираете C++, Rust или, может быть, Go.
В наших предыдущих работах мы создали поисковую систему на Go и быстро узнали о недостатках языка со сборкой мусора при разработке программы, ориентированной на производительность. При выполнении тестов мы обнаружили некоторые замедления и быстро поняли, что именно регулярная сборка мусора замедляет работу всей системы. ^^
Когда дело доходит до C++, нам кажется более трудным поддерживать кодовую базу C++ в долгосрочной перспективе. Кроме того, керо, наш технический директор, является разработчиком Rust с момента первого стабильного выпуска.
В конце концов, мы так и не приняли «решение» использовать Rust, так как нам казалось очевидным, что это инструмент, который нам нужен для этой работы!
Где лучше всего использовать Rust и где ему не хватает в вашем стеке?
Экосистема Rust современна, и ее очень легко использовать в качестве повседневного языка с фактическим потоком предложений GitHub. Мы чувствуем себя очень уверенно, работая с Rust, потому что он устраняет большую неопределенность, которая может быть у нас с другими языками. Мы можем сосредоточиться на других проблемах, с которыми мы сталкиваемся, например на дизайне и производительности.
Сильное сообщество исследователей CS реализует низкоуровневые библиотеки для современной оптимизации, от которой мы регулярно получаем пользу. С другой стороны, мы сделали несколько итераций, чтобы найти подходящую структуру HTTP для сервера, прежде чем закончить использование actix-web, что является наиболее подходящим для нашего варианта использования.
Какие-нибудь конкретные библиотеки Rust, которые вы сочли очень полезными во время разработки и хотели бы упомянуть?
Их много, но вот наша тройка лучших:
- fst от BurntSushi. Это позволяет нам хранить и искать в словаре слов, и это очень эффективно.
- Автомат Левенштейна от Фульмикотона. Мы используем его для очень быстрого получения слов из словаря с определенными правилами Левенштейна.
- roaring-rs, который мы используем для оптимизированных операций над множеством.
Что было самым большим вызовом при разработке MeiliSearch с Rust?
В дорожной карте MeiliSearch есть некоторые функции распределенных систем, которые мы хотели бы предложить, такие как высокая доступность и сегментирование.
Мы очень завидуем библиотеке Go Raft от Hashicorp. Хотелось бы, чтобы у нас было что-то подобное в Rust, но до сих пор мы не нашли такой крэйт, который помог бы нам использовать алгоритм консенсуса для легкого создания кластеров MeiliSearch.
Мы думали об этом почти с тех пор, как начали проект два с половиной года назад, и мы пытаемся интегрировать различные библиотеки реализации Raft, но пока не нашли ни одной, которая соответствовала бы нашим ожиданиям. Это одна из самых больших проблем, стоящих перед нами в нашей дорожной карте.
Я видел репозиторий под названием milli в профиле MeiliSearch на GitHub. Это будущее MeiliSearch? Хотели бы вы немного об этом поговорить?
Конечно. ^^
По мере роста команды и проекта мы постоянно учимся. В прошлом году мы поняли, что для облегчения подключения внешних участников и разработки новых функций нам необходимо перестроить всю кодовую базу, чтобы сделать ее более читаемой и поддерживаемой.
Керо, наш технический директор, начал работу над новой версией движка почти год назад (август 2020 г.), и мы планируем выпустить ее в ближайшие месяцы.
Мы столкнулись с некоторыми внутренними трудностями при расстановке приоритетов в работе над новой версией движка, поддерживая последнюю стабильную версию MeiliSearch в актуальном состоянии. Тем не менее, нам не терпится выпустить его официально. Улучшение производительности невероятное!
В репозитории milli размещается 4-я итерация библиотеки ядра ядра, но код, который использует эту библиотеку, чтобы сделать ее пригодным для использования двоичным файлом, будет выпущен в репозитории MeiliSearch.
Насколько я понимаю, MeiliSearch полностью открыт. Как вы это поддерживаете?
Мы начали проект, работая подрядчиками в Louis Vuitton. Большинство проектов мы разработали, работая с ними. В какой-то момент мы поняли, что нам нужно привлечь средства венчурных капиталистов, чтобы сосредоточиться на проекте с открытым исходным кодом.
Мы думаем, что можем сделать MeiliSearch устойчивым, построив вокруг него бизнес, который будет продавать MeiliSearch как облачное предложение (SaaS) и продавать определенные функции по бизнес-лицензии компаниям с особыми потребностями.
Какие советы вы могли бы предложить тем, кто хочет запустить свой собственный проект на Rust с открытым исходным кодом (может быть как техническим, так и нетехническим)?
Разработка и поддержка проекта с открытым исходным кодом может быстро превратиться в постоянную работу для всей команды. Я бы посоветовал всем, кто хочет начать поддерживать проект с открытым исходным кодом, найти людей, с которыми можно поработать, потому что есть много других вещей, которые нужно сделать: вам нужно будет написать документацию, руководства по участию, ответить на вопросы и запросы на вытягивание!
Приятно работать с незнакомцами из Интернета, которых вы, вероятно, никогда не встретите, но я боюсь, что это может быстро стать невыносимым, если вы будете делать это в одиночку.
Хочу поблагодарить Томаса за уделенное время! Если вам требуется поисковая система для вашего приложения, обязательно попробуйте MeiliSearch.
Если вы хотите прочитать больше статей о Rust, не забудьте подписаться на нас в Twitter, Medium и DEV.