Руководитель отдела разработки CRIU Павел Емельянов подготовил статью о том, почему такие инструменты востребованы сегодня, и какие возможности они открывают для разработчиков и пользователей в перспективе.

CRIU – это свободный проект, позволяющий копировать, восстанавливать работающие приложения в любом месте и в любое время. Инициатива три года назад получила скептический отзыв Эндрю Мортона, который собирался выкинуть впоследствии «эти лишние функции» из ядра Linux, а сегодня – становится компонентом одного из самых популярных дистрибутивов – Red Hat Enterprise Linux.

Еще в 2012 году разработчики компании Parallels (ныне Odin) начали искать способ живой миграции не только виртуальных машин между различными платформами, но и самих приложений. Задача придать виртуальной среде дополнительной гибкости была понятной – возможность останавливать приложения, чтобы запустить их «в другом месте» выглядела логичной. Существует весьма популярный проект контейнерной виртуализации 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.

Источник: http://www.opennet.ru/opennews/art.shtml?num=43539