Минисервисы или микросервисы в условия цейтнота,...

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

Upload: jetstyle

Post on 27-Jul-2015

333 views

Category:

Documents


2 download

TRANSCRIPT

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

Микросервисы в условиях цейтнота

Минисервисы или микросервисы в условиях

цейтнота

2015, Руслан Каримов

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

Микросервисы в условиях цейтнота

• Полмиллиона посещений в месяц • Несколько тысяч заказов в день (десятки тысяч в пике) • Тесная интеграция со сторонними сервисами • Останавливать разработку фич можно, но ненадолго — цейтнот

Проект

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

Микросервисы в условиях цейтнота

Вводные данные

• LAMP-стек • Yii v.1 • Redis как кэш

Технологии:

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

Микросервисы в условиях цейтнота

WTF микросервисы?

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

Микросервисы в условиях цейтнота

Основные фичи заключаютсяв следующем• Устойчивость системы к падениям и ошибкам

• Проще поддерживать • Проще деплоить • Проще выкинуть • Проще масштабировать

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

Микросервисы в условиях цейтнота

Причины перехода:скорость

• Тесная интеграция с другими сервисами

• Некоторые очень долгие

• Типичные delayed jobs

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

Микросервисы в условиях цейтнота

Причины перехода: деплой и тестирование

• Деплой — сложный процесс • Долгий QA • Долгий деплой

В Вилларибо: В Виллабаджо:• Легче тестировать • Проще деплоить • Чаще обновления

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

Микросервисы в условиях цейтнота

• Модно • Проще для использования • Сложнее в разработке • Транспорт только HTTP

REST: RPC:• Проще в разработке • Сложнее для

использования • Сложнее избежать

связывания

Протокол

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

Микросервисы в условиях цейтнота

JSON-RPC

• Прост в работе

• Много реализацийи библиотек

Выглядит примерно так:

A light weight remote procedure call protocol. It is designed to be simple!

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

Микросервисы в условиях цейтнота

Транспорт• Уже есть как кэш • Простой • Быстрый

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

Микросервисы в условиях цейтнота

Транспорт. Альтернативы:• HTTP/WebSockets • RabbitMQ • ZeroMQ/Gearman etc.

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

Микросервисы в условиях цейтнота

Общие принципы разделения• Рефакторинг приложения – ослабление связей • Запускайтесь в контексте приложения • Выносите наиболее простые части • Не забудьте про метрики/аналитики

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

Микросервисы в условиях цейтнота

Пишем код• Реализация очередейна 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(); }

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

Микросервисы в условиях цейтнота

Устойчивость к ошибкам. Что делать?

• Не париться • Cron • Supervisor • Web-сервер • Другие решения

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

Микросервисы в условиях цейтнота

Тестирование• Специфики нет • Это RPC, обычные Unit-тесты • E2E, функциональные тесты для приложения

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

Микросервисы в условиях цейтнота

Деплой проекта• Куда угодно с общим Redis • Сколько угодно воркеров • Не теряйте данные при рестарте

• Надежная очередь • Перехват сигналов

• Версионирование • Промежуточные сервисы

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

Микросервисы в условиях цейтнота

Логирование• Раздельные логи средствами приложения

• FluentD • ELK

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

Микросервисы в условиях цейтнота

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

• У новых разработчиков нет опыта в работе с микросервисами

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

Микросервисы в условиях цейтнота

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

• Решение: Можно ввести версионность • Решение: Можно писать промежуточные сервисы

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

Микросервисы в условиях цейтнота

Проблемы: скрытые связи• Сбор статистики и отчеты • Решение: делаем отдельный микросервис • Решение: делаем интерфейсы

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

Микросервисы в условиях цейтнота

Выводы• Можно запустить микросервисы быстро • Микросервисы приносят с собой проблемы • У этих проблем есть сравнительно простые решения

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

Микросервисы в условиях цейтнота

Руслан Каримов[email protected]

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

Микросервисы в условиях цейтнота

Building Microservices

http://shop.oreilly.com/product/0636920033158.do

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

Микросервисы в условиях цейтнота

Почему не fastcgi_finish_request()?

• Решает проблему скорости • Проще в реализации • Нет проблем со связностью

• Не решает проблему деплоя • Не дает остальных

преимуществ микросервисов