ݺߣ

ݺߣShare 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=/slideshow/it-faq/78077618/default.conf dest=/etc/nginx/conf.d//slideshow/it-faq/78077618/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
/MikhailChinkov

More Related Content

What's hot (20)

Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
Alex Tumanoff
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
Valentin Fedoskin
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
oelifantiev
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
Gonchik Tsymzhitov
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
aragozin
CD with Jenkins. Lessons Learned
CD with Jenkins. Lessons LearnedCD with Jenkins. Lessons Learned
CD with Jenkins. Lessons Learned
Кирилл Толкачёв
Kubernetes
KubernetesKubernetes
Kubernetes
SQALab
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
DrupalCamp MSK
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Positive Hack Days
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
Alex Tumanoff
Docker в виртуальной среде VMware
Docker в виртуальной среде VMwareDocker в виртуальной среде VMware
Docker в виртуальной среде VMware
Andrey Konovalov
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
WrikeTechClub
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
SQALab
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
bearoff
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
Alexey Lesovsky
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Fwdays
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons Learned
Aleksandr Tarasov
Ядро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруЯдро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуру
SQALab
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
Alex Tumanoff
Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
Valentin Fedoskin
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
oelifantiev
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
Gonchik Tsymzhitov
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
aragozin
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
DrupalCamp MSK
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Positive Hack Days
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
Alex Tumanoff
Docker в виртуальной среде VMware
Docker в виртуальной среде VMwareDocker в виртуальной среде VMware
Docker в виртуальной среде VMware
Andrey Konovalov
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
WrikeTechClub
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
SQALab
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
bearoff
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
Alexey Lesovsky
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Fwdays
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
Continuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons LearnedContinuous Delivery with Jenkins: Lessons Learned
Continuous Delivery with Jenkins: Lessons Learned
Aleksandr Tarasov
Ядро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруЯдро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуру
SQALab

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

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
Java 9 - кратко о новом
Java 9 -  кратко о новомJava 9 -  кратко о новом
Java 9 - кратко о новом
Леонид Ставила
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
Cisco Russia
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
CodeFest
Комфортная разработка мобильных проектов
Комфортная разработка мобильных проектовКомфортная разработка мобильных проектов
Комфортная разработка мобильных проектов
CodeFest
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
Александр Сигачев
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Ontico
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
InTRUEdeR
О разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop developmentО разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop development
Alexander Granin
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
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
Provectus
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
Dmitry Lazarenko
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
Fwdays
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
guest40e031
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
rit2010
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Denis Izmaylov
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
UNETA
Высокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows AzureВысокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows Azure
Alexander Feschenko
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
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
Cisco Russia
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
CodeFest
Комфортная разработка мобильных проектов
Комфортная разработка мобильных проектовКомфортная разработка мобильных проектов
Комфортная разработка мобильных проектов
CodeFest
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
Александр Сигачев
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Ontico
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
InTRUEdeR
О разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop developmentО разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop development
Alexander Granin
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
Alexander Babich
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
Provectus
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
Dmitry Lazarenko
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
Fwdays
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
guest40e031
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
rit2010
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Denis Izmaylov
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
UNETA
Высокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows AzureВысокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows Azure
Alexander Feschenko

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=/slideshow/it-faq/78077618/default.conf dest=/etc/nginx/conf.d//slideshow/it-faq/78077618/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. Выводы ● Управлять инфраструктурой не так сложно, как кажется ● Старайтесь автоматизировать установку и конфигурацию ● Стремитесь описать все процессы в исходном коде ● Чем лучше сделаете, тем больше времени останется на разработку