¿Qué virtualiza ZeroVM?

12

Tengo algunos problemas para envolver mi cabeza alrededor de ZeroVM .

Digamos que quiero ejecutar Wordpress. Una opción es arrendar un servidor virtual alojado que ejecute VMWare, Virtualbox, Xen, CoreOS o algo similar. En ese caso, lo que se está virtualizando es el servidor y su hardware. Una vez que se aprovisiona el servidor virtual, puedo usar SSH, iniciar y detener servicios, reiniciar la máquina, etc.

Lo que he leído en línea dice que ZeroVM virtualiza la aplicación, pero no entiendo lo que eso significa. ¿ZeroVM proporciona un contenedor similar a Docker ?

Continuando con mi ejemplo anterior, ¿cómo usaría ZeroVM para ejecutar Wordpress? ¿Qué beneficios proporcionaría hacerlo?

Extendamos mi ejemplo de Wordpress a un entorno de alojamiento compartido.

La página de inicio de ZeroVM dice:

Cada solicitud a una aplicación ZeroVM, o zapp, da como resultado el engendro de una instancia independiente. Cada instancia está aislada y segura, girando en menos de 5 milisegundos, y se destruye después de finalizar la solicitud. La velocidad de ZeroVM proviene de que cada instancia virtualiza solo lo que se requiere para ejecutar un solo proceso.

¿Esto significa que cada solicitud a la aplicación ZeroVM genera un nuevo proceso? ¿Qué sucede si está ejecutando más de una aplicación ZeroVM en un servidor? ¿Cómo se enrutarían las solicitudes a la aplicación correcta?

braveterry
fuente

Respuestas:

9

¡Buena pregunta! ¡Trabajo en el equipo de ZeroVM y espero poder ayudar a aclarar las cosas!

¿ZeroVM proporciona un contenedor similar a Docker?

No en realidad no. Docker utiliza LXC y otras características del núcleo para proporcionar un entorno de espacio aislado. ZeroVM se ejecuta completamente en el espacio de usuario y sandboxes una sola aplicación.

Brevemente, ZeroVM funciona validando primero la aplicación que se ejecutará y luego simplemente ejecutándola. Cuando se ejecuta, la aplicación se ejecuta básicamente sin sobrecarga adicional: no hay una máquina virtual detrás de ella.

Para validar una aplicación, debe compilarse en una forma especial de código máquina x86. Este formulario especial tiene la buena propiedad de que se puede verificar estáticamente como "seguro". Entre otras cosas, "seguro" significa que el código no saltará a direcciones fuera de un cierto segmento de memoria proporcionado por ZeroVM. El programa tampoco puede llamar a las llamadas normales del sistema, solo puede llamar a una interfaz syscall muy estrecha proporcionada por ZeroVM. Esta validación se toma del proyecto Native Client de Google .

¿Cómo usaría ZeroVM para ejecutar Wordpress? ¿Qué beneficios proporcionaría hacerlo?

En principio, podría compilar el programa C que es el intérprete PHP. ZeroVM podría iniciar el intérprete PHP en el sandbox y alimentarlo con los archivos PHP que componen WordPress. ZeroVM proporciona un sistema de archivos en memoria de solo lectura y esto podría usarse para leer una base de datos SQLite. Eso le daría un sitio de WordPress de solo lectura, no terriblemente emocionante :-)

Sin embargo, tal como lo veo, este no es el caso de uso principal para ZerovM. Las aplicaciones existentes con gran cantidad de bases de datos deben reescribirse para su uso con ZeroVM. ZeroVM está más destinado a sistemas masivamente escalables donde desea procesar muchos elementos de datos en paralelo.

Imagine que tiene 1,000,000 de correos electrónicos que necesita buscar. Los correos se almacenan en un bloque de almacenamiento como OpenStack Swift o Amazon S3 . Esto significa que los archivos físicos se almacenan en cierto número de servidores de almacenamiento. Tradicionalmente, necesitaría extraer todo el correo a una cierta cantidad de nodos de cómputo para buscarlos. Con ZeroVM y su integración con Swift , puede enviar el código a los datos . Esto es posible porque el código es pequeño (algunos megabytes) en comparación con una imagen de máquina virtual voluminosa, y porque es seguro ejecutar código no confiable en el sandbox ZeroVM.

Por lo tanto, ZeroVM está diseñado para arquitecturas altamente escalables donde cada solicitud opera en diferentes piezas de datos.

Para un sitio de WordPress, esto podría significar que uno debe almacenar cada publicación de blog en un dato separado y tener una instancia de ZeroVM dedicada responsable de cada publicación. Actualmente, el sistema de archivos es de solo lectura, pero hay planes para hacerlo de lectura y escritura y la instancia de ZeroVM responsable de una publicación de blog dada podría manejar cosas como comentarios. Necesitaría un equilibrador de carga en el frente que sea capaz de enrutar el tráfico de manera adecuada. El resultado es una arquitectura muy diferente a la actual de WordPress, pero más escalable. Actualmente implementar esto se deja como un ejercicio para el lector.

Martin Geisler
fuente
4

Parece ser el borde sangrante. Rackspace está investigando a LXC por ser 'inseguro' en comparación, pero hasta que aparezcan los documentos sobre el tema, lo haré con criterio.

  • ¿ZeroVM proporciona un contenedor similar a Docker?

De: Info World "Son posibles algunas comparaciones obvias entre ZeroVM y un proyecto como Docker, pero las intenciones son un poco diferentes. Docker se trata de empaquetar para la implementación a través de una variedad de entornos. ZeroVM se trata más de proporcionar una manera de virtualizar las aplicaciones de forma ligera en un entorno dado donde una solución de VM completa sería excesiva y realmente no sería necesaria ".

  • ¿Cómo usaría ZeroVM para ejecutar Wordpress?

Presumiblemente, necesitaría apache para compilarse para ZeroVM. No estoy seguro de cuánto se romperá la base de código de Wordpress en tales condiciones.

  • ¿Cuales son los beneficios?

El departamento de marketing de Rackspace hará el mejor caso para esto: Aquí

  • ¿Qué desafíos enfrentaré? (Agregado para beneficio de futuros lectores)

El software / plataforma es innovador, por lo que se aplican todas las pruebas y dificultades asociadas con la ejecución de software innovador. (Incluyendo la falta de una gran base de usuarios para soporte). También es una nueva " Plataforma " . Los desarrolladores de software se están acostumbrando a lidiar con plataformas virtualizadas ... pero esta es una nueva generación de virtualización más allá del hardware (VMWare. OracleVM, HyperV) y la virtualización del kernel (OpenVZ). No se sorprenda si nada funciona como se esperaba al principio del juego.

Daniel Widrick
fuente
2

Continuando con mi ejemplo anterior, ¿cómo usaría ZeroVM para ejecutar Wordpress? ¿Qué beneficios proporcionaría hacerlo?

ZeroVM es esencialmente una plataforma para construir PaaS'es. Por lo tanto, la pregunta anterior tiene poco significado en "Mundo ZeroVM". Pero supongamos que alguien ha instalado la infraestructura ZeroVM para usted (lo llamará "Proveedor"). Luego puede crear su propio PaaS o SaaS sobre esa infraestructura. En el caso de WordPress: el Proveedor le brinda la capacidad de ejecutar cualquier código en la infraestructura del Proveedor, puede ejecutar WordPress, cuando su código se está ejecutando, usted paga por ello. Cuando su código no se está ejecutando, no paga. Es decir, cuando alguien abre una página de WordPress, usted pagará la solicitud, después de que se envíe la respuesta al usuario, deja de pagar cualquier cosa. Más que eso, debido a que cada instancia de ZeroVM atenderá una solicitud, su sitio de WordPress esencialmente solo necesita servir una página a un usuario. Y luego argumentaría que realmente no necesita "WordPress", ya que WordPress en este momento es una interfaz PHP para la base de datos MySQL, y en el caso de un usuario y una solicitud, no necesita ninguna base de datos centralizada. Y así.

¿Esto significa que cada solicitud a la aplicación ZeroVM genera un nuevo proceso?

Si y no. Depende de cómo quieres usarlo. Si cada solicitud es una aplicación totalmente diferente con una base de código totalmente diferente, entonces sí, necesitará un proceso completamente nuevo. Pero si cada solicitud es una llamada a la aplicación web PHP o WSGI, ZeroVM puede actuar como un "demonio" que atiende solicitudes mucho más rápido al ahorrar tiempo de configuración de la plataforma (configurando el sistema de archivos + python + wsgi en el caso de la aplicación WSGI, por ejemplo )

¿Cómo se enrutarían las solicitudes a la aplicación correcta?

En este momento, la infraestructura está integrada en el almacén de objetos Swift . La solicitud del objeto Swift activará la ejecución de un código específico. O POST a una URL específica activará la ejecución de la carga útil de la solicitud POST. Por supuesto, cualquier otro tipo de integración es posible, por ejemplo, en un servidor web o una cola distribuida.

usuario64204
fuente