2017-01-03 8 views
0

우선 저는 올리언스를 처음 접했지만 이미 몇 가지 문서를 읽었습니다. 프로젝트가 매우 유망 해 보입니다. 프로덕션 환경에서 Silos의 곡물 코드를 업데이트하는 방법에 대한 질문이 있습니다.플라이 코드 업데이트 orphans

저는 Erlang이 배우 모델을 가지고 있고 Whatsapp에서 코드 업데이트를 수행 할 수 있음을 알고 있습니다. Orleans에서 가능한 일입니까 아니면 사일로를 중지하고 새 코드를 배포해야합니까? 그렇다면 이것은 프로그래밍 방식으로 할 수 있습니까?

감사합니다.

답변

1

내가 말하는 것처럼 코드를 즉시 배포 할 수 있다고 생각하지 않습니다. Grain은 클래스이며 다른 클래스에 의존 할 수 있으며 모든 클래스는 DLL에서 찾을 수 있습니다. 예를 들어 새 클래스를 추가하면 해당 DLL을 모든 사일로에 배포해야합니다.

참고 : 여기서 "서버"와 "격납고"를 서로 바꾸어 사용하고 있습니다.

중단 시간을 피하기 위해 수행 할 수있는 작업은 서버의 일부를 배포하고 트래픽을 전환 한 다음 나머지 서버를 배포하는 것입니다. Orleans 배포는 클러스터에 고유 한 DeploymentId를 지원합니다. 새 DeploymentId를 사용하여 저장소를 배포하는 경우 저장소가 이전 클러스터에 참가하지 않습니다.

이전 단락의 설명은 약간 추상적으로 들릴 수 있으므로 실용적인 예를 들어 봅시다. DeploymentId 123을 사용하는 동일한 클러스터에 5 대의 서버가 있으며 부하 분산 장치는 라운드 로빈 방식으로 각 서버에 트래픽을 전달합니다.

  1. 처음 3 개의 사일로를 끕니다. 클러스터는 노드의 이탈을 감지하고 조정합니다. 또한로드 밸런서는 마지막 두 노드 (여전히 DeploymentId 123이 있음)에만 트래픽을 통지하고 전달합니다.
  2. DeploymentId 456을 사용하여 처음 3 사일로에 업데이트 된 코드를 배포 한 다음 다시 켜십시오. DeploymentId가 다르므로 기존 클러스터에 참가하지 않습니다.
  3. 부하 분산 장치가 처음 3 개의 사일로를 가리 키도록 지정합니다. 마지막 2 사일로가 요청을받지 않으므로 새 코드를 효과적으로 실행하고 있습니다.
  4. 마지막 2 개의 사일로를 끄고 ​​새 DeploymentId (456)를 사용하여 배포합니다. 당신이 그들을 켜면, 그들은 새로운 클러스터에 가입한다.
  5. 부하 분산 장치를 조정하여 노드 5 개를 모두 가리 키도록 조정합니다.
+0

답변 해 주셔서 감사합니다. C#에서 처리 한 모든 단계를 완료 할 수 있습니까? 5 개의 사일로에서 2 개의 트래픽을 전달할 수 있습니까? – toroveneno

+0

이 솔루션에서로드 밸런서의 사용법을 설명해 주시겠습니까? 일반적으로 orleans 클라이언트는 클러스터의 모든 사일로 (적어도 대부분)에 연결됩니다. 이러한 연결은 사일로에 직접 연결되며 정상적으로는로드 밸런서를 통하지 않습니다. 또한 클라이언트는 그레인 클라이언트를 다시 시작해야하는 새 deploymentid로 업데이트해야합니다. – BozoJoe

+1

@BozoJoe로드 밸런서를 사용하면 외부 클라이언트와 사일로 사이의 의사 소통을 추상화 할 수 있습니다. 클라이언트가 모든 사일로와 직접 대화 할 수 있다면 배포하는 동안 새 클러스터 또는 이전 클러스터와 통신할지 여부를 제어 할 방법이 없습니다. – Gigi