Почему Docker побеждает

Разработчик разрабатывает на ноуте X, выкатывает на тестирование на машинки ABC, потом катит в stable на машинки KLMN. Рядом база на Y, nginx на Z, плюс толпа сопутствующего на F и G.
Вот кадр, который я стырил из Introduction to Docker от автора Docker’а:
1-4GDJCD-5l11EH92ZEHHoSw
Адок раскатки
Если вам кажется, что всё проще и сервисы выглядят не так, значит, вы до этого нюхали не порох. Картинка выше — она даже легче, чем реальные крупные инфраструктуры.
И на практике мы получаем вечную головную боль. Три боли:
  1. Как обеспечить выкатки пакетов так, чтобы в stable катилось именно то, что тестировалось, а тестировалось именно то, что разрабатывалось? Вроде бы фигня, но у сервиса в зависимостях десятки пакетов, а комбинация из разных версий этих пакетов забавно стреляет раз в год, особенно когда идёт волна обновлений.
  2. Как обеспечить жизнь нескольких сервисов на одной машине без конфликтов? Сервису X нужна библиотека строго версии 1.0.2, а сервису Y библиотека строго версии 1.0.4.
  3. Как в целом уменьшить хаос? Фронт собирается так, бек собирается эдак, пакеты компонуются сяк, выкатываются через попу, перекатываются через левое плечо, базы живут в своём мире, логи пишутся в свой адовый мирок, Celery падает раз в сутки, всё по разным ДЦ, админы бывают в отпуске, какая, блин, честная нагрузка на эту машину?! и вообще мы все умрём.
    Если вам кажется, что это не проблема, повторюсь, вы нюхали не порох. Современная классика и реалии — сто сервисов, десять тысяч машин и N*M технологий. На всём этом танцует тысяча разработчиков и админов. Числа с потолка, но.

    Docker впервые опубликован в 2013 году. Альфа, фиговенькая, стрёмненькая. В 2016 году на Docker’е сидят Ebay, Яндекс, Badoo, Google, Spotify, Red Hat и другие монстры, у которых инфраструктура, мягко говоря, далеко ушла от пары машинок. Все крупные облачные сервисы сейчас поддерживают выкатку docker’ов.
    Почему? Потому, что никого не волнует инфраструктура гаражных конторок с “ДЦ” под мостом, но всех волнует сокращение издержек на N сотрудников и M машин при заметных N и M. ЦОД дорого строить и дорого эксплуатировать. Разработчики с админами стоят дорого. Использовать ЦОД и работников надо максимально эффективно.
    В каждой крупной конторе умные дяди садятся с калькуляторами и хоть примерно считают пользу от чего-нибудь. Давайте вот снова с потолка.
    Во-первых, у нас Вася. Вася разработчик и 30 минут в сутки в среднем тратит на цикл сборок, выкаток, решение проблем из-за версий пакетов или внезапных взрывов на рабочих машинках. Это 121 час в год (я учёл отпуск, потому 11 часов * 11 месяцев). При зарплате Васи в 100К рублей работодателю Вася обходится пусть в 150К рублей ежемесячно. Час = ~850 рублей. В год эти “30 минут” Васи обходятся работодателю в 100К рублей. Когда таких Вась тысяча, получаем издержки в 100М рублей ежегодно.
    Во-вторых, у нас Петя. Петя админ и следит за должной эксплуатацией N машин. Петя не железный и не универсал, потому его хватает на N = 100 машин с технологиями A, B и C. Машин 10К, Петь нам надо 100. Может быть, хватило бы и 80, например, но в инфраструктуре зоопарк (см. пункт ниже), из-за зоопарка что-то постоянно взрывается, разработчики достают вопросами и нытьём, потому 100. Вот эти 20 Петь обходятся работодателю ежегодно в… пусть 100К * 20 * 12 = 24М рублей.
    В-третьих, у нас 10K машин. На некоторых стоит Ubuntu 8, на некоторых Ubuntu 14, в углу на небольшом кластере крутится FreeBSD, в своём мирке живёт резервация Windows-серверов, а в чулане нечто, что управляет телескопом на орбите, но об этом всем забыли, а кушать оно просит раз в десятилетие. Часть машин простаивает, часть занята тем, что обеспечивает работу зоопарка, часть едва справляется с нагрузкой. Смело можно сказать, что 10% этого ЦОД дышит теплом в пустоту. Стоимость создания ЦОД можете посчитать сами, без бутылки не разобраться, но одна стойка (от аренды помещения до лицензий на софт) обходится в 1.5М..3М рублей. Мы бездарно используем ~23 стойки 42U. Ок, пусть 20. В пустоту улетели 30М..60М рублей уже со старта.
    Итого фиговая инфраструктура конторы на 1000 Вась, 100 Петь и 10К машин сначала выстрелит в 30М..60М рублей, а потом ежегодно будет стрелять на 124М+ рублей. Повторюсь, числа взяты с потолка, но примерно рядом с реальными. Просто чтобы вы представили порядок убытка. На фоне остальных трат выглядит не очень страшно, но… слушайте, это просто глупо — за восемь лет влететь в миллиард рублей потому, что пакеты раскатываются левой пяткой. При том, что можно не влетать.

    А вот теперь интересное. Выкатка чего-либо в контейнерах от этих издержек откусывает заметный кусок.
    Всё, что вам надо — обеспечить проход контейнера единого формата от разработчика до stable-машин. Инфраструктура больше не колбасится от попыток пропустить через себя весь ассортимент разработческих фантазий и мод. Всё красиво и ангелы порхают: ein контейнер (привет разработке), ein конвейер раскаток (привет админам), ein cloud (привет ЦОД). Облачность тут напрашивается. Контейнеры проще мониторить, проще натягивать на ресурсы, проще раскатывать и откатывать, проще оторвать от конкретного железа. Вообще всё проще, т.к. каждый занят своим делом и миры этих дел не перемешиваются. Больше изоляций богу изоляций.
    Эти решения были и до Docker’а, конечно.
    Фишка в том, что Docker дал массовое решение. Докеризоваться может и конторка под мостом, и Почта России (ну… допустим, а), и Amazon. Все могут.
    Фишка в том, что Docker получил широкую поддержку в облаках разных vendor’ов. Вы можете раскатить контейнер в локалке, в Google, в Amazon, да везде.
    Фишка в том, что это open source, спонсируемый крупными суммами крупных игроков.

    Потому считаю, что мнение “А ещё через пару лет все забудут эту х…ю в пользу того, что там будет стильно-модно-молодёжно” (цитата) несколько отстаёт от реальности. Все сели с калькуляторами, посчитали, умилились и взяли на вооружение не модную х…ю, но крайне полезную и давно ожидаемую штуковину. И никуда оно уже не денется.
    Чего и вам желаю.

    Добавить комментарий