Каковы наиболее близкие к истинным (ограниченным по ресурсам) изоляты в JVM сегодня? - PullRequest
3 голосов
/ 23 октября 2010

Поставьте следующую ситуацию:

  • У вас большая и сложная система (распределенный, одновременный, огромный набор данных), которая поддерживает множество пользователей.Код отправляется на данные.
  • Вы хотите разрешить мобильный код в системе, то есть недоверенный код, который будет работать в тех же JVM, что и остальная часть системы, чтобы использовать преимущества локальности данных, избежать десериализации и т. Д.

Вы можете поместить код в забавный загрузчик классов и использовать настроенную политику безопасности, как это делает бегун апплета.Но все еще есть проблемы:

Система в целом должна быть защищена от вредоносного кода - например, порождает множество потоков, загружает весь процессор, выделяет слишком много памяти.

Идея спорав начале тысячелетия был JSR-121.Предполагалось, что изоляторы приносят большую часть преимуществ изоляции процессов - ограничения на использование процессора, порождение потоков, использование кучи: распределение ресурсов в целом.

Учитывая то, что Sun, казалось бы, отказалась от этих усилий, какое самое близкое из них мы можем получить в настоящее время?

Пока мои идеи таковы:

  • Байт-код переводиткод для вставки отслеживания выделения.Google, похоже, сделал что-то похожее на это: http://code.google.com/p/java-allocation-instrumenter/.Нужно немного поработать, так как Google (Джошуа) загнал себя в угол и сделал всевозможные вещи закрытыми ...
  • Также запретил звонки на вещи, которые менеджер безопасности не может, например, на Threadсоздание.
  • Вставьте (редкие) проверки прерывания в циклы и рекурсивные функции, чтобы поток монитора мог наблюдать (используя ThreadMXBean), и, если это занимает слишком много времени, прерывать поток, нарушающий работу.Может быть проще просто установить ограничения на повторяемость - при любом вызове пользовательского кода базовый блок может быть введен только n раз перед прерыванием.

Существуют ли более эффективные или существующие способы сделать это?

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Это сложный вопрос. Моей первой мыслью было создание предметно-ориентированного языка, который делает то, что нужно «мобильным» пользователям. У DSL не будет возможности выполнить опасную операцию.

Кто те люди, которые будут загружать ненадежный код? Это звучит как сомнительная идея для начала. Мы тратим много усилий на то, чтобы люди не могли запустить ненадежный код; -)

1 голос
/ 23 октября 2010

Проблема в том, что единственный реальный способ изолировать процесс - это иметь выделенную машину / оборудование.Что бы вы ни делали, вам придется идти на компромиссы.В зависимости от того, какие эти компромиссы приемлемы, зависит от того, является ли практикой совместное использование JVM с этим кодом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...