Первый большой проект — телеграм-бот
Одна из первых больших и ответственных задач — внедрение телеграм-бота во внутренние процессы. Раньше в студии использовали Джаббер, но с появлением хорошего Telegram Bot API ребята запланировали переезд, оставалось найти свободные руки. Мне было очень интересно ещё глубже погрузиться в инфраструктуру компании, поэтому я нырнул в работу и изучение возможностей.
Первая версия была готова через неделю, я зарелизил её в субботу. Эта версия была синхронной — скрипты отправки ждали ответа от эндпойнта — поэтому в понедельник у ребят дико тормозили все внутренние сервисы, работать было невозможно. Бота пришлось отключить. Кроме того, я не учёл, что все работают в разное время, и лучше бы не получать важные уведомления в нерабочее время — на это мне недвусмысленно намекнули коллеги.
В следующих итерациях за пару месяцев решил многие проблемы — асинхронность, отложенную отправку уведомлений, широковещательные сообщения и проч. С тех пор бот стал незаменимым инструментом в работе студии, во времена блокировок мы даже поднимали прокси-серверы, чтобы работа не останавливалсь.
Разработка внутреннего бота вдохновила меня на написание фреймворка, который я по сей день использую при создании ботов — как коммерческих, так и личных.
Сервисы для российского сегмента финского застройщика YIT
За 2,5 месяца мы с командой создали мультисайтовую систему (семь сайтов), которая построена на одном движке с единой базой квартир и объектов недвижимости. Я отвечал за написание кода движка и модуля мультидоменности.
Полностью отвечал за этот реализацию двустороннего обмена между сайтом и системой управления квартирографией — спроектировал, задокументировал и реализовал REST API, на который клиент отправлял асинхронные пуши с обновлением данных.
Построили продакшен-окружение из балансировщика, веб-серверов, CDN и сервера-бэкапов. Курировал проект, считал стоимость и занимался непосредственно администрированием.
Реализовали модуль бронирования квартир в реальном времени. Писал код серверной части модуля, проводил ревью фронтенда.
Также выполнял стандартные обязанности лида — проводил код-ревью, ставил задачи разработчикам.
На старте работ я спроектировал модульную архитектуру для ускорения разработки (работы велись параллельно) и не прогадал — весной Эталон выкупил российский сегмент YIT и мы за четыре недели полностью переписали код модулей, которые «смотрят наружу», заменив обращения к сервисам YIT на службы Эталона.
Проект закрыт.
Развитие сайта ЦДС
Проект появился в студии ещё до начала моей работы, поэтому я присоединился к нему на стадии развития и сопровождения. Наиболее интересные задачи, которые я решил:
- Полный рефакторинг кода — PHP 5.6 → PHP 7.1 → PHP 7.4.
- Создание личного кабинета дольщика с двухфакторной аутентификацией, статистикой и журналом событий. Все данные хранятся в защищённом контуре клиента, с закрытым доступом через АПИ.
- Кэширование в redis данных о квартирах. Нетривиальность задачи в том, что закэшированы должны быть все поля, кроме статусов и цен — они должны обновляться в режиме реального времени.
- Совместно с техническим директором клиента спроектировали систему четырёх окружений — local, dev, preprod, prod. Реализовал многоуровневый деплой с зеркалированием репозиториев кода — мы разрабатываем во внутреннем гитлабе, код тестируется и раскатывается на наш dev-сервер, затем пушится на препрод, тестируется и собирается там, затем отправляется на продакшен.
- Модуль имейл-рассылки через почтовый сервер клиента. Написал собственный конструктор писем на основе маркдаун-разметки, а также реализовал очередь отправки (около 20 тысяч писем в сутки) с учётом таймаутов и правил рассылок. Вывожу статистику в реальном времени.
В настоящий момент занимаюсь написанием микросервисов конвертации видео на Python.
Развитие сайта Design Prosmotr
В этом проекте я отвечаю за сервис биллинга и оплаты билетов, а также за их квотирование. Так, стоимость билетов может меняться в реальном времени в зависимости от количества проданных мест и текущей даты. Также между сезонами регулярно оптимизирую код из-за высокой нагрузки на старте продаж.
Модуль генерации билетов тоже написан мной с нуля — я создаю билет в PDF и наношу на него штрихкод, который вследствие считывается на входе чекером, подключённым к сервису проверки статусов.
Для этого проекта написал бота-регистратора, основанного на моём фреймворке.
Административные задачи
Отвечаю за техническую часть всех проектов студии — от сайтов банков до небольших сайтов жилых комплексов. Плотно работаю с командой:
- Провожу код-ревью, ввёл практику перекрёстного ревью
- Ежемесячно провожу перфоманс-ревью, составляю карты роста разработчиков
- Участвую в собеседованиях, составляю и проверяю тестовые задания
- Строю стратегические планы развития отдела, провожу презентацию бизнесу.
Пишу библиотеки под нужды проектов. Ниже — пара репозиториев из открытых:
- Обёртка над Profitbase API для обмена данными о недвижимости: profitbase-api и profitbase-export
- Серверный конвертер валют: kulizh/currency