5. Наши проекты:
• Сайт
• Мобильные приложения (Android, iOS)
• Система управления складом
• Менеджмент адресных объектов
• Автоматизация работы собственной службы доставки
• Сервис по взаимодействию с внешними курьерками
• Система рекомендаций
• Автоматизация работы студии
• Процессинг заказов
• Сервис оплаты
• …
24. Итоги
• Единообразное окружение на бою, в тестировании и
разработке
• Упрощение отладки и воспроизведения проблем
• Разработчики не думают о железе
• Системные администраторы не касаются работы ПО
• Простота технического аудита систем
Один из крупнейших e-commerce в России
Предоставляем как услуги business to client
Продаем одежду, обувь, аксессуары, храним миллионы товаров на собственных складах и складах партнеров и развозим как своей службой доставки Lamoda Express, так и при помощи внешних курьерских служб
Так же представляем B2B услуги по размещению товаров других компаний на нашем сайте
Москва – разработка оснвоных информационных систем
Вильнюс – программное обеспечение для колл-центра часть системных администраторов
СВОЙ САЙТ И МОБИЛЬНЫЙ САЙТ
ПРИЛОЖЕНИЯ КОГДА-ТО БЫЛИ ЛИШЬ ВЬЮШКАМИ ДЛЯ МОБ САЙТА НО СЕЙЧАС МЫ КРУТЫЕ
Управление складом: от банального подсчета KPI сотрудников до разработки прошивок для мобильных сканеров штрихкодов
И автоматизации управления сортировщиками и конвеерами
Синхронизация адресных объектов с внешними системами
Своя доставка
Курьерки – статусы, оповещения
Обработка и хранение миллионов заказов
Взаимодействие с сервисами оплаты
Мы используем php7 / go в сервисах для пушей, питон в апи сайта и модуле по работе с купонами, в качестве хранилищ выступают постгре и мускуль, используем редис для кешей и счетчиков мониторинга, Solr в поиске, RabbitMQ для обмена сообщениями
Для управления проектом, постановки задач и логирования времени используем Jira, код ворочаем в Stash
Команда смотрит и одобряет (в идеале) pull request, после чего задача переходит в стадию тестирования.
Именно на этом процессе остановимся чуть подробнее, так как желание его видоизменить – одна из предпосылок к докеризации.
QA-специалист раскладывает ветку из стеша на своем личном стенде.
И вот тут есть нюанс
Теперь поговорим о том, что же такое докеризация и какие к этому были предпосылки
Докер - это открытая платформа для доставки приложений, которая реализует концепцию контейнерной виртуализации
И позволяет запустить ваше приложение в изолированных контейнерах, сэкономив ресурсы по сравнению с виртуальными машинами, работающими через гипервизор
Одним из своих основных плюсов авторы докера называют устранение типовой проблемы «на моём компе все это работало правильно»именно об этом мы и поговорим чуть подробнее
Нюанс. На определенном этапе сложилось расхождения на организационном уровне: поддержкой боевых и тестовых стендов занимались разные люди, что привело к расхождению инфраструктур.
Стенд тестировщика в виртуалке на FreeBsd. Ветки раскладываются через jenkins, агент которого есть на каждой виртуалке.
На бою cent os
Таким образом закономерно появилось желание унифицировать окружение в разработке, тестировании и на бою.
Разработчик при выполнении задачи и при отладке наблюдает состояние системы максимально приближенное к боевому.
Это же касается и тестировщика, который в итоге получает на руки систему в виде множества контейнерор похожих на продакшен.
И тут мы переходим к следующей причине, исторической
Одна из отправных точек
Что такое черная пятница
Это крупнейший день распродаж в году, приходится на двадцатые числа ноября
Вы могли слышать о таких событиях как «киберпонедельник» или «день холостяка»
Для наших it-систем такой день означает одно: большой наплыв посетителей, многократный рост нагрузки по сравнению с любым другим днём года, необходимость
Временно выделить дополнительные вычислительные ресурсы и многократно убедиться в том, что не возникнет проблем со стабильностью работы
Имела место быть смена команд системных администраторов перед Черной пятницей несколько лет назад.
Важно понимать, что для крупного e-commerce-проекта это один из важнейших дней в году, но сокращение «ЧП» появилось не просто так. Подобная акция – это серьезная проверка на прочность по части производительности и стабильности работы it-систем.
Ребята решали задачу комплексно, не только готовясь к повышенным нагрузкам, но и стремясь перейти на новую концепцию: разграничить ответственность за железо и код между собою и разработкой.
С переходом на докер-контейнеры каждый проект превратился в понятный набор простых «коробок», стало легче понять каков конечный набор компонентов для каждого конкретного проекта.
При этом системные администраторы минимизируют свои столкновения с кодом: возникающие внутри контейнеров программные ошибки и изменение тех или иных метрик системы лежит в зоне ответственности разработчиков.
Разработчикам же не нужно думать о железе или о том, какая версия операционки окажется на бою: всё под руками.
Теперь поговорим о том, что же такое докеризация и какие к этому были предпосылки
Докер - это открытая платформа для доставки приложений, которая реализует концепцию контейнерной виртуализации
И позволяет запустить ваше приложение в изолированных контейнерах, сэкономив ресурсы по сравнению с виртуальными машинами, работающими через гипервизор
Одним из своих основных плюсов авторы докера называют устранение типовой проблемы «на моём компе все это работало правильно»именно об этом мы и поговорим чуть подробнее
Что такое service discovery
Задача звучит достаточно просто: при появлении в вашей сети новой ноды, которая готова
Предоставлять некие услуги, другие ноды должны иметь возможность узнать об этом и начать ею пользоваться
Рассматривался вариант с ZooKeeper, но поддерживать его не хотелось из-за нелюбви к Java, и он не предоставлял достаточно удобного
Инструментария для проверки живости сервисов в каждом из контейнеров, а с консулом у команды системных администраторов уже был опыт при
Построении архитектуры колл-центра, поэтому выбор был недолгим
В процессе докеризации неоднократно вставал вопрос выбора той или иной технологии.
Одним из таких вопросов был выбор оркестратора – программного продукта, который управляет созданием, убиением и конфигурацией контейнеров
кубенетс были экспериенты в кц и ламоде и все было очень клево если запускаешь на aws
как только начинаешь мэйнтэйнить локально со своей сетью и прочим - адище
даже удалось достичь юзабеьного состояния
но были легаси-системы
нужно было как-то совместить эту инфраструктуру со старой, но не было решения
мезосфера
давайте
с ней можно было совместить старую инфру с новой
был план как это сделать правильно
все хорошо кроме одного
но тогда зукипер мезосфере кластер везде демона и везде много явы
КАК Я УЖЕ ГОВОРИЛ зукупер поддерживать не хштелось
В сухом остатке – Nomad, вместо котрого сначал вообще были шелл-скрипты, и который на настоящий момент полностью устраивает
ПОДАВЛЯЮЩЕЕ БОЛЬШИНСТВО СИСТЕМ РАБОТАЕТ ПО HTTP И ПЕРЕД КАЖДЫМ БАЛАНСЕР
Для того чтобы динамически изменять upstream исходя из данных от Consul потребовалось использовать nginx+ upstream api
Nginx+ умеет работать с Consul по подписке
Эта схема используется для продакшен-среды, для QA применяется traefik. Он позволяет реализовать полностью рабочую схему, но
На наш взгляд недостаточно стабилен для боевого применения
Эта схема используется для продакшен-среды, для QA применяется traefik. Он позволяет реализовать полностью рабочую схему, но
На наш взгляд недостаточно стабилен для боевого применения
Теперь поговорим о том, что же такое докеризация и какие к этому были предпосылки
Докер - это открытая платформа для доставки приложений, которая реализует концепцию контейнерной виртуализации
И позволяет запустить ваше приложение в изолированных контейнерах, сэкономив ресурсы по сравнению с виртуальными машинами, работающими через гипервизор
Одним из своих основных плюсов авторы докера называют устранение типовой проблемы «на моём компе все это работало правильно»именно об этом мы и поговорим чуть подробнее
Одна из проблем, возникших при переходе на докер – логирование.
Сервис order processing, разработкой которого я занимаюсь, пишет три основных типа логов: информацию о работе приложения
Access-логи и, самое интересное, логи обменов
По долгу службы мы взаимодействуем со многими внешними и внутренними системами, и для того чтобы оперативно
И достоверно восстановить ход событий, нам нужно иметь под рукой полную информацию об обменах
Например, мы послали на склад оповещение о том, что заказ, в общем-то, пора собирать, и склад ответил ошибкой.
Ранее эта информация клалась в базу данных, что было очень удобно: мы ведь это ещё и выводим в веб-интерфейс, но
Со временем база стала распухать и мы перешли на elk: elastic search + logstash + kibana
Проблемой стало то, что данных мы передаем очень много, и в stdout записывать их не получилось, так как они обрезались по длине около 2к символов, на выходе fluent пишущий в syslog
Пока мы не ушли далеко от темы балансеров, упомяну один интересный момент
Есть случаи в которых приложение пятисотит, но позволить себе это проигнорировать мы просто не можем
Самый яркий пример такого случая: post-запрос на создание заказа
Возможны различные варианты, каждый из которых по-своему плох для бизнеса, ведь мы теряем деньги
Заказ не был создан – мы потеряли клиента
Заказ был создан, приложение ответило некорректно, пришел повторный запрос, мы получили дубликат заказа, это, честно говоря, ничем не лучшев
В итоге было принято решение сохранять заказы (запросы на их создание) любой ценой, и с этой целью был сделан fallback на базе
Nginx + openresty. Lua-скрипт складирует проблемные запросы, чтобы мы потом могли разобраться и при необходимости переотправить их
Сервис обработки заказов работает с различными файлами, например генерирует для клиентов pdf-файлы
Для оформления возврата товара, к нам загружают различные отчеты, сканы и так далее.
Хранить всё это в файловой системе контейнеров мы не можем ввиду её мгновенной и невозвратной смертности,
Каждый раз разворачиваются на разных нодах, мы не стали использовать докеровские маунты и реализовали в приложении поддержку s3
С настоящего момента мы можем лить файлы в облако, а можем (и так и делаем) использовать развернутый у себя Ceph – платформу для организации хранения и доступа к данным
В системе много крон-задач, так как регулярно нужно ходить во внешние системы и что-то запрашивать,
Разгребать очереди и так далее
Изначально использовалась схема 1-крон – 1 контейнер и шедулинг на уровне Nomad
К настоящему моменту от неё отказались в пользу одного контейнера со всеми кронами.
Каждый крон записывает в базу информацию о локе, так что несколько параллельно работающих контейнеров с кронами не берут одни и те же задачи