El rendimiento de un sistema distribuido es difícil de modelar. Para ilustrar:
- Cualquier conocimiento del cliente sobre la carga del servidor o los tiempos de ida y vuelta puede quedar obsoleto rápidamente. Un enrutador se reinicia o el servidor se atasca bajo algunas solicitudes grandes y de repente las características de rendimiento cambian.
- Los clientes son parte del sistema que intentan modelar. Eso crea el potencial para un sistema dinámico. Supongamos que el servidor se sobrecarga y luego todos los clientes se desconectan. Ahora el sistema está descargado, por lo que todos los clientes comienzan a emitir solicitudes nuevamente. El servidor se sobrecarga, los clientes retroceden, etc.
- La latencia a menudo está dominada por efectos estocásticos. La misma solicitud puede tardar 1 ms o 100 ms en función de factores impredecibles como la pérdida de paquetes. El asunto se complica aún más por las asimetrías. Dejar caer un paquete SYNACK puede ser mucho más costoso (en términos de latencia) que dejar caer un paquete en medio de una transmisión. (Los paquetes de establecimiento de conexión se emiten en serie y tienen tiempos de espera más largos que los paquetes de transmisión de datos).
Un modelo demasiado simple puede dar lugar a muchas respuestas incorrectas, lo que anula el propósito de tener un modelo.
Los modelos complejos pueden dar lugar a mejores predicciones, sin embargo, vienen con sus propios desafíos:
- ¿Por qué la mayoría de los programadores no pueden alojar / publicar sus aplicaciones? ¿Carecen de conocimiento de servidores y redes?
- Cómo alojar un servidor localmente en el área de la Bahía de San Francisco a un precio razonable
- ¿Cuál es la mejor manera de realizar un seguimiento del alojamiento y la facturación de los clientes?
- Las reglas de presupuesto dicen que solo puedo comprar servidores locales y no servicio / almacenamiento en la nube, ¿qué servidor (es) debo solicitar? ¿Nuestras principales necesidades son el intercambio de archivos dentro de nuestro grupo de trabajo (~ 50 GB) y el almacenamiento de la base de datos (~ 100 GB, 1B de E / S por mes)?
- ¿Qué servidor de correo es el mejor para enviar 100,000 correos electrónicos en una hora?
- Son difíciles de construir y mantener.
- Pueden ser caros de calcular. (Esta es la razón por la cual muchos equilibradores de carga tempranos usarían tareas extremadamente simples como round-robin. En sistemas de alto volumen, el rendimiento del equilibrador de carga era más importante que la carga uniforme del servidor).
- Siempre surgirán algunas circunstancias por las cuales el modelo no tiene en cuenta.
Dicho esto, aquí está el algo súper increíble de Paul para un rendimiento óptimo:
- Enviar dos solicitudes idénticas al servidor.
- Inicie un hilo para hacer el cálculo localmente.
- Toma el resultado del primero en regresar y matar a los otros dos.