2014-01-13 3 views
4

В качестве части усилий, которые необходимо сделать для интерактивного ввода scikit-image examples gallery, я хотел бы создать веб-службу, которая получает фрагмент кода на Python, выполняет ее и предоставляет мне с генерируемым выходным изображением.Как создать веб-службу с одним изолированным Python (VM) за запрос

Для безопасности запусканные экземпляры Python должны быть изолированы и управляться ресурсами, поэтому я думал об использовании контейнеров LXC.

Это хороший способ подойти к проблеме? Если да, то каков рекомендуемый способ запуска одной виртуальной машины Python для каждого запроса?

ответ

0

Я не уверен, если вы действительно должны пойти так далеко, как создание LXC контейнеров:

Существует seccomp-nurse, песочница Python, который использует seccomp особенность ядра Linux.

Другой вариант - использовать PyPy, который имеет explicit support for sandboxing из коробки.

В любом случае, неpysandbox, это broken by design и имеет серьезные риски для безопасности.

+0

Спасибо за эти указатели. Вы знаете, сможет ли PyPy запустить научный инструментарий, в том числе numpy, scipy и scikit-image? Кроме того, поскольку seccomp-nurse не поддерживает dlopen, я сомневаюсь, что он может запускать расширения Cython, используемые в большинстве этих пакетов. –

+0

Pypy не поддерживает numpy, посмотрите здесь: http://buildbot.pypy.org/numpy-status/latest.html. Для научного стека я рекомендую использовать anaconda (https://store.continuum.io/cshop/anaconda) - это бесплатный дистрибутив. Поэтому для каждого запроса вы можете создать виртуальную среду conda и запустить там свой код. – danielfrg

+0

Является ли виртуальная среда conda гарантированной песочницей от остальной системы? Кроме того, разрешено ли ограничение ресурсов (память, ЦП)? –

4

[отказ от ответственности: Я инженер Continuum работает на Wakari]

Wakari Enterprise (http://enterprise.wakari.io) стремится сделать именно это, и мы надеемся, отводящие k-port функциональность в облаке Wakari (http://wakari.io), поэтому «опубликованные» IPython Notebooks могут иметь некоторые кнопки на них для управления переменными входами, после чего их можно «вызывать» в изолированном состоянии, а затем вывод, возвращаемый пользователю.

Однако для вещей, которые существуют сейчас, вы должны посмотреть ноутбук Sage. Несколько лет назад несколько человек много работали на Sage Note Cell Cell Server, которые могли бы делать точно, о чем вы просили: выполните небольшие фрагменты кода. Я не последовал за ним с тех пор, но, кажется, она все еще жива и здорова от быстрого поиска:

http://sagecell.sagemath.org/?q=ejwwif

http://sagecell.sagemath.org

http://www.sagemath.org/eval.html

За последний URL, проверьте графики -> Мандельброт, и вы можете видеть, что у Sage уже есть отличные возможности для виджета пользовательского интерфейса, которые привязаны к «исполнению соты».

+0

Я до сих пор не знаю, как запускать совершенно изолированные тестовые экземпляры Python, но я думаю, что Sage Cell решит мою непосредственную проблему - спасибо! –

2

Я думаю, что докер - это способ пойти на это. Экземпляры очень легкие, а докер предназначен для появления 100 экземпляров за раз (время спина - это доли секунды против традиционных виртуальных машин в пару секунд). Правильно настроен. Я считаю, что он также дает вам полную изолированную среду.Тогда это имеет значение не для того, чтобы попробовать использовать песочницу python :-D