SlideShare a Scribd company logo
1 of 125
Download to read offline
Микросервисы наносят ответный удар
Что нужно знать Python-разработчику
о микросервисных архитектурах.
в 2017 году (кратко)
Чуркин Олег
<Rambler&Co>
О чем поговорим
О чем поговорим
● Когда стоит подумать о микросервисной
архитектуре
О чем поговорим
● Когда стоит подумать о микросервисной
архитектуре
● Декомпозиция монолитных приложений
О чем поговорим
● Когда стоит подумать о микросервисной
архитектуре
● Декомпозиция монолитных приложений
● Требования к приложению
О чем поговорим
● Когда стоит подумать о микросервисной
архитектуре
● Декомпозиция монолитных приложений
● Требования к приложению
● Отказоустойчивость и стабильность
микросервисов
Monolith vs Microservices (SOA)
Monolith vs Microservices (SOA)
Монолитная
архитектура
Monolith vs Microservices (SOA)
Монолитная
архитектура
Микросервисная
архитектура
Типичный монолит
Client:
mobile,
web-browser
Типичный монолит
Client:
mobile,
web-browser
FRONTEND
Типичный монолит
Load balancer
/ Web server
(nginx)
Client:
mobile,
web-browser
MODULES
BACKENDFRONTEND
Типичный монолит
Load balancer
/ Web server
(nginx)
Assets /
Templates
Search Admin / CMS
Acquiring /
Payments
REST API
Feedback /
Support Chat
Reports / Statistics
Consumers /
Workers
Mobile API
Authentication /
Authorization
«Распиливаем» монолит
Client: mobile, web-browser
«Распиливаем» монолит
Client: mobile, web-browser
FRONTEND
«Распиливаем» монолит
Load
balancer /
Web server
(nginx)
SPA /
Isomorphic
application
(node.js)
Client: mobile, web-browser
BACKEND
Events Bus / Message broker
FRONTEND
«Распиливаем» монолит
Load
balancer /
Web server
(nginx)
SPA /
Isomorphic
application
(node.js)
API Gateway /
Facade
FRONTEND
Load
balancer /
Web server
(nginx)
SPA /
Isomorphic
application
(node.js)
Client: mobile, web-browser
BACKEND
Events Bus / Message broker
FRONTEND
«Распиливаем» монолит
Load
balancer /
Web server
(nginx)
SPA /
Isomorphic
application
(node.js)
API Gateway /
Facade
Feedback /
Support Chat
Authentication /
Authorization
Search Admin / CMS
Acquiring /
Payments
REST API /
Mobile API
Reports /
Statistics
Consumers /
Workers
FRONTEND
Load
balancer /
Web server
(nginx)
SPA /
Isomorphic
application
(node.js)
Преимущества микросервисов
Преимущества микросервисов
● Независимая разработка – технологии, команды и
процессы могут быть совершенно разными
● Независимая разработка – технологии, команды и
процессы могут быть совершенно разными
● Независимый деплой
Преимущества микросервисов
Преимущества микросервисов
● Независимая разработка – технологии, команды и
процессы могут быть совершенно разными
● Независимый деплой
● Один упал, остальное работает
Преимущества микросервисов
● Независимая разработка – технологии, команды и
процессы могут быть совершенно разными
● Независимый деплой
● Один упал, остальное работает
● Модульность – просто включитьвыключить, легко
удалять код, не такое страшное легаси
Преимущества микросервисов
● Независимая разработка – технологии, команды и
процессы могут быть совершенно разными
● Независимый деплой
● Один упал, остальное работает
● Модульность – просто включитьвыключить, легко
удалять код, не такое страшное легаси
● Децентрализованное управление данными
Микросервисы: trade-offs
● Инфраструктура усложнилась – нужно время на
доработку и более опытная команда для ее
поддержки
Микросервисы: trade-offs
● Инфраструктура усложнилась – нужно время на
доработку и более опытная команда для ее
поддержки
● Появилось больше точек отказа
Микросервисы: trade-offs
● Инфраструктура усложнилась – нужно время на
доработку и более опытная команда для ее
поддержки
● Появилось больше точек отказа
● CPU-вызовы заменились на Network-вызовы: выросла
нагрузка на сеть, вызовы стали медленнее и
вероятность их отказа выросла
Микросервисы: trade-offs
Микросервисы: trade-offs
● Инфраструктура усложнилась – нужно время на
доработку и более опытная команда для ее
поддержки
● Появилось больше точек отказа
● CPU-вызовы заменились на Network-вызовы: выросла
нагрузка на сеть, вызовы стали медленнее и
вероятность их отказа выросла
● Eventual consistency – нужно подождать, чтобы
увидеть результаты изменений
Микрослужбы: когда еще рано
● Небольшая кодовая база, простой/утилитарный
проект, нет планов по расширению
Микрослужбы: когда еще рано
● Небольшая кодовая база, простой/утилитарный
проект, нет планов по расширению
● Трудности обновления инфраструктуры
перевешивают плюсы от микросервисов
Микрослужбы: когда еще рано
Микрослужбы: когда еще рано
● Небольшая кодовая база, простой/утилитарный
проект, нет планов по расширению
● Трудности обновления инфраструктуры
перевешивают плюсы от микросервисов
● У вас и так все в порядке: быстро разрабатываете;
быстро выкладываете в продакшен; пишите
красивый, модульный код
Микрослужбы: когда стоит подумать
● Появилась определенное требование к безопасности,
стабильности и скорости разработки
Микрослужбы: когда стоит подумать
● Появилась определенное требование к безопасности,
стабильности и скорости разработки
● Текущий фреймворк плохо подходит под новые
задачи
Микрослужбы: когда стоит подумать
● Появилась определенное требование к безопасности,
стабильности и скорости разработки
● Текущий фреймворк плохо подходит под новые
задачи
● Большая команда и много кода – долгие релизы,
частые merge-конфликты
Микрослужбы: когда стоит подумать
● Появилась определенное требование к безопасности,
стабильности и скорости разработки
● Текущий фреймворк плохо подходит под новые
задачи
● Большая команда и много кода – долгие релизы,
частые merge-конфликты
● Сильная нагрузка на определенный функционал, его
нужно либо переписать либо масштабировать
Микрослужбы: когда стоит подумать
Микрослужбы: когда стоит подумать
● Появилась определенное требование к безопасности,
стабильности и скорости разработки
● Текущий фреймворк плохо подходит под новые
задачи
● Большая команда и много кода – долгие релизы,
частые merge-конфликты
● Сильная нагрузка на определенный функционал, его
нужно либо переписать либо масштабировать
● Долгие деплои, связынные с большим количеством
кода и различных обслуживающих операций
(скриптов)
Что нам нужно сделать (глобально)?
Что нам нужно сделать (глобально)?
● Определиться с разбивкой компонентов на
сервисы
Что нам нужно сделать (глобально)?
● Определиться с разбивкой компонентов на
сервисы
● Выбрать технологический стек
Что нам нужно сделать (глобально)?
● Определиться с разбивкой компонентов на
сервисы
● Выбрать технологический стек
● Адаптировать инфраструктуру
Поговорим про технологии, а конкретно
про фреймворки.
Выбор фреймворка под конкретный
сервис/задачи
● CPU-bound vs IO-bound
Выбор фреймворка под конкретный
сервис/задачи
● CPU-bound vs IO-bound
● Стабильность и безопасность
Выбор фреймворка под конкретный
сервис/задачи
● CPU-bound vs IO-bound
● Стабильность и безопасность
● Удобство разработки
Выбор фреймворка под конкретный
сервис/задачи
● CPU-bound vs IO-bound
● Стабильность и безопасность
● Удобство разработки
● Количество доступных «батареек»
Выбор фреймворка под конкретный
сервис/задачи
Выбор фреймворка под конкретный
сервис/задачи
● CPU-bound vs IO-bound
● Стабильность и безопасность
● Удобство разработки
● Количество доступных «батареек»
● Производительность
Выбор фреймворка под конкретный
сервис/задачи
● CPU-bound vs IO-bound
● Стабильность и безопасность
● Удобство разработки
● Количество доступных «батареек»
● Производительность
● Поддержка (LTS релизы)
Вариантов много
Что выбрать?
Совет №1: чем стабильнее и
функциональнее будет фреймворк, тем
меньше головной боли вас ожидает в
будущем.
Что выбрать?
Совет №1: чем стабильнее и
функциональнее будет фреймворк, тем
меньше головной боли вас ожидает в
будущем.
Совет №2: не обязательно выбирать
микрофреймворк для создания
микросервиса.
Что выбрать?
Типы web-фреймворков
«Синхронные» – используют модель workers
pool, каждый worker приложения работает над
одним запросом в единицу времени не
прерываясь, оперируют функциями: Django,
Flask, Falcon и т.д.
Типы web-фреймворков
«Синхронные» – используют модель workers
pool, каждый worker приложения работает над
одним запросом в единицу времени не
прерываясь, оперируют функциями: Django,
Flask, Falcon и т.д.
«Асинхронные» – используют паттерн Eventloop,
оперируют корутинами: Tornado, aiohttp, Sanic и
т.д.
Типы web-фреймворков
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
○ Удобные ORM с богатым функционалом
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
○ Удобные ORM с богатым функционалом
○ Удобные инструменты для создания и проведения
миграций
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
○ Удобные ORM с богатым функционалом
○ Удобные инструменты для создания и проведения
миграций
○ Ограничения psycopg2 при работы с асинхронными
запросами (autocommit, set_client_encoding, executemany,
large objects, named cursors)
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
○ Удобные ORM с богатым функционалом
○ Удобные инструменты для создания и проведения
миграций
○ Ограничения psycopg2 при работы с асинхронными
запросами (autocommit, set_client_encoding, executemany,
large objects, named cursors)
○ aiomysql – еще в alpha
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
○ Удобные ORM с богатым функционалом
○ Удобные инструменты для создания и проведения
миграций
○ Ограничения psycopg2 при работы с асинхронными
запросами (autocommit, set_client_encoding, executemany,
large objects, named cursors)
○ aiomysql – еще в alpha
● Админки и интерфейсы CMS
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
○ Удобные ORM с богатым функционалом
○ Удобные инструменты для создания и проведения
миграций
○ Ограничения psycopg2 при работы с асинхронными
запросами (autocommit, set_client_encoding, executemany,
large objects, named cursors)
○ aiomysql – еще в alpha
● Админки и интерфейсы CMS
● REST поверх CRUD – за счет мощного Django Rest Framework
Синхронный фреймворк
● CRUD сервисы для работы с реляционными СУБД:
○ Удобные ORM с богатым функционалом
○ Удобные инструменты для создания и проведения
миграций
○ Ограничения psycopg2 при работы с асинхронными
запросами (autocommit, set_client_encoding, executemany,
large objects, named cursors)
○ aiomysql – еще в alpha
● Админки и интерфейсы CMS
● REST поверх CRUD – за счет мощного Django Rest Framework
● Сервисы требующие повышенного отношения к безопасности
(платежи, важные пользовательские данные и т.д.)
Синхронный фреймворк
Асинхронный фреймворк
● Много IO-bound задач, мало CPU-bound задач:
Асинхронный фреймворк
● Много IO-bound задач, мало CPU-bound задач:
○ Прокси сервисы
Асинхронный фреймворк
● Много IO-bound задач, мало CPU-bound задач:
○ Прокси сервисы
○ HTTP-интеграции со сторонними сервисами
Асинхронный фреймворк
● Много IO-bound задач, мало CPU-bound задач:
○ Прокси сервисы
○ HTTP-интеграции со сторонними сервисами
○ Обработчики очередей (workers/consumers)
Асинхронный фреймворк
● Много IO-bound задач, мало CPU-bound задач:
○ Прокси сервисы
○ HTTP-интеграции со сторонними сервисами
○ Обработчики очередей (workers/consumers)
○ Facade-сервисы
Асинхронный фреймворк
Асинхронный фреймворк
● Много IO-bound задач, мало CPU-bound задач:
○ Прокси сервисы
○ HTTP-интеграции со сторонними сервисами
○ Обработчики очередей (workers/consumers)
○ Facade-сервисы
● Чаты, мессенджеры
Асинхронный фреймворк
● Много IO-bound задач, мало CPU-bound задач:
○ Прокси сервисы
○ HTTP-интеграции со сторонними сервисами
○ Обработчики очередей (workers/consumers)
○ Facade-сервисы
● Чаты, мессенджеры
● Сервисы для работы с websockets и server-sent events
«Детские болячки» в асинхронном мире
«Детские болячки» в асинхронном мире
● aiohttp pre 2.0 era
○ Socket leak and incorrect connection close
○ Обратно несовместимые изменения
○ Запутывающие ошибки вида "error handling response" и
"cancelled error"
«Детские болячки» в асинхронном мире
● aiohttp pre 2.0 era
○ Socket leak and incorrect connection close
○ Обратно несовместимые изменения
○ Запутывающие ошибки вида "error handling response" и
"cancelled error"
● pewee_async
○ Нет поддержки агрегационных запросов
○ Неправильно обрабатываются закрытые соединения
«Детские болячки» в асинхронном мире
● aiohttp pre 2.0 era
○ Socket leak and incorrect connection close
○ Обратно несовместимые изменения
○ Запутывающие ошибки вида "error handling response" и
"cancelled error"
● pewee_async
○ Нет поддержки агрегационных запросов
○ Неправильно обрабатываются закрытые соединения
● asyncio_redis
○ дедлок
Но не стоит сгущать краски
Twisted и Tornado – зрелые, стабильные,
функциональные.
aiolibs
https://github.com/aio-libs
● aiohttp (post 2.0 era)
● aioredis
● aiopg
● aiomysql
Новые перспективные игроки
Sanic набирает популярность, как
«асинхронный Flask»
https://github.com/channelcat/sanic
Думаем о приложении/сервисе
Думаем о приложении/сервисе
● Архитектурный дизайн
Думаем о приложении/сервисе
● Архитектурный дизайн
● The Twelve-Factor App: https://12factor.net/
Думаем о приложении/сервисе
● Архитектурный дизайн
● The Twelve-Factor App: https://12factor.net/
● API дизайн (версионирование, обратная
совместимость)
Думаем о приложении/сервисе
● Архитектурный дизайн
● The Twelve-Factor App: https://12factor.net/
● API дизайн (версионирование, обратная
совместимость)
● Культура DevOps (описание инфраструктуры,
infrastructure as code)
Думаем о приложении/сервисе
● Архитектурный дизайн
● The Twelve-Factor App: https://12factor.net/
● API дизайн (версионирование, обратная
совместимость)
● Культура DevOps (описание инфраструктуры,
infrastructure as code)
● Контейнеризация (docker)
● Маштабирование
Думаем о приложении/сервисе
● Маштабирование
● Не храним состояние (stateless)
Думаем о приложении/сервисе
● Маштабирование
● Не храним состояние (stateless)
● Шаблон сервиса
(https://github.com/audreyr/cookiecutter)
Думаем о приложении/сервисе
● Маштабирование
● Не храним состояние (stateless)
● Шаблон сервиса
(https://github.com/audreyr/cookiecutter)
● Обнаружение сервисов (service discovery)
Думаем о приложении/сервисе
● Маштабирование
● Не храним состояние (stateless)
● Шаблон сервиса
(https://github.com/audreyr/cookiecutter)
● Обнаружение сервисов (service discovery)
● Взаимодействие между сервисами (IPC: json, thrift,
protobuf)
Думаем о приложении/сервисе
Отказоустойчивость и стабильность
Отказоустойчивость и стабильность
● Понятие recovery – контракт на то, как вести себя
сервису в случае ошибок, которые он может
обработать и которые не может
● Понятие recovery – контракт на то, как вести себя
сервису в случае ошибок, которые он может
обработать и которые не может
● Обязательные и короткие таймауты
Отказоустойчивость и стабильность
● Понятие recovery – контракт на то, как вести себя
сервису в случае ошибок, которые он может
обработать и которые не может
● Обязательные и короткие таймауты
● Circuit Breakers – не заваливать сервис запросами,
если он умирает.
Отказоустойчивость и стабильность
● Понятие recovery – контракт на то, как вести себя
сервису в случае ошибок, которые он может
обработать и которые не может
● Обязательные и короткие таймауты
● Circuit Breakers – не заваливать сервис запросами,
если он умирает.
● Fail fast – лучше сразу упасть, чем ждать
Отказоустойчивость и стабильность
● Понятие recovery – контракт на то, как вести себя
сервису в случае ошибок, которые он может
обработать и которые не может
● Обязательные и короткие таймауты
● Circuit Breakers – не заваливать сервис запросами,
если он умирает.
● Fail fast – лучше сразу упасть, чем ждать
● Общие клиенты вынесены в зависимости
Отказоустойчивость и стабильность
Отказоустойчивость и стабильность
● Обязательное логирование, метрики и мониторинг,
авторестарт
Отказоустойчивость и стабильность
● Обязательное логирование, метрики и мониторинг,
авторестарт
● Правильная обработка сигналов SIGTERM и SIGINT
Отказоустойчивость и стабильность
● Обязательное логирование, метрики и мониторинг,
авторестарт
● Правильная обработка сигналов SIGTERM и SIGINT
● Сохранение обратной совместимости в рамках одной
версии API
Отказоустойчивость и стабильность
● Обязательное логирование, метрики и мониторинг,
авторестарт
● Правильная обработка сигналов SIGTERM и SIGINT
● Сохранение обратной совместимости в рамках одной
версии API
● Connection pools – правильно обрабатываем
закрытые соединения, иначе zombie-service.
Отказоустойчивость и стабильность
● Обязательное логирование, метрики и мониторинг,
авторестарт
● Правильная обработка сигналов SIGTERM и SIGINT
● Сохранение обратной совместимости в рамках одной
версии API
● Connection pools – правильно обрабатываем
закрытые соединения, иначе zombie-service.
● Request Id – подписываем (headers) все запросы,
чтобы агрегировать логи между сервисами
Классические ошибки при внедрении и
разработке микросервисов
● Переход от вызовов функций к вызовам сервисов без
адаптации архитектуры
Классические ошибки при внедрении и
разработке микросервисов
● Переход от вызовов функций к вызовам сервисов без
адаптации архитектуры
● Незафиксированные версии зависимостей
(requirements.txt)
Классические ошибки при внедрении и
разработке микросервисов
● Переход от вызовов функций к вызовам сервисов без
адаптации архитектуры
● Незафиксированные версии зависимостей
(requirements.txt)
● Слишком много CPU-bound задач в асинхронных сервисах,
например json-сериализация. IO-bound в асинхронных.
Классические ошибки при внедрении и
разработке микросервисов
● Переход от вызовов функций к вызовам сервисов без
адаптации архитектуры
● Незафиксированные версии зависимостей
(requirements.txt)
● Слишком много CPU-bound задач в асинхронных сервисах,
например json-сериализация. IO-bound в асинхронных.
● loop.run_in_executor не всегда спасет от проблем с
CPU-bound задачами
Классические ошибки при внедрении и
разработке микросервисов
● Переход от вызовов функций к вызовам сервисов без
адаптации архитектуры
● Незафиксированные версии зависимостей
(requirements.txt)
● Слишком много CPU-bound задач в асинхронных сервисах,
например json-сериализация. IO-bound в асинхронных.
● loop.run_in_executor не всегда спасет от проблем с
CPU-bound задачами
● Использование глобальных объектов для хранения
состояния запроса в памяти асинхронного приложения
Классические ошибки при внедрении и
разработке микросервисов
● Длинные последовательные цепочки запросов между
сервисами, необходимые для формирования данных.
Классические ошибки при внедрении и
разработке микросервисов
● Длинные последовательные цепочки запросов между
сервисами, необходимые для формирования данных.
● «Сервис на каждый чих»
Классические ошибки при внедрении и
разработке микросервисов
● Длинные последовательные цепочки запросов между
сервисами, необходимые для формирования данных.
● «Сервис на каждый чих»
● Один источник данных для всех сервисов
Классические ошибки при внедрении и
разработке микросервисов
● Длинные последовательные цепочки запросов между
сервисами, необходимые для формирования данных.
● «Сервис на каждый чих»
● Один источник данных для всех сервисов
● Копипаста кода между сервисами, вместо установки
зависимостей (если у вас не монорепозиторий)
Классические ошибки при внедрении и
разработке микросервисов
● Длинные последовательные цепочки запросов между
сервисами, необходимые для формирования данных.
● «Сервис на каждый чих»
● Один источник данных для всех сервисов
● Копипаста кода между сервисами, вместо установки
зависимостей (если у вас не монорепозиторий)
● Отсутствие автоматизации версионирования сервисов
(versioneer, bumpversion)
Классические ошибки при внедрении и
разработке микросервисов
● Длинные последовательные цепочки запросов между
сервисами, необходимые для формирования данных.
● «Сервис на каждый чих»
● Один источник данных для всех сервисов
● Копипаста кода между сервисами, вместо установки
зависимостей (если у вас не монорепозиторий)
● Отсутствие автоматизации версионирования сервисов
(versioneer, bumpversion)
● Если где-то соединение открывается, то где-то оно должно
быть закрыто
Классические ошибки при внедрении и
разработке микросервисов
Интеграции со сторонними сервисами
● Правильно обрабатывать ошибки (коды ответа,
правильный recovery)
Интеграции со сторонними сервисами
● Правильно обрабатывать ошибки (коды ответа,
правильный recovery)
● Exponential backoff – увеличивать промежуток между
опросами экспоненциально
Интеграции со сторонними сервисами
Интеграции со сторонними сервисами
● Правильно обрабатывать ошибки (коды ответа,
правильный recovery)
● Exponential backoff – увеличивать промежуток между
опросами экспоненциально
● Строгая валидация данных чаще всего не работает.
Активная валидация по json-schema – приводит к
проблемам, т.к. поставщики на самом деле часто меняют
API.
Интеграции со сторонними сервисами
● Правильно обрабатывать ошибки (коды ответа,
правильный recovery)
● Exponential backoff – увеличивать промежуток между
опросами экспоненциально
● Строгая валидация данных чаще всего не работает.
Активная валидация по json-schema – приводит к
проблемам, т.к. поставщики на самом деле часто меняют
API.
● Фильтрация данных на html и sql-injections от поставщика.
В итоге: подготовьтесь теоретически
Designing and Deploying Microservices
https://www.nginx.com/resources/library/designing-deploying-m
icroservices/
Best Practices for Building a Microservice
Architecture
http://www.vinaysahni.com/best-practices-for-building-a-micros
ervice-architecture
В итоге: подготовьтесь теоретически
● Обстоятельно выбирайте
технологический стек
● Автоматизируйте все по максимуму
● Думайте не об единичных сущностях, а о
системе в целом
И еще
Спасибо!
Вопросы и ответы
https://fb.me/bahusoff
https://telegram.me/bahusoff
https://github.com/Bahus

More Related Content

What's hot

Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Ontico
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Ontico
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Ontico
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
 
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Badoo Development
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Ontico
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)Ontico
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Ontico
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...Ontico
 
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Ontico
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)Ontico
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 

What's hot (20)

Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)Архитектура поиска в Avito / Андрей Смирнов (Avito)
Архитектура поиска в Avito / Андрей Смирнов (Avito)
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
 
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
 
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
Преждевременная оптимизация архитектуры / Евгений Потапов, Антон Баранов (ITS...
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
 
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
 
Sivko
SivkoSivko
Sivko
 
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 

Similar to «Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co

развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
Symfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork EnterpriseSymfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork EnterpriseDmitry Semenov
 
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Vadim Madison
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияAlexander Byndyu
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Fwdays
 
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?Clouds NN
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Ontico
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_haElena Ometova
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...Evgeny Kokovikhin
 
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...Procontent.Ru Magazine
 

Similar to «Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co (20)

развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Symfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork EnterpriseSymfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork Enterprise
 
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
 
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?
CloudsNN 2013 Демидов Александр. Как жить в облаке без админов?
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
 
Async Python
Async PythonAsync Python
Async Python
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 
Middleware
MiddlewareMiddleware
Middleware
 
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...
Как показывать 200 миллионов баннеров ежедневно и быть готовым показать милли...
 
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...
WapStart: Как показывать 200 миллионов баннеров ежедневно и быть готовым пока...
 
Lyamin ya.roundtable2014
Lyamin ya.roundtable2014Lyamin ya.roundtable2014
Lyamin ya.roundtable2014
 
Oblachnye vychisleniya -_ponyatiya_i_tehnologii
Oblachnye vychisleniya -_ponyatiya_i_tehnologiiOblachnye vychisleniya -_ponyatiya_i_tehnologii
Oblachnye vychisleniya -_ponyatiya_i_tehnologii
 

More from it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...it-people
 
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...it-people
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...it-people
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...it-people
 

More from it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
 
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
 

«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co

  • 1. Микросервисы наносят ответный удар Что нужно знать Python-разработчику о микросервисных архитектурах. в 2017 году (кратко) Чуркин Олег <Rambler&Co>
  • 3. О чем поговорим ● Когда стоит подумать о микросервисной архитектуре
  • 4. О чем поговорим ● Когда стоит подумать о микросервисной архитектуре ● Декомпозиция монолитных приложений
  • 5. О чем поговорим ● Когда стоит подумать о микросервисной архитектуре ● Декомпозиция монолитных приложений ● Требования к приложению
  • 6. О чем поговорим ● Когда стоит подумать о микросервисной архитектуре ● Декомпозиция монолитных приложений ● Требования к приложению ● Отказоустойчивость и стабильность микросервисов
  • 8. Monolith vs Microservices (SOA) Монолитная архитектура
  • 9. Monolith vs Microservices (SOA) Монолитная архитектура Микросервисная архитектура
  • 13. Client: mobile, web-browser MODULES BACKENDFRONTEND Типичный монолит Load balancer / Web server (nginx) Assets / Templates Search Admin / CMS Acquiring / Payments REST API Feedback / Support Chat Reports / Statistics Consumers / Workers Mobile API Authentication / Authorization
  • 16. Client: mobile, web-browser FRONTEND «Распиливаем» монолит Load balancer / Web server (nginx) SPA / Isomorphic application (node.js)
  • 17. Client: mobile, web-browser BACKEND Events Bus / Message broker FRONTEND «Распиливаем» монолит Load balancer / Web server (nginx) SPA / Isomorphic application (node.js) API Gateway / Facade FRONTEND Load balancer / Web server (nginx) SPA / Isomorphic application (node.js)
  • 18. Client: mobile, web-browser BACKEND Events Bus / Message broker FRONTEND «Распиливаем» монолит Load balancer / Web server (nginx) SPA / Isomorphic application (node.js) API Gateway / Facade Feedback / Support Chat Authentication / Authorization Search Admin / CMS Acquiring / Payments REST API / Mobile API Reports / Statistics Consumers / Workers FRONTEND Load balancer / Web server (nginx) SPA / Isomorphic application (node.js)
  • 20. Преимущества микросервисов ● Независимая разработка – технологии, команды и процессы могут быть совершенно разными
  • 21. ● Независимая разработка – технологии, команды и процессы могут быть совершенно разными ● Независимый деплой Преимущества микросервисов
  • 22. Преимущества микросервисов ● Независимая разработка – технологии, команды и процессы могут быть совершенно разными ● Независимый деплой ● Один упал, остальное работает
  • 23. Преимущества микросервисов ● Независимая разработка – технологии, команды и процессы могут быть совершенно разными ● Независимый деплой ● Один упал, остальное работает ● Модульность – просто включитьвыключить, легко удалять код, не такое страшное легаси
  • 24. Преимущества микросервисов ● Независимая разработка – технологии, команды и процессы могут быть совершенно разными ● Независимый деплой ● Один упал, остальное работает ● Модульность – просто включитьвыключить, легко удалять код, не такое страшное легаси ● Децентрализованное управление данными
  • 26. ● Инфраструктура усложнилась – нужно время на доработку и более опытная команда для ее поддержки Микросервисы: trade-offs
  • 27. ● Инфраструктура усложнилась – нужно время на доработку и более опытная команда для ее поддержки ● Появилось больше точек отказа Микросервисы: trade-offs
  • 28. ● Инфраструктура усложнилась – нужно время на доработку и более опытная команда для ее поддержки ● Появилось больше точек отказа ● CPU-вызовы заменились на Network-вызовы: выросла нагрузка на сеть, вызовы стали медленнее и вероятность их отказа выросла Микросервисы: trade-offs
  • 29. Микросервисы: trade-offs ● Инфраструктура усложнилась – нужно время на доработку и более опытная команда для ее поддержки ● Появилось больше точек отказа ● CPU-вызовы заменились на Network-вызовы: выросла нагрузка на сеть, вызовы стали медленнее и вероятность их отказа выросла ● Eventual consistency – нужно подождать, чтобы увидеть результаты изменений
  • 31. ● Небольшая кодовая база, простой/утилитарный проект, нет планов по расширению Микрослужбы: когда еще рано
  • 32. ● Небольшая кодовая база, простой/утилитарный проект, нет планов по расширению ● Трудности обновления инфраструктуры перевешивают плюсы от микросервисов Микрослужбы: когда еще рано
  • 33. Микрослужбы: когда еще рано ● Небольшая кодовая база, простой/утилитарный проект, нет планов по расширению ● Трудности обновления инфраструктуры перевешивают плюсы от микросервисов ● У вас и так все в порядке: быстро разрабатываете; быстро выкладываете в продакшен; пишите красивый, модульный код
  • 35. ● Появилась определенное требование к безопасности, стабильности и скорости разработки Микрослужбы: когда стоит подумать
  • 36. ● Появилась определенное требование к безопасности, стабильности и скорости разработки ● Текущий фреймворк плохо подходит под новые задачи Микрослужбы: когда стоит подумать
  • 37. ● Появилась определенное требование к безопасности, стабильности и скорости разработки ● Текущий фреймворк плохо подходит под новые задачи ● Большая команда и много кода – долгие релизы, частые merge-конфликты Микрослужбы: когда стоит подумать
  • 38. ● Появилась определенное требование к безопасности, стабильности и скорости разработки ● Текущий фреймворк плохо подходит под новые задачи ● Большая команда и много кода – долгие релизы, частые merge-конфликты ● Сильная нагрузка на определенный функционал, его нужно либо переписать либо масштабировать Микрослужбы: когда стоит подумать
  • 39. Микрослужбы: когда стоит подумать ● Появилась определенное требование к безопасности, стабильности и скорости разработки ● Текущий фреймворк плохо подходит под новые задачи ● Большая команда и много кода – долгие релизы, частые merge-конфликты ● Сильная нагрузка на определенный функционал, его нужно либо переписать либо масштабировать ● Долгие деплои, связынные с большим количеством кода и различных обслуживающих операций (скриптов)
  • 40. Что нам нужно сделать (глобально)?
  • 41. Что нам нужно сделать (глобально)? ● Определиться с разбивкой компонентов на сервисы
  • 42. Что нам нужно сделать (глобально)? ● Определиться с разбивкой компонентов на сервисы ● Выбрать технологический стек
  • 43. Что нам нужно сделать (глобально)? ● Определиться с разбивкой компонентов на сервисы ● Выбрать технологический стек ● Адаптировать инфраструктуру
  • 44. Поговорим про технологии, а конкретно про фреймворки.
  • 45. Выбор фреймворка под конкретный сервис/задачи
  • 46. ● CPU-bound vs IO-bound Выбор фреймворка под конкретный сервис/задачи
  • 47. ● CPU-bound vs IO-bound ● Стабильность и безопасность Выбор фреймворка под конкретный сервис/задачи
  • 48. ● CPU-bound vs IO-bound ● Стабильность и безопасность ● Удобство разработки Выбор фреймворка под конкретный сервис/задачи
  • 49. ● CPU-bound vs IO-bound ● Стабильность и безопасность ● Удобство разработки ● Количество доступных «батареек» Выбор фреймворка под конкретный сервис/задачи
  • 50. Выбор фреймворка под конкретный сервис/задачи ● CPU-bound vs IO-bound ● Стабильность и безопасность ● Удобство разработки ● Количество доступных «батареек» ● Производительность
  • 51. Выбор фреймворка под конкретный сервис/задачи ● CPU-bound vs IO-bound ● Стабильность и безопасность ● Удобство разработки ● Количество доступных «батареек» ● Производительность ● Поддержка (LTS релизы)
  • 54. Совет №1: чем стабильнее и функциональнее будет фреймворк, тем меньше головной боли вас ожидает в будущем. Что выбрать?
  • 55. Совет №1: чем стабильнее и функциональнее будет фреймворк, тем меньше головной боли вас ожидает в будущем. Совет №2: не обязательно выбирать микрофреймворк для создания микросервиса. Что выбрать?
  • 57. «Синхронные» – используют модель workers pool, каждый worker приложения работает над одним запросом в единицу времени не прерываясь, оперируют функциями: Django, Flask, Falcon и т.д. Типы web-фреймворков
  • 58. «Синхронные» – используют модель workers pool, каждый worker приложения работает над одним запросом в единицу времени не прерываясь, оперируют функциями: Django, Flask, Falcon и т.д. «Асинхронные» – используют паттерн Eventloop, оперируют корутинами: Tornado, aiohttp, Sanic и т.д. Типы web-фреймворков
  • 60. ● CRUD сервисы для работы с реляционными СУБД: Синхронный фреймворк
  • 61. ● CRUD сервисы для работы с реляционными СУБД: ○ Удобные ORM с богатым функционалом Синхронный фреймворк
  • 62. ● CRUD сервисы для работы с реляционными СУБД: ○ Удобные ORM с богатым функционалом ○ Удобные инструменты для создания и проведения миграций Синхронный фреймворк
  • 63. ● CRUD сервисы для работы с реляционными СУБД: ○ Удобные ORM с богатым функционалом ○ Удобные инструменты для создания и проведения миграций ○ Ограничения psycopg2 при работы с асинхронными запросами (autocommit, set_client_encoding, executemany, large objects, named cursors) Синхронный фреймворк
  • 64. ● CRUD сервисы для работы с реляционными СУБД: ○ Удобные ORM с богатым функционалом ○ Удобные инструменты для создания и проведения миграций ○ Ограничения psycopg2 при работы с асинхронными запросами (autocommit, set_client_encoding, executemany, large objects, named cursors) ○ aiomysql – еще в alpha Синхронный фреймворк
  • 65. ● CRUD сервисы для работы с реляционными СУБД: ○ Удобные ORM с богатым функционалом ○ Удобные инструменты для создания и проведения миграций ○ Ограничения psycopg2 при работы с асинхронными запросами (autocommit, set_client_encoding, executemany, large objects, named cursors) ○ aiomysql – еще в alpha ● Админки и интерфейсы CMS Синхронный фреймворк
  • 66. ● CRUD сервисы для работы с реляционными СУБД: ○ Удобные ORM с богатым функционалом ○ Удобные инструменты для создания и проведения миграций ○ Ограничения psycopg2 при работы с асинхронными запросами (autocommit, set_client_encoding, executemany, large objects, named cursors) ○ aiomysql – еще в alpha ● Админки и интерфейсы CMS ● REST поверх CRUD – за счет мощного Django Rest Framework Синхронный фреймворк
  • 67. ● CRUD сервисы для работы с реляционными СУБД: ○ Удобные ORM с богатым функционалом ○ Удобные инструменты для создания и проведения миграций ○ Ограничения psycopg2 при работы с асинхронными запросами (autocommit, set_client_encoding, executemany, large objects, named cursors) ○ aiomysql – еще в alpha ● Админки и интерфейсы CMS ● REST поверх CRUD – за счет мощного Django Rest Framework ● Сервисы требующие повышенного отношения к безопасности (платежи, важные пользовательские данные и т.д.) Синхронный фреймворк
  • 69. ● Много IO-bound задач, мало CPU-bound задач: Асинхронный фреймворк
  • 70. ● Много IO-bound задач, мало CPU-bound задач: ○ Прокси сервисы Асинхронный фреймворк
  • 71. ● Много IO-bound задач, мало CPU-bound задач: ○ Прокси сервисы ○ HTTP-интеграции со сторонними сервисами Асинхронный фреймворк
  • 72. ● Много IO-bound задач, мало CPU-bound задач: ○ Прокси сервисы ○ HTTP-интеграции со сторонними сервисами ○ Обработчики очередей (workers/consumers) Асинхронный фреймворк
  • 73. ● Много IO-bound задач, мало CPU-bound задач: ○ Прокси сервисы ○ HTTP-интеграции со сторонними сервисами ○ Обработчики очередей (workers/consumers) ○ Facade-сервисы Асинхронный фреймворк
  • 74. Асинхронный фреймворк ● Много IO-bound задач, мало CPU-bound задач: ○ Прокси сервисы ○ HTTP-интеграции со сторонними сервисами ○ Обработчики очередей (workers/consumers) ○ Facade-сервисы ● Чаты, мессенджеры
  • 75. Асинхронный фреймворк ● Много IO-bound задач, мало CPU-bound задач: ○ Прокси сервисы ○ HTTP-интеграции со сторонними сервисами ○ Обработчики очередей (workers/consumers) ○ Facade-сервисы ● Чаты, мессенджеры ● Сервисы для работы с websockets и server-sent events
  • 76. «Детские болячки» в асинхронном мире
  • 77. «Детские болячки» в асинхронном мире ● aiohttp pre 2.0 era ○ Socket leak and incorrect connection close ○ Обратно несовместимые изменения ○ Запутывающие ошибки вида "error handling response" и "cancelled error"
  • 78. «Детские болячки» в асинхронном мире ● aiohttp pre 2.0 era ○ Socket leak and incorrect connection close ○ Обратно несовместимые изменения ○ Запутывающие ошибки вида "error handling response" и "cancelled error" ● pewee_async ○ Нет поддержки агрегационных запросов ○ Неправильно обрабатываются закрытые соединения
  • 79. «Детские болячки» в асинхронном мире ● aiohttp pre 2.0 era ○ Socket leak and incorrect connection close ○ Обратно несовместимые изменения ○ Запутывающие ошибки вида "error handling response" и "cancelled error" ● pewee_async ○ Нет поддержки агрегационных запросов ○ Неправильно обрабатываются закрытые соединения ● asyncio_redis ○ дедлок
  • 80. Но не стоит сгущать краски Twisted и Tornado – зрелые, стабильные, функциональные.
  • 81. aiolibs https://github.com/aio-libs ● aiohttp (post 2.0 era) ● aioredis ● aiopg ● aiomysql
  • 82. Новые перспективные игроки Sanic набирает популярность, как «асинхронный Flask» https://github.com/channelcat/sanic
  • 84. Думаем о приложении/сервисе ● Архитектурный дизайн
  • 85. Думаем о приложении/сервисе ● Архитектурный дизайн ● The Twelve-Factor App: https://12factor.net/
  • 86. Думаем о приложении/сервисе ● Архитектурный дизайн ● The Twelve-Factor App: https://12factor.net/ ● API дизайн (версионирование, обратная совместимость)
  • 87. Думаем о приложении/сервисе ● Архитектурный дизайн ● The Twelve-Factor App: https://12factor.net/ ● API дизайн (версионирование, обратная совместимость) ● Культура DevOps (описание инфраструктуры, infrastructure as code)
  • 88. Думаем о приложении/сервисе ● Архитектурный дизайн ● The Twelve-Factor App: https://12factor.net/ ● API дизайн (версионирование, обратная совместимость) ● Культура DevOps (описание инфраструктуры, infrastructure as code) ● Контейнеризация (docker)
  • 89. ● Маштабирование Думаем о приложении/сервисе
  • 90. ● Маштабирование ● Не храним состояние (stateless) Думаем о приложении/сервисе
  • 91. ● Маштабирование ● Не храним состояние (stateless) ● Шаблон сервиса (https://github.com/audreyr/cookiecutter) Думаем о приложении/сервисе
  • 92. ● Маштабирование ● Не храним состояние (stateless) ● Шаблон сервиса (https://github.com/audreyr/cookiecutter) ● Обнаружение сервисов (service discovery) Думаем о приложении/сервисе
  • 93. ● Маштабирование ● Не храним состояние (stateless) ● Шаблон сервиса (https://github.com/audreyr/cookiecutter) ● Обнаружение сервисов (service discovery) ● Взаимодействие между сервисами (IPC: json, thrift, protobuf) Думаем о приложении/сервисе
  • 95. Отказоустойчивость и стабильность ● Понятие recovery – контракт на то, как вести себя сервису в случае ошибок, которые он может обработать и которые не может
  • 96. ● Понятие recovery – контракт на то, как вести себя сервису в случае ошибок, которые он может обработать и которые не может ● Обязательные и короткие таймауты Отказоустойчивость и стабильность
  • 97. ● Понятие recovery – контракт на то, как вести себя сервису в случае ошибок, которые он может обработать и которые не может ● Обязательные и короткие таймауты ● Circuit Breakers – не заваливать сервис запросами, если он умирает. Отказоустойчивость и стабильность
  • 98. ● Понятие recovery – контракт на то, как вести себя сервису в случае ошибок, которые он может обработать и которые не может ● Обязательные и короткие таймауты ● Circuit Breakers – не заваливать сервис запросами, если он умирает. ● Fail fast – лучше сразу упасть, чем ждать Отказоустойчивость и стабильность
  • 99. ● Понятие recovery – контракт на то, как вести себя сервису в случае ошибок, которые он может обработать и которые не может ● Обязательные и короткие таймауты ● Circuit Breakers – не заваливать сервис запросами, если он умирает. ● Fail fast – лучше сразу упасть, чем ждать ● Общие клиенты вынесены в зависимости Отказоустойчивость и стабильность
  • 100. Отказоустойчивость и стабильность ● Обязательное логирование, метрики и мониторинг, авторестарт
  • 101. Отказоустойчивость и стабильность ● Обязательное логирование, метрики и мониторинг, авторестарт ● Правильная обработка сигналов SIGTERM и SIGINT
  • 102. Отказоустойчивость и стабильность ● Обязательное логирование, метрики и мониторинг, авторестарт ● Правильная обработка сигналов SIGTERM и SIGINT ● Сохранение обратной совместимости в рамках одной версии API
  • 103. Отказоустойчивость и стабильность ● Обязательное логирование, метрики и мониторинг, авторестарт ● Правильная обработка сигналов SIGTERM и SIGINT ● Сохранение обратной совместимости в рамках одной версии API ● Connection pools – правильно обрабатываем закрытые соединения, иначе zombie-service.
  • 104. Отказоустойчивость и стабильность ● Обязательное логирование, метрики и мониторинг, авторестарт ● Правильная обработка сигналов SIGTERM и SIGINT ● Сохранение обратной совместимости в рамках одной версии API ● Connection pools – правильно обрабатываем закрытые соединения, иначе zombie-service. ● Request Id – подписываем (headers) все запросы, чтобы агрегировать логи между сервисами
  • 105. Классические ошибки при внедрении и разработке микросервисов
  • 106. ● Переход от вызовов функций к вызовам сервисов без адаптации архитектуры Классические ошибки при внедрении и разработке микросервисов
  • 107. ● Переход от вызовов функций к вызовам сервисов без адаптации архитектуры ● Незафиксированные версии зависимостей (requirements.txt) Классические ошибки при внедрении и разработке микросервисов
  • 108. ● Переход от вызовов функций к вызовам сервисов без адаптации архитектуры ● Незафиксированные версии зависимостей (requirements.txt) ● Слишком много CPU-bound задач в асинхронных сервисах, например json-сериализация. IO-bound в асинхронных. Классические ошибки при внедрении и разработке микросервисов
  • 109. ● Переход от вызовов функций к вызовам сервисов без адаптации архитектуры ● Незафиксированные версии зависимостей (requirements.txt) ● Слишком много CPU-bound задач в асинхронных сервисах, например json-сериализация. IO-bound в асинхронных. ● loop.run_in_executor не всегда спасет от проблем с CPU-bound задачами Классические ошибки при внедрении и разработке микросервисов
  • 110. ● Переход от вызовов функций к вызовам сервисов без адаптации архитектуры ● Незафиксированные версии зависимостей (requirements.txt) ● Слишком много CPU-bound задач в асинхронных сервисах, например json-сериализация. IO-bound в асинхронных. ● loop.run_in_executor не всегда спасет от проблем с CPU-bound задачами ● Использование глобальных объектов для хранения состояния запроса в памяти асинхронного приложения Классические ошибки при внедрении и разработке микросервисов
  • 111. ● Длинные последовательные цепочки запросов между сервисами, необходимые для формирования данных. Классические ошибки при внедрении и разработке микросервисов
  • 112. ● Длинные последовательные цепочки запросов между сервисами, необходимые для формирования данных. ● «Сервис на каждый чих» Классические ошибки при внедрении и разработке микросервисов
  • 113. ● Длинные последовательные цепочки запросов между сервисами, необходимые для формирования данных. ● «Сервис на каждый чих» ● Один источник данных для всех сервисов Классические ошибки при внедрении и разработке микросервисов
  • 114. ● Длинные последовательные цепочки запросов между сервисами, необходимые для формирования данных. ● «Сервис на каждый чих» ● Один источник данных для всех сервисов ● Копипаста кода между сервисами, вместо установки зависимостей (если у вас не монорепозиторий) Классические ошибки при внедрении и разработке микросервисов
  • 115. ● Длинные последовательные цепочки запросов между сервисами, необходимые для формирования данных. ● «Сервис на каждый чих» ● Один источник данных для всех сервисов ● Копипаста кода между сервисами, вместо установки зависимостей (если у вас не монорепозиторий) ● Отсутствие автоматизации версионирования сервисов (versioneer, bumpversion) Классические ошибки при внедрении и разработке микросервисов
  • 116. ● Длинные последовательные цепочки запросов между сервисами, необходимые для формирования данных. ● «Сервис на каждый чих» ● Один источник данных для всех сервисов ● Копипаста кода между сервисами, вместо установки зависимостей (если у вас не монорепозиторий) ● Отсутствие автоматизации версионирования сервисов (versioneer, bumpversion) ● Если где-то соединение открывается, то где-то оно должно быть закрыто Классические ошибки при внедрении и разработке микросервисов
  • 118. ● Правильно обрабатывать ошибки (коды ответа, правильный recovery) Интеграции со сторонними сервисами
  • 119. ● Правильно обрабатывать ошибки (коды ответа, правильный recovery) ● Exponential backoff – увеличивать промежуток между опросами экспоненциально Интеграции со сторонними сервисами
  • 120. Интеграции со сторонними сервисами ● Правильно обрабатывать ошибки (коды ответа, правильный recovery) ● Exponential backoff – увеличивать промежуток между опросами экспоненциально ● Строгая валидация данных чаще всего не работает. Активная валидация по json-schema – приводит к проблемам, т.к. поставщики на самом деле часто меняют API.
  • 121. Интеграции со сторонними сервисами ● Правильно обрабатывать ошибки (коды ответа, правильный recovery) ● Exponential backoff – увеличивать промежуток между опросами экспоненциально ● Строгая валидация данных чаще всего не работает. Активная валидация по json-schema – приводит к проблемам, т.к. поставщики на самом деле часто меняют API. ● Фильтрация данных на html и sql-injections от поставщика.
  • 122. В итоге: подготовьтесь теоретически
  • 123. Designing and Deploying Microservices https://www.nginx.com/resources/library/designing-deploying-m icroservices/ Best Practices for Building a Microservice Architecture http://www.vinaysahni.com/best-practices-for-building-a-micros ervice-architecture В итоге: подготовьтесь теоретически
  • 124. ● Обстоятельно выбирайте технологический стек ● Автоматизируйте все по максимуму ● Думайте не об единичных сущностях, а о системе в целом И еще