28 ноября приходите на новый хабрасеминар. В этот раз мы поговорим про HR-бренд, создающий образ компании, привлекательный для будущих сотрудников. Подробности и регистрация
Обо мне

Последнее время пишу REST сервисы на Symfony, уже давно не использую FOSUser, SonataAdmin

Помимо PHP еще люблю Python и Go, примеры кода на гитхабе. WebSocket сервера и прочие демоны на PHP не пишу, но если надо, то буду искать способы чистить память. Постоянно в желании изучать что-то новое, но за аккуратность введения нового стека в зоопарк технологий. Интересуюсь микросервисной архитектурой здорового человека.

Отошел от jQuery и прочего ада в сторону Nuxt (vue), если фуллстек, то только с нормальным фронтом и без верстки.

Раньше любил олимпиадное программирование, после потерял свой старый профиль на Hackerrank и желание заниматься этим на "недособеседованиях". Иногда балуюсь на HackerRank на новом аккаунте - https://www.hackerrank.com/anboo

Профессиональные навыки
PHPGitLinuxООПSymfonyPostgreSQLDockerGolangRabbitmq
Участие в профессиональных сообществах
Опыт работы
MEDIA 5
Москва
Senior PHP Developer
Август 2017 — По настоящее время (2 года и 4 месяца)

Работа на один из крупнейших европейских DIY-ритейлеров, проект под небольшой нагрузкой в 100 RPS.

Стек: PHP 7.2, Symfony 4.3, PostgreSQL, RabbitMQ (RPC), Zabbix, Zipkin, Sentry, Docker
Прочее: Микросервисы, Swagger, OAuth2, SSO

Занимался разработкой security микросервиса для решения AAA задач + SSO:
Межсервисная авторизация, аутентификация; Единая точка входа для доступа к к любому сваггеру любого микросервиса; Authorization, Authentication, Accouting пользователей и прочее.

Вводил в инфраструктуру Sentry, Zipkin, RabbitMQ.

Ведущий в России онлайн-сервис покупки авиабилетов и бронирования отелей
Backend разработчик
Июль 2016 — Январь 2019 (2 года и 7 месяцев)

Самый долгий, самый основной и любимый проект, в разработке которого я участвовал, - https://smartseeds.ru

Стек: PHP 7.1, Symfony 4, прямые руки без JMS Serializer, Symfony/Forms на API.

Занимался проектированием и разработкой сервиса по обеспечению документооборота, коммуникация с которым происходила в основном по AMQP и весь транспорт был построен через RabbitMQ.

Сервис занимался интеграцией сайта с 1С, путем прослушивания стейта сущностей сайта и сущностей 1С и их взаимной синхронизации через OData и планы обмена 1С.

Сложности, архитектура сервиса, основные проблемы:

1)Сервис формировался из разных процессов от конвертации и последующей отправки сущности непосредственно в 1С до записи в базу данных и лог все о произошедшем, обновлении номера документа на сайте, полученного в 1С.

2)Распределенные транзакции, а также прозрачное понимание что и когда отвалилось - я использовал сквозной TraceId, для трассировки в Zipkin и отмены транзакции на всех пред. уровнях.

2)Самодиагностика, автоматическое определение проблем сети и путей решения "на месте", лимит попыток повторной обработки, circuit breaker, etc

3)Блокировки в децентрализованной системе - я использовал Redis и самописный Lock компонент, где хранию уникальный идентификатор сущности, которая должна быть заблокирована на время синхронизации, дабы не выгрузилась 2 раза

4)Утечки памяти в PHP консьюмерах: закрытие соединений с бд, чистка unit of work, последующий gc_collect_cycles(), а дальше пришел к https://github.com/LongRunning/LongRunning

5)Необходимость в REST API для того чтобы другие сервисы, включая 1С смогли коммуницировать с сервисом по HTTP. Принимал решения об единой аутентификации через один авторизационный сервис, чтобы полученные от OAuth2 сервера access_token-ы были действительны для всей системы - для моего и других сервисов

6)Легкая и безболезненная миграция с Symfony 3.3 на новый мажорный релиз Symfony 4

Сервис разрабатывался под чутким контролем, проверках composer.lock на уязвимости, lint-ы для yaml файлов, а так же phpcs с правилами кодирования escapestudios/symfony2-coding-standard.

Частная практика, работа без зачисления в штат
Backend разработчик
Январь 2016 — Июнь 2016 (6 месяцев)
Принятие решений о выборе стека технологий. API для SaaS сервиса и мобильного приложения писалось на Python Django. Разработка веб-приложения на фреймворке Symfony 2.8 (Long Term Support). Здесь горжусь очень гибкой архитектурой калькулятора, а точнее - бесконечными возможностями его настройки со стороны админ панели. В нём услуга - есть отдельная сущность, которая может: умножать текущую цену на какое-то число, прибавлять, убавлять, высчитывать процентное соотношение и т.п. - абсолютно любые арифметические операции, а так же есть возможность скрыть услугу, при выборе данной услуги, что создается, а так же изменить максимальное время - все это сущности "Действие", которое может так же иметь связь с сущностью "Условие": 1)Можно указать, что цена умножается 3, в случае если кол-во окон, которое надо помыть, больше 10. 2)Можно указать, что изменения при клике на услугу происходят лишь при условии, что одна или несколько услуг выбраны не были 3)Можно указать, что коэффициент стоимости данной услуги меняется в случае если были выбраны "такие-то" услуги и каждая из них с "таким-то" количеством часов, диванов, окон и т.п. (счетчик) Последняя сущность - "Ограничение": 1)Ограничение по дате\времени заказа: Каждая категория услуг и\или отдельная услуга может ограничивать по времени текущий заказ. Например при заказе мытья окон максимальное время заказа = 13:00, т.к. в темное время суток данную работу выполнять может оказаться нереально. 2)Ограничение по текущему времени (когда заказ оформляется) 3)Ограничение по значению настроек, указанных в админ панели к сайту Здесь я могу похвастаться не тем, что сделано, а тем, что создавать можно неограниченное кол-во всех этих 3 сущностей, что придает сильную гибкость калькулятору и архитектуре приложения в целом.
PHP Middle разработчик
Сентябрь 2015 — Январь 2016 (5 месяцев)
Разработка приложения и его техническое сопровождение в дальнейшем. На данный момент проект имеет порядка 10 крон команд, а так же использует сервер-очередей Gearman, который обрабатывает API запросы, заранее зарегистрированы в системе. К API обращение идёт через 2 разных сервера с использованием proxy в частности. Клиент регистрирует запрос, что хочет запросить данные по тому или иному методу ВК API. Здесь очень хорошо построена архитектура создания условий для конкурсов - действий пользователей, которые они должны выполнить. Код части данного бандла и архитектуры можно просмотреть по ссылке - https://github.com/anboo/Condition-VKonkurse-Part Сейчас есть 3 действия, которые пользователь может выполнить: 1)Добавиться в друзья 2)Репостнуть запись на стене 3)Вступить в группу или паблик Все три класса обработчика каждого из этих действий находятся в корне репозитория. Новое действие можно добавить из админ-панели, указав так же имя сервиса в ContainerAware, который должен будет обрабатывать далее проверки на выполнение данного условия. Для того чтобы подробнее рассмотреть как он работает и многие другие аспекты потребуется авторизация через социальную сеть ВКонтакте, причем сразу. Если не хочется быть в базе данных пользователей, то есть вариант ознакомиться с описанием проекта из моей группы, где приложены скриншоты и описание технических моментов - https://vk.com/rusdteam?w=wall-47196611_4385 Так же можем решить вопрос с просмотром проекта иначе - обращайтесь.
PHP-разработчик
Август 2014 — Январь 2015 (6 месяцев)

На проект было потрачено чуть больше года. Я принимал участие непосредственно в разработке бекенда.

Здесь я занимался разработкой системы асинхронного взаимодействия сервера и клиента под Kohana 3.3, а после Laravel 4, т.е. по-сути занимался созданием ядра приложения, на чем после работали абсолютно все компоненты.

После это стало моим OpenSource проектом, который на данный момент не обновляется, т.к. перестал быть коммерческим после закрытия проекта, но ничто не мешает его использованию, он доступен по ссылке на мой гитхаб - https://github.com/anboo/Laravel-Async. Он так же зарегистрирован как Composer покет: rusdteam/php-js. Сейчас я не могу этим похвастаться с точки зрения архитектурного подхода к разработки в целом, но могу заверить, что система прекрасно справлялась в боевом режиме при тестировании, хотя сама по-сути тестами не покрывалась - и это не хвастовство, знаю, что плохо.

Описание проекта в моей группе ВКонтакте:

https://vk.com/rusdteam?w=wall-47196611_4243 - полное описание проекта

На данный момент сайт не работает - thevirtuallife.net (http://whois.domaintools.com/thevirtuallife.com)

Чему научился, чего до этого не умел:

1)Работать с HandlerSocket и Doctrine (вник в философию).

2)Работать в команде (GIT, SVN)

Причина ухода:

Фриланс, сдельная работа, завершение сотрудничества из-за отсутствия необходимости технической поддержки проекта, после - закрытие самого проекта по причине невозможности конкурировать с аналогами (Money-Birds and more).

Проект был закрыт т.к. не окупил себя и работодатели прекратили разработку и дальнейшее финансирование соответственно.

Показать еще 1 позицию
Высшее образование
Июнь 2015—Январь 2019 (3 года и 7 месяцев)

Bachelor degree in Computer Science (ONLINE)