티스토리 뷰

UDP packet이 온전한 상태로 전달될 경우는 특별한 설정이 필요없다. 
하지만 UDP packets 은 조각나서 전달될 수 있는데 이 경우는 특정한 설정 조건이 필요하다.

일반적으로 조각난 packet이 모두 도착할때까지 기다리는건 delay 를 발생시켜 성능에 안좋기 때문에 
GCP는 모든 조각을 다 기다리지 않고 조각난 packet이 들어오는대로 바로 forwarding 한다.

여기서 발생하는 문제가
  • Target Pools의 session affinity가 NONE(5-tuple affinity)으로 설정되어있을 경우 (default가 NONE) 연속되어 들어오는 packet 조각들이 drop 될 수 있다. (load balancer 가 5-tuple hash를 계산 할수가 없음)
  • 하나의 load balanced ip에 UDP forwarding rule이 두개 이상 있으면 packet 조각들이 서로 다른 forwrding rule을 탈 수가 있다.

그러므로 UDP packet이 조각나서 전달 될 수도 있는 경우,
  • seesionAffinity를 CLIENT_IP_PROTO 나 CLIENT_IP로 설정하여야 한다.
  • 하나의 Load balaced ip에 하나의 UDP fowarding rule 만 설정해야 한다. (다음에 전송된 조각도 같은 rule을 탈수 있도록)


Target Pools의 Session Affinity에 대해 첨언하자면,

sessionAffinity는 target pool 의 instance중 어떤것이 선택할지를 정하는 룰이다.
NONE, CLIENT_IP, CLIENT_IP_PROTO. 이렇게 3가지 방식이 있으며 각기 다른 방식의 hash rule을 가진다.
NONE으로 설정할 경우 같은 client에서 접속하더라도 매번 connection이 새로 생성될때마다 random 하게 instance가 선택된다.
다만 connection이 유지되고 instance가 살아있으면 계속해서 같은 session과 instance를 유지한다.

CLIENT_IP와 CLIENT_IP_PROTO의 경우 instance가 살아있고 같은 protocol만 사용한다면 매번 접속시 같은 instance를 선택한다. 



참고: GCP Network Load Balancing Concepts

댓글