Equilibrio de carga

El equilibrio de carga, en un sentido amplio, es uno de los pilares del entorno de ejecución de Orleans. El entorno de ejecución de Orleans intenta equilibrar todo, ya que el equilibrio permite maximizar el uso de recursos y evitar zonas activas, lo que da lugar a un mejor rendimiento, y ayuda con la elasticidad. El equilibrio de carga en Orleans se aplica en varios lugares. A continuación se muestra una lista no exhaustiva de lugares en los que el tiempo de ejecución realiza el equilibrio:

  1. La estrategia de selección de ubicación de actor predeterminada es aleatoria, las nuevas activaciones se colocan aleatoriamente en los silos. Esto da como resultado una colocación equilibrada y evita zonas activas para la mayoría de los escenarios.
  2. Un ActivationCountBasedPlacement más avanzado intenta igualar el número de activaciones en todos los silos, lo que da lugar a una distribución más uniforme de activaciones entre silos. Esto es especialmente importante para la elasticidad.
  3. El servicio de directorio específico se basa en una tabla hash distribuida, que inherentemente está equilibrada. El servicio de directorio asigna granos a activaciones, cada silo posee parte de la tabla de asignación global y esta tabla se divide globalmente de forma equilibrada en todos los silos. Usamos hash coherente con cubos virtuales para eso.
  4. Los clientes se conectan a todas las puertas de enlace y distribuyen sus solicitudes entre ellas, de forma equilibrada.
  5. El servicio de aviso es un servicio en tiempo de ejecución con particiones distribuidas. La asignación de qué silo es responsable de servir qué recordatorio se equilibra en todos los silos a través de hash coherente, al igual que en el directorio de granos.
  6. Los componentes críticos para el rendimiento dentro de un silo se particionan y el trabajo entre ellos está equilibrado localmente. De este modo, el entorno de ejecución de silo puede usar completamente todos los núcleos de CPU disponibles y no crear cuellos de botella en silo. Esto se aplica a todos los recursos locales: asignación de trabajo a subprocesos, sockets, responsabilidades de envío, colas, etc.
  7. QueueBalancerBase equilibra la responsabilidad de extraer eventos de las colas de persistencia en los silos del clúster.

El equilibrio no significa necesariamente la pérdida de localidad. Uno puede ser equilibrado y mantener una buena localidad. Por ejemplo, cuando el equilibrio significa particionamiento o partición, puede particionar la responsabilidad de una determinada tarea lógica, a la vez que mantiene la localidad dentro de cada partición. Esto se aplica tanto para el equilibrio local como distribuido.