웹 서비스 컨텍스트에서 "TCP 연결 변동"이라는 용어를 사용했습니다. 특히 Twitter finagle에는 발생하지 않도록하는 방법이 있습니다. 어떻게됩니까? 무슨 뜻이에요?TCP 연결이 중단되는 것은 무엇을 의미합니까?
답변
이 용어에는 여러 가지 용도가있을 수 있지만 매우 짧은 시간 내에 많은 TCP 연결이 이루어져 클라이언트 및 잠재적으로 서버에서 성능 문제가 발생하는 경우에 항상 사용되는 것으로 나타났습니다. .
이것은 어떤 종류의 TCP 실패시 자동으로 연결되는 클라이언트 코드가 작성 될 때 자주 발생합니다. 연결이 이루어지기 전에 (또는 프로토콜 교환에서 매우 초기에)이 실패가 연결 실패 인 경우 클라이언트는 끊임없이 연결을 만드는 바쁜 루프로 들어갈 수 있습니다. 이로 인해 클라이언트 측에서 성능 문제가 발생할 수 있습니다. 첫째, CPU주기를 빨아들이는 매우 바쁜 루프에 프로세스가 있고 두 번째로 각 연결 시도가 클라이언트 측 포트 번호를 사용한다는 것입니다. 소프트웨어가 충분히 빠르게 진행될 경우 포트가 최대 포트 번호에 도달했을 때 (포트가 16 비트 숫자 일 뿐이므로 이는 분명 불가능합니다).
견고한 코드를 작성하는 것이 가치있는 목표이지만이 간단한 "자동 재시도"방식은 다소 단순합니다. 다른 문맥에서도 비슷한 문제를 볼 수 있습니다. 부모 프로세스는 즉시 충돌하는 자식 프로세스를 계속 다시 시작합니다. 이것을 피하는 일반적인 메커니즘은 일종의 백 오프 (backoff)를 증가시키는 것입니다. 따라서 첫 번째 연결이 실패하면 즉시 다시 연결합니다. 짧은 시간 (예 : 30 초)에 다시 실패하면 다시 연결하기 전에 2 초 정도 기다립니다. 30 초 이내에 다시 실패하면 4 초를 기다립니다. 이 기술에 대한 자세한 배경 정보는 the Wikipedia article on exponential backoff (또는 this blog post이이 응용 프로그램에 더 적합 할 수 있음)을 읽어보십시오.
이 방법은 클라이언트 또는 서버를 압도하지 않지만 수동 조작 없이도 클라이언트를 복구 할 수 있다는 이점이 있습니다 (예 : 무인 서버의 소프트웨어 또는 대규모 클러스터).
복구 시간이 중요한 경우 TCP 연결 생성의 단순한 속도 제한도 가능합니다. 아마도 초당 1 개 정도는 아닙니다. 그러나 서버 당 많은 클라이언트가있는 경우이 단순화 된 접근 방식은 여전히 높은 연결 속도를 받아들이는 부하에 의해 서버가 움츠러 들게 할 수 있습니다.
지수 적 백 오프를 사용할 계획이라면 한 가지주의해야 할 점 - 최대 대기 시간을 부과하는 것이 좋으며, 서버 연결이 다시 연결을 수락하기 시작하면 클라이언트가 오랜 시간 동안 복구하지 못할 수도 있습니다. 나는 대부분의 상황에서 합리적인 최대 값으로 5 분을 제안 할 것이지만, 물론 그것은 응용에 달려있다.
- 1. "연결이 설정되기 전에"WebSocket이 닫히는 것은 무엇을 의미합니까?
- 2. 외부 SSL TCP 소켓에 연결한다는 것은 무엇을 의미합니까?
- 3. 인터럽트를 비활성화하는 것은 무엇을 의미합니까?
- 4. 파이썬에서 열거되는 것은 무엇을 의미합니까?
- 5. 단추가 _armed_이라는 것은 무엇을 의미합니까?
- 6. 노드를 확장한다는 것은 무엇을 의미합니까?
- 7. 개체를 복제하는 것은 무엇을 의미합니까?
- 8. 서비스로 설치한다는 것은 무엇을 의미합니까?
- 9. 구조체에 ID가없는 것은 무엇을 의미합니까?
- 10. 기호를 해결한다는 것은 무엇을 의미합니까?
- 11. 포인터를 사용한다는 것은 무엇을 의미합니까?
- 12. 유형에서 빼는 것은 무엇을 의미합니까?
- 13. 도서관을 짓는 것은 무엇을 의미합니까?
- 14. 배열을 정규화한다는 것은 무엇을 의미합니까?
- 15. 범위를 벗어난 것은 무엇을 의미합니까?
- 16. Facebook 이벤트가 "비공개"라는 것은 무엇을 의미합니까?
- 17. 아이튠즈에서 앱을 준비하는 것은 무엇을 의미합니까?
- 18. XmlIgnoreAttribute와 XmlAttributeAttribute를 결합한다는 것은 무엇을 의미합니까?
- 19. 파이썬에서 파일 내용을 플러시한다는 것은 무엇을 의미합니까?
- 20. GIT : "덤프"한다는 것은 무엇을 의미합니까?
- 21. 언어가 LISP의 방언이라는 것은 무엇을 의미합니까?
- 22. golang에서 상수가 untyped 인 것은 무엇을 의미합니까?
- 23. ComboBox가 "뜨겁다"는 것은 무엇을 의미합니까?
- 24. "[:,]"목록을 파이썬으로 잘라내는 것은 무엇을 의미합니까?
- 25. 생성자를 무언가에 지정한다는 것은 무엇을 의미합니까?
- 26. 프로젝트를 "Mavenize"한다는 것은 무엇을 의미합니까?
- 27. ODBC 소프트웨어 인터페이스에서 작동한다는 것은 무엇을 의미합니까?
- 28. .swf 파일이 압축된다는 것은 무엇을 의미합니까?
- 29. ActivePython에 "openssl이 포함되어"있다는 것은 무엇을 의미합니까?
- 30. 기계 아키텍처에 따라 달라지는 것은 무엇을 의미합니까?
의미가 있습니다. 이는 다른 서버에 도달하지 못한 클라이언트 측의 서비스에서 분명히 문제가 될 수 있습니다. 귀하의 답변 주셔서 감사합니다! – eman