SRE-аудит сайта Flowwow
Flowwow — это онлайн-сервис для доставки цветов и подарков из локальных магазинов в более чем 950 городах мира.
Какие были задачи?
- Основная задача, стоявшая перед Flowwow, сделать разросшуюся инфраструктуру сервисов более управляемой, стабильной, консистентной и унифицированной.
- Клиент сделал запрос на оценку состояния инфраструктуры и получение рекомендаций по ее улучшению.
Решения
В качестве решения мы предложили клиенту провести комплексный SRE-аудит проекта. Информация, полученная в ходе аудита стала базой для формирования плана по решению задач:
- Оптимизация работы под нагрузкой, особенно при резком росте числа заказов, что характерно для проекта
- Уменьшение времени даунтайма при инцидентах
- Унификация процессов и шаблонов для работы с инфраструктурой
Выявленные проблемы по IaC
- Невозможно развернуть инфраструктуру с нуля
- Сложный workflow, затрудняющий работу
- Код Terraform, который не дает понимания итоговой инфраструктуры.
- В облаках присутствуют предустановленные ресурсы (default vpc), чего не должно быть при работе с Terraform, это вносит путаницу.
- Невозможно развернуть инфраструктуру с нуля
- Сложный workflow, затрудняющий работу.
- Код Terraform, который не дает понимания итоговой инфраструктуры.
- В облаках присутствуют предустановленные ресурсы (default vpc), чего не должно быть при работе с Terraform, это вносит путаницу.
Наши рекомендации
- Разделить инфраструктуру и ПО – Terraform от Ansible.
- Отказаться от packer.
- Уход от избыточности: создать только необходимые модули Terraform, с полным описанием и примерами использования.
- Отказаться от публичных модулей.
- Ansible — переделать роли и плейбуки: отказаться от публичных ролей, добавить molecule, создать документацию и инструкции по работе с окружениями.
- Добавить в репозиторий с helm чартами, чарты инфраструктурных сервисов, таких как Ingress, Nginx, Prometheus operator и т.п., удалить их из Terraform.
Выявленные проблемы по CI/CD
- Jenkins Jobs представляют собой по большей части ручные джобы: миграции, бэкапы, автомержи, очистки кэшей/очередей, 1С-инвойсы, разного рода кроны и т.д.
- Часть джоб – набор команд в конфигурации джобы, в том числе git pull. А часть джоб запускают bash-скрипты, которые уже есть на серверах.
- В Jenkins нет четкого разделения джоб по контурам. При изменении или добавлении какого-то сервера в инфраструктуру, нужно будет вносить корректировки во все связанные джобы.
- Список jobs в документации не полный.
- Деплой песочниц организован неудобно и непрозрачно. Например, нет автоматического удаления.
- Воркфлоу в репозитории кода выглядит не связным из-за отсутствия описания того, какие приложения есть в проекте и как они связаны между собой.
- Есть разные пайплайны с закомментированным кодом и неясно, как это всё между собой связано.
Наши рекомендации
- Привести в задокументированный вид.
- Провести рефакторинг: унифицировать деплои, сделать отдельно деплой песочниц.
- Избавиться от лишних Jenkins jobs, вынеся часть в код с использованием Ansible или пайплайнов, а бэкапные задачи — в крон или альтернативные решения.
- Вынести все из репозитория кода, описать весь общий флоу, отделив инфраструктуру от приложений.
- Сделать автоматическое развертывание песочниц исходя из названия feature ветки.
- Унифицировать workflow для всех приложений, разработать единый пайплайн.
Проблемы в документации
- Нет описания всей инфраструктуры и полного перечня контуров/серверов (инвентори).
- Отсутствуют данные по всем приложениям и плохо видна связь между ними.
- Не хватает четких инструкций в документации по laC.
- Нет полной документации по CI/CD-процессам.
Наши рекомендации
- Использовать подход к документации как к коду. Например, есть репозитории с IaC и репозитории с описанными CI/CD-процессами. Документация по использованию этих инструментов должна быть прикреплена к самим инструментам при помощи readme.
- Составить базу общих знаний по использованию разных технологий в отдельном разделе.
- Вынести инфраструктурную документацию и типовые инструкции по эксплуатации в свой раздел документации. Он должен поддерживаться и актуализироваться в рамках технической поддержки.
- Разделить документацию на категории и хранить в разных местах.
План устранения проблем
- Создание полноценной документации по проекту, выработка процесса по поддержанию ее в актуальном состоянии.
- Разработка плана реорганизации проекта с расстановкой приоритетов.
- Удаление лишних ресурсов в облаках.
- Рефакторинг IaC для проекта: Terraform, Ansible, Helm.
- Работы с CI/CD.
Упомянутые услуги
Готовы обсудить проект?
Ответим на заявку в ближайшие 24 часа. А еще мы можем проконсультировать вас по телефону +7 800 555-91-99, электронной почте info@itsumma.ru или в Telegram-чате.