Tal como indique en mi anterior entrada sobre Saas en v7(I), el modelo para despliegue que elegí es uno que permitiera «empaquetar» aplicaciones v7 + el vServer dentro de una Sandbox y que ese paquete constituyese una instalación y cada cliente puede obtener tantas instalaciones como desee dentro de su cuenta pagando exclusivamente por su uso.
Asi que primero lo primero, como se indico en el post de análisis este tipo de arquitectura requiere de un servicio cloud que permita abstraer los recursos de computo, a hoy el mercado de IaaS ofrece muchas potenciales soluciones y el primer filtro son aquellas IaaS que cuentan con una API completa que me permita manejar la creación de servidores, ips, almacenamiento, etc. asi que analize Amazon EC2, RackSpace con sus CloudServers y GoGrid, despúes de contrastar servicios, costes, seguridad y librerías disponibles, me decante por Amazon (una sorpresa escoger al lider mundial jejeje).
que nos ofrece amazon:
- Amazon ofrece un despliegue de infraestructura al rededor del mundo con multiples regiones y diferentes zonas de disponibilidad en esas regiones.
- Caracteristicas que crecen semana tras semana (solo hay que ver el NewsLetter).
- Elastic Compute (EC2), creación de servidores al vuelo pudiendo escoger entre diferentes tamaños y rendimientos usando plantillas (AMIs) para crear servidores pre-configurados.
- Elastic Block Storage (EBS), una razón super importante por rendimiento y seguridad, ya que las EBS se replican en las diferentes zonas de disponibilidad dentro de la region seleccionada ademas tener varios niveles de rendimiento en E/S.
- Costos bastante razonables.
- una API super completa ademas de la disponibilidad de una librearía Cloud para Ruby.
- Simple Storage System (S3), el sistema de almacenamiento cloud de Amazon.
- Elastics IPs, la posibilidad de mapear direcciones IP fijas a diferentes instancias EC2, importantisimo para realizar reconstrucciones que sean transparentes para los usuarios.
ok, ya tenemos los recurso de computo asi que, ¿ que arquitectura montamos ?, esta es la propuesta de vClouden:
En primera instancia esta la aplicación Web, esta desarrollada en Ruby on Rails y tiene la interfaz necesaria para administrar la solución Saas (crear Aplicaciones y añadir versiones, administrar los soportes, crear la documentación de tus apps y personalizar la interfaz de logeo), también el interfaz para los clientes finales quienes en ultimas utilizaran las soluciones v7 (login, soporte, documentación, instalaciones, etc.), esta webapp además se encarga de la administración de la infraestructura creando y configurando servidores, realizando las instalaciones que soliciten los clientes, backups diarios y demás tareas de adminsitrativas.
En segunda instancia esta Nimbus, esta es una aplicación pre-instalada en cada servidor que crea vClouden y que tiene la capacidad de crear SandBoxs e indicarle sus limites de rendimiento, en esta sandbox se instalara un vServer monopuesto y le instalara la aplicación v7 indicada, realizara las actualizaciones de versiones, desinstalaciones, mapeo de red para redirigir las comunicaciones hacia y desde las sandbox y realizar backup de data a pedido de los clientes.
Como puede observarse las maquinas EC2 tienes dos niveles, la maquina pura (la parte superior en amarillo) es solo la estructura de computo (CPU + Ram + FileSystem+ nimbus), la parte inferior contiene las Sandboxs y los datos de los vServers, esto es importante porque al estar estas dos estructuras separadas hace que los recursos de computo sean «desechables» y en el caso de un mealtdown o que una instancia este corriendo sobre hardware degradado simplemente se descontecta la parte de datos y se le conecta a una instancia nueva remapeando las ips para que el proceso sea transparente para el usuario.
Las SanBoxes
Son unidades aisladas en disco y rendimiento donde se instala un Velneo-vSever con tu aplicación, estas sandbox permiten otorgarle a cada aplicación lo que requiere para funcionar ademas de agregarle una capa de seguridad a todo el esquema añadiendo total aislamiento, cabe resalta que dentro de cada sandbox cada vserver es monitoreado para mantenerlo corriendo y vigilado por los perfiles de seguridad para que no haga mas de lo que debe hacer; este tipo de aislamiento además tiene una ventaja de futuro: tus apps podrán ser declaradas con dependencias (curl, libxml, Rmagick, etc), mismas que serán instaladas solo en las Sandbox de tus aplicaciones sin afectar a las demás.
y en cuanto seguridad ?
con esta arquitectura vClouden cuenta con 4 nivles de seguridad:
- El firewall y las propias medidas de seguridad de Amazon que no son pocas, aqui puedes ver un presentación muy completa sobre seguridad en AWS.
- El nivel de asilamiento que proveen las Sandbox, en lo que a tu aplicación y vServer respecta tiene un servidor solo para el solo, con un rendimiento fijo y su propio filesystem.
- Perfiles AppArmor para las Sanbox para evitar que acciones en las mismas intenten ejecutar comandos en el host como tal.
- Dentro de las sandbox, ademas de que el vServer no se corre como un usuario con privilegios de Root, cada vServer es monitoreado por un perfil AppArmor para asegurar a nivel de aplicación que no va a acceder a mas de lo que le corresponde.
y la Alta disponibilidad ?
Cada instancia de EC2 es monitoreada por Monit, este demonio revisa intervalos si los vServers estan arriba y de no estarlo se encarga de arrancarlo nuevamente, asi que si tu vserver cae por algun error en un proceso (que es lo mas común) será levantado automáticamente a los 10 segundos, y esto lo hará 5 veces consecutivas, a la sexta nos será notificado.