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

Post on 06-Jan-2017

187 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

Павлов Евгений

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

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

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

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

Search

Crawler

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

Scheduler API

Crawler

Article Extractor

Renderer

IndexerSearch API Elastic Search

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

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

Scheduler API

Crawler

Article Extractor

Renderer

IndexerSearch API

HTTP

HTTPHTTP

HTTP RabbitMQ

RabbitMQ

HTTP

RabbitMQ

Elastic Search

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

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

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

Scheduler API

Crawler

Article Extractor

Renderer

IndexerSearch API

HTTP

HTTPHTTP

HTTP RabbitMQ

RabbitMQ

HTTP

RabbitMQ

Elastic Search

Protobuf JSON

JSON

JSON

JSONJSON

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

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

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

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

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

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

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

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

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

Long retries on RabbitMQ

Input queue

Error queue

Input queue DLX

Retry queue DLX

Reject

TTL Retry queue

ServicePublishConsume

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

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

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

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

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

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

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

Свобода

Скорость?

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

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

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

Вопросы?

top related