Найти тему
Александр Ложечкин

Об облаках человеческим языком. Часть 1

Оглавление
Облака — белогривые лошадки.
Из детского мультика

В заметке про полиаморию и многоработию я позволил себе провести аналогию с облачными технологиями и из комментариев понял, что аналогия сработала не для всех, так как за исключением немногих ИТ-шников, в облачных технологиях большинство людей понимает мало. Более того, у них в головах часто содержится каша и мешанина из маркетинговых сообщений разных компаний, капитализирующих хайп, сложившийся вокруг этой темы. С ИТ-шниками не сильно лучше, поскольку “специалист подобен флюсу — он всегда однобок”. Поэтому они тоже чаще всего смотрят на облака через призму своего специфичиского опыта и знаний.

Я возьму на себя смелость объяснить человеческим языком, что такое облака. Без рекламы и даже упоминаний каких-либо вендоров. И языком, который будет понятен даже моей маме, весьма далёкой от технологий и до сих пор не поддающейся на уговоры поменять кнопочный телефон на что-то более современное.

Заметка будет оооочень длинная, поэтому я её разбил на части, чтобы не так скучно было читать. Сегодня будет первая часть, в которой я расскажу о том, как устроены компьютерные программы, многопользовательские приложения и что такое “приложение как услуга”. Во второй части, через неделю, я расскажу о виртуализации — основе облачных технологий, преимуществах и недостатков облаков. А в третьей, ещё через неделю, расскажу об эволюции облаков, инфраструктуре как услуге, платформе как услуге и serverless.

Итак, часть 1.

Компьютерные программы

Для начала в двух словах (для мамы) расскажу, как устроены компьютерные программы. Их практически всегда можно разделить на три уровня:

  • Пользовательский интерфейс — это то, что видит пользователь у себя на экране, где нажимает на кнопочки и взаимодействует с компьютером
  • Логика работы программы — это часть программы, которая “думает”, то есть отвечает за поведение программы
  • Хранилище данных — это место, где программа хранит и накапливает всю нужную ей информацию.

Эти блоки можно увидеть и в самом простом, и в самом сложном приложении. До распространения интернета большинство программ были рассчитаны на одного пользователя и работали у него на компьютере (если говорить об эре персональных компьютеров и не смотреть до). Чтобы раскладывать пасьянс, в общем, ничего больше или не нужно. Чтобы заполнять табличку или писать документ — чаще всего тоже.

Многопользовательские приложения

Но люди — существа общественные и им нужно общаться друг с другом, и работать, и отдыхать вместе. Компьютеры помогают им в этом, и приложения давно уже стали (или опять стали) многопользовательскими. Поэтому уже очень давно практически у всех приложений есть разделение на клиентскую и серверную части:

  • Клиентская часть — это то, что работает с одним пользователем и поэтому экземпляр этой части приложения создаётся для каждого пользователя индивидуально (например, у каждого пользователя есть свой собственный экземпляр приложения для работы с социальной сетью, работающий на его телефоне)
  • Серверная часть — это то, что работает для всех пользователей одновременно. Например, в той же социальной сети это то, что хранит все фоточки котиков, комментарии и лайки.

Если сравнить эти два представления, многоуровневое — где программы представлены тремя слоями: интерфейса, логики, и данных, и клиентско-серверное, где многопользовательские программы состоят из клиентской и серверной частей, то окажется, что в большинстве приложений клиентская часть — это пользовательский интерфейс, а серверная часть — это логика и хранилище данных.

Это сильно упрощённая модель и в реальности всё гораздо сложнее и может быть устроено по-разному, но для целей нашего упражнения (объяснить маме, как работают облачные технологии) вполне подойдёт.

Это и есть облака?

На самом деле мы уже про облачные технологии и поговорили, так как в этой модели серверная часть приложения (или “сервер” для краткости) — это и есть облака. И термин “облака” появился именно для того, чтобы подчеркнуть, что, если клиентская часть приложения — вот она, в руках у пользователя, но серверная часть — она где-то там, далеко, неизвестно даже где, то есть — на облаках.

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

Изменения начали происходить с появлением и всеобщим распространением интернета. Сначала приложения организаций работали только внутри корпоративных компьютерных систем. То есть, чтобы работать с такими приложениями, пользователи должны были подсоединяться к сети организации — проводом, или через корпоративную беспроводную сеть. Соединиться с таким приложением из другого места (дома, кафе, аэропорта) было невозможно. Вначале организации очень боялись давать доступ к своим приложениям через интернет, но постепенно технологии безопасности позволили это делать.

Приложения как услуга

Параллельно с этим всё больше и больше развивались и распространялись корпоративные приложения, которые изначально были созданы для доступа через интернет. Такие приложения тогда ещё называли Software as a Service — то есть “приложение как услуга”. Они были намного более удобными в установке, администрировании и использовании, чем традиционные корпоративные приложения. Ведь они работали не на серверах организации, а на серверах создателя этого приложения. И это уже были самые настоящие публичные облака, хотя тогда ещё этот термин и не использовался.

Такие “приложения как услуга” оказались очень удобны. Они доступны откуда угодно, не нужно думать о том, как их администрировать, покупать серверы для работы, нанимать администраторов для управления ими — всё это берёт на себя компания — поставщик приложения. Ещё очень часто оказывалось, что такие приложения намного выгоднее по сравнению с классическими, работающими внутри корпоративной сети, так как они предлагали новые способы оплаты — когда платишь только за то, что действительно используешь (“Pay as you go”).

Поясню подробнее. Если организация решает установить приложение на собственных серверах, то эти серверы надо сначала купить, потом сконфигурировать, потом нужно ими управлять, то есть нужно нанимать администраторов. Потом сразу нужно ответить на вопрос — а сколько серверов нужно купить? Столько, сколько потребуется для того, чтобы выдержать максимальную нагрузку. Но как узнать, какая максимальная нагрузка и сколько нужно серверов, чтобы с ней справиться? Например, бухгалтерия считает зарплату раз в месяц и тогда нагрузка на серверы максимальна. Чтобы приложение справилось с такой нагрузкой, нужно, предположим, 10 серверов. А в перерывах между подсчётами зарплаты хватило бы и одного сервера, и то с запасом. Если размещать приложение на своих собственных серверах, придётся всё равно покупать 10. И мириться с тем, что 9 из 10 будут большую часть времени простаивать без дела. И даже хуже, так как угадать, хватит ли 10 серверов при максимальной нагрузке, было сложно, поэтому сервера покупали “с запасом”. А в случае “приложения как услуги” можно заплатить только за то, что в данный момент используешь.

По аналогии: предположим, у вас в семье 4 человека. И вам нужно их каждый день возить на машине. Вы покупаете обычную машину на 5 человек и её всегда хватает. Но раз в год к вам приезжают в гости родственники, ещё пара человек. И если вам нужно с ними поехать куда-то, то вы берёте такси, а не покупаете заранее большую (и дорогую) машину. Такси в данном случае — это и есть “перевозка как услуга”. Вы платите за большую машину только тогда, когда она вам нужна. И не покупаете “впрок”.

Из-за этих преимуществ “приложений как услуг” всё чаще и чаще создатели корпоративных систем стали задумываться, а не перенести ли им их приложение “в облако”, чтобы не платить зря за серверы, которые не используются 90% времени. И этом поспособствовала ещё одна технология, которая появилась примерно в то же время. Это была технология виртуализации. На ней стоит остановиться поподробнее. Но — в следующий раз.

Продолжение следует.

Оригинал заметки