2. Микросервисы
в условиях цейтнота
• Полмиллиона посещений в месяц
• Несколько тысяч заказов в день (десятки тысяч в пике)
• Тесная интеграция со сторонними сервисами
• Останавливать разработку фич можно, но ненадолго — цейтнот
Проект
5. Микросервисы
в условиях цейтнота
Основные фичи заключаются
в следующем
• Устойчивость системы
к падениям и ошибкам
• Проще поддерживать
• Проще деплоить
• Проще выкинуть
• Проще масштабировать
7. Микросервисы
в условиях цейтнота
Причины перехода:
деплой
и тестирование
• Деплой — сложный процесс
• Долгий QA
• Долгий деплой
В Вилларибо: В Виллабаджо:
• Легче тестировать
• Проще деплоить
• Чаще обновления
8. Микросервисы
в условиях цейтнота
• Модно
• Проще для использования
• Сложнее в разработке
• Транспорт только HTTP
REST: RPC:
• Проще в разработке
• Сложнее для
использования
• Сложнее избежать
связывания
Протокол
9. Микросервисы
в условиях цейтнота
JSON-RPC
• Прост в работе
• Много реализаций
и библиотек
Выглядит
примерно так:
A light weight remote procedure call protocol.
It is designed to be simple!
12. Микросервисы
в условиях цейтнота
Общие принципы
разделения
• Рефакторинг приложения – ослабление связей
• Запускайтесь в контексте приложения
• Выносите наиболее простые части
• Не забудьте про метрики/аналитики
13. Микросервисы
в условиях цейтнота
Пишем код
• Реализация очередей
на 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();
}
16. Микросервисы
в условиях цейтнота
Деплой проекта
• Куда угодно с общим Redis
• Сколько угодно воркеров
• Не теряйте данные при рестарте
• Надежная очередь
• Перехват сигналов
• Версионирование
• Промежуточные сервисы
18. Микросервисы
в условиях цейтнота
Проблемы:
порог входа
• DevOpsам надо изучать новое
• Тестировщикам нужно понимать, что они
тестируют
• У новых разработчиков нет опыта в работе
с микросервисами
19. Микросервисы
в условиях цейтнота
Проблемы:
деплой легче, но сложнее
• Нужно думать о взаимодействии сервисов
• Решение: При небольшом количестве сервисов
это не проблема
• Решение: Можно ввести версионность
• Решение: Можно писать промежуточные
сервисы
21. Микросервисы
в условиях цейтнота
Выводы
• Можно запустить микросервисы быстро
• Микросервисы приносят с собой проблемы
• У этих проблем есть сравнительно простые
решения
24. Микросервисы
в условиях цейтнота
Почему не
fastcgi_finish_request()?
• Решает проблему скорости
• Проще в реализации
• Нет проблем со связностью
• Не решает проблему деплоя
• Не дает остальных
преимуществ микросервисов