Как биоинформатики Genotek разработали сервис генеалогических деревьев на Yandex Cloud Functions

О компании
Компания Genotek

От анализа генома к генеалогическим деревьям
Геном человека состоит из трех миллиардов нуклеотидов. Его анализ позволяет, например, выявлять предрасположенность к различным заболеваниям, как наследственным, так и многофакторным, на риск возникновения которых влияет и образ жизни. Также каждый человек может расшифровать свой геном и сравнить его с геномами людей, у которых все предки принадлежат к одному этносу, чтобы узнать о своем происхождении.
И, конечно, анализ генома позволяет находить родственников. Например, если есть два человека, у которых геномы схожи на 50%, то можно с высокой уверенностью говорить, что это родитель и ребенок либо родные братья или сестры. Если совпадений меньше, это более дальние родственники. Так, сравнивая ДНК, можно найти своих четвероюродных братьев или сестёр.
В базах данных Genotek хранится уже очень много генетических данных, с помощью которых вот уже пять лет люди ищут своих родственников. Для удобства своих клиентов компания разработала сервис, который позволяет клиенту бесплатно создать свое генеалогическое древо и даже объединить его с деревьями-родственниками.
От соблюдения законодательства к serverless
С момента основания в 2010 году Genotek использовал собственные серверы для хранения и обработки персональных и других чувствительных данных, облачные ресурсы Google, включая стандартные и прерываемые виртуальные машины, а также высокоуровневые сервисы AppEngine.
Однако, генетическая информация российских граждан рассматривается как персональные данные. Соответственно, она должна храниться на территории РФ. Кроме того, Genotek собирает и хранит другие категории чувствительной информации: контакты клиентов, их медицинские данные, информацию о происхождении и самочувствии.
Поэтому после появления 242-ФЗ, который обязывает операторов персональных данных обрабатывать и хранить персональные данные россиян с использованием баз данных, размещенных на территории РФ, для соблюдения законодательства, а также чтобы увеличить скорость обработки данных, все данные клиентов были перенесены на Yandex Cloud.
Однако в дальнейшем биоинформатики Genotek начали активно применять в своей работе управляемые базы данных, поскольку это позволяло значительно экономить ресурсы специалистов на обслуживании приложений и сервисов. А когда облачная платформа презентовала сервис Yandex Cloud Functions и возможности бессерверных технологий, то его решили применить для новых проектов.
Как разрабатывались генеалогические деревья
В этой статье:
В Genotek работают фронтенд- и бэкенд-разработчики, веб-программисты и DevOps-инженеры, а также биоинформатики, которые занимаются анализом ДНК. Создание генеалогических деревьев тесно связано с поиском родственников по генетическим данным, поэтому за разработку сервиса взялась именно команда биоинформатиков. И несмотря на то, что у них не было большого опыта в разработке приложений, им удалось относительно легко и быстро создать новый сервис, опираясь на serverless-технологии и управляемые базы данных на Yandex Cloud.
Технологии serverless реализуют подход «функция как услуга», при котором для выполнения каждого запроса (вызова функции) автоматически создается отдельный контейнер или виртуальная машина с нужными характеристиками. После выполнения созданный объект уничтожается. Разработчик конечного решения получает автоматическое масштабирование и отказоустойчивость, а разрабатываемые им приложения превращаются в совокупность отдельных функций, которые запускаются по необходимости. При увеличении количества пользователей сервиса не нужно поднимать новые виртуальные машины или настраивать балансировку — вместо этого автоматически создаются дополнительные экземпляры функции, которые выполняются параллельно.
Фронтенд сервиса работает с Yandex Cloud Functions как с API — по запросу функция забирает нужные данные из базы и строит деревья для каждого пользователя под каждый его запрос. Чтобы не тратить время на разработку отображения графов в интерфейсе нового сервиса, была использована готовая библиотека yfiles, а для хранения информации использовали управляемые базы данных:
- Yandex Managed Service for MongoDB — для хранения данных;
- Yandex Managed Service for ClickHouse — для хранения истории изменений;
- Yandex Managed service for Elasticsearch* — для хранения логов.
Весь стек работает следующим образом:
- Функция по запросу получает нужные данные из базы данных MongoDB, и строит деревья для каждого пользователя под каждый его запрос. Также, функция может редактировать и изменять эти данные.
- С одним деревом могут работать несколько человек, поэтому нужно следить за историей изменений. Для контроля было решено использовать Yandex Managed Service for ClickHouse. Когда функция вносит изменения в дерево, она автоматически добавляет запись в базу данных.
- Для контроля за логами функций используется Yandex Managed service for Elasticsearch*.
- А когда на Yandex Cloud Functions был добавлен язык R, его стали активно использовать для склейки деревьев.
Пример нового сервиса здесь: https://demo.genotek.ru/genealogical-tree
* Компания Elastic ограничила доступ к сервису Elasticsearch для пользователей Yandex Cloud с апреля 2024 года. В связи с этим Yandex Managed service for Elasticsearch стал недоступен на платформе. Мы рекомендуем использовать Yandex Managed service for OpenSearch, который сопоставим по функциональности с Elasticsearch. Чтобы легко перенести данные в сервис Yandex Managed Service for OpenSearch, воспользуйтесь нашей инструкцией.

Что дальше
Сейчас в сервис генеалогических деревьев добавлено около 100 000 человек. Применение бессерверного подхода позволило биоинформатикам Genotek сосредоточиться на написании кода и не задумываться о производительности, обслуживании и масштабировании баз данных.
В будущем с помощью Yandex Cloud Functions пользователям будут рассказывать о новых родственниках на основании данных из ДНК-тестов, появится возможность загружать фотографии и другие файлы, а также импортировать и экспортировать генеалогические деревья в формате GEDCOM.
