3

모든 인스턴스에서 수신 한 특정 끝점에 대한 VIP (가상 IP) 주소를 RoleEnvironment에서 얻음으로써 동일한 역할의 여러 역할 인스턴스가 서로 통신 할 수 있습니까? 그렇다면 반환 된 VIP는 호출자 (RoleEnvironment 메서드) 인스턴스 자체에로드 균형을 조정할 수 있습니다.동일한 역할의 인스턴스 간 하늘 네트워크 통신

+0

"각 인스턴스의 IP 주소를 얻음으로써"를 의미하는 경우 "예"가 첫 번째 질문에 대한 대답입니다. [이 링크] (http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstanceendpoint.ipendpoint.aspx)를 참조하십시오. 두 번째 질문을 이해하지 못합니다. – Jaxidian

+0

roleA 및 해당 인스턴스 인 roleA_in1 및 roleA_in2가 있다고 가정합니다. _in1이 끝점 IP를 요청하고 TCP 패키지를 보내고이 인스턴스가 해당 포트를 수신하면 balancer가 TCP 트래픽을 같은 인스턴스로 라우팅 할 수 있습니까? –

답변

6

역할 인스턴스는 내부 끝점을 통해 서로 대화 할 수 있습니다. 입력 엔드 포인트와 달리 역할은 관계없이 배치 내의 다른 인스턴스에서만 볼 수 있습니다.

내부 엔드 포인트를 통해 직접 말하면 외부 VIP 부하 분산 장치를 완전히 우회합니다. 따라서 연결하려는 세 개의 작업자 역할 인스턴스 (REST 서비스가있는 곳)가 있다면 세 인스턴스에서 자체로드 균형 조정을 수행해야합니다.

내부 엔드 포인트로 작업하는 것은 입력 엔드 포인트와 마찬가지로 간단합니다. 첫 번째 설정 : enter image description here

그런 다음 무작위로 하나 가져옵니다. 예를 들어 (단어의 조잡한 감각) :

 var random = new Random(); 
     var role = RoleEnvironment.Roles["WorkerRole1"]; 
     var instanceNumber = random.Next() % role.Instances.Count; 
     var ipendpoint = role.Instances[instanceNumber].InstanceEndpoints["myservice"].IPEndpoint; 
     var address = ipendpoint.Address; 
     var port = ipendpoint.Port; 

참고 : 당신은 여전히 ​​어떤 역할에서 어떤 역할을 입력 엔드 포인트에게 도달 할 수 있습니다. 이 시점에서 외부 세계에서 오는 다른 트래픽과 마찬가지로 부하가 분산됩니다. 보안에 대해서도 걱정할 필요가 있습니다 (내부 엔드 포인트에서는 그렇지 않습니다).

+1

위대한 대답 David, thanks. 두 가지 추가 질문 : 인스턴스가 자체 엔드 포인트를 얻지 못하게하려면 어떻게해야합니까? 현재 무작위로 선택하고 있습니다. 현재 인스턴스의 IP를 가져 와서 해당 서비스에 요청하면 해당 요청이 시스템에서 나가서 내부 네트워크로 라우팅됩니까? (내가 추측하기로되어 있지 않기 때문에) –

+0

클라우드 서비스 (웹/작업자 역할 인스턴스)를 사용하면 완벽하게 제어 할 수 있습니다. 내부 엔드 포인트를 정의하지 않으면 아무 것도 열리지 않으며 인스턴스는 서로 이야기 할 수 없습니다. 입력 (외부) 엔드 포인트를 정의하지 않으면 외부 세계에서 인스턴스에 트래픽이 도달 할 수 없습니다. 완전히 당신에게 달려 있습니다. –

+0

아니, 너 나 잘못됐다. 하나의 ** 내부 ** 엔드 포인트를 모두 듣는 3 가지 역할 인스턴스가 있다고 가정 해 보겠습니다. (1) 인스턴스가 RoleEnvironment로부터 자신의 IP를 얻는 것을 어떻게 막을 수 있습니까? (2)'RoleEnvironment'에서 자신의 IP 주소를 얻고이 IP : Port를 통해 서비스에 액세스하면 네트워크 패킷이 그 인스턴스 VM을 떠나 라우터에서 돌아 왔는가 아닌가? (나는 그들이 그렇게해서는 안된다고 생각하지만 잘 모르겠습니다.) –