다중 클러스터 통신
네트워크는 전 세계 어디에 있든 관계없이 모든 Orleans 사일로가 TCP/IP를 통해 다른 Orleans 사일로에 연결할 수 있도록 구성되어야 합니다. 이를 위한 정확한 방법은 사일로가 배포되는 방법과 위치에 따라 다르므로 Orleans의 범위를 벗어납니다.
예를 들어 Windows Azure에서는 VNet을 사용하여 한 지역 내의 여러 배포를 연결하고 게이트웨이를 사용하여 서로 다른 지역의 VNet을 연결할 수 있습니다.
클러스터 식별자
각 클러스터에는 고유한 클러스터 ID가 있습니다. 클러스터 ID는 전역 구성에서 지정해야 합니다.
클러스터 ID는 비어 있으면 안 되고 쉼표를 포함할 수 없습니다. 또한 Azure Table Storage를 사용하는 경우 클러스터 ID에 행 키에 대해 금지된 문자(/, , #, ?)를 포함할 수 없습니다.
클러스터 ID는 자주 전송되고 일부 로그 보기 공급자가 스토리지에 저장할 수 있으므로 클러스터 ID에 매우 짧은 문자열을 사용하는 것이 좋습니다.
클러스터 게이트웨이
각 클러스터는 클러스터 게이트웨이로 사용할 활성 사일로의 하위 집합을 자동으로 지정합니다. 클러스터 게이트웨이는 해당 IP 주소를 다른 클러스터에 직접 공지하므로 "첫 번째 접촉 지점"으로 사용할 수 있습니다. 기본적으로 최대 10개의 사일로(또는 MaxMultiClusterGateways로 구성된 어떤 숫자든)가 클러스터 게이트웨이로 지정됩니다.
서로 다른 클러스터의 사일로 간 통신이 항상 게이트웨이를 통과하는 것은 아닙니다. 사일로가 어떤 클러스터에 있든 간에 조직 활성화 위치를 학습하고 캐시하면 사일로가 클러스터 게이트웨이가 아니더라도 해당 사일로로 직접 메시지를 보냅니다.
가십
가십은 클러스터가 구성 및 상태 정보를 공유하는 메커니즘입니다. 이름에서처럼 가십은 분산되고 양방향입니다. 각 사일로는 동일한 클러스터와 다른 클러스터의 다른 사일로와 직접 통신하여 양방향으로 정보를 교환합니다.
콘텐츠. 가십에는 다음 정보의 일부 또는 전부가 포함됩니다.
- 현재 타임스탬프를 적용한 다중 클러스터 구성입니다.
- 클러스터 게이트웨이에 대한 정보가 포함된 사전입니다. 키는 사일로 주소이며 값에는 (1) 타임스탬프, (2) 클러스터 ID 및 (3) 활성 상태 또는 비활성 상태가 포함됩니다.
빠른 및 느린 전파 게이트웨이가 상태를 변경하거나 운영자가 새 구성을 삽입할 때 이 가십 정보는 즉시 모든 사일로, 클러스터 및 가십 채널로 전송됩니다. 이 작업은 빠르게 발생하지만 신뢰할 수 없습니다. 어떤 이유로든 메시지가 손실되는 경우(예: 경합, 중단된 소켓, 사일로 오류), 정기적인 배경 가십을 통해 정보가 더 느리게 확산될 뿐 결국에는 확산됩니다. 모든 정보는 결국 모든 곳에서 전파되며 가끔 발생하는 메시지 손실 및 실패에 대한 복원력이 뛰어납니다.
모든 가십 데이터는 타임스탬프가 적용되므로 메시지의 상대적 타이밍에 관계없이 최신 정보가 이전 정보를 대체합니다. 예를 들어 최신 다중 클러스터 구성은 이전 구성을 대체하고 게이트웨이에 대한 최신 정보는 해당 게이트웨이에 대한 이전 정보를 대체합니다. 가십 데이터의 표현에 대한 자세한 내용은 MultiClusterData
클래스를 참조하세요. 가십 데이터를 결합하는 Merge
메서드가 있어 타임스탬프를 사용하여 충돌을 해결합니다.
가십 채널
사일로가 처음 시작되거나 실패 후 다시 시작될 때 가십을 부트스트랩하는 방법이 있어야 합니다. 이것은 사일로 구성에서 구성할 수 있는 가십 채널의 역할입니다. 시작 시 사일로는 가십 채널에서 모든 정보를 가져옵니다. 시작 후 사일로는 30초마다 또는 BackgroundGossipInterval
에 구성된 대로 모든 내용을 주기적으로 가십합니다. 가십 정보를 모든 클러스터 게이트웨이 및 가십 채널에서 임의로 선택한 파트너와 동기화할 때마다
- 반드시 필요한 것은 아니지만 가용성을 높이기 위해 항상 고유한 지역에서 두 개 이상의 가십 채널을 구성하는 것이 좋습니다.
- 가십 채널과의 통신 대기 시간은 중요하지 않습니다.
- ServiceId
Guid
(해당 구성에 지정된 대로)가 고유하기만 하면 서로 다른 여러 서비스가 간섭 없이 동일한 가십 채널을 사용할 수 있습니다. - 채널이 시작될 때 사일로가 처음에 "가십 커뮤니티"와 연결될 수 있을 만큼 충분하기만 하면 모든 사일로가 동일한 가십 채널을 사용해야 한다는 엄격한 요구 사항은 없습니다. 그러나 가십 채널이 사일로의 구성에 속하지 않고 사일로가 게이트웨이인 경우 상태 업데이트를 채널에 푸시하지 않으므로(빠른 전파), 주기적 백그라운드 가십(느린 전파)을 통해 채널에 도달하는 데 시간이 더 오래 걸릴 수 있습니다.
Azure 테이블 기반 가십 채널
Azure Tables를 기반으로 가십 채널을 이미 구현했습니다. 구성을 통해 Azure 계정에 사용되는 표준 연결 문자열을 지정합니다. 예를 들어 구성을 통해 다음과 같이 별도의 Azure Storage 계정 usa
및 europe
을 포함하는 두 개의 가십 채널을 지정할 수 있습니다.
var silo = new HostBuilder()
.UseOrleans(builder =>
{
builder.Configure<MultiClusterOptions>(options =>
{
options.GossipChannels.Add(
"AzureTable",
"DefaultEndpointsProtocol=https;AccountName=usa;AccountKey=...");
options.GossipChannels.Add(
"AzureTable",
"DefaultEndpointsProtocol=https;AccountName=europe;AccountKey=...")
});
})
해당 구성에 지정된 ServiceId Guid
가 고유하기만 하면 서로 다른 여러 서비스가 간섭 없이 동일한 가십 채널을 사용할 수 있습니다.
.NET