Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Cuando nuestro sitio o aplicación web crece en volumen de visitas concurrentes, o
bien tenemos que mejorar los tiempos de respuesta, podemos llegar a tener un
problema si no hemos preparado nuestra infraestructura para ello.
Escalar una aplicación no es trivial y dependiendo de si la aplicación o sitio web está
sujeto a un SLA, puede que no nos podamos permitir una parada de servicio, o ante un
volumen masivo de visitas concurrentes nuestro servicio directamente deje de
responder.
Escalado Vertical
Supone el escalado mediante el uso de recursos de hardware más potentes (tendiendo
a un número menor de máquinas):
CPU’s con más cores o más potentes
Mayor cantidad de RAM o más rápida
Disco (SSD)
Mayor Ancho de Banda
Dependiendo de cómo sea nuestro servidor (Instancia física o virtualizado), podremos
aplicar cierto escalado sin interrupción de servicio o no.
IMPLICA
Mayor coste
Puede implicar parada o degradación de servicio
Pérdida de cierto control, si se delega en servicios a terceros, dependiendo del
grado de flexibilidad que ofrezcan
NOTA Es fundamental medir el rendimiento de nuestra aplicación en su conjunto.
Idealmente se debería plantear la arquitectura de escalado una vez se tienen métricas
del funcionamiento de la aplicación o web con una base estable.
Escalado Horizontal
Supone el escalado en base a más máquinas menos potentes se distribuyan la carga
del trabajo a realizar.
IMPLICA
Coste (Depende del caso, pero generalmente implica menor coste que un
escalado vertical)
puede implicar degradación de servicio
Balanceo de Carga
Coordinación de las sesiones de usuario en caso de haberlas (Sticky
Sessions) o algún mecanismo para que iniciada una transacción entre cliente y
servidor que consta de varias peticiones, toda la transacción sea atómica (todas
las peticiones vayan al mismo servidor).
Alta disponibilidad
Consiste en garantizar que siempre haya al menos un mínimo de elementos de la
arquitectura para poder procesar correctamente una “petición” (por petición
entendemos aquí una transacción completa).
Aquí aparecen los conceptos de redundancia y SPOF.
Una arquitectura será más robusta cuanto más redundados estén los elementos
mínimos necesarios para llevar a cabo una transacción completa. Idealmente no
debería haber ningún SPOF.
Balanceo de Carga
Consiste en distribuir la carga de (tráfico, consultas a la base de datos…) entre
distintos elementos de la arquitectura.
El balanceo puede hacerse mediante hardware (más caro pero más fiable) o
mediante software (más flexible pero exige un conocimiento mayor).
Caché
Es un mecanismo para “acelerar” respuestas previamente generadas y reutilizar
recursos previamente obtenidos.
La caché puede situarse a nivel de cliente, servidor, base de datos, código…
Puedes hacer uso de ciertos mecanismos en HTTP para “cachear”
contenidos: Almacenar HTTP en caché
En el caso concreto de servidores web también tienes puedes soluciones como:
Varnish
memcached
Redis
Rendimiento (Performance)
La mejora de rendimiento de una aplicación o servicio depende de muchos
factores. NO hay soluciones universales.
El rendimiento suele ir ligado a la velocidad, pero también es importante
la percepción de la velocidad.
Si quieres saber más sobre cómo se comportan los distintos navegadores en su faceta
de Network, visita este enlace : Browserscope
NOTA : Puedes tener perfectamente configurado un backend y que tu aplicación
parezca lenta. Los navegadores a veces te pueden jugar una mala pasada si no sabes
cómo funciona un navegador.
Protocolos
HTTP y HTTPS(SSL/TLS)
HTTP2 / Spdy
WebSockets
CORS (Cross Origin Resource Sharing)
Mecanismo por el cual se puede limitar/retringir el uso de recursos de dominios fuera
de del dominio propio de la web vía cabeceras HTTP.
Para más información sobre el tema, podéis consultar la entrada de la Wikipedia al
respecto : Crossorigin Resource Sharing
Ataques
Todo servicio expuesto en Internet puede ser vulnerable a ataques de distinta
naturaleza. Si somos nosotros los que administramos el servicio, debemos
preocuparnos de estar preparados ante ciertos ataques como:
DOS y DDOS: Denegación de servicio. Se produce por saturación de peticiones.
Si queréis profundizar sobre el tema, hay un tutorial disponible en OpenWebinars.
XSS y SQL Injection: Sucede cuando no se comprueban y sanitizan las entradas
(vía formulario generalmente) en nuestra web.
Estos son algunos de los ataques más comunes. Dependiendo del tipo de ataque y su
explotación debemos tomar medidas en diferentes frentes.
RECURSOS
Técnicas de evasión de Filtros (OWASP)
Técnicas de Prevención de XSS (OWASP)
Lista de Ataques según la OWASP
HTTP Headers The simplest security
WebAppSec / Web Security Verification
Tu Devops me da trabajo Charla en Codemotion 2015 por Daniel García