====== Виртуализация, контейнеры, ... - что дальше? ====== Для начала необходим небольшой экскурс в историю. Включаем машину времени (а кому-то вполне достаточно просто напрячь память) и поехали. Давным-давно... Нет, неправда - все это происходило не более 60 лет назад. Поэтому так: совсем недавно... Итак, первые компьютеры подразумевали однозадачный режим работы - в силу своего устройства. Далее был придуман многозадачный режим, когда несколько человек работали на одном компьютере (эпоха мэинфреймов). Кстати, первые гипервизоры появились в 60-70-х годах и использовались в основном для систем с разделением времени, повсеместного применения они не имели. Затем появились первые персоналки и они были именно персональными - за ними как правило работал 1 человек. Понимая, что один компьютер может одновременно выполнять несколько программ (для этого просто необходимо их быстро переключать), были созданы первые резидентные программы (они же TSR-программы). Я помню каким чудом мне показалось когда компьютер ОДНОВРЕМЕННО выполняет более 1 программы. Но запускать текстовый редактор и калькулятор одновременно оказалось не интересно и мысль инженеров пошла дальше - они решили исправить концепцию "1 физический компьютер - 1 операционная система" и появились системы виртуализации. Тут подтянулись производители железа - обычные процессоры стали аппаратно поддерживать виртуализацию. Отныне на одном компьютере можно запускать все что заблагорассудится, практически не стесняясь - пара копий Windows с кучей приложений, Linux и еще что-нибудь интересное. Правда, у этого решения есть один недостаток - ограничения самого компьютера, а именно объем памяти (как оперативной, так и постоянной). Умные люди и здесь нашли решение: зачем запускать полноценные виртуальные машины с установленной ОС внутри, драйверами и т.д. когда для работы программы вполне достаточно контейнера, который просто выполняет свою задачу? Так появилась контейнеризация, всем знакомая под названиями Docker. Это позволило увеличить плотность размещения процессов на серверах. "Один контейнер - один процесс" - вот такая философия. Если процесс упал или не нужен - не страшно, запустим снова и уничтожим. Что же далее, что еще изобретут инженеры и разные умные люди? А вот тут я уже вступаю на территорию домыслов и предположений, но, надеюсь, это будет по меньшей мере интересно. Сейчас контейнеры используются для разнообразных задач: запуск приложений и сервисов, тестирование, всякие-разные CI/CD (continuous integration and continuous delivery) и т.д. Все это работает под управлением систем оркестрации - надстроек, позволяющих довольно легко и просто (а главное - автоматически) управлять этими контейнерами. Например, нагрузка на веб-сервис компании увеличилась - система оркестрации самостоятельно включила несколько физических серверов, создала нужные сервисы, раздала настройки для работы, запустила и после того как необходимость в них пропала - отключила все ненужное, включая оборудование чтобы оно не потребляло электроэнергию. Это то что мы имеем на текущий момент. А что если все это же применить ко всей компьютерной технике. Представьте - вы включили свой компьютер/ноутбук/смартфон/кофейный аппарат - любое оборудование. Запустилась небольшая встроенная операционная система (ОС-загрузчик)и ... и все. ОС-загрузчик самостоятельно далее проверил и загрузил из сети необходимые образы того программного обеспечения которым вы пользуетесь и запустил их по мере необходимости. Т.е. принцип "любое приложение - это процесс" стал главным и основным. Что это дает? Ну что же, вот первое и самое несложное что приходит в голову: - "Процессу все равно где он работает" - какая разница где и на каком оборудовании запускать процесс? Он может работать на вашем ноутбуке, где-нибудь в облаке или на смартфоне. Например, вы хотите запустить калькулятор. Но он уже запущен у вашего коллеги - тогда достаточно просто передать ему данные для рассчета и получить ответ. Таким образом, человек даже и не поймет что ему всего лишь показался интерфейс, а не сам процесс. - "Процесс запущен только тогда когда это необходимо". Это даст возможность существенно уменьшить объем памяти в устройствах. Если процесс не нужен - он автоматически через некоторое время убивается. Или замораживается, если не требуется непрерывная работа. Или перемещается на другое устройство или в облако. - "Процесс отделен от данных" - это позволит быстро перезапускать процесс в случае его отключения по той или иной причине.Таким образом, например, можно сделать очень быстрое обновление процесса. Сначала в фоновом режиме загружается новая версия процесса, затем новая версия запускается и ей передаются данные от старого процесса, который при удачном переключении автоматически завершается. Обновление на лету позволит исключительно быстро устранять ошибки, которые в данный момент могут эксплуатироваться годами! - "Данные хранятся и передаются в зашифрованном и сжатом виде" - таким образом перехватывать что-либо в канале не имеет смысла. А объем пересылаемых по сети данных не так уж и велик. - "Всегда хранится несколько копий данных" - это позволит сделать практически 100% надежное хранилище с быстрым доступом. Количество и размещение реплик - автоматическое для увеличения как надежности, так и скорости доступа к данным. Некоторые процессы можно использовать исключительно как средство отображения результатов. Пример - аналог текущего веб-браузера: одна закладка может обрабатываться прямо на вашем устройстве, а остальные - где-нибудь в облаке и на экран доставляться только результаты для отображения. Сценарий работы системы на предприятии: утром пользователи включили/разбудили компьютеры (или используют принесенные с собой) - на них автоматически загрузились и запустились необходимые для работы процессы. Если какой-то процесс требует дополнительных ресурсов - он автоматически и абсолютно прозрачно для пользователя переместился в корпоративное облако (специально выделенное оборудование) или на соседние устройства - пока ваш коллега где-нибудь на совещании его компьютер не зря тратит электроэнергию. Не хватает собственных ресурсов? Оркестратор автоматически запросил в облаке необходимое количество ресурсов "на прокат" и после того как необходимость в них исчезла - вернул все ресурсы. Абонентская плата за отработанные ресурсы автоматически списалась. Сценарий домашнего пользователя: с собой всегда телефон или ноутбук. Пришел на работу - процессы перескочили на вычислительные мощности работодателя, пошел с работы - опять переползли на устройство и/или в облако. Сценарий хостинг-провайдера: купить кучу железа (часть для хранения данных, часть с большим объемом памяти), запустить систему оркестрации и дать доступ. Все остальное работает автоматически. Таким образом, функционирование такой системы очень похоже на пузырьки в стакане: они существуют некоторое время и бесследно исчезают. Если вам не нравятся "пузырьки" - можно найти аналоги вроде понятия "кальпа", нынче это модно. И вот нашел похожие размышления: http://blog.vadmin.ru/2016/06/10.html А вот очень интересная система: https://www.qubes-os.org {{tag>что_дальше виртуализация контейнеры будущее_прекрасно мысли_вслух}}