2017-02-27 2 views
0

웹 역할이 1 개 있습니다. 시작할 때 초기화 코드를 실행합니다. 이제 N 개의 인스턴스를 갖고 싶지만 그 중 하나만 초기화 코드를 실행하고 나머지는 기다려야합니다.다중 인스턴스 Azure Cloud Service Classic에서 인스턴스를 하나만 초기화하는 방법은 무엇입니까?

마스터 노드 - 슬레이브 노드처럼 보입니다.

어떻게하면됩니까? 이것에 대한 알려진 패턴이 있습니까?

답변

0

나는이 문제가 오래 전에 Alexandre Brisebois에 의해 해결 된 것으로 생각했습니다. 자신의 클래스 Blob lease managerJob Reservation Service 두 가지를 결합하여

그는이 블로그 게시물에 모든 것을 설명 : 링크의 답변은 SO 만에 바람직하지 않다

  1. About leasing a blob
  2. About scheduling and reserving slot for a distributed job

내가 아는 필요한 모든 코드를 붙여 넣고 여기서 설명하면 좋은 생각이 아닙니다.

1

일부 작업을 수행하는 동안 모든 인스턴스가 대기하는 쉬운 방법은 마스터 인스턴스에 lease on a blob in Azure storage을 배치하는 것입니다. 시작시 마스터 인스턴스의 WorkerRole.cs가 일부 Azure 컨테이너에 blob 파일을 만듭니다. 초기화가 완료되면리스를 해제합니다. 슬레이브 인스턴스는 시작하는 동안 동일한 파일을 읽고 임대가 해제 될 때까지 대기합니다. 그것이 풀렸다면 BLOB 파일은 초기화가 완료되었다는 표시를 포함해야합니다.

마스터가되고 싶은 클라우드 역할의 인스턴스를 알고 계십니까? 부팅 한 첫 번째 알파벳 또는 첫 번째 알파벳순입니까? 처음 부팅하는 경우 문제가 더 간단합니다. 각 인스턴스가 파일을 만들거나 임대하려고 시도해야하므로 하나만 제외하고 모두 실패합니다. 인스턴스 임의로 재부팅 할 수 있습니다 만

이후로는 "RoleName_IN_1"하는 경우는, 첫번째 알파벳 한 경우

, 다음 RoleEnvironment.Instance.Id을 (메모리에서가는) 검토하고 있습니다 그것은 수행시 초기화 코드를 회전 다시 초기화하지 않도록하십시오. 일종의 타임 스탬프를 blob 파일에 넣는 방법으로 생각해 볼 필요가 있습니다.

+0

"인스턴스는 파일을 만들거나 임대하려고 시도해야하며 하나만 제외하고 모두 실패합니다."라는 문제가 발생합니다. 초기화가 이미 완료되었거나 초기화가 처음 완료되면 초기화 파일이 거기에 있고 잠겨 있지 않은 경우 인스턴스 N이 초기화가 완료된 후 생성 될 수 있기 때문에 사실이 아닙니다. 앞으로 올 첫 번째 인스턴스가 작업을 완료하고 파일을 릴리스했기 때문입니다. 첫 번째 요청 이후에 인스턴스가 생성되기 때문에 가능합니다. 서비스 자체의 재시작을 식별하는 것이 필요합니다. –

+0

공통 서비스 저장소 또는 "신뢰할 수있는 사전"이 있거나 환경 외부에서 모든 서비스를 다시 시작할 때 지워지거나 다시 인스턴스화되는 RoleEntryPoints 사이에 공통점이있는 경우 작업을 수행합니다. –

관련 문제