SlideShare a Scribd company logo
IT-инфраструктура. FAQ для разработчика
Чинков Михаил
FunCorp
mikhail.chinkov@fun.co
План
1. Проблема
2. Предметные области
3. Культура
Проблема
Терминология
Инфраструктура - совокупность окружений организации/сервиса, состоящая
из сервисов приложения и вспомогательных сервисов.
Production - окружение сервиса, доступное для внешнего пользования.
Проблема 1
● В команде 3-5 разработчиков
● Нужно настраивать инфраструктуру
● Нужно автоматизировать рутинные задачи
● Никто не знает, как это сделать хорошо
Проблема 2
● Недостаток знаний об инфраструктуре
● Отсутствие коммуникаций с Operations
● “У меня локально все работает”(с).
Алгоритм управления инфраструктурой
● Разделение задачи на несколько предметных областей
● Выбор базовых продуктов
● Баланс между простотой и соответствии задачам
● Описание задачи в исходном коде + версионирование
Предметные области
Платформа
Удаленный хостинг
● Оборудование на стороне провайдера
● Свобода в выборе ОС/программного стека
● Необходимо заранее заказывать железо
● Отсутствие API
Решения: Hetzner, OVH
Платформа
Private cloud
● Платформа виртуализации поверх железа
● Развертывание ВМ по требованию
● Ограничение - аппаратные ресурсы
● Кластеризация
● Возможен сторонний хостинг
● Наличие API
Решения:
● Платформы - VMware, OpenStack
● Хостинг - Rackspace, Selectel
Платформа
PAAS
● Решение большинства проблем
● Развертывание application/DB серверов
● Поддержка железа от провайдера
● Вспомогательные сервисы (DNS/mail/CI)
● Гибкая ценовая политика
Решения: DigitalOcean, Heroku
Платформа
Public Cloud
● Полноценная инфраструктура
● Внешние сервисы как часть продукта
● Нет ограничений в ресурсах
● Автоматизированное масштабирование
● Многофункциональный API
Решения: AWS, GCP, MS Azure
Виртуализация
● Изоляция на уровне ОС
● Запрос ресурсов по требованию
● Кроссплатформенность
● Абстрагирование от железа
● Overhead в производительности
Контейнеризация
● Изоляция на уровне процесса
● Отсутствие конфликтов зависимостей
● Быстрый старт
● Отсутствие накладных расходов
● Повторение production-окружения
● Единый стандарт поставки продукта
Решения: Docker, rkt
Docker
● Простота
● Масштабируемость
● Долгосрочная поддержка
● Минимизация конфигурации серверов
● Описание артефакта в DSL-коде
Но..
● Не подходит для stateful-сервисов/БД
● Все еще есть баги
Пример: Java-приложение
FROM openjdk:8-alpine
MAINTAINER Mikhail Chinkov <mikhail.chinkov@fun.co>
RUN apk update && apk add maven
WORKDIR /source
COPY ./ ./
RUN mvn clean package && 
mkdir -p /app && 
cp /source/target/users-1.0-SNAPSHOT.jar /app/users.jar
WORKDIR /app
EXPOSE 8080
CMD ["java", "-jar", "users.jar"]
Оркестрация контейнеров
● Равномерное распределение
● Запуск задач по расписанию
● Единая платформа для приложений
● Концепция микросервисов
Но..
● Все еще сложно и сыро
Решения: Kubernetes, Mesos+Marathon, Nomad+Consul, ECS, Docker Swarm
Пример: спецификация сервиса в ECS
{
"containerDefinitions": [
{
"name": "users",
"image": "my-docker-repo.com/users:latest",
"memory": 2048,
"cpu": 0,
"essential": true,
"portMappings": [
{
"hostPort": 0,
"containerPort": 8080,
"protocol": "tcp"
}
]
],
"family": "users"
}
Системы управления конфигурациями
● Автоматизация настройки серверов
● Декларативное описание
● Замена документации
● Инфраструктура как код
● Отсутствие configuration drift
Решения: Ansible, Chef, Puppet, SaltStack
Пример: настройка Nginx + PHP-FPM
- name: Install nginx
package: name=nginx state=present
- name: Copy nginx configuration for wordpress
template: src=default.conf dest=/etc/nginx/conf.d/default.conf
notify: restart nginx
- name: Install php-fpm and deps
package: name={{ item }} state=present
with_items:
- php
- php-fpm
- php-mbstring
- php-mysql
- name: Copy php-fpm configuration
template: src=wordpress.conf dest=/etc/php-fpm.d/
notify: restart php-fpm
Мониторинг
● Визуализация работы приложения
● Отслеживание утилизации ресурсов
● Проверка гипотез
Решения:
● SAAS (Datadog)
● Self-hosted (Prometheus+Grafana, Statsd+Graphite/InfluxDB+Grafana)
APM
● Измерение производительности сервиса
● Отображение ошибок на клиентах/сервере
● Debug узких мест
Решения:
● Измерения - NewRelic, AppDynamics
● Ошибки - Sentry, Rollbar, Crashlytics
● Debug - CLI (strace/ltrace/dtrace, gdb, perf)
● Toolkit от базы данных
Incident management
● Система агрегации алертов
● Оперативное реагирование на отказы
● Повышенная ответственность
Решения: PagerDuty, OpsGenie, VictorOps
Логгирование
● Текстовое отображение работы
сервиса
● Отслеживание действий
пользователя
● Централизованный сбор логов
Решения:
● SAAS - SumoLogic, Loggly, Logsene
● Self-hosted - Graylog, ELK
Релиз-инжиниринг
● Оптимизация скорости поставки
● Быстрый feedback от системы
● Автоматизация прогона тестов
● Безболезненный deployment
Решения:
SAAS (TravisCI, CircleCI, Shippable, Drone.io)
Self-hosted (Jenkins, Concourse, Teamcity, Bamboo)
Пример: описание сборки в Jenkins
node('build') {
stage ('Checkout') {
checkout scm
}
stage ('Pull the build cache') {
dockerlib.PullImage(docker_server, build_cache)
}
stage ('Build and test the image') {
dockerlib.BuildImage(docker_server, new_image, build_cache, version)
}
stage ('Push the image') {
dockerlib.PushImage(docker_server, new_image)
}
stage ('Upload Beanstalk configuration') {
dir('deploy') {
beanstalk.UploadConfiguration(application, version)
}
}
}
Базы данных
● Никогда не забывать про бэкапы
● Лучшие рекомендации - в доках
● Надежная эксплуатация
● Предметная область первична
Прочие инфраструктурные сервисы
● Контроль версий (Github/Bitbucket/Gitlab)
● Управление проектами (JIRA/Trello/Youtrack)
● DNS-сервера (GoDaddy, Amazon Route53)
● LDAP-сервера (лучше не надо)
Культура
DevOps
● Это культура + совокупность
практик
● Основа состоит из Agile и CALMS*
● Это не про технологии
● Это нельзя купить/продать
● DevOps-инженеры - фикция
* CALMS - Culture, Automation, Lean, Measurement, Sharing
SRE
● Посади разработчика в Operations
● Работает в нескольких
технологических компаниях
● Automation, self-healing systems,
velocity etc.
● Не может работать везде по
определению
Best practices
● Рассматривайте всю компанию как единую команду
● Больше общайтесь с людьми
● Делайте акцент на постановку задачи и планирование
● Потребности клиента в первую очередь
Выводы
● Управлять инфраструктурой не так сложно, как кажется
● Старайтесь автоматизировать установку и конфигурацию
● Стремитесь описать все процессы в исходном коде
● Чем лучше сделаете, тем больше времени останется на разработку
Спасибо за внимание
https://myopsblog.wordpress.com/
https://www.facebook.com/mchinkov
michael.chinkov@gmail.com
https://www.slideshare.net/MikhailChinkov

More Related Content

PPTX
Cистемы автоматической сборки проектов (Полина Фоминых)
PDF
Введение в maven
PDF
Иван Крутов - Автоматизация сборки Java-проекта
PPTX
Sql server clr integration
PPTX
Maven 3 : уличная магия
PPTX
Управление облачной инфраструктурой
PPT
Maven как средство сборки проекта
Cистемы автоматической сборки проектов (Полина Фоминых)
Введение в maven
Иван Крутов - Автоматизация сборки Java-проекта
Sql server clr integration
Maven 3 : уличная магия
Управление облачной инфраструктурой
Maven как средство сборки проекта

What's hot (20)

PPTX
Silverlight 4, есть ли жизнь на десктопе
PPTX
Мастер класс- Maven + Jenkins
PPTX
JavaScript-модули "из прошлого в будущее"
PDF
Jiramania презентации @augspb
PDF
Распределённое нагрузочное тестирование на Java
PDF
CD with Jenkins. Lessons Learned
PPTX
Kubernetes
PDF
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
PDF
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
PPTX
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
PPTX
Test driven development in net
PPTX
Docker в виртуальной среде VMware
PDF
Артём Ерошенко «Рецепт приготовления облачных тестингов»
PPT
Инструментация среды исполнения в арсенале тестировщика
PPTX
Основы и нюансы параллельного тестрования
PDF
Highload 2014. PostgreSQL: ups, DevOps.
PPTX
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
PPTX
Автоматизация тестирования многопоточности
PDF
Continuous Delivery with Jenkins: Lessons Learned
PPT
Ядро автоматизации под микро-сервисную архитектуру
Silverlight 4, есть ли жизнь на десктопе
Мастер класс- Maven + Jenkins
JavaScript-модули "из прошлого в будущее"
Jiramania презентации @augspb
Распределённое нагрузочное тестирование на Java
CD with Jenkins. Lessons Learned
Kubernetes
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Test driven development in net
Docker в виртуальной среде VMware
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Инструментация среды исполнения в арсенале тестировщика
Основы и нюансы параллельного тестрования
Highload 2014. PostgreSQL: ups, DevOps.
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Автоматизация тестирования многопоточности
Continuous Delivery with Jenkins: Lessons Learned
Ядро автоматизации под микро-сервисную архитектуру
Ad

Similar to IT-инфраструктура. FAQ для разработчика (20)

PDF
DevOps в Agile среде. Как, почему и когда инструменты помогают.
PDF
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
PDF
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
PPTX
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
PDF
DevOps и системы управления конфигурацией. SECON 2015
PDF
PDF
PPTX
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PDF
[Ru] Cocaine Platform – A Closer Look
PDF
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
PDF
OTUS Infrastructure as Code
PDF
"Девопс - это не только для программистов. Практические примеры из жизни одно...
PDF
Клуб Большого мозга - DevOps Evening
PDF
"Cocaine — облачная платформа Яндекса". Андрей Сибирёв, Яндекс
PPTX
Опыт построения микросервисной архитектуры в цифровом банке
PDF
Развитие решений Cisco для ЦОД глазами специалиста по серверам и приложениям...
PDF
Инженерный дзен. Непрерывные изменения (Александр Титов)
PDF
Страх и ненависть в мире релиз-инжиниринга
PPTX
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
DevOps и системы управления конфигурацией. SECON 2015
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Вадим Мадисон "Опыт разработки через микросервисы"
[Ru] Cocaine Platform – A Closer Look
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
OTUS Infrastructure as Code
"Девопс - это не только для программистов. Практические примеры из жизни одно...
Клуб Большого мозга - DevOps Evening
"Cocaine — облачная платформа Яндекса". Андрей Сибирёв, Яндекс
Опыт построения микросервисной архитектуры в цифровом банке
Развитие решений Cisco для ЦОД глазами специалиста по серверам и приложениям...
Инженерный дзен. Непрерывные изменения (Александр Титов)
Страх и ненависть в мире релиз-инжиниринга
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Ad

IT-инфраструктура. FAQ для разработчика

  • 1. IT-инфраструктура. FAQ для разработчика Чинков Михаил FunCorp mikhail.chinkov@fun.co
  • 2. План 1. Проблема 2. Предметные области 3. Культура
  • 4. Терминология Инфраструктура - совокупность окружений организации/сервиса, состоящая из сервисов приложения и вспомогательных сервисов. Production - окружение сервиса, доступное для внешнего пользования.
  • 5. Проблема 1 ● В команде 3-5 разработчиков ● Нужно настраивать инфраструктуру ● Нужно автоматизировать рутинные задачи ● Никто не знает, как это сделать хорошо
  • 6. Проблема 2 ● Недостаток знаний об инфраструктуре ● Отсутствие коммуникаций с Operations ● “У меня локально все работает”(с).
  • 7. Алгоритм управления инфраструктурой ● Разделение задачи на несколько предметных областей ● Выбор базовых продуктов ● Баланс между простотой и соответствии задачам ● Описание задачи в исходном коде + версионирование
  • 9. Платформа Удаленный хостинг ● Оборудование на стороне провайдера ● Свобода в выборе ОС/программного стека ● Необходимо заранее заказывать железо ● Отсутствие API Решения: Hetzner, OVH
  • 10. Платформа Private cloud ● Платформа виртуализации поверх железа ● Развертывание ВМ по требованию ● Ограничение - аппаратные ресурсы ● Кластеризация ● Возможен сторонний хостинг ● Наличие API Решения: ● Платформы - VMware, OpenStack ● Хостинг - Rackspace, Selectel
  • 11. Платформа PAAS ● Решение большинства проблем ● Развертывание application/DB серверов ● Поддержка железа от провайдера ● Вспомогательные сервисы (DNS/mail/CI) ● Гибкая ценовая политика Решения: DigitalOcean, Heroku
  • 12. Платформа Public Cloud ● Полноценная инфраструктура ● Внешние сервисы как часть продукта ● Нет ограничений в ресурсах ● Автоматизированное масштабирование ● Многофункциональный API Решения: AWS, GCP, MS Azure
  • 13. Виртуализация ● Изоляция на уровне ОС ● Запрос ресурсов по требованию ● Кроссплатформенность ● Абстрагирование от железа ● Overhead в производительности
  • 14. Контейнеризация ● Изоляция на уровне процесса ● Отсутствие конфликтов зависимостей ● Быстрый старт ● Отсутствие накладных расходов ● Повторение production-окружения ● Единый стандарт поставки продукта Решения: Docker, rkt
  • 15. Docker ● Простота ● Масштабируемость ● Долгосрочная поддержка ● Минимизация конфигурации серверов ● Описание артефакта в DSL-коде Но.. ● Не подходит для stateful-сервисов/БД ● Все еще есть баги
  • 16. Пример: Java-приложение FROM openjdk:8-alpine MAINTAINER Mikhail Chinkov <mikhail.chinkov@fun.co> RUN apk update && apk add maven WORKDIR /source COPY ./ ./ RUN mvn clean package && mkdir -p /app && cp /source/target/users-1.0-SNAPSHOT.jar /app/users.jar WORKDIR /app EXPOSE 8080 CMD ["java", "-jar", "users.jar"]
  • 17. Оркестрация контейнеров ● Равномерное распределение ● Запуск задач по расписанию ● Единая платформа для приложений ● Концепция микросервисов Но.. ● Все еще сложно и сыро Решения: Kubernetes, Mesos+Marathon, Nomad+Consul, ECS, Docker Swarm
  • 18. Пример: спецификация сервиса в ECS { "containerDefinitions": [ { "name": "users", "image": "my-docker-repo.com/users:latest", "memory": 2048, "cpu": 0, "essential": true, "portMappings": [ { "hostPort": 0, "containerPort": 8080, "protocol": "tcp" } ] ], "family": "users" }
  • 19. Системы управления конфигурациями ● Автоматизация настройки серверов ● Декларативное описание ● Замена документации ● Инфраструктура как код ● Отсутствие configuration drift Решения: Ansible, Chef, Puppet, SaltStack
  • 20. Пример: настройка Nginx + PHP-FPM - name: Install nginx package: name=nginx state=present - name: Copy nginx configuration for wordpress template: src=default.conf dest=/etc/nginx/conf.d/default.conf notify: restart nginx - name: Install php-fpm and deps package: name={{ item }} state=present with_items: - php - php-fpm - php-mbstring - php-mysql - name: Copy php-fpm configuration template: src=wordpress.conf dest=/etc/php-fpm.d/ notify: restart php-fpm
  • 21. Мониторинг ● Визуализация работы приложения ● Отслеживание утилизации ресурсов ● Проверка гипотез Решения: ● SAAS (Datadog) ● Self-hosted (Prometheus+Grafana, Statsd+Graphite/InfluxDB+Grafana)
  • 22. APM ● Измерение производительности сервиса ● Отображение ошибок на клиентах/сервере ● Debug узких мест Решения: ● Измерения - NewRelic, AppDynamics ● Ошибки - Sentry, Rollbar, Crashlytics ● Debug - CLI (strace/ltrace/dtrace, gdb, perf) ● Toolkit от базы данных
  • 23. Incident management ● Система агрегации алертов ● Оперативное реагирование на отказы ● Повышенная ответственность Решения: PagerDuty, OpsGenie, VictorOps
  • 24. Логгирование ● Текстовое отображение работы сервиса ● Отслеживание действий пользователя ● Централизованный сбор логов Решения: ● SAAS - SumoLogic, Loggly, Logsene ● Self-hosted - Graylog, ELK
  • 25. Релиз-инжиниринг ● Оптимизация скорости поставки ● Быстрый feedback от системы ● Автоматизация прогона тестов ● Безболезненный deployment Решения: SAAS (TravisCI, CircleCI, Shippable, Drone.io) Self-hosted (Jenkins, Concourse, Teamcity, Bamboo)
  • 26. Пример: описание сборки в Jenkins node('build') { stage ('Checkout') { checkout scm } stage ('Pull the build cache') { dockerlib.PullImage(docker_server, build_cache) } stage ('Build and test the image') { dockerlib.BuildImage(docker_server, new_image, build_cache, version) } stage ('Push the image') { dockerlib.PushImage(docker_server, new_image) } stage ('Upload Beanstalk configuration') { dir('deploy') { beanstalk.UploadConfiguration(application, version) } } }
  • 27. Базы данных ● Никогда не забывать про бэкапы ● Лучшие рекомендации - в доках ● Надежная эксплуатация ● Предметная область первична
  • 28. Прочие инфраструктурные сервисы ● Контроль версий (Github/Bitbucket/Gitlab) ● Управление проектами (JIRA/Trello/Youtrack) ● DNS-сервера (GoDaddy, Amazon Route53) ● LDAP-сервера (лучше не надо)
  • 30. DevOps ● Это культура + совокупность практик ● Основа состоит из Agile и CALMS* ● Это не про технологии ● Это нельзя купить/продать ● DevOps-инженеры - фикция * CALMS - Culture, Automation, Lean, Measurement, Sharing
  • 31. SRE ● Посади разработчика в Operations ● Работает в нескольких технологических компаниях ● Automation, self-healing systems, velocity etc. ● Не может работать везде по определению
  • 32. Best practices ● Рассматривайте всю компанию как единую команду ● Больше общайтесь с людьми ● Делайте акцент на постановку задачи и планирование ● Потребности клиента в первую очередь
  • 33. Выводы ● Управлять инфраструктурой не так сложно, как кажется ● Старайтесь автоматизировать установку и конфигурацию ● Стремитесь описать все процессы в исходном коде ● Чем лучше сделаете, тем больше времени останется на разработку