Как построить высоконагруженный сервис в Managed Kubernetes: опыт TrendTech
Рассказываем, как компания TrendTech построила высоконагруженную PropTech-платформу, через которую каждый месяц продаются квартиры на более чем на 50 млрд. рублей.

Задачи:
- Обеспечить отказоустойчивость сервисов, сохранив возможность гибкого масштабирования
- Автоматизировать обновление контента
- Обеспечить отдачу и надежное хранение тяжелых файлов
- Развернуть удобное окружение для команды разработки
Продукты и услуги Selectel:
О компании
TrendTech — продуктовая компания, которая разрабатывает сервисы для рынка недвижимости в России и за рубежом. Они объединяют в едином онлайн-пространстве всех игроков рынка — покупателей, застройщиков, агентства недвижимости, банки и страховые компании.
В портфолио компании есть два основных продукта: B2B-платформа для агентов и агентств недвижимости TrendAgent и B2С-сервис по поиску и покупке недвижимости ТrendRealty. Оба сервиса предлагают доступ к информации о 2 000 застройщиках, 12 000 жилых комплексах и почти 3 000 000 квартир. Каждый месяц с помощью онлайн-платформ реализуется жилой недвижимости более чем на 50 млрд. рублей (согласно внутреннему исследованию о сумме заключенных договоров застройщиками благодаря платформам TrendAgent и TrendRealty).
Вызовы и решения
В середине 2010-х годов, на заре развития прототипа платформы, данные о квартирах хранились на одном сервере на зарубежном хостинге и передавались пользователям в виде структурированных папок с файлами.
Некоторое время спустя команда TrendTech создала собственную систему управления контентом, для которой потребовалось обеспечить отказоустойчивость баз данных. В 2017 году она арендовала в Selectel кластер выделенных серверов, на котором развернула СУБД, а также серверы приложений, которые развертывались в виде Docker-образов. Позже Docker заменили на Kubernetes, а файлы стали хранить в Ceph-кластере, который также развернули на выделенных серверах.
По мере роста количества данных и пользователей надежность прежней инфраструктуры стала снижаться, а самостоятельное управление ею требовало все бóльших ресурсов. Поэтому команда TrendTech решила перейти на управляемые решения: вместо сервера с Ceph стали использовать файловое хранилище, а вместо self-hosted Kubernetes — managed-решение.
Сегодня сервисы TrendTech имеют следующие технологические особенности:
- большое количество изображений, весом более 5 ТБ. Дополнительно такой же объем составляют документы;
- сложная система актуализации данных, включающая подсистему управления контентом, парсеры, подсистему валидации и актуализации данных;
- множество внешних интеграций с застройщиками;
- большое количество микросервисов — приложений API.
Обеспечить отказоустойчивость сервисов
Ключевая задача IT-команды TrendTech — обеспечение отказоустойчивости и доступности платформ, ведь любой простой может привести к финансовым и репутационным потерям. При этом важно сохранить возможность моментального масштабирования и гибкость в управлении вычислительными ресурсами.
Построили гибридную IT-инфраструктуру
Продакшн сервисов TrendAgent и TrendRealty, а именно сайты и мобильные приложения, интеграции с застройщиками и дополнительные микросервисы, развернули в управляемых кластерах Kubernetes. Элементы, для которых критична постоянная доступность, развернули в кластерах с тремя мастер-нодами.
Они размещены в разных сегментах пула — это позволяет сделать инфраструктуру геораспределенной и отказоустойчивой. Также надежность кластеров гарантирует автовосстановление нод: если одна из них не отвечает на проверки, то вместо нее автоматически создается новая. Для распределения входящего трафика между подами используется балансировщик нагрузки, интегрированный в Managed Kubernetes.
В качестве основной СУБД используется MongoDB, которую специалисты TrendTech развернули на кластере из трех выделенных серверов, расположенных в разных дата-центрах Selectel — Москве, Санкт-Петербурге и Ленинградской области. Одна нода — Master, две другие — ее реплики. Первично информация записывается на мастер-ноду, а чтение может происходить как с нее, так и с реплик. Таким образом обеспечивается отказоустойчивость записи и чтения данных.
Также на отдельных серверах развернуты PostgreSQL, ClickHouse и Rabbit MQ, которые являются частью платформы аналитики и обработки данных. В качестве инструмента кэширования используется Managed Redis.
Сетевая связность всех элементов инфраструктуры обеспечивается через изолированную приватную сеть. Также вся инфраструктура по умолчанию защищена от DDoS-атак на уровнях L3 и L4.
Автоматизировать обновление контента
Контент — важная составляющая сервисов. С его помощью пользователи подбирают квартиры по более чем 50 параметрам. Чтобы информация была актуальной, каждый месяц сервисы TrendTech выполняют более миллиона обновлений из более чем 5000 разрозненных источников данных.
Чтобы автоматизировать актуализацию контента, специалисты TrendTech пишут парсеры. Управление ими осуществляется через самописную панель. В ней настраивается расписание запусков и определяются данные для сбора. Там же отображаются результаты работы парсеров, ошибки и логи.
Для быстрой и стабильной работы парсеров необходима производительная инфраструктура.
Развернули парсеры в Managed Kubernetes
Скрипты для парсинга запускаются на базе кластеров Managed Kubernetes. Так как парсеры работают непостоянно, команда TrendTech настроила автомасштабирование c помощью Cluster Autoscaler. Он помогает оптимально использовать ресурсы кластера — в зависимости от нагрузки количество нод в группе автоматически увеличивается или уменьшается. Таким образом исключили простой ресурсов и переплату за них.
Обеспечить отдачу и надежное хранение тяжелых файлов
TrendTech работает с большим количеством контента — фотографиями, 3D-панорамами и видеообзорами ЖК от застройщиков. Все эти материалы нужно где-то хранить. Как было указано выше, прежде для этого использовали самостоятельно поднятый кластер серверов с Ceph. Однако с ростом количества данных его поддержка и обновление стали требовать все больше ресурсов. Чтобы решить проблему, перешли на управляемое решение.
Подключили файловое хранилище и CDN
Файлы с высокой частотой обращения разместили в файловом хранилище — это масштабируемая файловая система, подключенная напрямую к кластерам Kubernetes и выделенным серверам. Для предотвращения потери данных все файлы хранятся в трех копиях. Также специалисты TrendTech настроили бэкапы по расписанию.
Сервисы TrendTech работают по всей России, поэтому для ускорения отдачи контента подключили CDN. Через него проходит 20 ТБ трафика ежемесячно.
Развернуть удобное окружение для команды разработки
Разработка — важный процесс, который требователен к ресурсам инфраструктуры. В TrendTech сейчас восемь команд разработки, и каждой нужно по несколько окружений под разные задачи. При этом нагрузка на одни окружения может быть стабильной, тогда как на другие она постоянно меняется.
Развернули кластеры Kubernetes для разных окружений
Каждый кластер K8s настроили под определенную специфику. Например, один обеспечивает непосредственно развертывание бэкенда и фронтенда для окружений команды — здесь нагрузка достаточно постоянная. Другой обеспечивает процесс сборки, тестирования и развертывания приложений. В зависимости от объема текущих задач, количество нод в CI/CD-кластере меняется с помощью автоскейлинга.
Результаты
-
>1 млн
высоконагруженных операций по обновлению контента выполняется каждый месяц
-
> 10 ТБ
контента хранится в файловом хранилище
-
3
дата-центра задействованы в обеспечении работоспособности кластера серверов СУБД
-
99,98
процентов — уровень SLA управляемых кластеров Kubernetes, в которых развернут продакшн
«Мы выбрали Selectel, потому что их сервисы полностью покрывают наши потребности — у других российских провайдеров нет такого разнообразия решений. Managed Kubernetes снимает значительную нагрузку с команды. По мере роста бизнеса и появления новых требований к доступности и скорости сервисов в разных регионах мы рассматриваем решения Selectel по глобальной сетевой связанности и тестируем их мобильную ферму как часть развития инфраструктуры».