2016-08-01 3 views
1

우리는 로컬 네트워크에서 내부 RPC를 수행하기 위해 protobuf와 함께 Grpc (C# 라이브러리)를 사용하고 있습니다. 나는 HAProxy를 사용하여 Roundrobin balancing을 수행하여 2 개의 서버 중 하나에로드를 분산시킵니다. Singleton 채널을 만들고 모든 RPC 호출을 수행하기 위해 동일한 것을 사용하기 때문에로드 균형 조정이 발생하지 않습니다. GRPC Channel을 생성하는 동안 프록시 IP를 서버 목록으로 제공하면 IP가 실제 물리적 IP로 해석되지 않고 채널 객체의 ResolvedTarget 필드에 프록시 IP 만 표시됩니다. 내 질문은 각 서버에 대해 Singleton 개의 개체를 가질 수 있으며 부하 분산을 수행하기 위해 HAproxy를 계속 사용합니까? 또는 HAProxy를 사용할 수없고 동시에 채널을 Singleton 객체로 사용합니까?로드 밸런싱을 위해 HAProxy가 Grpc와 함께 사용될 때 실제 IP 주소를 찾는 방법은 무엇입니까?

답변

0

가능하면 gRPC가 단일 영구 TCP 연결을 사용하여 서버에 요청을 보내기 때문에 부하 분산이 표시되지 않습니다. 따라서 HAProxy에 대한 연결을 열면 단일 연결을 서버 중 하나에 "로드 밸런싱"합니다. 그런 다음 응용 프로그램이 실행되는 동안 해당 연결이 열린 상태로 유지되므로로드 균형 기능이 다시 연결되지 않습니다.

실제로 프록시에 연결되어 있으므로 연결된 IP 주소가 프록시의 IP 주소로 표시됩니다. HAProxy는 패킷을 백엔드 서버로 전달합니다.

단일 채널이 있거나없는 경우 HAProxy는 단일 클라이언트의 여러 gRPC 요청을 다른 서버로 보내지 않음을 의미합니다. 그러나, 다른 클라이언트에서 다른 백엔드로로드 균형을 조정하기 때문에 HAProxy는 여전히 gRPC에서 유용합니다.

+0

_ 그러나 HAProxy는 여전히 다른 클라이언트의 연결을 다른 백엔드로로드 밸런싱 할 것이므로 gRPC에서 유용합니다. 나는 동일한 가정을 가졌지 만 싱글 톤 채널을 만들었을 때 이런 식으로 발생하지 않았습니다. 모든 클라이언트의 모든 요청은 하나의 서버에만 전달되었습니다. 내가 graylog에 채널 요청을 로깅하고 있었다는 것을 알고있다. – GawdePrasad