부하 분산

넓은 의미에서 부하 분산은 Orleans 런타임의 핵심 요소 중 하나입니다. Orleans 런타임은 분산을 통해 리소스 사용을 극대화하고 핫스폿을 방지할 수 있으므로 모든 것이 균형을 이루도록 노력하며, 이는 성능과 탄력성 향상에 도움이 됩니다. Orleans의 부하 분산은 여러 위치에 적용됩니다. 다음은 런타임이 분산을 수행하는 위치의 일부 목록입니다.

  1. 기본 행위자 배치 전략은 임의이며 새 활성화는 사일로에 임의로 배치됩니다. 이로 인해 배치가 분산되고 대부분의 시나리오에서 핫스폿을 방지할 수 있습니다.
  2. 더 고급 ActivationCountBasedPlacement에서는 모든 사일로의 활성화 횟수를 균등화하고자 하므로 사일로 간에 활성화가 더욱 고르게 분산됩니다. 이는 탄력성에 특히 중요합니다.
  3. 조직 디렉터리 서비스는 본질적으로 분산되어 있는 분산 해시 테이블을 기반으로 빌드됩니다. 디렉터리 서비스는 활성화에 조직을 매핑하고, 각 사일로는 전역 매핑 테이블의 일부를 소유하며, 이 테이블은 모든 사일로에서 분산된 방식으로 전역적으로 분할됩니다. 이를 위해 가상 버킷과 일관된 해시를 사용합니다.
  4. 클라이언트는 모든 게이트웨이에 연결하여 균형 잡힌 방식으로 요청을 여러 게이트웨이에 분산시킵니다.
  5. 미리 알림 서비스는 분산 분할된 런타임 서비스입니다. 어떤 사일로가 조직 디렉터리에서와 같이 일관된 해싱을 통해 모든 사일로에서 균형을 유지하는 알림을 제공할 책임이 있는지 할당합니다.
  6. 사일로 내 성능 심각 구성 요소가 분할되고 해당 구성 요소의 작업이 로컬로 분산됩니다. 이렇게 하면 사일로 런타임이 사용 가능한 모든 CPU 코어를 완전히 활용하며, 사일로 내 병목 현상을 만들 수 없습니다. 이는 스레드에 대한 작업 할당, 소켓, 디스패치 책임, 큐 등 모든 로컬 리소스에 적용됩니다.
  7. QueueBalancerBase는 지속성 큐에서 이벤트를 끌어와야 하는 책임을 클러스터의 사일로 전반에 분산합니다.

분산이 반드시 지역 손실을 의미하지는 않습니다. 균형을 유지하면서도 좋은 지역성을 유지할 수 있습니다. 예를 들어 분산이 분할(sharding)/분할(partitioning)을 의미하는 경우 각 파티션 내에서 지역성을 유지하면서 특정 논리 작업에 대한 책임을 분할할 수 있습니다. 이는 로컬 및 분산된 균형 유지에 모두 적용됩니다.