WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы

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