Продолжение заметки об облаках.
В первой части мы поговорили о том, как устроены компьютерные программы (или приложения), многопользовательские приложения и приложения как услуги. Во второй части я расскажу о виртуализации — основе облачных технологий. А потом поговорим о преимуществах и недостатков облаков.
Виртуализация
С виртуализацией многие познакомились в эпоху бурного распространения компьютеров Apple. Как известно, основа любого компьютера, его мозг — это процессор. Процессоры бывают разные и отличаются они системой команд. Компьютерная программа — это список таких команд, которые исполняет процессор.
Когда-то давно компьютеры Apple работали на совершенно особенных процессорах, которые были не похожи на процессоры Intel в обычных компьютерах. У них была своя система команд, поэтому программы, написанные для процессоров Intel, не могли работать на процессорах, установленных в компьютерах Apple.
В 2006 году Apple сделала очень радикальный шаг, пересев со своих уникальных процессоров на процессоры Intel, на которых работало подавляющее большинство компьютеров в то время. Это сделало компьютеры Apple гораздо более похожими на другие компьютеры. Правда программы для Windows всё равно не могли работать на компьютерах Apple. Почему?
Потому, что помимо процессора, для работы программ нужна ещё и операционная система. В случае обычных компьютеров это была, как правило, Windows. После перехода на Intel стало возможным установить на компьютеры Apple операционную систему Windows и запускать их по очереди — то MacOS (чтобы работать с приложениями для этой операционной системы), то Windows (чтобы работать с приложениями для Windows).
Это было сильно лучше, чем раньше (когда приложения для Windows было в принципе невозможно запустить на Маках), но всё равно не очень удобно — мы ведь привыкли переключаться из одного приложения в другое просто переходя из окна в окно мышкой.
И благодаря очень талантливым программистам компании Parallels (кстати, нашей, российской!) это стало возможным. Потому, что приложение Parallels Desktop внутри компьютера на операционной системе MacOS позволяло запустить ещё один компьютер, но уже на операционной системе Windows. Поскольку физически компьютер при этом оставался один, то компьютер с Windows получался ненастоящим, а “виртуальным”.
Это и есть технология виртуализации — когда внутри одного компьютера ты запускаешь другой. А то и целый десяток (если, конечно, хватит мощности). Та же самая технология позволила запускать внутри одного “железного” сервера много-много виртуальных серверов. Конечно же, чуда не произошло, и виртуальные серверы все делили между собой ресурсы физического сервера, на котором они все работали.
Преимуществ это давало всё равно очень много: и возможность запускать разные операционные системы, и возможность изолировать разные приложения друг от друга. На практике всегда оказывалось, что два разных приложения на одном компьютере дружат примерно, как две хозяйки на кухне коммунальной квартиры. Поэтому, когда появилась возможность вместо одной большой коммунальной квартиры для приложений всех их расселить по маленьким, но индивидуальным “хрущёвкам”, все сразу кинулись это делать. Чтобы больше не участвовать в разрешении неизбежных конфликтов.
В общем изоляция — это хорошо. И виртуализация помогла это сделать.
Все ингредиенты вместе
Распространение интернета и фактический переход большинства приложений на взаимодействие через интернет — с одной стороны, и распространение технологий виртуализации — с другой стороны, подготовило фундамент для развития публичных облаков.
Про “приложения как услугу” мы уже поговорили выше, теперь перейдём к “инфраструктуре как услуге” (Infrastructure as a Service — IaaS). Про “платформу как услугу” (Platform as a Service — PaaS) и Патрисию Каас (Particia KaaS) мы поговорим в следующий раз.
Инфраструктура как услуга — это возможность не покупать свои собственные сервера, компьютеры, хранилища данных для своих приложений, а использовать готовые, предоставляемые поставщиком публичных облаков. Вы приходите к такому и просите продать, например, 10 серверов с такими-то параметрами (мощность процессора, объём памяти и диска). Вуаля — сервера ваши через несколько секунд.
Это было огромным прорывом по сравнению со своими собственными серверами. Ведь даже с самым быстрым поставщиком “железа” вам придётся ждать несколько дней, а то и недель, прежде чем серверы окажутся у вас в распоряжении, настроенные и подключённые к сети. А теперь представьте, что вы немножко ошиблись с тем, сколько и каких серверов вам нужно и когда бухгалтерия решает на ваших серверах посчитать зарплату, их возможностей вдруг не хватает? Купите новые сервера? Они приедут только через несколько дней!
Чтобы избежать таких ситуаций все организации, как правило, покупали сервера “с запасом”. Но это ужасно дорого! И покупать дорого и ещё дороже потом обслуживать. Одного электричества серверы потребляют столько, что никаким утюгам не снилось. И греются не хуже утюгов, поэтому помимо электричества для работы серверов, нужно ещё столько же — для их охлаждения. В общем хлопот — как с котятами, разве что к лотку приучать не надо.
Преимущества облаков
В “облаках” всё проще. Не хватило 10 серверов, покупаешь ещё 10 — и они в твоём распоряжении через несколько секунд. Но ещё интереснее, когда 20 серверов больше не нужны. В случае, если это твои собственные серверы — никуда не деться, они уже куплены и деньги не вернуть. В случае облаков платишь только за то, что используешь. Не нужны больше 20 серверов — пара нажатий на кнопки — и они пропадают и больше не требуют ни денег, ни внимания. Новые сервера можно добавлять и убирать хоть по десять раз в день, в зависимости от нагрузки.
Эта гибкость, или как принято говорить, эластичность — ключевое преимущество облачных технологий. И оно влияет не только на экономику. Оно полностью меняет подход к созданию приложений. Раньше программисты относились к серверам, как к чему-то почти постоянному (ещё бы — если каждого сервера надо неделями ждать). Возможность создавать новые сервера в секунды позволяет совсем по-другому подходить к проектированию приложений. И, например, не рассчитывать на нагрузку “с запасом”, а гибко и налету подстраиваться. Ещё это позволяет приложения делать сильно более надёжными, так как вместо того, чтобы делать один большой сервер, при поломке которого ломалось всё, можно сделать много-много маленьких серверов, которые могут сломаться и не жалко — можно новый создать. Напоминает анекдот про многодетную семью, где ребёнок попадает в дёготь и сильно пачкается:
— Ну что, этого отмоем, или нового родим?
Анекдот кому-то покажется жестоким, но вот в проектировании приложений такой подход оказывается очень полезным и надёжным. Он даже приобрёл специальное название — “Fail fast” (то есть падай быстро — и быстро поднимайся).
Про преимущества облаков можно рассуждать и дальше, но не хочется превращаться в рекламную открытку, их и без меня навалом. Давайте лучше поговорим о недостатках.
Недостатки облаков
Как обычно, недостатки — это продолжение достоинств. Когда серверы находятся “где-то в облаке” — это хорошо, так как не нужно о них заботиться. Но это же означает, что и данные приложений находятся “где-то”. Поэтому самый часто встречающийся страх перед облаками — страх потери данных. Считает бухгалтерия зарплату на своих компьютерах и серверах организации — мы спокойны. Происходит то же самое на серверах, размещённых в облаках, то есть неизвестно где — страшно. Как я могу быть уверен, что мои данные не попадут в руки злоумышленника, пока они находятся на неизвестно где находящемся сервере?
Страх совершенно оправданный, но, на мой взгляд, в нём люди проявляют свою типичную черту — боязнь изменений. Когда нам предлагают поменять статус-кво, мы склонны переоценивать риски и недостатки изменений и недооценивать риски и недостатки их отсутствия.
Где спокойнее хранить свои деньги — под подушкой или в банке? Банк может обанкротиться, это правда. Но ведь и квартиру могут ограбить и вытащить деньги из-под подушки? Поэтому банк, при всех рисках, всё-таки более надёжен.
Так же и с данными. Данные в облаке действительно не находятся под 100% вашим контролем. Но где гарантия, что данные на вашем собственном сервере будут защищены лучше? И их не сможет украсть подкупленный конкурентами администратор? Помните, что Сноуден вынес флешку с самыми секретными данными из самого надёжно охраняемого центра обработки данных. Думаете, вы свой сможете защитить лучше?
Поэтому те же государственные ограничения, чаще всего, распространяются не на то, чтобы данные хранились внутри страны и только внутри страны. Государственным органам до лампочки — потеряете вы свои данные или нет. Что им важно — это возможность получить ваши данные в случае необходимости. Поэтому государства чаще всего требуют, чтобы копия ваших данных находилась внутри страны, то есть в зоне доступа “правоохранительных” органов. И это открывает большое пространство для работы “квази-облачных” сервисов, рассчитанных на одну страну. В отличие от настоящих публичных облаков, которые по определению глобальны.
Вторым часто упоминаемым недостатком публичных облаков является цена. И это действительно так: если переносить приложение в облака напрямую, не используя их преимущества и особенности (об этом дальше), то облачное решение может оказаться более дорогим. Особенно в случае, если свои серверы и инфраструктура уже есть и работают.
Это как сравнивать электричество из розетки и свой собственный генератор. Действительно, для каких-то удалённых от линий электропередач мест, куда тянуть провод с электричеством может быть очень дорого, поставить генератор может быть более оптимальным решением. Особенно если генератор уже куплен и работает. Но всё равно производство электричества на электростанциях — намного эффективнее и дешевле, чем на домашнем генераторе. Это и есть экономия на масштабе, на которой построены вся экономика облаков. И именно это, кстати, делает этот рынок таким консолидированным. Уже сейчас, и тем более в будущем, хоть сколько-нибудь конкурентоспособными смогут быть только несколько глобальных поставщиков облаков. У остальных будет только возможность создавать нишевые решения.
Но хватит о грустном, давайте лучше поговорим о том, как облака устроены и как использовать их особенности и преимущества при переносе приложений в облака или при создании новых приложений. Здесь уместно будет начать с давней идеи, пронизывающей все технологии программирования с самых ранних дней. Продолжение следует через неделю. Мы поговорим о PaaS, контейнерах, serverless и других непонятных словах.