Desarrollo en aplicaciones de mediana y gran envergadura

Enviado por admin el Vie, 09/01/2004 - 01:48.
Clasificado en:

1.- Desarrollo PHP en aplicaciones de mediana y gran envergadura

[Extraído de Enterprise PHP]

Muchos desarrolladores señalan que PHP no es apto para proyectos de mediana y gran envergadura. La verdad, como todo lenguaje, estos factores dependen más del hardware disponible y la calidad del código.

Entre los factores a tomar en cuenta, se encuentran:

  • Rendimiento y rapidez de desarrollo
  • Confiabilidad y seguridad
  • Extensibilidad: uso de estándares industriales para comunicarse con otros sistemas de software
  • Escalabilidad: Posibilidad de agregar servidores ante mayores requerimientos
  • Disponibilidad: capacidad de soportar fallas de servidores de manera transparente
  • Facilidad de mantenimiento y desarrollo

1.1.- Rendimiento y rapidez de desarrollo

PHP es reconocido por su gran rendimiento, resultando en este aspecto competitivo en relación a otras tecnologías. Se pueden revisar benchmark en Chamas y PHP Kitchen. Si se desea aumentar el rendimiento, se pueden utilizar caches de bytecode u optimizadores de código, tales como Turck MM-Cache, que pueden aumentar muchísimo el rendimiento de PHP, especialmente en script pequeños que utilizan muchas librerías.

La rapidez de desarrollo en PHP se fundamenta, primero, en la facilidad de aprendizaje, derivada de su sintaxis extraida de C, Java y Perl, que permite a cualquier programador que haya experimentado con esos lenguajes ser productivo en poco tiempo.

PHP, además, presenta muchos de los estándares utilizados en otros lenguajes, como OOP, compilación condicional y variables estáticas. La posibilidad de generación de errores se disminuye al imponerse la obligación de registrar las variables globales dentro de las funciones y al utilizarse el modo de control estricto de errores, que notifica de cualquier variable no inicializada.

Junto a estos, existen variados sistemas de plantillas que permiten separar el contenido y el código de la presentación; se puede utilizar la IDE que se estime conveniente y en la red es posible encontrar múltiples librerías de código, entre las cuales destacan PEAR y Hotscripts

1.2.- Confiabilidad y seguridad

El amplio uso de PHP en los últimos años ha facilitado la búsqueda de errores, los cuales le brindan una mayor confiabilidad al lenguaje. Ahora bien, es necesario tener cuidado con el uso de extensiones; aquellas más utilizadas, como las que entregan soporte para Mysql y Oracle, han demostrado ser las más estables.

Otra decisión en torno a la confiabilidad es el uso de PHP como módulo o CGI para el servidor. Si bien el primer modo aumenta la eficiencia del sistema al eliminar la sobrecarga de la apertura de programa propia de CGI, tiene el inconveniente de que cuaquier error grave de un script puede afectar a todo el servidor; cuando se invoca PHP por CGI, solamente el proceso involucrado se ve afectado, asegurando la continuidad del servicio. Para aumentar la eficiencia de PHP en modo CGI, se puede utilizar la extensión FastCgi, que mantiene en memoria los distintos CGI ejecutados, eliminando el tiempo necesario de inicialización de estos, manteniendo la independencia de procesos.

En cuanto a la seguridad, PHP puede operar en safe-mode (modo seguro), el cual restringe el acceso al sistema de archivos y permite deshabilitar funciones que presenten riesgos. El uso de memoria de PHP se puede determinar, también, a priori.

1.3.- Extensibilidad

Los diseños de multiples capas son comunes en la empresa actual. PHP se encuentra especialmente indicado para cubrir las necesidades de presentación, debido a sus poderosas funciones de manejo HTTP, generación de HTML y sistemas de plantillas.

PHP se puede conectar, a través de las extensiones, a diversos sistemas de bases de datos y lenguajes. En lo primero, ya se ha comentado la posibilidad de conectarse a bases de datos MySQL, MSSQL, Oracle, Sybase, Dbase, entre las conocidas y, en relación a lo segundo, puede interactuar con objetos COM y Java.

1.4.- Escalabilidad

Cuando se requiere responder a una mayor demanda, la primera opción es actualizar el servidor. Si esto no es suficiente, será necesario comprar nuevos servidores, para crear una granja de servidores, entre los cuales se repartirán las peticiones a través de un sistema de balance de carga.

En relación a PHP, las siguientes medidas deberán ser tenidas en cuenta:

  • Un sistema de autentificación global, basado en LDAP o base de datos
  • Mecanismos de almacenamiento de variables de la aplicación
  • Uso de sesiones a través de base de datos
  • Sincronización de tiempo de servidores

1.5.- Disponibilidad

Para mantener la máxima disponibilidad de una aplicación PHP, puede ser necesario instalar dos o más servidores en cluster, de tal manera de que ante la falla de uno de ellos, el otro responda manteniendo los servicios. Suele utilizarse en este modelo un sistema de almacenaja compartido, de manera tal de evitar las molestias de sincronizar la información entre los computadores.

1.6.- Mantención y desarrollo

Entre las cosas a considerar para mantener en óptimo estado la aplicación, se encuentran:

  • DNS y Router
  • Estado de la base de datos y tiempos de respuesta
  • Tamaño de archivos y directorios
  • Rendimiento del servidor Web.

Existen muchas herramientas para medir el desempeño global del servidor, tales como MS Web Application Stress Tool para Windows o el ab (apache-benckmark), que viene en las distribuciones Linux de Apache.

2.- Algunos consejos para el desarrollo de PHP

2.1.- Rapidez v/s escalibilidad

Es necesario tener en cuenta que el código más rápido bajo circunstancias de poca demanda puede ser más lento en situaciones de demanda mayor. Por ejemplo, tenemos los siguientes códigos para leer un archivo

liebre.php

  1.  <?php
  2.   // Modo liebre
  3.   $archivo="mi_archivo.txt";
  4.   $contenido=implode("\n",file($archivo));
  5.   $contenido=str_replace("esto","aquello",$contenido);
  6.   echo $contenido;<br>
  7.  ?>

Tortuga.php

  1.  <?php
  2.   // Modo tortuga
  3.   $archivo="mi_archivo.txt";
  4.   $fp=fopen($archivo,"r");
  5.   while(!feof($fp)) {
  6.   $contenido=fgets($fp,4096);
  7.   $contenido = str_replace("esto","aquello",$contenido);
  8.   echo $contenido."\n";
  9.  ?>

El archivo de ejemplo, mi_archivo.txt, consta de 300kB. Como se verá, el código 'liebre', lee todo el contenido del archivo y realiza los cambios de una vez, en tanto que el segundo realiza los cambios de a una línea por vez, demorando más por la mayor cantidad de veces que debe llamar al sistema de archivos.

Digamos que 'liebre' ocupa 0.04 segundos y 10Mb de memoria, en tanto que 'tortuga' ocupa 0.06 segundos y 5Mb de RAM. El servidor cuenta con 100Mb libres y tiene su RAM libre en 99%. Con diez peticiones concurrentes, 'liebre' queda sin memoria y a la 11 conexión debe usar la memoria virtual, cayendo a 0.08 segundos. 'Tortuga', en cambio, todavía seguirá corriendo a 0.06, pudiendo llegar a 20 conexiones concurrentes sin caer en desempeño.

2.2.- Consejos generales para optimizar PHP

  • Regla para actualización de hardware: Para aumentar el rendimiento de PHP, se debe renovar la CPU. Para HTML estático e imágenes, el cuello de botella se encuentra en la RAM y en la red.
  • Un script PHP demora en entregarse entre 2 a 10 veces más que una página estática.
  • Si es posible, utilizar la compresión del HTML a través de la variable de php.ini output_handler = ob_gzhandler. Esto está especialmente indicado cuando los clientes son usuarios de módem
  • Los script PHP son recompilados cada vez que se ejecutan. Se puede usar un cache PHP, se puede ahorrar ese tiempo.
  • Si las páginas generadas no son alteradas con frecuencia, se puede utilizar un sistema de cache para las salidas HTML.
  • Dentro de lo posible, se debe utilizar la menos cantidad de echo, ya que cada uno de ellos implica enviar información a través de la red. Se puede almacenar todo el contenido dentro de una variable o utilizar buffer de salida (ob_start).
  • Si es posible, se debe dispersar la carga, utilizando un servidor para el PHP, otro para el servidor SQL y otro, de bajas especificaciones,para las páginas HTML estáticas y las imágenes.

3.-Lineamientos generales para desarrollo en PHP

3.1.-Documentación

Si bien en un proyecto PHP pequeño el código se explica a si mismo, en uno de grandes proporciones es necesario documentar el código. La forma más común de hacerlo es utilizado un formato similar al de Javadoc.

Existen herramientas como phpDocumentor, y PhpDoc, que recopilan este código y producen páginas HTML con documentación para las funciones y clases, creando por ejemplo,representaciones gráficas de las jerarquías de clases.

3.2.- Estilo de código

Existen muchas recomendaciones de como escribir código.

  • Nombre de variables: Personalmente, me gusto el uso de la notación con prefijo-camélida, o sea, una letra o más para indicar el tipo de la variable y el uso de mayúsculas para separar las palabras. Por ejemplo $sNombreArchivo o $oMiObjeto. Como referencia, se puede utilizar:
    • booleano:b
    • integer:i
    • float:f
    • string(cadena):s
    • array(arreglo):a
    • objeto:o
    • referencia:r
  • Nombre de constantes: Haciendo caso a la tradición, deben ir siempre en mayúsculas y las palabras separadas por _ : ESTA_ES_UNA_CONSTANTE
  • Uso de braquetas: Cualquiera de las siguientes formas es aceptable
if ($a=5)
{ 
echo ""; }
if ($a=5) {
echo ""; }
  • Indentación: Utilizar 4 espacios por cada nivel. Los tabuladores, en distintos editores, pueden provocar que se pierda la visualización de estructura.
  • Inicialización de objetos:Un contructor de php no puede devolver un error en caso de falla. Por tanto, es mejor hacer que una función devuelva los objetos que requerimos (patrón Factory)
  • Condicionales de igualdad: Si bien no lo ocupo, un método seguro para atrapar errores al revisar igualdad con un valor estático es

    if(5==$a) {}

    ya que si se coloca por error un =, se generará un error en tiempo de compilación

3.3.- Uso de software externo.

PHP es un lenguaje que lleva casi 9 años de desarrollo, así que hay bastante código en Internet para buscar. Antes de empezar a crear librerías para acceder a base de datos, usar plantillas o crear un documento en un formato específico, es recomendable revisar si alguien ya realizó el trabajo por uno.

Entre las librerías que más ocupo, se encuentran:

4.- Objetivos a cumplir

De acuerdo al grado de experiencia, se pueden realizar los siguientes ejercicios

  • Crear una página HTML con formulario
  • Enviar el formulario a una página php, que muestre las variables enviadas
  • Guardar las variables enviadas en una sesión, mostrándolas en una tercera página
  • Crear el formulario con una plantilla HTML_Template_IT
  • Conectar a la base de datos usando AdoDb, y presentar los resultados
  • Con los datos de la base de datos, se genera un formulario, que al ser enviado altera los datos originales.
Imagen de Raquel

Ya está la bitácora listada en Bitacoras.com

Puedes hacer ping e informar así de las actualizaciones a través de nuestra página: http://www.bitacoras.com/directorio/ping.php

Deberás hacer ping con la dirección URL con que estás registrado en el directorio...

Gracias.

Enviado por Raquel (no verificado) el Sáb, 28/02/2004 - 20:13.
Imagen de vflores

Hola,
Primero felicitarte por tu excelente WEB,
Quisera pedirte tu opinion sobre como trabajar con php y oracle,
Quisera usar php5 con Oracle 8.1 ahora segun lei en tu web no es posible usar esta convinacion.
Tendre que usar php 4, si fuera asi, quisiera saber como seria mas rapido creando una dll de conexion, para esto tendria que usar windows o usar archivos class de java en ambiente linux con tomcat?
Ahora lei por ahi que se puede usar ZEnd compiler para crear un codigo bytecodes similar a java, la verdad no soy muy bueno con el ingles si saben de algun manual en español les agradeceria avisarme.
.

Saludos!!!

Enviado por vflores el Lun, 07/03/2005 - 22:17.
Imagen de clbustos

Estimado:
Gracias por las felicitaciones. Se hace lo que se puede.
Por lo que he leído y se ha comentado acá, la extensión de Oracle en PHP 5 es bastante inestable. No es que no se pueda ocupar, pero nadie te garantice que funcione :S
Ahora, sobre usar oracle en windows o linux, lo puedes hacer en ambos, a través de las extensiones oracle y oci8, ambas 'nativas' de php. No veo porque complicarse con Tomcat. En windows, es cosa de instalar el cliente de Oracle y activar la dll, en tanto que en linux sólo tienes que poner la opción al compilar tu php.
No sé de manuales sobre el compiler de Zend, pero existen otros recursos para mantener un cache de los bytecodes o compilar tus scripts. Sería bueno que aclararas si lo quieres para ocultar tu código o sólo para acelerarlo.

Enviado por clbustos el Mar, 08/03/2005 - 00:27.
Imagen de Víctor

Gracias por la pronta Respuesta,
Quisiera aclarar mi pregunta.
queria saber como va mas rapido php; sobre windows o sobre linux ?
Y necesito usarlo con Oracle, ahora ya que yo antes programaba en asp con dlls hechas en visual basic queria saber si es recomendable hacerlo de la misma manera en php (en el caso que lo instalase en windows)
Y lo del cache de bytecodes, tengo un proyecto donde me gustaria ocultarlo y en mi trabajo lo quiero usar para acelerarlo.
Espero saber mas sobre php.
Ya hice 2 proyectos en esto (usando plantillas y programando orientado a objetos) y me termino gustando mas que trabajar con asp.
Pero mi problema fue la velocidad, o al menos me parecio un poco mas lento.

Saludos y gracias de antemano!!

Enviado por Víctor (no verificado) el Mar, 08/03/2005 - 09:40.
Imagen de clbustos

Estimado:
Vamos por partes, como dijo Jack.
Echándole un ojo a las comparativas de velocidad, pareciera que PHP es más rápido que ASP. PHP no tiene que comunicarse con diferentes objetos COM, lo que lo hace más rápido. Ahora, si ocupaste plantillas y orientación a objetos, sacrificas velocidad por buenas prácticas y claro que la velocidad puede bajar. Prueba a ocupar un sistema de plantillas compiladas, como Xipe, para recuperar algo de velocidad.
No sé si php será más rápido en Windows, pero Apache corre mejor en Linux. Ergo, mejor ocupar Linux.
Sobre los compiladores de bytecode de PHP, recuerda que su impacto es sólo linear sobre la velocidad del script. O sea, le quitan 0.2 o 0.3 segundos al inicio de cada uno (por decir algo), independiente del tipo de procesamiento posterior que estos hagan. Mmcache era una buena alternativa, pero los compadres de Zend se los comieron. Revisa en http://eaccelerator.net/HomeUk las especificaciones de eaccelerator, un fork de mmcache (eso es lo que me gusta del software libre!)

Enviado por clbustos el Mar, 08/03/2005 - 11:30.
Imagen de Victor

Excelente tus comentarios me ayudan bastante.
Instalare php5 en linux Red Hat (es la que tienen aqui en la empresa si me puedes recomendar otra mejor), y usare base de datos Oracle 8, para lo cual usare ADOdb.
Y NokTemplates o Power Templates, ahh solo me falto algo no encuentro Xipe las plantillas compiladas que mencionaste, porfavor si tienes algo de documentación o un buen link te lo agradesco asi no usare las otras plantillas.

Saludos Cordiales!!

Víctor!!

Enviado por Victor (no verificado) el Mié, 09/03/2005 - 16:37.
Imagen de clbustos

Xipe es un paquete de Pear. Si tienes bien configurado tu php, puedes probar con
pear install HTML_Template_Xipe
o descargar el paquete desde
http://pear.php.net/package/HTML_Template_Xipe

Otra alternativa es Flexy, pero prefiero Xipe porque está en el punto justo entre tu control sobre la plantilla y la ayuda que te da el sistema.

Lo único que te pido, por amor a la humanidad, es que no ocupes Smarty. SUCKS!

Enviado por clbustos el Vie, 11/03/2005 - 14:27.
Imagen de Alfabravo (Nelson)

Quisiera conocer su opinión (más específica que SUCKS =P)sobre el uso de SMARTY y ETS.
Gracias.

Enviado por Alfabravo (Nelson) (no verificado) el Lun, 01/08/2005 - 02:14.
Imagen de clbustos

Cosa de leer el código, no más....
Fuera de bromas, en la parte VI del curso hablo sobre las razones para simplificar al máximo el trabajo de plantillas.
Lo central está en que lo importante es separar el código de presentación del de contenido, no el código php del HTML.Smarty llega a extremos bizarros con tal de no poner nada de php en las plantillas, siendo que es mucho más sencillo, rápido y potente usar plantillas en el lenguaje que fue hecho, precisamente, para crear plantillas

Enviado por clbustos el Lun, 01/08/2005 - 11:14.
Imagen de mortiza

Necesito conectarme a una base de datos oracle desde PHP.
* Tengo php y oracle en la misma maquina.
* Uso ADODb para la conexión
Mil gracias

Enviado por mortiza (no verificado) el Mié, 13/09/2006 - 18:43.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato