Archive

Archive for the ‘técnico’ Category

Guía de puntos críticos al actualizar PHP

October 18, 2014 Leave a comment

Si, como nosotros en BeezNest, con Chamilo, tiene que tomar a cargo el mantenimiento de una aplicación PHP masiva (varios cientos de miles de líneas) en el tiempo, esta guía le será útil.

En muchas oportunidades, tendrá que asegurar que su sistema soporte actualizaciones de PHP, y también que soporte varias versiones al mismo tiempo, según los casos presentados por sus clientes.

Habiendo desarrollado una aplicación años atrás, con las tecnologías del momento, tendrá que modificar el código para asegurar el soporte de cada nueva versión de PHP. En esto no solo tendrá que actualizar el código que usa cosas abandonadas (deprecated) en la siguiente versión de PHP, sino también tendrá, si desea asegurar el soporte de versiones anteriores, que asegurar que su sistema funcione con la menor versión posible de PHP.

Ante todo, es importante ubicar los cambios notables entre versiones de PHP. Para ello, puede consultar la página de Changelog de PHP 5 si desea todos los detalles, o la página de apéndice con los procedimientos de actualización de una versión a otra de PHP si prefiere una versión más explicada.

Si bien es cierto no todas las versiones de PHP fueron de la 5, es importante entender que hoy en día la versión 4 de PHP es muy insuficiente para hacer cualquier aplicación compleja, y probablemente no esté soportada por la mayoría de servidores existentes, pero también podemos estar relativamente tranquilos mirando hacia el futuro: si bien existieron grandes planes para PHP 6 (con un gran enfoque en la internacionalización) hacen unos años, estos planes se quedaron dormidos por ahora y la comunidad de desarrolladores de PHP se está principalmente enfocando en nuevas versiones de PHP 5.*.

La lista que les entrego aquí es una lista *resumida* proviniente de los procedimientos de actualización en la página indicada arriba, y que considero una lista suficiente para el 90% de las aplicaciones.

De PHP 5.2 a 5.3

  • Aparición de los namespaces
  • Aparición de los closures (funciones sin nombre)
  • Aparición del operador ternario ( COND ? A : B; )
  • Aparición del acceso dinámico a clases estáticas tipo $clase::$prop
  • Aparición de excepciones anidadas
  • Garbage colector cíclico (no implica ningún cambio pero reduce las fugas de memoria con objetos que contienen objetos)

De PHP 5.3 a 5.4

  • Aparición de traits
  • Habilitación de $this en los closures
  • Aparición de forma corta de definición de arrays tipo $a = [1, 2, 3];
  • Aparición de la dereferencia de arrays, tipo foo()[0]
  • Habilitación automática de la posibilidad de usar la forma corta de tag PHP “<?=”
  • Habilitación de la posibilidad de usar la forma corta (new Foo)->bar()
  • Mejora (o sea… cambio) en los mensajes de errores (ayudando al debug de aplicaciones PHP)
  • Habilitación general de la funcionalidad de progreso de subida (upload progress) que anteriormente requería un módulo de PEAR. Esto es lo que permite mostrar, en una página en PHP con JS, una barra de progreso mientras el archivo está siendo subido.

De PHP 5.4 a 5.5

  • Aparición de los generators
  • Habilitación de la forma: foreach ($array as list($ a, $b))
  • Habilitación de la dereferenciación para strings y arrays: echo [1, 2, 3][0]; / echo ‘PHP'[0];
  • Inclusión fácil de Zend OPCache (Zend Optimizer Plus), permitiendo un remplazo de APC, que definitivamente generaba un montón de inconsistencias con sistemas complejos como Drupal y WordPress, entre otros, con más estabilidad y un poco más de eficiencia (ver el Benchmark de Zend OPCode)
  • Inclusión del formato WebP (la versión imágenes del codec WebM de Google) en GD

De PHP 5.5 a 5.6

  • Aparición de Variadic, un mecanismo para declarar una función con una cantidad de parámetros variable
  • Escaladores de constantes, tipo TWO = ONE*2
  • Aparición del operador de exponente (antes “pow()”) como “a**b” (2**3 = 8)
  • Aparición del stream php://input
  • Habilitación del soporte de archivos de tamaño superior a 2GB (large files uploads)
  • Mejoras importantes de seguridad dentro de la librería mcrypt.

Es importante entender que, si bien todas estas mejoras son buenas para PHP y sus aplicaciones, solo podrá usarlas si “abandona” el soporte para una versión anterior de PHP.

Por ejemplo, si quiere usar Zend OPCache dentro de su aplicación como elemento obligatorio, su aplicación deberá indicar muy claramente que funciona con versiones de PHP “a partir de PHP 5.5”.

Existen mecanismos alternativos, a veces, que permiten ofrecer un soporte de versiones anteriores y, si alguna funcionalidad más eficiente está presente, usarla, pero en la práctica muchas no lo permiten. Por lo tanto, ofrecer el soporte para versiones anteriores de PHP también implica menor eficiencia para aplicaciones grandes en ambientes muy exigentes.

Chamilo

Chamilo LMS es un sistema de e-learning de software libre, que tiene como objetivo ofrecer herramientas potentes para la mejora de la educación y de la disponibilidad de esta para toda la humanidad. Sus características principales son: extrema usabilidad y poco uso de recursos. Puede descargar Chamilo desde su sitio web: http://www.chamilo.org o probarlo gratuitamente en https://campus.chamilo.org.

BeezNest

BeezNest es una organización internacional (be, es, fr, de, uk, pe, mx) creada en el 2002, que desarrolla el software Chamilo LMS y se especializa en ofrecer toda la gama de servicios especializados (consultoría, implementación, instalación, modificación, capacitación, alojamiento, etc) sobre este software, y optimización de servidores web que permiten alcanzar mayor productividad con sus aplicaciones web en PHP.

Montar partición sobre un archivo

October 7, 2013 Leave a comment

Si necesitas una partición adicional en un servidor en la nube ó necesitas particionar en caliente (mientras tu pc ó servidor está corriendo) entonces te será muy útil lo siguiente.

En Linux es posible usar un loop device como una partición virtual, para ello se apoya en el módulo loop dentro del kernel, el cual está disponible dentro de la mayoría de  distribuciones. De esta manera tenemos almacenado dentro de un solo archivo todo el contenido que un disco o partición de disco podría almacenar.

En nuestro caso fue aplicado dentro de Ubuntu y Debian aunque no debería haber ningún problema si es otra distribución. Empecemos.

Lo primero que haremos es habilitar el módulo

modprobe loop

verificamos que esté habilitado

lsmod | grep loop

Si en caso no se encuentra o tampoco aparece en /dev/loop*, agregar en el archivo /etc/modules

loop
lp

Y reiniciamos el SO

Usamos dd para crear un archivo de 1GB, en este archivo será donde irá toda nuestra partición

dd if=/dev/zero of=/opt/vdisk count=2048000

Lo atamos a cualquier loop device

losetup /dev/loop0 /opt/vdisk

Verificamos que esté correctamente atado

losetup -a
/dev/loop0: [fe00]:786448 (/opt/vdisk)

Y ya tenemos nuestra partición, luego procedemos a formatearla para poder “montarla” como una unidad cualquiera y poder usarlo.

mkfs.ext4 /dev/loop0

Creamos el directorio donde montaremos la partición.

mkdir /mnt/virtual

Montamos el loop device, recordar usar el mismo loop que uso líneas arriba.

mount /dev/loop0 /mnt/virtual

Si quisieramos desligar el loop device del archivo

umount /mnt/virtual
losetup -d /dev/loop0

Probablemente de usarlo frecuentemente sea necesario que se monte automaticamente tras cada inicio del SO, esto es posible añadiendo al archivo /etc/fstab

/opt/vdisk      /mnt/virtual       ext4   loop=/dev/loop0,user,auto,noatime       0 0

Y listo! Ya tenemos nuestra partición “virtual”.

Experimentando con Digital Ocean… primeras impresiones

September 23, 2013 4 comments

El equipo de BeezNest estuvo experimentando con el servicio de alquiler de máquinas virtuales de Digital Ocean estos 2 últimos meses, y en el espíritu del compartir, aquí les damos nuestras primeras impresiones.

https://www.digitalocean.com/

Costo

Ante todo, hablemos de costos. Se pueden obtener máquinas virtuales con disco SSD a partir de $5/mes. Esto es todo incluido, pagado desde PayPal o por tarjeta de crédito. Es más, existen algunos vouchers que permiten aprovechar de promociones de $10 “para probar”.

Con una máquina virtual (llamada “droplet” en este caso) de $5/mes, que es de 512MB de memoria y 20GB de disco duro, no se hace mucho, pero es suficiente, por ejemplo, para montar un pequeño sitio web Drupal o unas instalaciones de Chamilo LMS, de momento que el uso no sea masivo.

Lo que consideramos muy bueno es la accesibilidad para unas máquinas de entrada. Como que el costo no deja realmente lugar para pensar. Además, si solo lo usa dos semanas, pagará la mitad. Se descuenta por hora. Pero ojo, hay que apagarla, sacar una imagen de backup (snapshot) y borrar la máquina para que deje de descontar…

Accesibilidad

En términos de accesibilidad (y no estamos hablando de discapacidades, sino de facilidad de acceso al servicio), el servicio es impresionante de claridad: los costos aumentan en una proporción casi igual a los recursos: $10/mes para 30GB de disco SSD, 1 core y 1GB de RAM, $20/mes para 40GB, 2 cores y 2GB de RAM, etc. La lista de costos indica hasta máquinas de 24 cores y 96GB de RAM (pero claro, ahí sale costoso, a $960/mes, pero se puede tomar por horas a $1.429/h).

La lista de costos está a un clic de la página principal del sitio, y permite ver el costo por mes y por hora.

La creación de una cuenta de usuario es sencilla (usuario y contraseña), y a partir del momento en que paga en PayPal (link “Billing” y después “Manage payments” en la interface del usuario registrado) o por tarjeta de crédito, se activa el botón de creación de imágenes. En 2 clics y 2 minutos de espera, ya tiene una máquina virtual corriendo.

Disponibilidad de imágenes predefinidas

La lista de imágenes disponibles es bastante extendida, con 9 versiones de Ubuntu (incluyendo una de Ubuntu 10.04 64bit que permite instalar facílmente un servidor de videoconferencia BigBlueButton), 4 versiones de CentOS, Debian, ArchLinux y Fedora, además de unas imágenes de aplicativos pre-instalados como WordPress o Redmine. En fin, hay para todos los gustos o casi, por lo menos en Linux.

Comunicación

La información comunicada por e-mail es corta y al punto para quien conoce un poco de gestión de servidores y conexiones por SSH. Después de crear una nueva imagen, el tiempo de espera para recibir el correo con los accesos es mínimo: alrededor de 1 minutos (hasta 5 minutos en un caso).

Soporte

Si bien existe poca (si alguna) información en Español, la calidad y rapidez del soporte es buena. En 5 comunicaciones con ellos, el tiempo promedio de atención fue de 30 minutos (tuvimos mala suerte en un caso, al parecer, ya que la mayoría de la gente en el foro indica que dan respuesta en menos de 5 minutos, y a nosotros una vez demoró 4 horas). Existen unos temas todavía un poco obscuros, para el equipo de soporte también, como la gestión del volumen de transferencia hasta la fecha, que si bien indica un límite en las características de las imagenes, parece que todavía no está controlado.

Tampoco queda claro si, una vez que se contabilice, se podrá hacer “pooling” (es decir compartir el volumen de transferencia entre varias máquinas) y si el límite es proporcional a la cantidad de horas usadas, o si, de frente, nos dan la cantidad correspondiente a un mes de uso.

Redimensionamiento

El redimensionamiento de las máquinas no se hace en caliente. Es necesario tomar un snapshot, apagar la máquina virtual y volver a crear una nueva máquina de mayor dimensión. Existe una funcionalidad de redimensionamiento (“Resize”) pero no funciona para aumentar la capacidad en disco, por lo que se recomienda proceder por el apagado y el remplazo del droplet.

El remplazo del droplet mismo mantiene la dirección IP, aunque Digital Ocean no ofrece garantía sobre este punto (pero dicen que “en general” su sistema reserva esta IP por “un rato” para usted después de que el droplet haya sido eliminado. Muy importante entonces, para no tener que redefinir nombres de dominios y cosas así, solo apagar momentáneamente sus droplets y proceder uno por uno (no apagar 4 a la vez y después volver a crear imágenes en cualquier orden).

En nuestro caso, no tuvimos problemas de redimensionamiento, pero queda claro que si usan 25GB de disco y redimensionan a un droplet de 20GB de disco, van a enfrentarse con problemas…

Particionamiento

El mayor problema que encontramos hasta la fecha fue la imposibilidad de redimensionar o distribuir a su gusto las particiones en el disco de las imágenes proveidas. Esto impide una serie de cosas, como el compartido de particiones entre varias máquinas (NFS, OCFS2, etc) y el uso de espacios de swap (en caso pase encima de la memoria autorizada).

API

Digital Ocean ofrce una API REST muy simple y bonita que permite crear nuevas imágenes a partir de un snapshot y un número de tipo de droplet, apagarlas, redimensionarlas, reiniciarlas, etc.

Como es REST, se puede probar hasta a partir de la ruta de un navegador.

También econtramos una librería PHP (de terceros) ya preparada para el uso de esta API, lo que reduce todavía los obstáculos para armar un sistema de gestión bien concreto con redimensionamiento adaptativo.

Esto siendo dicho, el panel de control todavía no ofrece opciones avanzadas para el redimensionamiento.

Calidad de las máquinas y servicios

Aunque no hayamos hecho benchmarking en los discos, como es de esperar para un disco SSD (que no presenta los mismos defectos que discos magneticos para el contexto de máquinas virtuales), el disco parece muy rápido.

También parecen tener mirrors de Debian y Ubuntu en su red, ya que la descarga de nuevos paquetes y las actualizaciones de estos dos sistemas es fulgurante (llegamos a 10MB/s para la instalación de BigBlueButton, que requiere más de 800MB de descarga).

Cuando se usan al extremo y se alcanza el límite de memoria, los servicios corriendo en la máquina se apagan, como es de esperar bajo Linux, por lo que es importante medir bien las primeras utilizaciones y dimensionar correctamente la máquina virtual.

Últimamente, y bajo presión popular al parecer, se agregó private networking dentro del segundo data center de Nueva York (y solo este). No hemos podido probarlo, pero entendemos que este permite generar menor latencia entre máquinas, en particular para el caso de replicación de bases de datos MySQL, por ejemplo.

Puede definir registros PTR a través de la interface.

Percances

En una (sola) oportunidad, quisimos acceder al panel de control un domingo en la mañana para redimensionar una máquina pero no se pudo, lo que nos generó bastante preocupación, pues no habíamos visto ninguna información correspondiente acerca de esta indisponibilidad. Todo el sitio de Digital Ocean siendo inaccesible, no pudimos verificar que estaba pasando, y solo teníamos una máquina virtual levantada, que no respondía. Por lo tanto, nos fue imposible determinar si esto había sido un caso excepcional o algo común. De lo observado desde este entonces (hace más de un mes ahora), no fue posible volver a observar este problema.

Conclusión

En esta etapa, todavía sigue siendo difícil entender exactamente el compromiso de Digital Ocean en términos de persistencia de los datos y de disponibilidad de la infraestructura, por lo que preferimos no usarlo para sistemas críticos. La dificultad de compartir particiones rinde imposible o por lo menos impráctico la elaboración de clusters totalmente redundantes. Esperamos encontrar una solución acerca de esto pronto.

Por lo general, estamos impresionados por la calidad del servicio ofrecido por Digital Ocean, en comparación con su costo, y recomendamos a todos los desarrolladores web trantando de comprobar la validez de nuevos sistemas de usar sus máquinas virtuales. Son muy prácticas y eficientes. Solo no se olviden de apagarlas y destruir el droplet después de haber tomado un snapshot para no seguir pagando mientras no las usan. Los montos pueden subir rápidamente, pero creemos que definitivamente representa un ahorro considerable en consideración del tiempo que se podría dedicar normalmente a la configuración de todas estas máquinas virtuales en un ambiente propio.

Grabar secuencia de navegación web para pruebas de carga con JMeter

September 20, 2013 Leave a comment

Este vídeo es excelente para mostrar lo que se tiene que hacer para grabar una secuencia de navegación de un usuario en un sitio web (cualquiera) con JMeter.

Entonces los pasos son:

  • Crear un grupo de hilos
  • Crear un grabador HTTP
  • Iniciar un servidor proxy
  • Iniciar su navegador con configuración para usar este proxy
  • Navegar en el sitio deseado

Nota: he tenido malas experiencias tratando de hacer este procedimiento en HTTPS. Parecía como si no funcionara correctamente, pero no pude investigar mucho más.

¿Que requerimientos y recursos mínimos necesito en mi servidor para una instalación de chamilo?

September 11, 2013 Leave a comment

Hol@!

En este artículo vamos poco a poco ofreciendo más información respecto a esta pregunta :

¿Qué requerimientos y recursos mínimos necesito en mi servidor para una instalación de chamilo? 

Está es una pregunta muy común que los ingenieros de sistemas se hacen, cuando tienen a cargo una implementación de Chamilo.

En la mayoría de los casos desean está información para incluirlo en su plan técnico y poder comprar un servidor adecuado para su instalación, en otros casos  tiene como trabajo hacer una comparación entre otras soluciones de LMS y finalmente en otros casos le dejaron como tarea en un curso y no saben a quién preguntar y mandan correos con asunto URGENCIA a empresas para solicitar una “cotización” y claramente entre nosotros lo que menos le interesa es “contratar el servicio”  solo desean tener datos ;) …..por lo tanto para evitar trabajo extra de los pobres encargados de ventas , este articulo tiene como finalidad convocar a la “colaboración grupal” y juntos poco a poco tener datos para responder esta pregunta.

Mi respuesta a está consulta es: No lo sé , es como preguntarme … ¿cuantos ladrillos necesito para construir un edificio?….cómo quieres proyectar recursos de algo …si no tienes claro el alcance de tu proyecto! , ¿ cuantos pisos tiene el edificio ?  ¿en que lugar lo vamos a construir? ¿Cuantos van a vivir ahí?  ¿Tienen un buen presupuesto para invertir en recursos de calidad?  en conclusión antes de hacer esa pregunta ..primero planifica tu proyecto de e-learning en base a eso recién se puede planificar adecuadamente los recursos técnicos.

Iniciamos con los casos:

Caso N°1:

Requerimientos:

  • 4000 usuarios
  • 150 cursos o secciones
  • 200 usuarios concurrentes máximo

Proyección de recursos a 01 año para el servidor:

  • Cuanto de memoria : 4GB
  • Cuantos núcleos de microprocesador : 8 procesadores tipo Dual Core
  • Cuanto de disco duro: 200 GB

Seguimosss con más datos más adelante…compartan sus requerimientos y proyecciones…Si tiene datos reales ..sería ¡Excelente!

 

Categories: Spanish, técnico, ubuntu Tags: ,

Tunel SSH revertido

December 11, 2012 Leave a comment

Si tienes la suerte de tener un servidor al cual te puedes conectar en SSH, y tienes que conectarte (en terminal, en SSH) a la compu de un amigo que está atrás de un router, este tutorial es para ti!

Un tunel SSH es un especie de “canal” virtual dentro del cual los datos pueden pasar de una compu a otra. Como SSH es un protocolo seguro, se asume que estos datos, pasando ahí, son tan seguros que SSH mismo.

Cuando una compu está a trás de un router, el problema es que uno puede acceder al router pero no a la compu misma. Se puede arreglar configurando un firewall con redirección de puertos en el router, pero ya es algo avanzado, y si no tienes la mano sobre el router y tu amigo no sabe como configurarlo… estás frito.

La solución entonces es:

  1. que el amigo se conecte a tu servidor en SSH (le puedes habilitar una cuenta o dar tu cuenta con otra contraseña)
  2. que te conectes también al mismo sevidor
  3. en el servidor mismo, que te conectes al puerto en el cual tu amigo se conectó

Por ejemplo…

Tu amigo:

ssh -R 54321:localhost:22 usuariocompartido@138.47.99.99

Tu:

ssh usuariocompartido@138.47.99.99
ssh localhost -p 54321

Y ya está! Estas en el servidor de tu amigo, conectado en SSH!

Categories: documentación, Spanish, técnico Tags: ,

Curso: Medición con XHProf y técnicas comunes de optimización, con diferencias entre PHP4 y PHP5

June 12, 2012 2 comments

Como de toda forma tengo que preparar el programa de mi curso: Medición con XHProf y técnicas comunes de optimización, con diferencias entre PHP4 y PHP5, lo cuelgo por aquí por si interesa alguien.

PHP

  • Historia del proyecto PHP (15′)
  • Diferencias entre PHP4.3, PHP5, PHP5.2, PHP5.3 y PHP5.4 (30′)

Profiling

  • Zend Debugger, XDebug y XHProf (15′)
  • Instalación y configuración XHProf (30′)
  • Medición con XHProf, Xdebug y KCacheGrind (30′)

Optimización

  • Optimización de servidores (hardware + SO) (10′)
  • Optimización de servidores web (10′)
  • Optimización de bases de datos (10′)
  • Técnicas de micro-optimización de PHP (15′)
  • Caché: system, opcode, script/variables (30′)
  • PHP-FPM (15′)
  • Integración continua con Jenkins PHP (30′)

Referencias

%d bloggers like this: