servidores

Cosas que optimizar en un servidor Apache + MariaDB + PHP

2014-12-14 - Categorías: General

Para administrar un servidor dedicado o virtual Linux necesitamos herramientas para controlar el uso de memoria, cpu o almacenamiento. Hay una herramienta en modo consola o de terminal con la que podemos entrar y ver su estado sin necesitar de un entorno gráfico.

Estamos entonces pensando que el servidor que hemos contratado es demasiado pequeño y vayamos a contratar uno más grande. Pero antes merece la pena no entrar en más gastos y optimizarlo. Porque tal vez tengamos mucha más máquina que lo que estamos pensando, sólo era necesario optimizar.

Instalación de htop

$ sudo apt-get install htop

Una vez instalado ejecutamos htop si todo ha ido bien y ya tenemos un informe muy interesante. Ahora sabremos si estamos al borde del colapso, si el servidor de base de datos está consumiendo demasiado, etcétera. O si simplemente le sobra memoria y algo raro le está pasando.

Frentes de ataque para optimizar un servidor

Se supone que con un servidor pequeño, de 1 procesador y 1 Giga de RAM, se deben de poder servir alrededor de 10 000 vistas de página diarias. Es mucho ¿cierto? Pues sí, no estoy exagerando, la experiencia nos dice que las configuraciones por defecto de Apache, MariaDB y PHP tal vez no se acomoden bien y el servidor vaya lento, muestre páginas en blanco, se caiga el servicio.

Para cada programa o servicio se necesita su configuración así que sin contemplar la posibilidad de ampliar el servidor físicamente podemos optimizarlo viendo lo siguiente.

Configuraciones de Apache2

En un Ubuntu Server podemos encontrar sus configuraciones en /etc/apache2/apache2.conf Una de las cosas que merece la pena activar es la caché, aumenta considerablemente su rendimiento.

Si tenemos, como en éste caso una única máquina con todo en el mismo servidor (Apache2, MariaDB y PHP5). La memoria caché APC es una buena opción y se activa muy fácilmente con PHP5 si la tenemos disponible ya en Apache2.

Configuraciones de MariaDB

He escogido ésta base de datos porque trae muchas mejoras con respecto a MySQL y podemos instalar cualquier CMS compatible con MYSQL. Aparte de que es totalmente gratis.

Cuidado con la versión que instalemos, elegir mejor una estable para producción.

Las configuraciones de MariaDB las podemos optimizar en /etc/mysql/my.cnf
Es interesante instalarnos localmente MySQL y ver los fichers my-small.cnf, my-medium.cnf, my-large.cnf y my-huge.cnf para configurar los límites de nuestra MariaDB. Cuidado porque un servidor small se supone que sólo tiene 64 MB de RAM, uno de 1 GB de RAM es un servidor grande aunque no nos lo parezca, ya uno de 4 GB de RAM es enorme (huge).

Configuraciones de PHP

Tenemos en /etc/php5.6/apache2/php.ini las configuraciones que se usan para correr los scripts de PHP desde Apache.

Puede ser interesante optimizar la configuración de la linea de comandos de PHP con el fichero /etc/php5.6/cli/php.ini Éste fichero es el que se usa cuando ejecutas php desde línea de comandos. Puede ser necesario configurarlo para usar phpunit, comandos de consola de frameworks PHP, etc.

La caché de ejecución de scripts o el tiempo máximo de ejecución de un script pueden ser valores clave que provoquen que tus webs se queden en blanco. Algunos valores a los que suelo darle más son:

max_input_vars
max_upload_file_size
memory_limit
max_input_time
max_input_nesting_level

Si delegas la ejecución de PHP en el servicio FPM/Fastcgi sería lo mejor. Para esto hay que instalar el módulo fpm de PHP. Y el módulo de Apache para que delegue la ejecución de scripts PHP a este servicio llamado php-fpm. En este caso, tendrás las mismas configuraciones que cito antes pero en otro fichero que carga desde /etc/php5.6/fpm/php.ini, /etc/php7.2/fpm/php.ini según la versión de PHP que tengas instalada.

Cuando se instala el FPM/Fastcgi lo que conseguimos es que tanto Apache2 como PHP se ejecuten concurrentemente, pudiendo servir más páginas en paralelo.

Está la swap creada y activada?

Por último puede ser que la memoria de intercambio no esté creada. En muchos servidores virtuales simplemente tenemos la partición del sistema de ficheros principal. Damos por sentado que cuando se nos ha dado el servidor ya tenemos swap. Entonces si realmente no la tenemos no podemos usarla y si llenamos toda la memoria RAM ya tenemos colapsado el servidor porque no tiene realmente swap.

Podemos verlo usando:

$ free -m

Por ejemplo en un servidor con 1 GB de RAM y 512 GB de memoria de intercambio swap podemos tener lo siguiente:

             total       used       free     shared    buffers     cached
Mem:           992        503        488         37         31        200
-/+ buffers/cache:        272        720
Swap:          511          0        511

Si no nos sale algo parecido ya tenemos otra cosa que optimizar.

Apache Benchmark

Es interesante llevar al límite a nuestro servidor usando ésta herramienta, podemos simular fácilmente varios visitantes simultáneos hasta llegar a saturar el servidor y sabremos así cuánto aguanta y si ya es suficiente.

De nuevo si tenemos Linux como máquina local es muy sencillo instalarlo sólo con poner:

$ sudo apt-get install apache2-utils

Por ejemplo si quiero ejecutar 100 peticiones de 10 visitantes simultáneamente a mi máquina local escribimos:

$ ab -n 100 -c 10 http://localhost/

En mi caso, me sale los siguientes resultados que son bien interesantes. Junto con htop podemos ver en tiempo real qué ha pasado con nuestro servidor.

This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)…..done


Server Software:        Apache/2.4.7
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        5306 bytes

Concurrency Level:      10
Time taken for tests:   2.751 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      560500 bytes
HTML transferred:       530600 bytes
Requests per second:    36.35 [#/sec] (mean)
Time per request:       275.072 [ms] (mean)
Time per request:       27.507 [ms] (mean, across all concurrent requests)
Transfer rate:          198.99 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       0
Processing:    21  274 659.4     58    2242
Waiting:       21  271 653.4     56    2225
Total:         21  274 659.4     58    2242

Percentage of the requests served within a certain time (ms)
  50%     58
  66%     65
  75%     75
  80%     79
  90%   2241
  95%   2242
  98%   2242
  99%   2242
 100%   2242 (longest request)

Puede ser un poco bruto pero ya puestos a llevar al extremo a nuestro servidor no está de sobra probarlo. Si el servidor aguanta el test entonces eso es buena señal. Si de repente ya no tenemos las webs visibles. Jeje, pues a optimizar.

Hay personas que dedican todo su trabajo a optimizar cada uno de éstos programas. Espero que comprenda que no puedo resumirlos en un sólo post así que aquí lo dejo y me remito a la documentación oficial.

http://httpd.apache.org/docs/2.0/es/
https://mariadb.com/kb/es/
http://php.net/manual/es/

Espero que haya servido de guía.

Saludos 🙂


Poner tu negocio en «la nube»

2013-12-18 - Categorías: General


No es lo mismo poner un negocio en la nube, que ponerlo por las nubes, o estar en las nubes. Es  lo llamado cloud computing en inglés, se traduce por computación en la nube. Pero ¿qué es eso de la nube? ¿dónde está? ¿no está ya mi web en la nube? ¿qué es exactamente la nube de Internet?

Qué no es

Tradicionalmente, si contratamos espacio para poner una web en Internet, o si conectamos un ordenador a Internet, no estamos montando una nube. Solemos venir contratando este servicio a una empresa que nos alquila una cantidad de espacio, una velocidad del ordenador, una cantidad de visitas posibles (traducido en tasa de transferencia), cantidad de emails almacenados, etcétera…
Todo ésto es lo que no es, lo que se viene haciendo de manera tradicional limitando el uso de lo que ponemos en Internet. Hoy en día podemos encontrar soluciones cloud, en la nube, supuestos servicios en la nube que realmente no lo son. Se está utilizando esta forma de nombrar a la nube porque se vende bien, por eso debemos poner especial cuidado.

Qué sí es

En líneas generales, la nube es un conjunto de servicios que nos ofrece una empresa, los cuales se van ampliando conforme se necesita más. Para que nos entendamos, si tenemos una web y resulta que de repente necesitamos 27 Gigas extra de almacenamiento, si estamos en una nube ésto se amplia automáticamente y pagaremos por la cantidad de espacio que usemos. De igual manera ocurre con todo, tráfico entre la web y los visitantes, velocidad de procesamiento, balanceo de carga en las bases de datos, etcétera.

Es decir, se trata de un sistema escalable automáticamente, que se va aumentando o disminuyendo según es necesario y sólo pagaremos por lo que usemos. Hoy en día hay muy buenas soluciones para ésto y las empresas quieren cada vez más tener éste servicio. Pero no todas lo ofrecen realmente o dan un servicio parcial de lo que realmente es cloud computing.

Terminando

Una nube es un servicio en Internet donde al tener una aplicación web su capacidad para dar servicio aumenta o disminuye automáticamente, es escalable, dando todo el servicio que sea necesario sin colapsarse ni saturarse. De igual manera se paga por lo que se use, ni más ni menos, según las tarifas de cada empresa aumentando los costes o disminuyendo según la cantidad de servicio que se haya dado.
Para citar dos ejemplos de las empresa famosas:
  • Amazon, con sus Amazon Web Services y el Elastic Beanstalk, una solución más que interesante.
  • Google, con su App Engine, simplemente práctico y fácil de usar. 
Un saludo.

El ordenador más económico y potente de mundo

2013-10-30 - Categorías: General
Lleva desde el 2006 entre nosotros. Aunque es muy desconocido fuera del ámbito de la informática es una realidad. En España se están comercializando éstos pequeños ordenadores en kits de inicio que parten desde unos 50 € aproximadamente. Tiene la mejor relación calidad-precio del mercado, ya que no hay detrás una empresa con ánimo de lucro, no hay patentes, software de pago, etcétera.. simplemente un circuito integrado con sus accesorios. Y la total libertad para programarlo o configurarlo a nuestro gusto.

Raspberry Pi es un proyecto que arrancó en el ámbito de la educación, creando un pequeño ordenador del tamaño de una tarjeta de crédito. Su precio final es realmente barato, sólo 24 libras el modelo de 256 megas de RAM y por 31 libras el de 512 megas. El modelo B, el más avanzado, corre un procesador a 700 MHzs, tiene USB 2.0, HDMI, conector RCA, salida de audio de 3.5 mm, ranura para tarjeta SD, tarjeta de red integrada.. Opcionales se pueden comprar todo tipo de accesorios como cajas, cámaras, para ampliar los puertos USB, etcétera. Y sus aplicaciones como ordenador para la televisión o cualquier otro uso no tiene límites. El consumo que viene a tener es de sólo 3.5 watios, como una lámpara de LEDs, se puede alimentar con un cable micro USB con un simple cargador de móvil.

Tenemos sistemas operativos compatibles que son distribuciones de Linux totalmente gratuitas y orientadas según el uso que se le vaya a dar: para navegar, para almacenar datos en red con discos duros, cualquier cosa es posible. En la página oficial del proyecto tenemos algunas. Para empezar a funcionar con éste micropc se recomienda empezar por una de éstas. Siendo Linux siempre cabe la posibilidad de modificarlo, y disponemos de todo el código fuente para adaptaciones de todo tipo. La página de descargas es:
Los usos que se le vienen dando a éste ordenador no tiene límites. En enero del 2013 se publicaba un proyecto con el que se construyó un supercomputador barato uniendo en red 64 Raspberry Pi:
Hay testimonios de gente ejecutando LibreOffice y Firefox sin ningún problema. Otro ejemplo, junto con Google, está el proyecto Coder para convertir éste pequeño ordenador en un servidor de aplicaciones muy económico. No hacen falta conocimientos avanzados para montar nuestro propio Raspberry Pi en casa. Cada vez más empresas lo estan comercializando con cajas muy presentables con todo tipo de colores, formas e incluso transparentes. No hay más que coger nuestro buscador de Internet favorito y encontraremos infinidad de resultados. Es un pequeño juguete, y a la vez no tan «juguete». Un proyecto en constante desarrollo y con gran futuro, que seguro que va a dar mucho que hablar.
Para más información nos remitimos a su página oficial: http://www.raspberrypi.org/
Saludos.

© 2024 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.