51

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

  • Upload
    webcamp

  • View
    520

  • Download
    2

Embed Size (px)

Citation preview

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

Привет!Меня зовут НиколайПаламарчук

Senior PHP developer at Upwork

Больше 10 лет опытаразработки на разныхязыках и платформах

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

1.МикросервисыЧто это?

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

Монолит

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

Микросервисы

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

Микросервисы: определение

◎Service Oriented Architecture (SOA)◎Процессы, которые связываются друг сдругом через сеть◎Сервисы - маленькие◎Протокол связи - легковесный

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

2.Кому нужны микросервисы

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

Преимущества

◎Модульность◎Масштабируемость◎Отказоустойчивость◎Независимость разработки◎Continuous delivery◎… и многое другое

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

Нужны ли Вам микросервисы?

Посмотрите на лица этих успешных людей! Разве выможете усомниться теперь в том, что Вам нужнымикросервисы?

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

На самом деле...

◎Микросервисы - это сложно◎Микросервисы требуют гораздо большересурсов◎Это совершенно другая, непривычнаяархитектура

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

В итоге: нет никакой разницы!

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

Не нужны!

У многих все прекрасно работает и БЕЗ микросервисов

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

Мы любим решатьсложные проблемы!

Зачем мы вообще сэтим связываемся?

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

И чтоже нам поможет?

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

Ну конечно же...

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

Или не совсем?..

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

Прямые рукиАдекватная оценка

На самом деле намнужна...

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

Что нам нужно понимать?

◎Чем действительно нам поможетмикросервисная архитектура◎Какие проблемы нам придется решать◎Хватит ли у нас ресурсов

○Денег○Людей○Терпения

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

В чем основные преимущества микросервисов?

◎Разделение ответственности◎Независимость от платформы◎Индивидуальный подход к failsafe

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

Микросервисная архитекрутаупростит вам поиск виновных в

падении системы(на самом деле нет)

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

3.Мы используем PHP!Как выглядят микросервисы наPHP?

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

Разделене сайта на подсайты

http://example.com/Требование: скоростьhttp://example.com/userТребование: отказоустойчивостьhttp://example.com/enterpriseТребование: отказоустойчивость и особыйзащищенный функционал

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

Распределение логики

◎Вынесение общих кусков логики вотдельные сервисы◎Ограничение области ответственности

Например: автентификация, авторизация, общие виджеты, получение данных и т.д.

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

Использование альтернативных платформ

◎Возможность писать отдельные сервисына других языках◎Оставить на PHP то, с чем он отличносправляетя

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

4.Юзкейсы,

инструменты и их применение в

PHPОт теории - к практике!

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

Logging and profiling

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

Logging

◎Собираем логи со всех сервисов в одномместе◎Отправка логов должна бытьлегковесной и стабильной операцией!

◎Особенность: не нужен realtime

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

Logging: пишем в файл!

Не забываем: logrotateДоставка логов в общее хранилище: logstash и аналогиВажно: общая структура полей в логах совсех сервисов

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

Kibana!

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

Profiling

◎Собираем качественную информацию оработе сервиса○Количество операций○Тайминги○Специфические метрики

◎Особенность: realtime

◎Пишем в statsd

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

TracingОтслеживание цепочки

запросов

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

Tracing

Trace - граф запросовSpan - атомарная часть графа запросов

S1 S2 S3

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

Tracing

1.Генерируем уникальный trace-id (=span-id) для первого запроса

2.Генерируем уникальные идентификаторыspan-id для каждого запроса на клиенте

3.Передаем trace-id, span-id, parent-span-id в хедерах запроса

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

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

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

Tracing: Zipkin

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

ContextОбщая информациядля всех сервисов

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

Context

◎Аттрибуты инициатора запроса○Remote IP○Session ID, cookies○ trace-id

◎Аттрибуты суб-запросов○Автентификация○ span-id, parent-span-id

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

Context: как мы это делаем

◎Пробрасываем данные в хедерах◎Защищаем хедеры от спуфинга

○Фильтрация на фронт-балансере○Цифровая подпись чувствительных хедеров

Для подписи хорошо подходит JSON Web Tokens (https://jwt.io)

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

Service discovery

Что это такое?

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

Service discovery

◎Возможность обратиться к сервису поимени (вместо указания конкретногоинстанса)◎Днамическое изменение спискаинстансов в зависимости от доступности◎Балансировка запросов междуинстансами

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

Service discovery: Consul

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

Service discovery: Consul

Кроме service-discovery в consul есть:◎REST API◎web-интерфейс◎key-value хранилище

◎Consul-template - динамическаягенерации файлов конфигурации◎Использование nginx plus или haproxy вкачестве балансировщика

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

Альтернатива: Netflix-стек

◎Netflix/eureka - service discovery◎Netflix/ribbon - load balancer◎Netflix/archaius - аналог key-value

storage ◎Netflix/Prana - клиент всехвышеперечисленных сервисов и “прокси” для запросов

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

Failsafe

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

Что делать, если сервис недоступен?

◎Retry◎Cache◎Fallback

◎Зачем отсылать запросы на упавшийсервис? => circuit-breaker

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

Phystrix

https://github.com/odesk/phystrix◎Inspired by Netflix/Hystrix◎Command pattern◎Fallback◎Request cache◎Request log and metrics

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

Phystrix

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

5.Опыт Upwork3-й год микросервисов

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

Технологии

◎PHP: Symfony (-Zend)◎Другие сервисы: Java, Perl, nodejs, ...◎Consul◎Netflix stack (Eureka, Prana, ...)◎Nginx, Apache◎AWS (Amazon Web Services), OpsWorks◎Docker для разработки

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

Интересные проблемы

◎Транзакции◎Унификация логов◎Анализ производительности◎Мониторинг “свежести” сервисов◎Апгрейд глобальных фич и версии◎Development environment

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

Спасибо!Вопросы?

[email protected]: @lividgreen