Что мы всё о глобальном да о глобальном? О рынке облачных технологий и телодвижениях крупных компаний. О ЦОДах в технологическом, экономическом и визионерском смыслах. О том, как корпорация A купила компанию B и теперь, несомненно, завоюет ещё не созданный, но уже зарождающийся рынок C. Конечно, прослеживать глобальные тенденции проще: они на виду, а если и не на виду, то стоит немножко копнуть — и вот они как на ладони. А дальше прикладываем немного логики, добавляем щепотку здравого смысла, приправим всё соусом из свежих аналитических отчётов — и вуаля, готов глобальный эпистолярный винегрет!
Но вот о технологиях, в том числе прекрасных образчиках открытого исходного кода, мы говорим не то чтобы очень много. А ведь и в этих палестинах происходят чрезвычайно интересные вещи! Вот не далее как 26 ноября опубликована колонка вашего покорного слуги о глобальном — точнее, о том, сможет ли кто-то противостоять всесильному Amazon, потихоньку монополизирующему рынок облачных вычислений. Не удивительно, что смельчаки побороться с Amazon находятся, и одним из них стал Лукас Карлсон, работающий над продуктом CTL-C. И не стали бы мы обращать внимание на этот продукт, если бы не одна деталь:
«CTL-C — это как раз своеобразное объединение IaaS и PaaS, дополненное технологиями AppFog. Но с добавлением одной важной составляющей, без которой продукт CenturyLink мало чем отличался бы от Amazon S3. Карлсон добавил в CTL-C популярную опенсорсную технологию под названием Docker. С функциональной точки зрения это способ запаковать код приложения в подобие цифрового контейнера для переправки между компьютерами или виртуальными машинами. И это, по мнению Лукаса, способно дать бизнесу сразу две ключевых возможности. Первая — кастомизация облачного решения, вторая — возможность на лету перемещать разработки в собственное облако или ЦОД».
Вот именно на Docker хотелось бы взглянуть чуть пристальнее, тем более что он сейчас в стадии активной разработки и постоянно мелькает в профильных источниках новостей, обрастая всё новыми и новыми функциями, совместимостями, возможностями. Простота и красота этой технологии поразит всякого, кто занимается разработкой или по долгу службы так или иначе пересекается с развёртыванием различных приложений в облаках.
По большому счёту Docker — это не более чем «движок», который автоматизирует процесс развёртывания приложения, упаковывая код в контейнер, могущий быть запущен как программа практически в любой среде. Как утверждают разработчики, Docker способен инкапсулировать любой код и запустить его на любом сервере. Контейнер, который разработчик тестирует на своём ноутбуке, может быть запущен в продакшене, на виртуальной машине, на сервере, в OpenStack-кластере, публичных инстансах и так далее. По статистике использования Docker на GitHub, наиболее популярные способы внедрения этой технологии таковы: автоматизация упаковки и развёртывания приложений, создание лёгких и частных PaaS, автоматическое тестирование и непрерывная интеграция приложений, развёртывание и масштабирование веб-приложений, баз данных и бэкенд-сервисов.
Какую основную проблему решает Docker? Как пишут сами разработчики, эта технология позволяет устранить то, что называется «dependency hell». В переводе с языка Шекспира на язык Пушкина это фактически означает, что Docker устраняет неразбериху, возникающую при большом количестве компонентов и зависимостей между ними. Представьте, что у вас есть множество, условно говоря, софтверных компонентов: пользовательская база данных, ваша база данных, веб-фронтенд, API, наборы статичного кода, статичный веб-сайт и так далее. Все эти взаимосвязанные составляющие нужно уместить в среде «железных компонентов», среди которых виртуальные машины, QA-серверы, дата-центры, публичные облака, продакшен-кластер, пользовательские компьютеры. С точки зрения совместимости всё это — полнейший кошмар и ужас. Добавим сюда и тот факт, что приложение должно не только работать в разных средах, но и свободно мигрировать между ними.
Это примерно то же самое, что управление складом и перемещение грузов. Предположим, что у нас есть автомобиль, бочки с вином, бочки с топливом, рояль, мешки с кофе, сервер, ящик со специями. И большое разнообразие инструментов для складирования и перемещения: складские стеллажи, поезда, подъёмные краны, мобильные погрузчики, корабли, грузовики с фургонами. Возникает вопрос: каким образом всё это можно оптимально уместить, складировать и перемещать, включая перемещения между различными видами транспорта? Получается такое же уравнение со всеми неизвестными, какое у нас вышло при попытке взаимной интеграции софтверных и железных компонентов абзацем выше.
Но мы ведь пользуемся излюбленным приёмом магистров ТРИЗ — перемещаем проблему в иной контекст, решаем её и посредством аналогии переводим обратно. Таким образом, для того чтобы решить проблему с перемещением разнообразных грузов, нам нужен… стандартный контейнер! Контейнер, в который можно поместить и упаковать любые товары; при этом он будет запечатан, пока не достигнет пункта назначения. В процессе движения из точки А в точку B он может перемещаться на разных видах транспорта, ведь стандартные размеры предполагают универсальные условия перевозки. По статистике, 90% всех грузов в мире сегодня доставляются в стандартных 40-футовых контейнерах. Это нехитрое изобретение в своё время произвело едва ли не революцию в логистике: реже пропадают и портятся товары, меньше времени уходит на погрузку и разгрузку. Каждый год теперь доставляется не менее 200 миллионов контейнеров по всему миру. Простите мне это логистическое отступление, но если это прекрасно функционирует в физическом мире, то почему бы такой же технологии не сработать в мире виртуальном?
Видимо, разработчики Docker подумали точно также. Подумали и создали движок, который позволяет упаковать любые компоненты в лёгкий, портативный, транспортабельный контейнер, способный запускаться и работать практически на любой «железной» платформе. Получается ситуация win-win для разработчиков и операторов. Первые могут, однажды создав приложение, запускать его где угодно. Вторые, однажды сконфигурировав инфраструктуру, — запускать на ней какие угодно приложения: пресловутый «dependency hell» устраняется таким образом раз и навсегда.
Контейнерная технология, которая в ближайшее время наверняка наберёт популярность, важна потому, что она вполне может оказать такое же экономическое воздействие на рынок облаков и виртуальных машин, какое оказали 40-футовые контейнеры на логистический рынок. Docker позволяет запускать приложения в изолированных контейнерах, которые, тем не менее, делят между собой операционную систему и библиотеки. Следовательно, нет необходимости выделять по виртуальному серверу на каждое приложение. Docker как бы нарезает на кусочки виртуальную машину, делит её на множество контейнеров, и это позволяет сильно сэкономить на вычислительных мощностях — просто за счёт оптимизированного распределения ресурсов. Эффективность использования виртуальных машин, таким образом, сильно возрастает. Вероятно, именно поэтому так много интересных продуктов, базирующихся на Docker, появилось в последнее время. На мой взгляд, наиболее любопытные из них — представители опенсорсного сообщества: это PaaS-платформа Dokku и проект BYO SaaS, который позволяет развернуть собственное SaaS-решение всем желающим. Словом, технология получилась весьма многообещающей. Посмотрим, как сообщество Open Source разовьёт идею.