Un selector pot rotar perfectament i continuar triant el primer proxy. L’error és crear accidentalment un selector nou per a cada petició, cosa que reinicia el seu comptador abans que pugui fer una segona tria.

Construïu el selector una vegada i retingueu-lo amb el transport. La llista de proxys HTTP pot proporcionar candidats HTTP públics per al conjunt d’URLs quan les peticions permeten intermediaris públics. Comenceu amb una llista de URL de proxy ja validada i no buida:

func rotatingProxy(urls []*url.URL) func(*http.Request) (*url.URL, error) {
    var mu sync.Mutex
    next := 0
    return func(*http.Request) (*url.URL, error) {
        mu.Lock()
        selected := urls[next]
        next = (next + 1) % len(urls)
        mu.Unlock()
        return selected, nil
    }
}

L’aplicació que l’envolta ha de rebutjar una llista buida, validar les URL i fer servir les importacions normals net/http, net/url i sync. La llista hauria de romandre immutable mentre aquest selector la fa servir, o bé ser substituïda mitjançant un disseny sincronitzat a part.

Adjunteu la funció retornada a un sol http.Transport retingut. El mutex protegeix la seqüència de selecció entre retrocrides concurrents. No requereix mantenir un bloqueig mentre es completa una petició de xarxa lenta.

No consumiu una ruta només per imprimir-la

Tornar a cridar el selector per a un missatge de diagnòstic avança el comptador una altra vegada. Aquesta sortida pot descriure el candidat següent en lloc del candidat que va fer servir la petició que esteu investigant. Enregistreu la selecció dins de la retrocrida real amb un identificador de punt final segur.

Una invocació de retrocrida no és prova que una petició s’hagi lliurat correctament. Les redireccions o els intents de transport addicionals poden complicar una suposició simple de «una crida de l’aplicació, una tria». Si un flux de treball ha de mantenir una ruta durant diverses operacions, triau aquesta ruta a la frontera del flux de treball en lloc d’usar una retrocrida rotatòria global.

El round-robin tampoc promet sortides públiques diferents. Planifica punts finals. La identitat final continua sent una propietat del camí que proporciona cada punt final.

Articles relacionats