jueves, 14 de mayo de 2015

Tema 8 de teoría: Requisitos hardware y software en servidores web

La granja web necesita varios componentes de software y hardware para poder funcionar.

En cuanto al hardware, cabe destacar la necesidad de instalar y configurar servidores, dispositivos de almacenamiento y conexiones de red.

Los servidores web no necesitan una capacidad de procesamiento especialmente alta, ya que los servicios HTTP no consumen demasiada CPU. La cantidad de memoria RAM es más importante en este tipo de máquinas. Al adquirir el hardware, debemos elegir componentes para minimizar la latencia de disco, así como CPU y RAM que excedan las necesidades de ese momento.

En cuanto al almacenamiento, se pueden evitar latencias usando discos de estado sólido de alta velocidad (para hacer caching) y utilizar dispositivos como NAS (Almacenamiento conectado a la red) o una SAN (Área de almacenamiento en red) y exportando el espacio de almacenamiento usando protocolos como NFS, Samba o Lustre.

Por último, los nodos del clúster pueden conectarse mediante una simple red Ethernet con tarjetas de red comunes, o utilizarse tecnologías especiales de alta velocidad:
  • Ethernet (Fast, Gigabit): Son las redes más utilizadas en la actualidad, debido a su relativo bajo coste. Su tecnología limita el tamaño de los paquetes. No demasiado eficientes. La latencia de estas tecnologías está en torno a los 30 a 100 μs.
  • Myrinet: Su latencia es de 99 a 10 μs, y su ancho de banda es de 2 a 10 Gbit/s.
  • Es la red de baja latencia más utilizada en la actualidad.
  • InfiniBand: estándar desarrollado específicamente para realizar la comunicación en clústers.
  • SCI: Latencia teórica es de 1,43 μs y ancho de banda de 5333 Mbit/s bidireccional.


Determinar las necesidades de un servidor
es muy complejo: El diseño debe permitir el escalado del sistema y debemos realizar continuamente monitorización para determinar cuándo y dónde escalar el sistema.

Para planear la capacidad del servidor (necesidades en cuanto a hardware y software) no existe una fórmula. Antes de nada debemos determinar los requisitos reales del sitio. Hay que hacer un primer estudio, instalar y configurar, y una vez esté en funcionamiento, monitorizar constantemente el sistema para determinar si funciona correctamente.

Hay tres tareas que pueden ayudar a determinar los requisitos de hardware del sistema:
  • Estimar el hardware en función de las necesidades de la empresa.
  • Utilizar un software de monitorización para buscar cuellos de botella en la configuración inicial.
  • Monitorizar el sistema durante todo el tiempo que esté en uso.
Para comprobar el funcionamiento de cada configuración que apliquemos, debemos realizar tests de carga con benchmarks (apache benchmark, siege, JMeter, httperf, openwebload, etc) o poner el sistema en producción de forma controlada (accesible a betatesters) para monitorizar y analizar su comportamiento.

La información que recopilemos monitorizando durante este proceso nos permitirá determinar qué contenido es el más demandado (hacerlo eficiente) y hacer análisis del tipo de usuario y de los patrones de navegación (para el depto marketing). Además, podremos identificar fallos (errores tipo 404 ó 500) y descubrir posibles ataques.

Existen soluciones de hardware propietario de diferentes vendedores, como Dell, HP o IBM, y además, otras grandes empresas diseñan sus propios sistemas (hardware y software), como es el caso de Facebook con Open Compute, o Google.

Por otro lado, está la aproximación de Microsoft, que echa mano de desarrolladores de hardware (Dell, HP) para montar sus CPDs, o Yahoo! que tradicionalmente ha mejorado o incrementado sus servicios adquiriendo nuevas empresas e integrándolas en sus sistemas.


Finalmente, en cuanto al software necesario para configurar un servidor web de altas prestaciones, cabe destacar los siguientes tipos de programas, principalmente:
  • Sistema operativo: Actualmente existe gran variedad de sistemas operativos que se utilizan para montar servidores web de altas prestaciones:
    • GNU/Linux
    • Unix: Solaris, HP-UX, AIX
    • Windows: NT, 2000 server, 2008 server, 2010 server
    • Mac OS X Server (xgrid)
    • FreeBSD
  • Servidor web: Se pueden instalar en casi cualquier sistema operativo. Los más conocidos:
    • nginx
    • apache
    • Internet Information Services (IIS)
    • cherokee
    • Tomcat
    • Otros servidores, más simples pero más rápidos, son:
    • lighttpd
    • thttpd
Además, existen soluciones para implementar servicios web sumamente eficientes. Se trata de una solución muy diferente a lo que conocemos que se puede hacer con Apache:
    • node.js (JavaScript)
    • Tornado (Python),
    • Twisted (Python),
    • EventMachine (Ruby),
    • Scale Stack (C++),
    • Apache MINA (Java)
    • Jetty (Java)
  • Cortafuegos: Implementados en hardware o software. Cada sistema operativo tiene su propio cortafuegos incluido en la instalación básica:
    • Firestarter
    • ZoneAlarm
    • Uncomplicated Firewall
    • Gufw
    • PF (OpenBSD)
    • ipfw
    • iptables
    • ipfilter
  • Balanceadores de carga: Cada sistema operativo tiene soluciones (gratuitas o de pago):
    • HaProxy
    • Pound
    • Varnish
    • NginX
    • Lighty
    • Apache
    • NLB
  • Medir prestaciones: Basadas en interfaz de línea de comandos y de interfaz gráfica. Entre las más utilizadas destacan:
    • Apache Benchmark
    • httperf
    • openwebload
    • the grinder
    • OpenSTA
    • JMeter
    • Siege
  • Software para monitorización: Necesario para recoger información sobre la actividad del sistema a todos los niveles:
    • top
    • vmstat
    • iostat
    • sar
    • monitores de actividad (gráficos) del sistema operativo
    • Web Farm Framework (Microsoft)
    • Lithium5 (OS X server)
    • Apple Mac OS X Server Monitoring Library
    • NetApp
    • Munin
    • Nagios
    • GANGLIA

En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
  • Ejercicio T8.1: Buscar información sobre tipos de conexiones de red utilizados especialmente en arquitecturas de servidores web de altas prestaciones.
Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".

1 comentario: