Микросервисы
в условиях цейтнота
Минисервисы
или микросервисы в условиях
цейтнота
2015, Руслан Каримов
Микросервисы
в условиях цейтнота
• Полмиллиона посещений в месяц
• Несколько тысяч заказов в день (десятки тысяч в пике)
• Тесная интеграция со сторонними сервисами
• Останавливать разработку фич можно, но ненадолго — цейтнот
Проект
Микросервисы
в условиях цейтнота
Вводные данные
• LAMP-стек
• Yii v.1
• Redis как кэш
Технологии:
Микросервисы
в условиях цейтнота
WTF микросервисы?
Микросервисы
в условиях цейтнота
Основные фичи заключаются

в следующем
• Устойчивость системы 

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

скорость
• Тесная интеграция с другими сервисами
• Некоторые очень долгие
• Типичные delayed jobs
Микросервисы
в условиях цейтнота
Причины перехода: 

деплой 

и тестирование
• Деплой — сложный процесс
• Долгий QA
• Долгий деплой
В Вилларибо: В Виллабаджо:
• Легче тестировать
• Проще деплоить
• Чаще обновления
Микросервисы
в условиях цейтнота
• Модно
• Проще для использования
• Сложнее в разработке
• Транспорт только HTTP
REST: RPC:
• Проще в разработке
• Сложнее для
использования
• Сложнее избежать
связывания
Протокол
Микросервисы
в условиях цейтнота
JSON-RPC
• Прост в работе
• Много реализаций

и библиотек
Выглядит
примерно так:
A light weight remote procedure call protocol.
It is designed to be simple!
Микросервисы
в условиях цейтнота
Транспорт
• Уже есть как кэш
• Простой
• Быстрый
Микросервисы
в условиях цейтнота
Транспорт.
Альтернативы:
• HTTP/WebSockets
• RabbitMQ
• ZeroMQ/Gearman etc.
Микросервисы
в условиях цейтнота
Общие принципы
разделения
• Рефакторинг приложения – ослабление связей
• Запускайтесь в контексте приложения
• Выносите наиболее простые части
• Не забудьте про метрики/аналитики
Микросервисы
в условиях цейтнота
Пишем код
• Реализация очередей

на Redis (RPUSH, 

BLPOP)
• Predis падает
• Первая версия 

– за 15 мин
try {
$rpcCall = $this->connection->
blPop([$this->queue], 0)[1];
!
echo $rpcCall . PHP_EOL;
return $rpcCall;
} catch (ConnectionException $e) {
$this->resetConnection();
}
Микросервисы
в условиях цейтнота
Устойчивость к ошибкам. 

Что делать?
• Не париться
• Cron
• Supervisor
• Web-сервер
• Другие решения
Микросервисы
в условиях цейтнота
Тестирование
• Специфики нет
• Это RPC, обычные Unit-тесты
• E2E, функциональные тесты
для приложения
Микросервисы
в условиях цейтнота
Деплой проекта
• Куда угодно с общим Redis
• Сколько угодно воркеров
• Не теряйте данные при рестарте
• Надежная очередь
• Перехват сигналов
• Версионирование
• Промежуточные сервисы
Микросервисы
в условиях цейтнота
Логирование
• Раздельные логи средствами
приложения
• FluentD
• ELK
Микросервисы
в условиях цейтнота
Проблемы:

порог входа
• DevOpsам надо изучать новое
• Тестировщикам нужно понимать, что они
тестируют
• У новых разработчиков нет опыта в работе
с микросервисами
Микросервисы
в условиях цейтнота
Проблемы:

деплой легче, но сложнее
• Нужно думать о взаимодействии сервисов
• Решение: При небольшом количестве сервисов
это не проблема
• Решение: Можно ввести версионность
• Решение: Можно писать промежуточные
сервисы
Микросервисы
в условиях цейтнота
Проблемы:

скрытые связи
• Сбор статистики и отчеты
• Решение: делаем отдельный микросервис
• Решение: делаем интерфейсы
Микросервисы
в условиях цейтнота
Выводы
• Можно запустить микросервисы быстро
• Микросервисы приносят с собой проблемы
• У этих проблем есть сравнительно простые
решения
Микросервисы
в условиях цейтнота
Руслан Каримов
elnoro@jetstyle.ru
Микросервисы
в условиях цейтнота
Building Microservices
http://shop.oreilly.com/product/0636920033158.do
Микросервисы
в условиях цейтнота
Почему не
fastcgi_finish_request()?
• Решает проблему скорости
• Проще в реализации
• Нет проблем со связностью
• Не решает проблему деплоя
• Не дает остальных
преимуществ микросервисов

Минисервисы или микросервисы в условия цейтнота, Руслан Каримов, UWDC 2015