Мастер-класс "Микросервисы: удобно, надежно,...

29
Микросервисы: удобно, надежно, серебрянопульно Евгений Павлов Сергей Шумов

Upload: ontico

Post on 06-Jan-2017

187 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Микросервисы: удобно, надежно, серебрянопульноЕвгений ПавловСергей Шумов

Page 2: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Кто мы?News360 – новостной агрегатор• 6M загрузок• 100K активных пользователей• 30000 источников

Native.AI – аналитика• 20M событий в день• 100M в перспективе• Трекинг Reuters.com

Page 3: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Что было• SOA• Большие сервисы• Legacy код• Одна платформа

Павлов Евгений
Page 4: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Проблемы • Поддержка• Обновление• Производительность• Инструменты

Page 5: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Что мы сделалиДробление сервисов на более мелкиеИспользование подходящих языков и технологийПлавная миграция на открытые решения

Page 6: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Микросервисы• Сервис, который можно написать за 2 недели• Single responsibility• Bounded context

Page 7: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Преимущества микросервисов• Независимое обновление• Масштабирование• Возможность экспериментировать• Простота• Поддержка любым разработчиком• Адаптация под требования

Page 8: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Search

Crawler

Система поиска статей

Scheduler API

Crawler

Article Extractor

Renderer

IndexerSearch API Elastic Search

Page 9: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Типы коммуникации• RPC (HTTP)• Message bus (RabbitMQ, Kafka)• Permanent connect (TCP)

Page 10: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Система поиска статей

Scheduler API

Crawler

Article Extractor

Renderer

IndexerSearch API

HTTP

HTTPHTTP

HTTP RabbitMQ

RabbitMQ

HTTP

RabbitMQ

Elastic Search

Page 11: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Формат сообщенийТипы сообщений:• Text (Json) – общий формат• Binary (Protobuf) - highload

Best practices:• Cross-platform contracts• Cross-platform data types

Page 12: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Система поиска статей

Scheduler API

Crawler

Article Extractor

Renderer

IndexerSearch API

HTTP

HTTPHTTP

HTTP RabbitMQ

RabbitMQ

HTTP

RabbitMQ

Elastic Search

Protobuf JSON

JSON

JSON

JSONJSON

Page 13: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Communication bad practices• Платформо-зависимые технологии• Свои библиотеки для RPC• Свои библиотеки-клиенты• DTO в библиотеках• Общий DTO для многих сервисов

Page 14: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Deployment• Windows service• IIS web service• Self-host web service• Linux services in Docker • Rancher orchestration

Page 15: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Мониторинг• Логи • Метрики сервисов• Сервис status API (HTTP)• Мониторинг машин• Мониторинг очередей

Page 16: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Логи• Logstash + centralized file storage• ElasticsSearch + fluentd + Kibana• Структурированные логи (json)

Page 17: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Метрики• Graphite + Grafana (statsd)• Zabbix + Grafana integration• Riemann + InfluxDB – отказались

Page 18: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Масштабирование• Вручную для Windows сервисов• Nginx http load balancer• Rancher – автоматизированно• Auto-scaling – не используем

Page 19: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Отказоустойчивость• Готовность к падению другого сервиса• Деградация функциональности• Отсутствие зависаний – лучше падение

Page 20: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Отказоустойчивость - техники• Сonnection restoring • Retries• Timeouts• Message bus - exactly once delivery• HealthChecks

Page 21: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Message bus техники• Messages reject • RabbitMQ Dead Letter Exchanges (DLX)• Long retries on DLX

Page 22: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Long retries on RabbitMQ

Input queue

Error queue

Input queue DLX

Retry queue DLX

Reject

TTL Retry queue

ServicePublishConsume

Page 23: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Continuous integration• Build CI – unit and integration• Deploy CI – service functional tests• Commit CI – Drone.io

Page 24: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Документация• Swagger для http-сервисов• README.md• Описание сервиса в Wiki• Сводная таблица сервисов• Архитектурные диаграммы

Page 25: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Документация для сервиса• Краткое описание

функциональности• Репозиторий• Конфиги• Деплои• Логи• Мониторинг

• Тесты• Внешние зависимости• Требования к

производительности• Критичность• Ответственный

Page 26: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Стандартизация• Стандарты использования технологий• Шаблоны микросервисов• Логи, мониторинг и т.д.• Сode conventions

Свобода

Скорость?

Page 27: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Практики разработки• Ответственность - Owner, team• 1-2 разработчика на сервис• Сross-team code review• Git-репозиторий для сервиса• Минимизация зависимостей • Уменьшать связанность сервисов• Часто копи-паст лучше

Page 28: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Трудности• Схема взаимодействия сервисов • Актуальность диаграмм• Много рутины• Глобальный рефакторинг архитектуры• Зоопарк технологий

Page 29: Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павлов, Сергей Шумов (News360)

Спасибо за внимание!

Вопросы?