Минисервисы или микросервисы в условия цейтнота,...
Post on 27-Jul-2015
343 Views
Preview:
TRANSCRIPT
Микросервисы в условиях цейтнота
Минисервисы или микросервисы в условиях
цейтнота
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ам надо изучать новое • Тестировщикам нужно понимать, что они тестируют
• У новых разработчиков нет опыта в работе с микросервисами
Микросервисы в условиях цейтнота
Проблемы:деплой легче, но сложнее• Нужно думать о взаимодействии сервисов • Решение: При небольшом количестве сервисов это не проблема
• Решение: Можно ввести версионность • Решение: Можно писать промежуточные сервисы
Микросервисы в условиях цейтнота
Проблемы: скрытые связи• Сбор статистики и отчеты • Решение: делаем отдельный микросервис • Решение: делаем интерфейсы
Микросервисы в условиях цейтнота
Выводы• Можно запустить микросервисы быстро • Микросервисы приносят с собой проблемы • У этих проблем есть сравнительно простые решения
Микросервисы в условиях цейтнота
Building Microservices
http://shop.oreilly.com/product/0636920033158.do
Микросервисы в условиях цейтнота
Почему не fastcgi_finish_request()?
• Решает проблему скорости • Проще в реализации • Нет проблем со связностью
• Не решает проблему деплоя • Не дает остальных
преимуществ микросервисов
top related