View
522
Download
2
Category
Preview:
Citation preview
Привет!Меня зовут НиколайПаламарчук
Senior PHP developer at Upwork
Больше 10 лет опытаразработки на разныхязыках и платформах
1.МикросервисыЧто это?
Монолит
Микросервисы
Микросервисы: определение
◎Service Oriented Architecture (SOA)◎Процессы, которые связываются друг сдругом через сеть◎Сервисы - маленькие◎Протокол связи - легковесный
2.Кому нужны микросервисы
Преимущества
◎Модульность◎Масштабируемость◎Отказоустойчивость◎Независимость разработки◎Continuous delivery◎… и многое другое
Нужны ли Вам микросервисы?
Посмотрите на лица этих успешных людей! Разве выможете усомниться теперь в том, что Вам нужнымикросервисы?
На самом деле...
◎Микросервисы - это сложно◎Микросервисы требуют гораздо большересурсов◎Это совершенно другая, непривычнаяархитектура
В итоге: нет никакой разницы!
Не нужны!
У многих все прекрасно работает и БЕЗ микросервисов
Мы любим решатьсложные проблемы!
Зачем мы вообще сэтим связываемся?
“
И чтоже нам поможет?
Ну конечно же...
Или не совсем?..
Прямые рукиАдекватная оценка
На самом деле намнужна...
Что нам нужно понимать?
◎Чем действительно нам поможетмикросервисная архитектура◎Какие проблемы нам придется решать◎Хватит ли у нас ресурсов
○Денег○Людей○Терпения
В чем основные преимущества микросервисов?
◎Разделение ответственности◎Независимость от платформы◎Индивидуальный подход к failsafe
“
Микросервисная архитекрутаупростит вам поиск виновных в
падении системы(на самом деле нет)
3.Мы используем PHP!Как выглядят микросервисы наPHP?
Разделене сайта на подсайты
http://example.com/Требование: скоростьhttp://example.com/userТребование: отказоустойчивостьhttp://example.com/enterpriseТребование: отказоустойчивость и особыйзащищенный функционал
Распределение логики
◎Вынесение общих кусков логики вотдельные сервисы◎Ограничение области ответственности
Например: автентификация, авторизация, общие виджеты, получение данных и т.д.
Использование альтернативных платформ
◎Возможность писать отдельные сервисына других языках◎Оставить на PHP то, с чем он отличносправляетя
4.Юзкейсы,
инструменты и их применение в
PHPОт теории - к практике!
Logging and profiling
Logging
◎Собираем логи со всех сервисов в одномместе◎Отправка логов должна бытьлегковесной и стабильной операцией!
◎Особенность: не нужен realtime
Logging: пишем в файл!
Не забываем: logrotateДоставка логов в общее хранилище: logstash и аналогиВажно: общая структура полей в логах совсех сервисов
Kibana!
Profiling
◎Собираем качественную информацию оработе сервиса○Количество операций○Тайминги○Специфические метрики
◎Особенность: realtime
◎Пишем в statsd
TracingОтслеживание цепочки
запросов
Tracing
Trace - граф запросовSpan - атомарная часть графа запросов
S1 S2 S3
Tracing
1.Генерируем уникальный trace-id (=span-id) для первого запроса
2.Генерируем уникальные идентификаторыspan-id для каждого запроса на клиенте
3.Передаем trace-id, span-id, parent-span-id в хедерах запроса
Tracing: access log
Service Trace ID Span ID Parent Span ID Message
S1 uuid1 uuid1Incoming request
S1 uuid1 uuid2 uuid1Sub-request
to S2
S2 uuid1 uuid2 uuid1Received request from S1
S2 uuid1 uuid3 uuid2Sub-request
to S3
S3 uuid1 uuid3 uuid2Received request from S2
Tracing: Zipkin
ContextОбщая информациядля всех сервисов
Context
◎Аттрибуты инициатора запроса○Remote IP○Session ID, cookies○ trace-id
◎Аттрибуты суб-запросов○Автентификация○ span-id, parent-span-id
Context: как мы это делаем
◎Пробрасываем данные в хедерах◎Защищаем хедеры от спуфинга
○Фильтрация на фронт-балансере○Цифровая подпись чувствительных хедеров
Для подписи хорошо подходит JSON Web Tokens (https://jwt.io)
Service discovery
Что это такое?
Service discovery
◎Возможность обратиться к сервису поимени (вместо указания конкретногоинстанса)◎Днамическое изменение спискаинстансов в зависимости от доступности◎Балансировка запросов междуинстансами
Service discovery: Consul
Service discovery: Consul
Кроме service-discovery в consul есть:◎REST API◎web-интерфейс◎key-value хранилище
◎Consul-template - динамическаягенерации файлов конфигурации◎Использование nginx plus или haproxy вкачестве балансировщика
Альтернатива: Netflix-стек
◎Netflix/eureka - service discovery◎Netflix/ribbon - load balancer◎Netflix/archaius - аналог key-value
storage ◎Netflix/Prana - клиент всехвышеперечисленных сервисов и “прокси” для запросов
Failsafe
Что делать, если сервис недоступен?
◎Retry◎Cache◎Fallback
◎Зачем отсылать запросы на упавшийсервис? => circuit-breaker
Phystrix
https://github.com/odesk/phystrix◎Inspired by Netflix/Hystrix◎Command pattern◎Fallback◎Request cache◎Request log and metrics
Phystrix
5.Опыт Upwork3-й год микросервисов
Технологии
◎PHP: Symfony (-Zend)◎Другие сервисы: Java, Perl, nodejs, ...◎Consul◎Netflix stack (Eureka, Prana, ...)◎Nginx, Apache◎AWS (Amazon Web Services), OpsWorks◎Docker для разработки
Интересные проблемы
◎Транзакции◎Унификация логов◎Анализ производительности◎Мониторинг “свежести” сервисов◎Апгрейд глобальных фич и версии◎Development environment
Спасибо!Вопросы?
lividgreen@gmail.comcodegyre.comTwitter: @lividgreen
Recommended