Представлен релиз проекта MagLev 1.0, в рамках которого подготовлена альтернативная реализация окружения для выполнения программ на языке Ruby, построенного на основе использования 64-разрядной виртуальной машины VMware GemStone/S, изначальной созданной для языка Smalltalk. Код проекта распространяется под лицензией MIT, но используемая виртуальная машина GemStone/S является проприетарным продуктом. Бесплатная версия GemStone/S лимитирована возможностью использования кэша размером не более 2 Гб (на общий размер хранимых данных нет ограничений, ограничен только размер кэша).
Окружение MagLev полностью совместимо с веткой Ruby 1.8.7 и включает в себя встроенную поддержку специализированного объектно-ориентированного распределённого NoSQL-хранилища, обеспечивающего выполнение ACID-транзакций и поддерживающего оптимизацию за счет кэширования в оперативной памяти. Благодаря данному хранилищу программное окружение на базе MagLev может обеспечить прозрачную обработку значительного объема (терабайт) данных и кода, даже если они не вмещаются в оперативную память. При этом не делается отличий, какие именно типы объектов, классов, блоков данных и нитей могут быть сохранены и выполнены.
По мнению автора проекта, MagLev скорее стоит рассматривать даже не как Ruby VM с интегрированной БД, а как NoSQL БД, использующую язык Ruby для манипулирования хранимыми данными. Отличительной чертой MagLev является высокая производительность, которая достигается благодаря задействованию высокопроизводительного JIT-компилятора GemStone/S VM, на лету преобразующего псевдокод в машинные инструкции, что позволяет добиться производительности близкой к выполнению нативного кода.
Некоторые особенности MagLev:
- Единое пространство имён для хранения объектов. Сохранение и извлечение данных производится без привязки к отдельным БД, код выполняется в контексте единой базы данных. При этом нет необходимости следить какие данные следует сохранить - все изменения объектов и их сохранение обслуживается автоматически;
- В хранилище могут быть сохранены объекты Ruby, процессы, лямбда-функции, состояние нитей и продолжения (continuations). Например, можно остановить, скопировать, записать и перезапустить определенную нить кода, а затем выполнить копию на другой VM;
- Метод обеспечения постоянного хранения в MagLev оперирует сохранением на диске состояния объектов в том же в формате, в каком они находятся в кэше. Т.е. не требуется прибегать к дополнительным преобразованиям и сериализации;
- Транзакции при работе с хранилищем удовлетворяют условиям ACID (Атомарность, Согласованность, Изолированность и Долговечность), что позволяет запустить несколько виртуальных машин поверх одного хранилища. VM могут запускаться на разных компьютерах, при этом будет обеспечена целостность и актуальность состояния совместно используемых объектов и кода;
- При запуске новой копии MagLev VM, код ранее выполняемый в других экземплярах MagLev VM с большой долей вероятности будет находится в кэше, что значительно ускоряет доступ к этому коду.
|