2013-02-02 1 views

답변

6

이 용어에는 여러 가지 용도가있을 수 있지만 매우 짧은 시간 내에 많은 TCP 연결이 이루어져 클라이언트 및 잠재적으로 서버에서 성능 문제가 발생하는 경우에 항상 사용되는 것으로 나타났습니다. .

이것은 어떤 종류의 TCP 실패시 자동으로 연결되는 클라이언트 코드가 작성 될 때 자주 발생합니다. 연결이 이루어지기 전에 (또는 프로토콜 교환에서 매우 초기에)이 실패가 연결 실패 인 경우 클라이언트는 끊임없이 연결을 만드는 바쁜 루프로 들어갈 수 있습니다. 이로 인해 클라이언트 측에서 성능 문제가 발생할 수 있습니다. 첫째, CPU주기를 빨아들이는 매우 바쁜 루프에 프로세스가 있고 두 번째로 각 연결 시도가 클라이언트 측 포트 번호를 사용한다는 것입니다. 소프트웨어가 충분히 빠르게 진행될 경우 포트가 최대 포트 번호에 도달했을 때 (포트가 16 비트 숫자 일 뿐이므로 이는 분명 불가능합니다).

견고한 코드를 작성하는 것이 가치있는 목표이지만이 간단한 "자동 재시도"방식은 다소 단순합니다. 다른 문맥에서도 비슷한 문제를 볼 수 있습니다. 부모 프로세스는 즉시 충돌하는 자식 프로세스를 계속 다시 시작합니다. 이것을 피하는 일반적인 메커니즘은 일종의 백 오프 (backoff)를 증가시키는 것입니다. 따라서 첫 번째 연결이 실패하면 즉시 다시 연결합니다. 짧은 시간 (예 : 30 초)에 다시 실패하면 다시 연결하기 전에 2 초 정도 기다립니다. 30 초 이내에 다시 실패하면 4 초를 기다립니다. 이 기술에 대한 자세한 배경 정보는 the Wikipedia article on exponential backoff (또는 this blog post이이 응용 프로그램에 더 적합 할 수 있음)을 읽어보십시오.

이 방법은 클라이언트 또는 서버를 압도하지 않지만 수동 조작 없이도 클라이언트를 복구 할 수 있다는 이점이 있습니다 (예 : 무인 서버의 소프트웨어 또는 대규모 클러스터).

복구 시간이 중요한 경우 TCP 연결 생성의 단순한 속도 제한도 가능합니다. 아마도 초당 1 개 정도는 아닙니다. 그러나 서버 당 많은 클라이언트가있는 경우이 단순화 된 접근 방식은 여전히 ​​높은 연결 속도를 받아들이는 부하에 의해 서버가 움츠러 들게 할 수 있습니다.

지수 적 백 오프를 사용할 계획이라면 한 가지주의해야 할 점 - 최대 대기 시간을 부과하는 것이 좋으며, 서버 연결이 다시 연결을 수락하기 시작하면 클라이언트가 오랜 시간 동안 복구하지 못할 수도 있습니다. 나는 대부분의 상황에서 합리적인 최대 값으로 5 분을 제안 할 것이지만, 물론 그것은 응용에 달려있다.

+0

의미가 있습니다. 이는 다른 서버에 도달하지 못한 클라이언트 측의 서비스에서 분명히 문제가 될 수 있습니다. 귀하의 답변 주셔서 감사합니다! – eman

관련 문제