CRIU, путь от вызывающей непонимание разработки до интеграции в Red Hat Enterprise Linux
Руководитель отдела разработки CRIU Павел Емельянов подготовил статью о том, почему такие инструменты востребованы сегодня, и какие возможности они открывают для разработчиков и пользователей в перспективе.
CRIU — это свободный проект, позволяющий копировать, восстанавливать работающие приложения в любом месте и в любое время. Инициатива три года назад получила скептический отзыв Эндрю Мортона, который собирался выкинуть впоследствии «эти лишние функции» из ядра, а сегодня — становится компонентом одной из самых популярных ОС Linux — Red Hat Enterprise Linux.
Еще в 2012 году разработчики компании Parallels (ныне Odin) начали искать способ живой миграции не только виртуальных машин между различными платформами, но и самих приложений. Задача придать виртуальной среде дополнительной гибкости была понятной — ведь именно Virtuozzo первой предложила технологии контейнерной виртуализации, и возможность останавливать приложения, чтобы запустить их «в другом месте» выглядела логичной. Cуществует весьма популярный проект контейнерной виртуализации OpenVZ, поддерживаемый компанией Virtuozzo, и у него даже есть определенные возможности по резервному копированию и восстановлению работы приложений, но именно CRIU изначально была призвана создать универсальный и надежный инструмент перемещения приложений между любыми рабочими средами.
Первое время сообщество рассматривало данную инициативу с большим скепсисом. Все же решение задачи, которую поставили перед собой программисты было очень многосторонним — нужно было предусмотреть массу всяческих нюансов, чтобы приложение продолжило работать без сбоев, не теряло свои данные и сохраняло безопасность ИТ-инфраструктуры, принятые политики доступа к информации. Даже Линус Торвальдс поначалу считал, что «ничего не получится», но текущие достижения и упорство команды доказали обратное.
CRIU меняет Linux
Возможно эта фраза покажется вам слишком уж бравадной, но в действительности команда CRIU за прошедшее время внесла немало изменений и дополнений в мир GNU/Linux. И это касается не только самого когда CRIU, пакет с которым уже включают в себя различные дистрибутивы, но и различных дополнительных интерфейсов и функций ядра (kernel), которые были созданы командой программистов для поддержки работы CRIU. Конечно, можно было зашить всю технологию в отдельный модуль ядра, но разработчики OpenSource всегда предпочитают сделать что-то более общее и полезное, если возникает такая возможность.
Так, благодаря CRIU в ядре Linux появилась возможность получать исчерпывающую информацию о сетевых соединениях, следить за тем, какие участки памяти используют отдельные приложения. Кроме этого были расширены возможности получения информации из виртуальной файловой системы proc, все более широко используемой OpenSource сообществом.
Более того, знаком зрелости CRIU можно считать тот факт, что в последнем релизе Red Hat Enterprise Linux от ноября 2015 года инструментарий CRIU был включен в комплект как технологический превью (tech preview). А это значит, что наработки CRIU стали вызывать интерес у более широкого спектра пользователей Linux — ведь с новой версией Red Hat все желающие смогут опробовать механизм CRIU в действии.
Отчего столько шума?
Вы спросите, чем же CRIU отличается от других решений для резервного копирования и восстановления приложений? Ответ будет очень простым — CRIU позволяет перенести выполняющееся приложение на другой сервер, практически незаметно для самого приложения. Все данные работающего приложения сохраняются в виде набора файлов и могут быть переданы куда угодно и как угодно. Такой подход снимает ограничения приложений не написанных в популярной сегодня микросервисной архитектуре — теперь приложение не привязано жёстко к серверу, на котором оно выполняется, а это значит, что для восстановления его функций не нужно его перезапускать, теряя время и данные — можно просто восстановить приложение, которое не только будет работать корректно, но и не поймет, что его кто-то куда-то перенес.
За время развития проекта ребята научились делать последовательные снимки (snapshot), добавляя к образу только изменившиеся данные, сделали возможной миграцию приложения с однго сервера на другой вообще без обращения к жесткому диску — прямо сохраняя все необходимые данные в оперативной памяти. В последних версиях CRIU появилась возможность обрабатывать сложные комбинации из абстракций ядра, что необходимо для работы с современными приложениями. А в ближайшем будущем появиться функция миграции приложения без сохраненной памяти, с последующей её подкачкой по сети для продолжения непрерывной работы.
Конечно, такая задача порождает массу вопросов и подзадач, которые команда CRIU решает и сегодня. Ежеквартально выходит новый релиз CRIU, в которых, как вы можете видеть сами, появляется немало новых функций и огромное количество доработок и исправлений. Так, в последней версии CRIU 1.8 появилась библиотека API Python, улучшено взаимодействие с ядром и OpenVZ, исправлен целый ряд недоработок, а также повышен уровень безопасности. Все это и привело к тому, что CRIU появился в составе Red Hat Enterprise Linux — пусть пока и в статусе tech preview. Похоже, российской команде программистов все же удается решить свою задачу, и, возможно, скоро мы увидим CRIU в составе всех остальных дистрибутивов Linux.
© OpenNet