온라인 질문을 통해 리본 재시도 메커니즘에 대해 이야기하십시오.

머리말

얼마 전 제품 관리자가 온라인에서 제품 기능을 확인했을 때 특정 기능이 수요 기대에 미치지 못하는 것을 발견했고 나중에 테스트 확인에서 서버 측 인터페이스가 때때로 시간 초과될 가능성이 높다는 것을 발견했습니다. 많은 영향.

문제 해결 프로세스

서버 측 인터페이스가 때때로 시간 초과되고 게이트웨이가 30초 시간 초과 퓨즈를 설정했기 때문에 프런트 엔드 요청은 직접 오류를 보고합니다.프론트 엔드가 덮개를 만들었기 때문에 페이지에 명백한 오류 프롬프트가 없습니다. . grafana의 관점에서 인터페이스 응답은 오랜 시간이 걸립니다.

 서버 인터페이스의 응답이 시간 초과되었음을 알고 있다면 문제를 처리하기 쉽습니다. 시간이 많이 걸리는 특정 이유를 확인하십시오. 응답 시간이 오래 걸리는 요청을 kibana에서 찾은 다음 traceId에 따라 특정 링크 로그를 살펴봅니다. 로그에서 이상한 곳을 찾았습니다.

 이 두 로그 위치는 각각 번역 서비스와 공용 비즈니스 서비스를 호출하기 위한 항목 로그입니다. 두 개의 RPC 호출만 있고 두 호출 사이에 다른 비즈니스 로직이 없습니다. 이것을 보면 번역 서비스의 인터페이스 응답이 시간 초과되었음을 짐작할 수 있습니다. 번역 대응 인터페이스의 응답 시간을 살펴보자.

 위의 인터페이스 응답으로 판단할 때 인터페이스의 최대 소요 시간은 약 6초에 불과하므로 위 2분 동안 응답이 없을 것입니다. 따라서 문제는 기본 인터페이스에서 읽기 시간 초과로 인한 것이 아닙니다. 읽기 시간이 초과되지 않았으므로 연결 시간이 초과되었을 수 있습니까? 상위 계층 적응 서비스 구성의 타임아웃 기간을 살펴보자.

feign.client.config.default.connectTimeout=60000
feign.client.config.default.readTimeout=60000
feign.client.config.default.loggerLevel=FULL

#ribbon
ribbon.MaxAutoRetries=0
ribbon.MaxAutoRetriesNextServer=3
ribbon.OkToRetryOnAllOperations=false
ribbon.ServerListRefreshInterval=3000
ribbon.ConnectTimeout=60000
ribbon.ReadTimeout=60000

위의 ribbon.ConnectTimeout=60000을 보고 추측을 확인했습니다. 적응 서비스와 기본 번역 서비스 간의 연결 시간이 초과되었을 것입니다. 예리한 친구는 그것이 잘못되었음을 알 수 있습니다. ribbon.ConnectTimeout=60000 , 연결 시간 초과 기간은 1분이지만 위의 링크 로그에서 번역 서비스에 대한 호출이 2분 동안 시간 초과되어 리본의 재시도 메커니즘으로 연결되어야 합니다.

리본의 재시도 메커니즘

리본의 두 가지 구성을 살펴보겠습니다.

ribbon.MaxAutoRetries=0
ribbon.MaxAutoRetriesNextServer=3

이 두 구성은 서비스를 호출할 때 Ribbon의 재시도 동작을 정의하는 데 사용됩니다.

  • ribbon.MaxAutoRetries=0: 이 구성은 서비스 호출 실패 시 최대 재시도 횟수를 정의합니다. 0으로 설정하면 재시도가 없음을 의미합니다. 즉, 서비스 호출을 한 번만 시도하고 실패하면 즉시 오류를 반환합니다.
  • ribbon.MaxAutoRetriesNextServer=3: 이 구성은 현재 서비스 인스턴스를 사용할 수 없을 때 다음 서비스 인스턴스를 시도하는 최대 횟수를 정의합니다. 3으로 설정하면 현재 서비스 인스턴스에 연결할 수 없는 경우 Ribbon이 호출을 위해 사용 가능한 다음 서비스 인스턴스로 전환하기 위해 최대 3번 시도합니다.

위의 번역 서비스 호출에 2분이 소요된 이유입니다.1차 연결 설정 호출이 1분 동안 타임아웃된 후 다음 지점으로 전환하여 다시 시도했지만 여전히 연결 설정이 1분 동안 타임아웃되었습니다. 그런 다음 다음 노드로 전환하고 이번에는 호출이 성공했으므로 로그에서 호출이 2분 걸렸습니다. 기존 네트워크의 문제로 인해 운영 및 유지 보수에 번역 서비스의 모든 지점을 다시 시작하도록 통지하고 문제를 해결했습니다.번역 서비스의 일부 노드 연결 시간이 초과된 이유는 다음 장.

추천

출처blog.csdn.net/qq_28165595/article/details/131995687