Евгений Сайты › Peppers Сбер ID
Сайты, SEO и GEO, реклама, чат-боты, ИИ и дизайн | Москва
Рейтинг
9 371
№ 111 в каталоге
Отзывы
Профессионализм
9/10
Коммуникация
9 /10
Город
Москва
Опыт работы
11 лет
На сайте с
2016 года
Юридический статус
Самозанятый
Freelance.Boutique
Премиум-сервис для лучших исполнителей

Создание сайта маркетплейса «мастер на час» в Москве и области: Symfony, поиск мастеров на Elasticsearch, RabbitMQ

Используемые навыки Elasticsearch RabbitMQ Symfony Symfony PHP Микросервисы

Описание

Для маркетплейса бытовых услуг «мастер на час» в Москве и области Евгений Росляков переписал ядро сайта на Symfony, а поиск мастеров, уведомления и платежи вынес в отдельные сервисы. Веб-проекты для бизнеса он ведёт с 2016 года, оформлен как самозанятый, работает по договору и выдаёт юрлицам закрывающие документы. Живёт в Москве, берёт заказы и удалённо.

Через площадку заказывают сантехника, электрика, сборку мебели и мелкий ремонт. Сайт работал на монолите на старом PHP и со временем начал тормозить. Хуже всего был поиск. Клиент выбирал услугу и район, а база думала минутами: навыки, районы и расписание мастеров искались вложенными запросами.

Уведомления тоже терялись. Мастеру уходил заказ, письмо или сообщение не доходило, и заказ доставался конкуренту. Повторных попыток в системе не было: если внешний сервис отвечал ошибкой, никто об этом не знал.

На площадке несколько тысяч мастеров, и у каждого свой график. Кто-то берёт заказы только вечером, кто-то работает в одном районе области. Подобрать такого человека руками не успевали даже менеджеры.

Сайт нельзя было останавливать: заказы идут каждый день, мастера выходят вечерами и в выходные. Создание сайта на новой основе нужно было провести так, чтобы клиенты переезда не заметили.

Решение

Ядро написал заново на Symfony. Выбрал Symfony PHP версии 6.4 с долгой поддержкой: на ней работают каталог услуг, профили мастеров, заказы, отзывы и админка. Переход на седьмую ветку отложен на отдельный шаг.

Микросервисы выделил не везде, а в трёх местах: поиск, уведомления и платежи. У них разная нагрузка. Поиск читают постоянно и быстро, уведомления приходят всплесками после новых заказов, платежам нужны строгий учёт и отдельная защита. Кроме того, сбой в одном из них не должен тянуть сайт вниз. Всё остальное осталось одним приложением на Symfony. Каталог, заказы и профили связаны так тесно, что разнос по сервисам добавил бы сетевых вызовов и ошибок, а выгоды не дал бы.

Поиск мастеров переехал на Elasticsearch. Каждый мастер хранится документом: услуги, рейтинг, районы, точка на карте и свободные окна на ближайшие дни. Клиент называет услугу и адрес, а поиск отбирает мастеров по расстоянию и району, сортирует по рейтингу и оставляет тех, у кого есть свободное время. Индекс обновляется при каждом изменении расписания.

Между сервисами всё идёт через RabbitMQ. Событие «заказ создан» попадает в очередь, и уведомление мастеру берётся оттуда. Если отправка не удалась, сообщение повторяется с растущей паузой, а после нескольких неудач переезжает в отдельную очередь для ручного разбора. Заказ не может пропасть молча.

Переезд шёл поэтапно. Сначала новый поиск включили рядом со старым, потом перевели уведомления, затем платежи и ядро. Боевой сайт не останавливали ни разу.

Результат

Поиск мастера занимает секунды вместо минут. Клиент видит тех, кто работает в его районе и свободен в нужное время, а не весь список подряд. Это заметили и менеджеры: подбирать мастера вручную по просьбе клиента стали редко.

Уведомления не пропадают бесследно. Если мастер не получил заказ, это видно в очереди с ошибками, и менеджер успевает разобраться до звонка недовольного клиента. Вечерние пики и поток после выходных сервис переносит спокойно: сообщения ждут своей очереди и уходят по порядку.

Развивать сайт стало легче. Поисковый сервис правится отдельно от остального кода, а сбой в платежах не останавливает приём заказов.

Цена такого решения тоже есть: инфраструктура усложнилась. Вместо одного сервера теперь несколько частей, и за ними нужен мониторинг, иначе пользы от очередей будет меньше. Поэтому остальное приложение я дробить не стал и не буду, пока для этого нет причины.

Дальше владельцы хотят добавить подбор мастера по отзывам и список избранных мастеров для постоянных клиентов.

Собираете маркетплейс или сервис с поиском и очередями? Расскажите мне на freelance.ru, где сейчас тормозит. Вместе решим, что стоит вынести отдельно, а что лучше оставить как есть.

Оценили проект:

Другие проекты

Все проекты →
Маркетинг и Продвижение Продвижение в интернете для сети автомоек: анализ конкурентов, Customer Journey Map и маркетинг продукта
Продвижение в интернете для сети автомоек: анализ конкурентов, Customer Journey Map и маркетинг продукта
12
Маркетинг и Продвижение Продвижение в интернете для веломагазина: флеш баннеры к сезонной распродаже — HTML5 для РСЯ и партнёров, GIF для рассылки
Продвижение в интернете для веломагазина: флеш баннеры к сезонной распродаже — HTML5 для РСЯ и партнёров, GIF для рассылки
21
ИИ и Нейросети Хранилище данных для сети АЗС в Армении: Data Warehousing в BigQuery, уход с Redshift, загрузки на Informatica и OLAP-отчёты
Хранилище данных для сети АЗС в Армении: Data Warehousing в BigQuery, уход с Redshift, загрузки на Informatica и OLAP-отчёты
16
Маркетинг и Продвижение GEO-продвижение сети стоматологий: карточки филиалов на Яндекс Картах, ORM и видимость в нейросетях
GEO-продвижение сети стоматологий: карточки филиалов на Яндекс Картах, ORM и видимость в нейросетях
15