Programación y Estrategias de Negocios RSS 2.0
# Thursday, October 30, 2008

Hace mas de un año escribí algunos artículos sobre el soporte para FastCGI en Windows Vista o Windows 2008 (lo que en realidad significa en IIS7). Hoy tuve que configurar nuevamente mi máquina para esto y encontré nueva información que puede ser útil:

1. Después del Service Pack 1 de Vista se ha creado un update  del FastCGI.

2. Se ha actualizado (ayer) el proveedor de acceso para SQL Server 2005 y SQL Server 2008. Con este es posible conectar una aplicación de PHP a SQL Server 2008 (incluida la versión Express).

 

Dejo algunas herramientas y referencias aquí:  

 

Referencias:

Tutorial buenísimo de la instalación de PHP y FastCGI en IIS7 (Windows Vista y Server 2008) En Ingles

http://support.microsoft.com/?kbid=954946

 

Herramientas.

Actualización para FastCGI en Windows Vista SP1

SQL Server Php Driver Update

 

Juan Pelaez
Arquitecto de Software

 

Keywords: PHP, FastCGI, Windows Vista, Windows Server 2008, SQL Server 2008.

Publicado en www.juanpelaez.com/blog 

Thursday, October 30, 2008 5:24:03 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
FastCGI | nunit | SQL Server 2008 | Windows Server 2008 | Windows Vista
# Wednesday, November 21, 2007

 

Gracias a la muy amable invitación de la gente de Plataforma y Desarrollo de Microsoft Andino voy a estar en las próximas semanas en Ecuador, Colombia y Venezuela en el evento Andean Road Show donde dictare una conferencia de una hora y media sobre la migración de aplicaciones PHP a .net y las mejores prácticas para ejecutar aplicaciones PHP en plataforma Windows así como algunas de las mejores prácticas para construir aplicaciones Web usando ASP.net.

Espero que podamos vernos en alguna de las presentaciones cerca a su ciudad.

Las fechas aquí:

Ecuador.

Noviembre 29 Quito

Hora Inicio:15:00 pm
Hora Fin :21:00 pm

Registro :
Auditorio :Universidad de las Américas UDLA

Noviembre 30 Manta

Hora Inicio:14:00 pm
Hora Fin :21:30 pm

Registro :
Auditorio :Paraninfo de la ULEAM, Vía San Mateo y Av. Circunvalación,

Diciembre 01 Guayaquil

Hora Inicio:8:30 am
Hora Fin :14:30 pm

Registro :
Auditorio :AULA MAGNA DEL ESPOL (ESCUELA SUPERIOR POLITECNICA DEL LITORAL)

Colombia.

Diciembre 03  Bogotá

Hora Inicio:8:00 am
Hora Fin :2:00 pm

Registro :
Auditorio :Microsoft Colombia, Auditorio Bogotá, Cra. 7 No, 71-21 Torre B piso 7

Diciembre 03 Bogotá

Hora Inicio:14:00 pm
Hora Fin :21:00 pm

Registro :
Auditorio :Microsoft Colombia, Auditorio Bogotá, Cra. 7 No, 71-21 Torre B piso 7

Diciembre 05 Cali

Hora Inicio:8:00 am
Hora Fin :2:00 pm

Registro :
Auditorio :Universidad Santiago de Cali, auditorio Pedro Elías.

Diciembre 04 Medellín

Hora Inicio:13:00 pm
Hora Fin :19:00 pm

Registro :
Auditorio :Bloque 38 aula 125 Universidad EAFIT (Entrada por la Av. Las Vegas)

Diciembre 05 Neiva

Hora Inicio:8:00 am
Hora Fin :2:00 pm

Registro :
Auditorio : Auditorio del Centro de la Industria, la Empresa y los Servicios - SENA Industrial Dirección: Calle 66 # 8 - 25

Diciembre 06 Cartagena

Hora Inicio:13:00 pm
Hora Fin :19:00 pm

Registro :
Auditorio : Colegio Salesianos San Pedro Claver Plazoleta de las Bóvedas No 9-80 Barrio San Diego

Venezuela.

Diciembre 11 Maracaibo

Hora Inicio:12:30 pm
Hora Fin :18:30 pm

Registro :
Auditorio :Universidad del Zulia

Diciembre 12 Barquicimeto

Hora Inicio:12:30 pm
Hora Fin :18:30 pm

Registro :
Auditorio :Universidad Católica Andrés Bello UCAB

Diciembre 13 Maracay Valencia

Hora Inicio:12:30 pm
Hora Fin :18:30 pm

Registro :
Auditorio :Universidad José Antonio Páez

Diciembre 14 Caracas

Hora Inicio:8:00 am
Hora Fin :14:00 pm

Registro :
Auditorio :Microsoft Venezuela, Salón Venezuela, Avenida Principal de La Castellana, Torre Ing Bank piso 10

Diciembre 14 Caracas

Hora Inicio:15:00 pm
Hora Fin :21:00 pm

Registro :
Auditorio :Microsoft Venezuela, Salón Venezuela, Avenida Principal de La Castellana, Torre Ing Bank piso 10

Mi Sesión: Mejorando tu Aplicación PHP.

En esta sesión veremos cómo aumentar el rendimiento de una aplicación PHP utilizando Fast CGI y cuál es el camino a seguir si deseamos migrarla a ASP.NET.

Espero que sea de Ayuda.

Juan Carlos Peláez

MCTS

Miembro del Microsoft Speakers Group

Miembro del Andean Influencers Framework.

Keywords: Php, Migrando Php a .net, Visual Studio 2005, Eventos Microsoft, Eventos para Desarrolladores, FastCGI, ASP.Net.

Wednesday, November 21, 2007 2:27:41 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
.net | ASP.NET | Eventos Microsoft | FastCGI | PHP | Speaker Microsoft
# Tuesday, August 21, 2007

Este post es una continuación del anterior sobre FastCGI y el IIS7, en Windows 2008 Beta 3 y Windows Vista, se incluye como soporte nativo FastCGI, lo que permite correr en maquinas Windows aplicaciones PHP y otros lenguajes de Script con altísimo rendimiento y estabilidad, incluso en ambientes en producción. El FastCGI CTP preview 2 también pueden montarse sobre IIS 5.1 y 6.0.

En este post, más allá de las instrucciones de cómo instalar una aplicación PHP en Windows Vista o Windows 2008, hablaré un poco de las razones por las que el rendimiento de las aplicaciones se incrementa al usar FastCGI.

Primero un poco de Antecedentes.

Common Gateway Interface (CGI)

El estándar de facto para aplicaciones en servidores web es CGI, que fue implementado inicialmente por el servidor NCSA. CGI tiene varios beneficios:

· Simplicidad. es fácil de entender

· Independencia del Lenguaje. Las aplicaciones CGI pueden ser escritas en cualquier lenguaje

· Independencia de Procesos. Ya que las aplicaciones corren en procesos separados, las aplicaciones con problemas no pueden dañar el servidor web o acceder al estado interno y privado del servidor.

· Estándar Abierto. Alguna forma de CGI ha sido implementada en todos los servidores web

· Independencia Arquitectónica. CGI no está atado a ninguna arquitectura particular de servidor 

CGI también tiene algunas deficiencias importantes. El problema principal es el rendimiento: debido a que se crea un nuevo proceso para cada request y este se elimina cuando el request se completa, la eficiencia es pobre.

CGI también tiene una funcionalidad limitada: solo soporta el Rol "responder", donde la aplicación genera la respuesta que es enviada al cliente, los programas CGI no pueden asociarse a otras partes del procesamiento del request como autorización o registro de errores.

 

APIs de Servidor

En respuesta a los problemas de rendimiento de CGI, diferentes compañías han desarrollado APIS para sus servidores. Los dos más relevantes son NSAPI de Netscape e ISAPI de Microsoft. El servidor Apache también tiene un API.

Las aplicaciones asociadas al API del servidor pueden correr mucho más rápido que los programas CGI. El problema del Inicio / iniciación se ha mejorado, ya que la aplicación corre en un proceso dedicado de servidor y se persiste entre las solicitudes. Las API del servidor Web, ofrecen mucha más funcionalidad que CGI, cada persona puede escribir extensiones que realizan control de accesos, acceder a los archivos de registro del servidor, y pueden conectarse en otras etapas del procesamiento del request. 

 

Entonces que es  FastCGI?

La interface FastCGI combina los mejores aspectos de CGI y las APIs propietarias. Como CGI, las aplicaciones FastCGI corren en procesos separados e independientes. Las ventajas de FastCGI's incluyen:

· Rendimiento. Los procesos FastCGI son persistentes –se re usan en manejar múltiples solicitudes. – Esto resuelve los problemas de rendimiento de CGI de crear nuevos procesos para cada request.

· Simplicidad, fácil migración desde CGI. La librería de aplicación FastCGI simplifica la migración de las aplicaciones CGI existentes. Las aplicaciones construidas con FastCGI pueden correr programas CGI para compatibilidad con Web Servers antiguos.

· Independencia de Language. Como CGI, las aplicaciones FastCGI pueden ser escritas en cualquier lenguaje.

· Independencia de Procesos. Una aplicación FastCGI con errores no puede corromper el core del servidor web o alguna otra aplicación. Una aplicación FastCGI no puede robar ningún secreto (como las llaves de sesión para encripción) del servidor Web.

· No-propietario. FastCGI es soportado por todo los productos del Open Source del Mercado, incluyendo apache, NCSA y ahora es soportado por servidores comerciales de Microsoft y Netscape.

· Independencia Arquitectónica. La interface FastCGI no está atada a ninguna arquitectura particular de servidor. Cualquier servidor puede implementar la interface FastCGI. De igual manera, FastCGI no impone ninguna arquitectura a la aplicación: las aplicaciones pueden ser single o multi-threaded, sin importar la arquitectura de hilos del servidor web.

· Soporte para computación distribuida. FastCGI prove soporte para correr aplicaciones remotamente, lo cual es útil para distribuciones de carga y manejo externo de web sites.

 

La interface FastCGI

La funcionalidad que provee la interface FastCGI es muy similar a la que provee CGI. Para entender mejor el protocolo FastCGI. El procesamiento de peticiones CGI es así:

1. Para cada Request, el servidor crea un nuevo proceso y el proceso se inicializa por sí mismo.

2. El servidor web pasa la información del request( como host remoto, nombre de usuario, encabezados HTTP, etc) a las variables  de entorno del programa CGI.

3. El web server envía cualquier input del cliente  (como valores entrados por el usuario en un formulario HTML) al estándar input del programa CGI.

4. El programa CGI escribe cualquier output para que sea retornado al cliente como salida estándar. La información de error es escrita por el web server.

5. Cuando el proceso CGI se cierra, la solicitud queda completa.

FastCGI es conceptualmente muy similar a CGI, con dos diferencias principales:

· Los procesos FastCGI son persistentes: después de finalizar una solicitud, los procesos quedan en espera en vez de finalizar. 

· En vez de usar variables de ambiente del sistema operativo y pipes,  el protocolo  FastCGI multiplexa la información del ambiente, el input  estándar, el output estándar y error sobre una conexión full-duplex. Esto permite a los programas FastCGI correr en maquinas remotas, usando conexiones TCP entre el servidor web y las aplicaciones FastCGI.

El procesamiento de una solicitud en una aplicación single-threaded FastCGI ocurre así :

1. El Web server crea la aplicación FastCGI para manejar las solicitudes al servidor. El proceso puede ser creado en el inicio o creado por demanda.

2. El programa FastCGI seinicializa  por sí mismo, y espera una nueva conexión con el web server.

3. Cuando llega una solicitud de un cliente, el servidor  web abre una conexión a los procesos FastCGI. El servidor envía la información de ambiente y el input estándar sobre la conexión.

4. el proceso FastCGI envía la salida estándar y la información de errores de regreso al servidor sobre la misma conexión. 

5. Cuando el proceso  FastCGI cierra la conexión, la solicitud se completa. El proceso FastCGI queda a la espera de otra conexión desde el servidor web.

Las FastCGI pueden correr localmente  (en la misma máquina que el web server) o remotamente. Para aplicaciones locales, el servidor usa un  full-duplex pipe para conectarse con el proceso de la aplicación  FastCGI . Para aplicaciones remotas, el servidor usa conexiones TCP.

Las aplicaciones FastCGI pueden ser  single-threaded or multi-threaded. para aplicaciones  single threaded, el servidor web mantiene un pool de procesos  (si la aplicación corre localmente) para manejar las solicitudes de los clientes. El tamaño del Pool es configurable por el usuario. Las aplicaciones FastCGI Multi-threaded pueden recibir múltiples conexiones del web server y manejarlas de forma simultánea en un solo proceso.  (De esta forma lenguajes, con soporte para multi thead, garballe collection, entre otros, lo hacen lenguajes naturales para implementar aplicaciones multithread usando FastCGI)

 

Roles de Aplicación.

Un problema importante con CGI es su funcionalidad limitada: los programas CGI solo proveen respuestas simples al request.  FastCGI provee funcionalidad ampliada con soporte para tres diferentes roles de aplicación: 

· Responder. este es el rol básico en  FastCGI y corresponde a la funcionalidad básica ofrecida por CGI hoy. 

· Filter. las aplicaciones FastCGI filtran los archivos solicitados al web server antes de que sean enviados al cliente. 

· Authorizer. El programa FastCGI realizan una decisión de control de acceso para el request ( por ejemplo realizando una búsqueda a la base de datos del tipo Usuario/password).

Otros roles serán definidos en el futuro. Por ejemplo,  un rol "logger" podría ser útil, donde el programa FastCGI podría recibir el registro del log del servidor para procesamiento y análisis en tiempo real. 

 

Que tan rápido es FastCGI?

La respuesta depende de la aplicación, algunas pruebas hechas en internet muestra lo siguiente:

En esta medición se usa un archivo, una solicitud CGI y una fastCGI, usando una aplicación que retorna un número fijo de bytes. 

Archivo  

21ms + 0.19ms per Kbyte

FastCGI

22ms + 0.28ms per Kbyte

CGI

59ms + 0.37ms per Kbyte

Con este dato podemos trata de calcular la velocidad después de migrar una aplicación típica CGI de base de datos a FastCGI, asumiendo que la aplicación toma 50ms para inicializar las conexiones a las bases de datos y genera 5k de datos. Los resultados finales pueden calcularse así: 

CGI

59ms + 50ms + (0.37ms)(5) = 111ms

FastCGI

22ms + (0.28ms)(5) = 23ms

En esta prueba, FastCGI tuvo una ventaja de rendimiento de 5x sobre CGI, más que nada debido a no tener que crear e iniciar un nuevo proceso para cada solicitud.

 

En resumen

FastCGI es un protocolo estándar que permite a ejecutables que usen Frameworks CGI interactuar con un Web Server.

La mayor diferencia con el Protocolo CGI Estándar es que FastCGI rehúsa los Procesos CGI para múltiples peticiones, lo que incrementa el rendimiento en comparación con CGI.

El soporte de IIS para FastCGI permite a IIS hospedar programas CGI normales como PHP, o Ruby On Rails, usando el protocolo FastCGI, ofreciendo alto rendimiento y estabilidad en ambientes de producción

Para usar el soporte  FastCGI en IIS se requieren tres elementos:

· El web server IIS (IIS5.1, IIS6, and IIS7).

· El componente FastCGI para IIS

· EL programa CGI que será hospedado.

Como funciona?

El servidor web despacha las solicitudes http que se han realizado a su aplicación usando el componente FastCGI, este a su vez lanza el programa ejecutable CGI y reenvía el request para que sea procesado. Una vez la solicitud se procesa y la respuesta se finaliza y es retornada al servidor y al cliente, el proceso CGI es usado para llamadas siguientes. Esto permite evita las penalidades de alto rendimiento de iniciar un nuevo proceso para cada solicitud, lo que resulta en mucho mejor rendimiento y escalabilidad en ambientes de producción.

El protocolo FastCGI es estándar si quiere tener más información sobre FastCGI puede ver más aquí. http://www.fastcgi.com/devkit/doc/fcgi-spec.html.

El paquete FastCGI es totalmente compatible con la distribución actual y oficial  PHP 5.x disponible para Windows desde  www.php.net/downloads. También puede usar el preview de Fast CGI con la instalación existente de  PHP 5.x (sin embargo usar la versión ThreadSafe incrementa el rendimiento hasta un 30%)

La versión 5.2.3 también contiene las mejoras desarrolladas por Zend para mejorar el rendimiento del motor de PHP sobre Windows.

Espero que sea de Ayuda

Juan Carlos Peláez

MCTS

Miembro del Microsoft Speaker Group Andino  

Miembro del Microsoft Influencers Group de Colombia.

Keywords: PHP, FastCGI, Windows Vista, Windows 2008, IIS7, Arquitectura.

Tuesday, August 21, 2007 9:20:38 AM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
Arquitectura | Articulos de Desarrollo | FastCGI | IIS7 | PHP | Windows Server 2008 | Windows Vista
# Thursday, August 16, 2007

Con el lanzamiento de Windows 2008 Beta3 (del que Gattaca es Early Adopter gracias a Invitación de Microsoft Colombia) hemos comenzado la fase final de la migración de nuestras aplicaciones para esta plataforma. Sin embargo hay algunas cosas nuevas en este servidor que merecen verse con atención, una de ellas es el soporte nativo de PHP y otros lenguajes de Script como IronRuby a través de una iniciativa conjunta de Microsoft y Zend para desarrollar algo llamado FastCGI que es una nueva forma mejorada para multiprocesamiento de CGI.

 

En este post comentaremos sobre la experiencia de instalar y correr aplicaciones de PHP sobre IIS7 usando FastCGI.

 

El Ambiente.

 

Esto puede hacerse en Windows 2008 Beta3 que tiene el soporte FastCGI nativo ó

En una maquina corriendo Windows Vista con IIS7, en este caso debe instalarse el soporte FastCGI CTP 2 disponible en este link

 

También hay que contar con PHP, este puede descargarse de http://www.php.net/ , aunque hay gente corriendo esto con php4, yo lo hice con la versión 5.2, en esta página pueden descargarse diversas versiones pero la recomendación es bajar la que se llama PHP 5.2.3 Non-thread-safe Win32 binaries [9,523Kb] - 01 June 2007, esta versión está optimizada para correr con IIS7 y FastCGI. (Las otras también corren y muy bien, pero esta tiene un rendimiento 30% superior según las pruebas realizadas por Microsoft y Zend)

 

La Instalación

 

El PHP

 

Descomprimir el PHP en una ruta sin espacios en el nombre, por ejemplo c:\php o d:\php, renombrar el archivo php.ini-recomended por php.ini, abrir el archivo php.ini y cambiar las siguientes variables:

 

Redirect cgi a falso (cgi.force_redirect = 0), modificar la ruta de las extensiones (extension_dir = "D:\PHP\ ext") (o la ruta en donde haya puesto el PHP),

También debe crear las variables de Entorno (En Panel de Control, Sistema, Configuración Avanzada del Sistema, Opciones Avanzadas, Variables de Entorno) Agregar la variables de Usuario “PHPRC = d:\php\php”, agregar en la variable del Sistema Path la ruta: “d:\php\php”

Con eso el PHP debería estar listo para correr en el modo anterior de PHP y también en el modo nuevo. Algunas Variables opcionales que hemos configurado que podían ser de utilidad (short_open_tag = On, error_reporting = E_ALL & ~E_NOTICE, upload_max_filesize = 10M, session.save_path = "D:\PHP\TempSessions")

Finalmente hay que darle permisos en la carpeta PHP al usuario del IIS Process.

 

El FastCGI

 

Descomprimir el archivo que descargo en alguna ruta del Disco, por ejemplo D:\FastCGI

En el archivo de readme.txt vienen las instrucciones muy sencillas que son básicamente:

Instalar FastCGI corriendo desde la consola de comandos con permisos de administrador:

fcgisetup.exe /install

Relacionar el Php con el FastCGI:

fcgisetup.exe /add d:\php\php-cgi.exe PHP, (La ruta donde dejo el PHP)

Listo, esto debería crear los módulos y handlers necesarios en el IIS 7.0, para verificar que quedo correctamente instalado debería encontrar algo como esto en su consola de administración del IIS7.

En la lista de Módulos (por vista de Características) un modulo nativo llamado iisfcgi apuntando a C:\Windows\system32\inetsrv\iisfcgi.dll,

En la lista de asignaciones de controladores (Handlers) una asignación de Script llamada PHP-iisfcgi apuntando a su PHP (por ejemplo: D:\PHP\php-cgi.exe) con una ruta de acceso de solicitudes apuntando a los archivos PHP (*.PHP).

Si tienen otros manejadores apuntando a *.PHP seguramente ya tenia php corriendo o trato de hacer algo similar a esta instalación. En nuestra instalación eliminamos los modulos y controladores asociados a PHP que no eran FastCGI. (Pero antes de hacer esto usted debe entender correctamente que es lo que hacen los módulos y controladores que está eliminando y por que los elimina).

 

Si llego hasta aquí, toda parece está bien instalado y configurado, puede crear una aplicación apuntando a un directorio y crear una página PHP sencilla como esta para probar (modinfo.php que contiene unicamente "<?php phpinfo(); ?>", esta página vista desde el browser debería mostrarle el status del PHP y en la línea Server Api indicar :

 

Server API : CGI/FastCGI

 

La Aplicación.

 

Ahora que ya está corriendo aplicaciones PHP en IIS7 y con el nuevo soporte mejorado de alto rendimiento de PHP FastCGI puede ejecutar sus aplicaciones PHP, nosotros corremos Sugar CRM versión 4.5.1 sobre SQL Server. (Como distribuidores y consultores de Sugar CRM es muy útil poder ofrecer a nuestros clientes el producto sobre IIS7 y estar listos para cuando vayan a los nuevos servidores Windows 2008, pero otra razón importante de escoger esta aplicación es que Sugar ha venido trabajando desde hace más de un año  con Microsoft para ofrecer lo mejor del mundo open source sobre la plataforma Microsoft, esto es soporte mejorado para IIS, optimización para integración con el Directorio Activo, y soporte para SQL Server (incluyendo Express, Standard y Enterprise) y Soporte para el Modelo de Licenciamiento Microsoft Community License. (Parte de la iniciativa Microsoft Shared Source Initiative) entre otros aspectos.

 

En otro post hablaremos de por que esto funciona mejor que antes (las razones) y como correr Ruby o algun otro lenguaje de Scripting usando FastCGI.

Nota: Tengo que agradecer a Ivan Suárez y German Cárdenas del Grupo Commercial Open Source de Gattaca quienes son expertos en PHP, y me han ayudado mucho en la instalación, configuración y comprensión de los conceptos propios de PHP. Gracias Muchachos.

Espero que sea de Ayuda.

 

Juan Carlos Peláez

MCTS

KeyWords: PHP, Windows Vista, IIS7, Windows Server 2008 Beta 3, FastCGI, Sugar CRM, Juan Peláez

Thursday, August 16, 2007 12:41:06 PM (SA Pacific Standard Time, UTC-05:00)  #    Comments [0] - Trackback
Articulos de Desarrollo | FastCGI | IIS7 | PHP | Sugar CRM | Windows Server 2008 | Windows Vista
Contácteme
mail: jpelaez at juanpelaez.com
Archivo
<November 2008>
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
FeedBurner
Maps
Locations of visitors to this page
Sponsors
Acerca de...

Aviso Legal
Las opiniones expresadas en este sitio representan el punto de vista de Juan Peláez sobre diferentes temas y no representan la posición de Studiocom.com.Inc, Microsoft. o de cualquier otra compañía que haya contratado los servicios de consultoría de Juan Peláez

© Copyright 2008
Juan Carlos Peláez
Sign In

Technorati Profile
Estadísticas
Total Posts: 69
This Year: 40
This Month: 2
This Week: 0
Comments: 10
All Content © 2008, Juan Carlos Peláez
El tema 'Business' para DasBlog fue creado por Christoph De Baene (delarou) y modificado para espa�ol por Juan Peláez
Powered by FeedBurner