Presentación sobre virtualización interoperable utilizando opensource

El 15 de abril fui invitado a una presentación técnica en el Instituto de Prácticas Bancarias y Financieras en Quito, con el objeto de mostrar el estado del arte en técnicas de virtualización y aprovechamiento de hardware utilizando software libre, de código y estándares abiertos y sus capacidades de interoperatibilidad.

Entre los participantes había unos 50 representantes de empresas, consultoras y estudiantes universitarios, que asistieron a la actividad para ver la comparativa de interoperatibilidad que preparé junto a Pablo Toapanta, quien es un reconocido profesional en tecnologías Microsoft en Ecuador.

Preparé unas láminas guía muy básicas con el propósito de presentarle a los participantes la idea de que no todo es virtualización, sino que antes de considerar la virtualización (y algunos temas más complejos como cloud o utility computing) hay muchos pasos a tomar en cuenta como la emulación y la clusterización.

Si bien hice un gran énfasis en la capacidad de paravirtualizadores como Xen, resaltando algunos casos de uso importantes como el trabajo de Joanna Rutkowska con Qubes, los escenarios de interoperatibilidad que preparé fueron esencialmente con Sun VirtualBox, y no me queda ninguna duda de que el producto es muy completo, fácil de usar y flexible para entornos altamente complejos, con el impacto en performance asociado a esta técnica de virtualización.

Utilizando solamente un cable Ethernet entre dos laptops, una con Microsoft Windows Server 2008 utilizando HyperV y otra con Debian GNU/Linux utilizando VirtualBox, y en menos de una hora preparamos y mostramos estos escenarios:

  • Linux como un miembro de dominio utilizando Kerberos y Samba, iniciando sesión en un Active Directory de Microsoft Windows Server 2008
  • Linux como un servidor de recursos compartidos, específicamente impresoras, utilizando IPP y drivers Postscript, con lo que logramos imprimir desde Microsoft Windows Server a la impresora virtual PDF de CUPS
  • Linux como un proveedor de aplicaciones Web y de administración accesible vía RDPv5, totalmente ‘consumible’ desde Windows de forma nativa
  • Linux como un host de Microsoft Windows 7 y Microsoft Windows Server 2003, utilizando RDPv5 para acceso único, o bien Terminal Services con SeamlessRDP para integración total con el escritorio Linux

También presentamos escenarios ‘no-interoperables’ como por ejemplo Android corriendo como una máquina virtual en Linux, o clústeres de Microsoft SQL Server usando HyperV. Pero, sinceramente, creo que la gente fue a ver que podíamos hacer en cuanto a interoperatibilidad, y a eso dedicamos la mayor parte del tiempo.

La importancia de estos escenarios radica en que no sólo son el resultado de una hora de preparación sino que en los últimos dos años me he enfrentado profesionalmente en varios proyectos en Venezuela y Ecuador a estos casos. Por ejemplo, ayudé a la Compañía Anónima Nacional de Teléfonos de Venezuela, CANTV, a implementar Canaima GNU/Linux 2.0 en sus estaciones de trabajo corporativas (unas 15 mil) utilizando SeamlessRDP para aplicaciones legadas que no pueden ejecutar en Linux, o al Complejo de Refineración de Paraguaná, una de las refinerías más grandes del mundo, a implementar máquinas virtuales para migrar parcialmente servicios de su infraestructura local, como impresoras auditadas o metadirectorios.

Otra ventaja de este enfoque comparado con los procedimientos tradicionales, tipo receta, en los que instalamos “Linux como un controlador de dominio”, “Windows como host de Linux”, etc., es que la virtualización y el incremento en la adopción de estándares abiertos de la industria da por sentadas muchas cosas fácilmente como por ejemplo integración del DNS, DHCP, NTP, aplicaciones vía HTTP/S, etc.

Pasé un excelente rato dando la presentación, el público estuvo muy interesado, tuve la oportunidad de poner en práctica de forma muy ágil muchas técnicas interesantes y la interacción con Pablo fue excelente, ¡buen trabajo!

Una breve PoC del SDK de Windows Azure para PHP

Hace varios meses conseguí acceso al CTP de Windows Azure, el servicio de cloud computing de Microsoft. Este servicio ofrece capacidad de cómputo (CPU, RAM), networking y almacenamiento de data estructurada (tablas) y no estructurada (colas, blobs) en centros de datos ubicados en Europa, Asia y los Estados Unidos, aunque AFAICT sólo está operando el de Estados Unidos.

Con estas claves se podía usar Windows Azure durante el preview de tecnología, lo cual ya venció IIRC. Windows Azure será accesible para ciertos países bajo una estructura de costos particular. Realmente para las organizaciones asumo que la ventaja competitiva de usar Azure (vs. Amazon, e.g.) radicará en la integración que ya tiene con el IDE Microsoft Visual Studio y las tecnologías asociadas al desarrollo en plataforma Microsoft. Digamos que se promete poder migrar una aplicación .NET existente a la nube.

Yo me propuse usar Windows Azure con una aplicación libre, hecha en PHP, para probar. El SDK de Windows Azure para PHP realmente son sólo unas librerías que se incluyen en un proyecto PHP. Una vez incluídas, estas librerías hacen disponibles funciones para crear, listar, acceder, agregar, modificar y/o eliminar elementos de datos en la nube como: blobs, tablas y colas. Todo esto se hace con funciones REST. El SDK necesita CURL y la librería php-curl.

Es importante resaltar que en el caso de las tablas, si bien se conoce que Windows Azure utiliza SQL Server como almacén de datos en la nube esto es transparente para el desarrollador. Simplemente se crean entities en PHP con campos arbitrarios y esos se mandan completos a la tabla; en el backoffice ya se encargará el RDBMS de crear columnas, tipos de datos y demás. Tampoco hay que saber SQL ni T-SQL para hacer consultas, sino que hay una sintaxis simplificada y además las librerías ayudan. Piense en algo como CouchDB con SQL Server como un backend.

No es de sorprender que el almacenamiento de tablas de Windows Azure presenta características en línea con tendencias alejadas de SQL como prevalencia del modelo key-value para manejadores de bases de datos en aplicaciones de alto rendimiento, con ejemplos como Facebook, eBay y Elgg y cierta orientación a un modelo de DB basado en “documentos” que realmente se tratan de estructuras de datos arbitrarias enviadas al manejador para su almacenamiento. Esto en definitiva es positivo para el desarrollador y es curioso ya que hace muy pocos años esto no estaba en el panorama.

El SDK para PHP es licenciado bajo BSD lo que lo hace software libre y de código abierto. Las librerías no las hizo Microsoft sino un tercerizador (RealDolmen) y personalmente considero que se pudo haber usado librerías de REST un poco más elaboradas. Para cuando probé Windows Azure habían proyectos para Java y Ruby, en esencia patrocinados por Microsoft. En MLs japonesas ya habían módulos (al menos para Tablas) para lenguajes como Perl.

Un ejemplo muy sencillo para empezar con tablas sería (y aquí más ejemplos):

require_once 'Microsoft/WindowsAzure/Storage/Table.php';

$svc = 'table.core.windows.net';
$act = 'act'; # el prefijo de *.table.core.windows.net que crean en la página, identifica al 'usuario'
$key = 'key'; # una clave binaria en base64 que generan en la página, completa la credencial

$storageClient = new Microsoft_WindowsAzure_Storage_Table($svc, $act, $key);
$result = $storageClient->createTable('PrimaTabla');

$result = $storageClient->listTables();
foreach ($result as $table)
{ echo 'Tabla: ' . $table->Name . "\n"; }

Los drawbacks que veo radican en la ubicación geográfica de las infraestructuras físicas que se están utilizando, y obviamente el impacto estratégico que tiene en algunas aplicaciones, así como las amenazas tradicionales para aplicaciones sensibles de servicios de cloud computing. Sin embargo, es bueno saber que es posible desarrollar en PHP (y otros lenguajes de stack abierto, FWIW) usando Azure como backend y sin estar atado a un IDE o a un software de gestión de ciclo de vida específico.