76
Как devops исчерпывает себя, и что будет дальше Кирилл Вечера Следующее поколение моделей управления программными системами 51

Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

  • Upload
    ontico

  • View
    238

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Как devops исчерпывает себя,и что будет дальше

Кирилл Вечера

Следующее поколение моделей управления программными системами

51

Page 2: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Кирилл Вечера

Руководитель проекта jetware.orgАвтоматизация управления программными системСборка, конфигурация, тестирование, деплой, обновление

РанееСистемное программирование: Solaris, FreeBSD, Linux

Администрирование серверов и сетей: Unix, OSPF, BGP

Разработка интернет-сервисов: C, Perl, Java, Python, Ruby

Page 3: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

В докладе

Эволюция управления информационными системами

Какие сейчас есть средства и какие появляютсяКак мы этому способствуемПочему девопс становится ненужным

Page 4: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Большая100 — 100 000 серверов

Сложная10 — 100 приложений

10 — 1000 связей

100 — 10 000 библиотек и программ

Растущая0.1 — 100 обновлений в день

Современная система

ПроблемаУправлять

Обновлять

Диагностировать

Оптимизировать

Чинить

Page 5: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Способы организации систем

Централизованнаясистема

Распределеннаяжестко связаннаясистема

Распределеннаясвободно связаннаясистема

Page 6: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Монолитная система

Фиксированная конфигурация

Все в одном экземпляреСервисы

Связи

Потеря сервиса или связинарушает работу всей системыМощность ограничена

Page 7: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Распределенная система

Связанные компонентыКомпонентОдин сервис или несколько разных сервисов вместе

СервисыОдин или несколько экземпляров сервиса

МакроуровеньМикроуровень

Page 8: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Макроуровень

Типы компонентов — сервисы

Топология — связи между компонентами

Page 9: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Микроуровень

Внутреннее устройство компонентаПрограммы, библиотеки, настройки, данные

Связи между внутренними сервисами

Компонент внутри — монолитная подсистема

Page 10: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Распределенная жестко связанная система

Все предопределеноСвязи между сервисами

Привязка к оборудованию

Добавление/удаление компонентов

Реакция на аварию

УправлениеЦентрализованное

Связи планирует и назначает администратор

Page 11: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Распределенная свободно связанная система

Все может менятьсяСвязи между сервисами

Привязка к оборудованию

Добавление/удаление компонентов или связей

УправлениеПостоянное

Автоматическое

Централизованное

Page 12: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Эволюция управления системами

1. Руки

2. Скрипты

3. Инструменты

Одинаково — и монолитные системы, и жестко связанные распределенные системы

Page 13: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Дальше?

Переход на свободно связанные системыУправление системой расслаиваетсяНужно средство управления на макроуровне

Нужно средство управления на микроуровне

Page 14: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Свободно связанная система

Минимальные требованияАвтоматическое управлениеПривязка к оборудованию

Добавление/удаление компонентов

Изменение связей

Page 15: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Минимальные требования к компоненту

Переносимость

Тиражируемость

Интерфейс

Изоляция от соседей

Абстракция от оборудования

Данные хранить отдельно

Связь для других сервисов

Page 16: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

AWS сделали привычными

Разделение на сервисыНеизменные образы виртуальных машинХранение данных отдельноНесколько экземпляров сервиса

Page 17: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Docker

Среда для PaaS

Инструмент разработчика

Средство запуска сервиса

Page 18: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Docker-контейнер как компонент системы

Легковесная замена виртуальной машиныИзоляция приложений и зависимостей

Интерфейс — сеть и данныеСтимулирует использовать immutable image

DockerfileБыстрая сборка и тиражируемость

Выполнены все требования к компоненту свободно связанной системы

Page 19: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Эволюция управления распределенными системами – на макроуровне

1. Руки

2. Скрипты

3. Инструменты

4. Оркестрация

5. Самоорганизация

Page 20: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Управление распределенными системами

4. Оркестрация ПроцессПроектирование

Планирование

Тестирование

Воплощение

АрсеналKubernetes, Marathon, Docker Swarm mode

Page 21: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Эволюция управления компонентами – микроуровень, монолитная система

1. Руки

2. Скрипты

3. Инструменты

4. ???

5. Самоорганизация

Page 22: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Эволюция управления системами

МакроуровеньОркестрация

МикроуровеньDocker ???

Page 23: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Сервис в Docker-контейнере

Page 24: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Можно подумать, что внутри...

Page 25: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

На самом деле

Page 26: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Эволюция управления системами

Распределенной системой, макроуровеньСервисным приложением, микроуровень

Docker

Kubernetes

Page 27: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Микроуровень, приложение-сервис

Часто обновляетсяМного зависимостей (компонентов)Программы, библиотеки, данные

Версии зависимостейИнтеграция компонентовНастройкиИнтерфейс на макроуровень

Page 28: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Docker для управления микроуровнем

Простой способ заготовки (provisioning)Dockerfile: shell, deb/rpm, chef/puppet/salt

Быстрый способ обновления: слоиИнтерфейс на макроуровень: рукамиИнтеграция компонентовМикросервисы: отдельные контейнеры, руками

Page 29: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Начинающийся проект

Старт с чистого листаСвоего кода — 0

Выбрали окружение

Пишем код, встраиваемся в окружение

Оборудования мало, сервисов мало

Пользователей малоМожем лежать, можем глючить

Подойдет Dockerfile с shell-командами

Page 30: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Начинающийся проект

ПереусложнениеDocker

IaC

Оркестрация

Devops

Достаточныrsync или git pull

Page 31: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Работающий проект

Многосвоего кода

разработчиков и команд

чужих компонентов

настроек

оборудования

РазнообразноДолгая история

Разные компонентыИ создаются в разное время

Постоянно обновляется

НельзяЛежать

Глючить

Page 32: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Проблемы

Несовместимость версийбаги и изменения API в новых версиях

баги и уязвимости в старых версиях

Человеческие ошибкипри обновлении

внутренних настроек

в информации для оркестрации

Page 33: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Разработчик программ для корпоративных клиентов

Непрерывное тестирование и сборка приложений

Page 34: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Профиль работыКастомные программные решения

Business intelligence

Несколько сотен проектовОбщие компоненты

Кастомизация для заказчика

Влиты несколько компаний

Page 35: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Основной софтOracle, SAP Hana, PostgreSQL, MySQL

Java, C++, Python, JavaScript, PHP

ЕщеR, Excel, ImageMagick, по мелочи другого

ОСRHEL/Oracle Linux + свои патчи для JRE, libc, OMP и другого

Windows (уменьшается)

Page 36: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Поставка клиентуSaaS

Виртуальные машины

.exe + jar

RPM-пакеты

Page 37: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

БылоCистемаX build серверов

Разные ОС

УправлениеСкрипты — make, shell, python

Jenkins

Puppet

Page 38: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

ПроблемыПлохое тестированиеДолго ждать результат редко тестируется→

Несовпадение тестового и рабочего окруженияОшибки при работе софта у заказчика

Часто ломался процесс сборки

Много ручного труда

Page 39: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Что нужноХорошо контролируемая средаSaaS, Виртуальные машины

Качественная сборка и тестированиеВоспроизводимая сборка

Быстрая сборка

Минимальное ручное вмешательство

Похожее на Maven и Gradle

Page 40: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

ВариантыJuju Charms

Nix

Page 41: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Nix пакеты

Описание пакетаИмена пакетов-зависимостей

Правила сборки

Собранный пакет - чистая функция отПравил сборки

Собранных зависимостей

Исходного кода

Конфигурационных значений

Page 42: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Nix

Все состоит из пакетовКаждый пакетОтдельный каталог

Read-only

Собирается по зависимостямили устанавливается уже собранное из репозитория

Page 43: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Nix – пользовательское окружение

Точка объединения нескольких nix-пакетов

Каждое окружение — в отдельном read-only каталоге

Каждая комбинация пакетов — отдельное окружение

Установка или удаление пакетаСоздание нового окружение копированием текущего

Добавление или удаление пакета

Переключение текущего окружения на новое (замена симлинка)

Page 44: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Nix – пользовательское окружение

Структура окружения повторяет FHSЕсть bin, etc, lib, include, share, libexec

Нет var - ведь read-only

Симлинки из окружения на файлы в пакетах

Page 45: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Nix: пользовательское окружение

~/.nix-profile

/nix/store/0123-user-envbin

share man man8

mysqld

mysqld.8.gz

php

/nix/store/4567-mysql-5.5.50 bin mysqld

share man man8 mysqld.8.gz

share man man8 mysqld.8.gz

/nix/store/89ab-php-5.6.1 bin php

Page 46: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

СейчасОборудование (SaaS & CI)~ 180 машин у себя (поровну SaaS & CI)

< 200 машин в AWS (в основном CI)

500 — 2000 контейнеров

УправлениеNix + Docker + Kubernetes

Jenkins

Puppet

Page 47: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Проблемы NixНет версий

Пересборка всех потребителей при изменении зависимостиДолго ждать результата — бывает до 2 часов

Page 48: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Nix: пересборка при изменении аргументов

mysql: libc openssl

0123-libc 4567-openssl → 89ab-mysql

Пропатчили libc → cdef-libc

cdef-libc 4567-openssl → 3210-mysql

Page 49: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Что искатьИмеет плюсы NixАвтоматическая сборка

Зависимости

Изоляция

Воспроизводимость

Не трогает то, что работаетВерсии, подпроекты

Page 50: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

ВариантыHabitat

Snappy

Gentoo

Jetware

Page 51: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Jetware vs Nix, что общего

Состоит из пакетовRead-only

С версиями

С вариантами сборки

Пакеты с зависимостямиАвтоматическое подключение

Автоматическая сборка

Конфигурационные переменные пакетов

Page 52: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Jetware vs Nix, чем отличается

Чем отличаетсяПакеты — не чистые функции

Зависимости — пакеты, версии, условия версий, роли

Самоинтеграция пакетов

Пакеты инкапсулированыэкспортируют в окружение и другие пакеты минимум

Окружение хранит контекстнастройки, данные

Page 53: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Jetware: Рабочее окружения

Точка подключения пакетовХранение настроек и данных пакетовОтвязано от операционной системыработает непосредственно в любой ОСlibc — пакет

Page 54: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Jetware: Рабочее окружение

Пакеты — снаружиПакеты — неймспейсыВсе хранится в пакетахКаталог пакета — read-only

Данные и конфигурация — внутри

bin

lib

var log

etc

tmp run

libc

Конфигурация окружения

Page 55: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Jetware: Экспорт в рабочее окружение

Неизменяемые данныеТолько минимум

bin, lib

Симлинками bin

lib

var log

etc

tmp run

libc

Page 56: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Jetware: Экспорт в рабочее окружение

Изменяемые данныеКопируются в окружение

Отдельные секции

Свой собственный FHS bin

lib

var log

etc

tmp run

libc

Page 57: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Взаимодействие пакетов

Экспорт данных в другие пакетыОтношение, данные, соглашение или APIПример: пакеты экспортируют свои C-headers пакету cc

Значения переменных других пакетовПример: пакет mongodb_tuning указывает mongodb.port=22333

Page 58: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Роли пакетов

Пакет имеет рольИдентификация пакетаДля файлов

Для связей пакетов

Для экспорта данных

Для переменных

Роль - класс

percona-mysqld

mariadb-mysqld

myrocks

mysqld

mysqld

Page 59: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Абстрактная роль

Общий аспект разных ролей

Частично реализованный интерфейсОдин API для разных ролей

Реализация для присутствующей роли

Одно отношение пакета для всех реализаций

www

bitrixapache

nginx

lighttpd

Page 60: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

Демонстрационная установка JetwareСборка по зависимостям и версиямСобственных подпроектов

Компоненты третьих сторон (JRE, libc и другие библиотеки)

Репозитории testing staging→

Сборка и настройка Docker-контейнера40 — 500 пакетов

1.5 — 20 секунд

Page 61: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Беспечный ездок

ОжидаетсяОборудование (SaaS & CI)~ 120 машин у себя (на CI - 30)

< ? машин в AWS

УправлениеJetware + Docker + Kubernetes

Jenkins

Puppet

Page 62: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Эволюция управления системами

МакроуровеньОркестрация

МикроуровеньСамосборка

Page 63: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Что будет дальше?

Слияние управления на макроуровне и микроуровне~ 1 — 3 года

Page 64: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Жизненный цикл сервиса

Dev (разработчик)

Исходный код + библиотеки

Компиляция, сборка

Интеграция с зависимостями

Тестирование

Экспорт в образ

Разворачивание

Переключение нагрузки

???

Оркестрация

Page 65: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Нужна ли ОС программе?

Программе нужныЯдро для выполнения syscall

Файловая система

Рабочее окружениеБиблиотеки и исполняемые файлы

Другие данные-ресурсы

Окружение операционной системы — не нужно

Page 66: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Должна ли программа встраиваться в ОС?

Для обращения к программе нужноЗнать, где она находится

Передавать ей входные данные

Получить от нее выходные

Программа может быть где угодно — ОС не нужна

Page 67: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Тесная связь ОС и приложений

Историческое наследиеВлияние дистрибутивов Linux

Page 68: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Автономная программа

ПрограммаНе привязана к ОС

Описывает требования к рабочему окружениюЗависимости на пакеты и версии

Зависимости на ресурсы и сервисы

Page 69: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Рабочее окружение как процесс

Адресное пространство процессаКаталог с рабочим окружением

Сегменты кодаread-only в каталогах пакета

Сегменты данныхв изменяемых каталогах рабочего окружения

Динамическая линковка библиотекПодключение к нему всех пакетов-зависимостей

Page 70: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Пакет как shared библиотека

БиблиотекаФайлы .so и .aELF сегменты кода и данныхDynamic linking секции

ПакетRead-only каталогФайлы в каталогеЗависимости пакета

Page 71: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Тогда что такое автономная программа?

Имя с версиейЗависимости для работыИнтерфейсКакие ресурсы требует

Какие ресурсы предоставляет

Сценарий сборки (опционально)Исходники

Зависимости для сборки

Page 72: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Управление на макроуровне

Объект диспетчеризацииПриложение: имя и версия

Запуск программыСборка пакета или получение из репозитория

Создание рабочего окружения

Деплой и запуск сервиса

Помещение данных интерфейса в service discovery

Page 73: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Эволюция управления системами

Макроуровень и микроуровень интегрируются

Page 74: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Роботы вытесняют девопсов

Разрабочики и администраторы возвращаются к более интеллектуальному труду

Page 75: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Ну а потом?

Еще несколько лет и

Пятая ступень эволюции - самоорганизация

Page 76: Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

Как devops исчерпывает себя,и что будет дальше

Кирилл Вечера

http://jetware.orgSkype: [email protected]