SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
12-факторные приложения
готовимся к масштабу и микросервисам
Денис Потапов
The Twelve-Factor App
12factor.net
bit.ly/12factor-ua
12-факторные приложения
современное веб приложение от heroku
подключение новых разработчиков к проекту
переносимость между средами выполнения
непрерывное развертывание
12-факторные приложения
современное веб приложение от heroku
работа на современных облачных платформах
масштабироваться без изменений
deis, fortrabbit
docker
I
Кодовая база
Codebase
I. Один репозиторий — множество
развертываний
система контроля версий
приложение — один репозиторий
несколько репозиториев — распределенная система
общий код — библиотека
I. Один репозиторий — множество
развертываний
II
Зависимости
Dependencies
II. Явные и изолированные зависимости
системные пакеты
пакеты приложения («vendoring»)
зависимости приложения явные
II. Явные и изолированные зависимости
декларация зависимостей
изоляция зависимостей
только совместное использование
даже для «обычных» пакетов (curl, ImageMagic)
II. Явные и изолированные зависимости
  декларация изоляция
NodeJS NPM NVM
Ruby Gem Bundler Gem Bundler, RVM
PHP Composer ?
III
Конфигурация
Config
III. Конфигурация — свойства среды
выполнения
Cтрогое разделения конфигурации и кода:
конфигурация меняется между развёртывания (БД, сторонние
службы, API)
код не меняется (маршруты, контроллеры)
код можно опубликовать без компроментации
III. Конфигурация — свойства среды
выполнения
Константы в коде
Конфигурационные файлы (config/database.yml):
сохранить в коде по ошибке
разные форматы и места
специфичны для языка и фреймворка
III. Конфигурация — свойства среды
выполнения
Конфигурация в переменных окружения (env vars)
/ / P H P
$ d b H o s t = g e t e n v ( ' D B _ H O S T ' ) ;
/ / R u b y
E N V [ " M Y _ C O N F I G " ]
все настройки собранны в одном месте
не зависят от языка
III. Конфигурация — свойства среды
выполнения
Группировка конфигураций (development, test, production)
рост количества (staging, qa)
поддержка
каждая переменная независима
IV
Сторонние службы
Backing Services
IV. Локальные и сторонние службы
IV. Локальные и сторонние службы
Код не делает различий между локальными и сторонними
службами
замена локального на сторонний (SMTP, DB)
расположение и учетные данные в конфигурации
ресурс можно отключать и подключать
V
Сборка, релиз, выполнение
Build, release, run
V. Строгое разделение сборки, релиза и
выполнения
V. Строгое разделение сборки, релиза и
выполнения
сборка может быть сложной
нельзя внести изменения в релиз
релизы с идентификатором
возможность откатить релиз
выполнение должно быть простым
VI
Процессы
Processes
VI. Приложение – набор процессов
не сохраняют внутреннее состояние
(stateless)
не имеют разделяемых данных
(share-nothing)
следующий запрос — другому процессу
VI. Приложение – набор процессов
данные пользователя в БД
упаковка ресурсов
(asset)
на этапе сборки
сессии в хранилище (Memcached, Redis)
VII
Привязка портов
Port binding
VII. Приложение не зависит от сервера
Приложение в контейнере веб-сервера
PHP в Apache HTTPD
Java в Tomcat
VII. Приложение не зависит от сервера
Приложение 12 факторов экспортирует HTTP сервис
объявление зависимости:
Tornado в Python
Thin в Ruby
Jetty в Java
ReactPHP в PHP
может выступать сторонней службой
VIII
Конкурентность
Concurrency
VIII. Масштаб с помощью процессов
VIII. Масштаб с помощью процессов
процессы — сущности первого класса
различная нагрузка — разные типы процессов
отсутствие разделяемых данных при масштабе
VIII. Масштаб с помощью процессов
Выполняйте, а не запускайте, процессы
Run not start
контроль выполнения
маршрутизация вывода
реагирование на падение
IX
Одноразовость
Disposability
IX. Быстрый запуск и корректное
завершение
минимальное время запуска
корректное завершение
устойчивые к падению
IX. Быстрый запуск и корректное
завершение
короткие HTTP запросы
фоновые задачи возвращать в очередь
повторная входимость (транзакции)
X
Паритет разработки/работы
Dev/prod parity
X. Приблизьте разработку к
развертыванию
разное время
разные люди
разные инструменты
X. Приблизьте разработку к
развертыванию
одно время
одни люди
одни интсрументы
X. Приблизьте разработку к
развертыванию
X. Приблизьте разработку к
развертыванию
адаптеры (ActiveRecord, Celery)
высокая стоимость несовместимости
простота установки сторонних служб (Chef, Puppet, Vagrant …)
адаптеры только для портирования
XI
Журналирование
Logs
XI. Журнал в stdout
Журнал – это поток событий всех сервисов
Приложение не хранит и не перенаправляет журнал
Журнал без буферизации в stdout
XI. Журнал в stdout
XI. Журнал в stdout
Индексация и анализ журналов
Splunk, Loggly, Hadoop/Hive
поиск
тренды
оповещения
XII
Процессы администрирования
Admin processes
XII. Процессы администрирования
миграции
консоль
разовые скрипты
XII. Процессы администрирования
Запуск на уровне релиза
кодовая база
конфигурация
зависимости
12-факторные приложения
I. Один репозиторий — множество развертываний
II. Явные и изолированные зависимости
III. Конфигурация — свойства среды выполнения
IV. Локальные и сторонние службы
V. Строгое разделение сборки, релиза и выполнения
VI. Приложение – набор процессов
12-факторные приложения
VII. Приложение не зависит от сервера
VIII. Масштаб с помощью процессов
IX. Быстрый запуск и корректное завершение
X. Приблизьте разработку к развертыванию
XI. Журнал в stdout
XII. Процессы администрирования
Вопросы?

Mais conteúdo relacionado

Mais procurados

Стажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. GitСтажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. Git
7bits
 
OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)
OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)
OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)
GeeksLab Odessa
 

Mais procurados (20)

Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бок
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировРазвёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
 
Liferay Portal и приемы разработки
Liferay Portal и приемы разработкиLiferay Portal и приемы разработки
Liferay Portal и приемы разработки
 
Open Source - Bзгляд из вражeскoгo лагeря
Open Source - Bзгляд из вражeскoгo лагeряOpen Source - Bзгляд из вражeскoгo лагeря
Open Source - Bзгляд из вражeскoгo лагeря
 
Gitify - швейцарский нож для MODX-воина
Gitify - швейцарский нож для MODX-воинаGitify - швейцарский нож для MODX-воина
Gitify - швейцарский нож для MODX-воина
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
 
Как не создавать себе проблем, разрабатывая на Alfresco
Как не создавать себе проблем, разрабатывая на AlfrescoКак не создавать себе проблем, разрабатывая на Alfresco
Как не создавать себе проблем, разрабатывая на Alfresco
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
 
Стажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. GitСтажировка-2013, разработчики, занятие 10. Git
Стажировка-2013, разработчики, занятие 10. Git
 
OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)
OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)
OpenStack - открытая облачная платформа (Руслан Киянчук, Mirantis)
 
OpenShift 2.2
OpenShift 2.2OpenShift 2.2
OpenShift 2.2
 
Cоздаем облачную среду на базе open-sourсe решения OpenStack
Cоздаем облачную среду на базе open-sourсe решения OpenStackCоздаем облачную среду на базе open-sourсe решения OpenStack
Cоздаем облачную среду на базе open-sourсe решения OpenStack
 
Dotnet
DotnetDotnet
Dotnet
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Mirantis OpenStack. Обзор
Mirantis OpenStack. ОбзорMirantis OpenStack. Обзор
Mirantis OpenStack. Обзор
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
OpenStack Murano: управления приложениями в облаке на платформах Linux, Solar...
OpenStack Murano: управления приложениями в облаке на платформах Linux, Solar...OpenStack Murano: управления приложениями в облаке на платформах Linux, Solar...
OpenStack Murano: управления приложениями в облаке на платформах Linux, Solar...
 

Semelhante a WebCamp:Back-end Developers Day - Денис Потапов "Простыми словами о 12-факторных приложениях — готовимся к масштабу и микросервисам"

DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)
Alexey Kachayev
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Minsk PHP User Group
 

Semelhante a WebCamp:Back-end Developers Day - Денис Потапов "Простыми словами о 12-факторных приложениях — готовимся к масштабу и микросервисам" (20)

Parallels VDI
Parallels VDIParallels VDI
Parallels VDI
 
IIS7 possibilities
IIS7 possibilitiesIIS7 possibilities
IIS7 possibilities
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Самодиагностика сервисов на базе платформы .NET
Самодиагностика сервисов на базе платформы .NETСамодиагностика сервисов на базе платформы .NET
Самодиагностика сервисов на базе платформы .NET
 
Enabling Docker Applications on OpenStack (using Murano)
Enabling Docker Applications on OpenStack (using Murano) Enabling Docker Applications on OpenStack (using Murano)
Enabling Docker Applications on OpenStack (using Murano)
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Symfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork EnterpriseSymfony в архитектуре Upwork Enterprise
Symfony в архитектуре Upwork Enterprise
 
Red Hat Enterprise Virtualization. Технический обзор
Red Hat Enterprise Virtualization. Технический обзорRed Hat Enterprise Virtualization. Технический обзор
Red Hat Enterprise Virtualization. Технический обзор
 
Онлайн миграция контейнеров. Взгляд изнутри
Онлайн миграция контейнеров. Взгляд изнутриОнлайн миграция контейнеров. Взгляд изнутри
Онлайн миграция контейнеров. Взгляд изнутри
 
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft AzureJelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
Jelastic PaaS for DevOps: Hybrid Cloud based on Microsoft Azure
 
DevOps
DevOps DevOps
DevOps
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)
 
Horizon using scenarios
Horizon using scenariosHorizon using scenarios
Horizon using scenarios
 
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор БогатырёвОбзор Drupal 8 by Andrei Khalipau, Kostya  Halipov and Егор Богатырёв
Обзор Drupal 8 by Andrei Khalipau, Kostya Halipov and Егор Богатырёв
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
 
Совместные решения Citrix и Dell для правильной организации рабочих мест
Совместные решения Citrix и Dell для правильной организации рабочих местСовместные решения Citrix и Dell для правильной организации рабочих мест
Совместные решения Citrix и Dell для правильной организации рабочих мест
 
Cyber Bionics #iotconfua
Cyber Bionics #iotconfuaCyber Bionics #iotconfua
Cyber Bionics #iotconfua
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 

Mais de GeeksLab Odessa

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
GeeksLab Odessa
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
GeeksLab Odessa
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
GeeksLab Odessa
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
GeeksLab Odessa
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
GeeksLab Odessa
 

Mais de GeeksLab Odessa (20)

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский Виктор
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображение
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
 

WebCamp:Back-end Developers Day - Денис Потапов "Простыми словами о 12-факторных приложениях — готовимся к масштабу и микросервисам"