무작위 선택, 섞인 순회, 반복되는 프록시 엔드포인트
반복되는 엔드포인트를 고장 난 로테이터로 보는 대신 독립적인 무작위 선택, 섞인 순회, 즉시 반복을 피하는 정책 중에서 선택하세요.
프록시 B, 다시 프록시 B, 그다음 프록시 A. 로그가 수상해 보이지만, 무작위 선택기는 정확히 그렇게 해도 됩니다.
요청마다 같은 목록에서 고르면 반복이 허용됩니다. 확률이 같은 엔드포인트가 둘이면 다음 독립 선택이 이전 선택과 같아질 확률은 이분의 일입니다. 반복이 포함된 짧은 연속은 선택기가 목록을 무시했다는 증거가 아닙니다.
정말로 필요한 동작을 고르세요
| 요구 사항 | 선택 규칙 |
|---|---|
| 모든 선택은 독립적 | 매번 적격 목록에서 고릅니다 |
| 다시 시작하기 전에 각 엔드포인트를 한 번씩 사용 | 복사본을 섞어 소진한 뒤 다음 순회를 시작합니다 |
| 바로 이전 엔드포인트를 피함 | 고르기 전에 그 엔드포인트를 제외합니다 |
마지막 정책에서는 엔드포인트가 하나뿐인 경우를 명시적으로 처리하세요:
candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)
이 조각은 random이 임포트되었고 엔드포인트 목록이 이미 검증되었다고 가정합니다. 공용 풀은 프로토콜이 최종 클라이언트에 맞을 때 무료 프록시 목록으로 시작할 수 있습니다. 이 선택 규칙은 여전히 반복을 제어합니다. 기다릴지, 유일한 엔드포인트를 재사용할지, 중단할지는 애플리케이션 정책입니다. 다른 무작위 값을 기다리는 무한 루프는 서로 다른 선택이 하나뿐인 목록을 해결할 수 없습니다.
동시 디스패처에서는 이전 엔드포인트를 선택하고 기록하는 데도 조정된 소유권이 필요합니다. 그렇지 않으면 두 작업자가 모두 이전 값을 제외하고 같은 다음 값을 고를 수 있습니다.
마지막으로, 이 규칙은 엔드포인트의 정체성에 관한 것입니다. 서로 다른 두 엔드포인트가 하나의 공용 출구로 이어질 수 있고, 한 제공자 엔드포인트가 여러 출구로 이어질 수 있습니다. 로테이션이 고장 났다고 판단하기 전에 그것들을 따로 기록하세요.