¿Cuál es el secreto de Erlang para la escalabilidad?
scalability (4)
Erlang se está haciendo famoso por ser intocable al manejar un gran volumen de mensajes y solicitudes. No he tenido tiempo de descargar e intentar entrar en la comprensión del Sr. Erlang sobre el cambio de teoría ... así que me pregunto si alguien puede enseñarme (o señalar un buen sitio de instrucción).
Digamos que como experimento mental quise conectar el ejabberd de Erlang a una combinación de Python y C, de una manera que me dio la misma velocidad y escalabilidad. ¿Qué estructuras o patrones tendré que entender e implementar? (¿Twisted de Python ya hace esto?)
Erlang no solo se trata de la escalabilidad, sino principalmente de
- confiabilidad
- características en tiempo real suaves (habilitadas por el GC en tiempo real suave que es posible debido a la inmutabilidad [sin ciclos] y no comparten nada y así)
- rendimiento en tareas concurrentes (cambio de tarea barata, creación de procesos baratos, modelo de actores, ...)
- escalabilidad: discutible en el estado actual, pero en rápida evolución (aproximadamente 32 núcleos, es mejor que la mayoría de los competidores, pero debería ser mejor en un futuro próximo).
Otra de las características de erlang que tienen un impacto en la escalabilidad es el proceso económico ligero. Como los procesos tienen tan poca sobrecarga, erlang puede engendrar muchos más que la mayoría de los otros lenguajes. Obtienes más por tu dinero con los procesos erlang que muchos otros idiomas te dan.
Creo que la mejor opción para Erlang son las aplicaciones vinculadas a la red: hace que la comunicación sea mucho más simple entre los nodos y cosas como la supervisión del latido, el reinicio automático con el supervisor está integrado en OTP.
¿Cómo / por qué los lenguajes funcionales (específicamente Erlang) escalan bien? (para la discusión de por qué)
http://erlang.org/course/course.html (para una cadena de tutoriales)
En cuanto a la migración a otros idiomas, un sistema de envío de mensajes sería fácil de hacer en la mayoría de los idiomas modernos. Obtener el estilo funcional se puede hacer en Python con la suficiente facilidad, aunque no obtendría las funciones internas de envío de Erlang "gratis". Stackless Python puede replicar muchas de las funciones de simultaneidad de Erlang, aunque no puedo hablar con los detalles ya que no los he usado demasiado. Si parece ser mucho más "explícito" (en el sentido de que se requiere definir la concurrencia en el código en lugares que el diseño de Erlang permitirá que ocurra la concurrencia internamente).