Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
La configurazione di TargetEndpoint definisce il modo in cui Apigee si connette a un servizio o un'API di backend. Invia le richieste e riceve le risposte da/verso il servizio di backend. Il servizio di backend può essere un server HTTP/HTTPS o NodeJS.
Il servizio di backend in TargetEndpoint può essere richiamato in uno dei seguenti modi:
- URL diretto a un server HTTP o HTTPS
- Configurazione di TargetServer
Analogamente, il criterio ServiceCallout può essere utilizzato per effettuare una chiamata a qualsiasi servizio esterno dal flusso del proxy API. Questo criterio supporta la definizione di URL di destinazione HTTP/HTTPS direttamente nel criterio stesso o utilizzando una configurazione TargetServer.
Configurazione di TargetServer
La configurazione di TargetServer disaccoppia gli URL degli endpoint specifici dalle configurazioni di TargetEndpoint o dai criteri di callout del servizio. Un TargetServer viene richiamato tramite un nome anziché tramite l'URL in TargetEndpoint. La configurazione TargetServer conterrà il nome host del servizio di backend, il numero di porta e altri dettagli.
Ecco un esempio di configurazione di TargetServer:
<TargetServer name="target1"> <Host>www.mybackendservice.com</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
TargetServer ti consente di avere configurazioni diverse per ogni ambiente. Un criterio di callout TargetEndpoint/Service può essere configurato con uno o più TargetServer denominati utilizzando un LoadBalancer. Il supporto integrato per il bilanciamento del carico migliora la disponibilità delle API e il failover tra le istanze del server di backend configurate.
Ecco un esempio di configurazione di TargetEndpoint che utilizza TargetServer:
<TargetEndpoint name="default"> <HTTPTargetConnection>> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
MaxFailures
La configurazione MaxFailures
specifica il numero massimo di errori di richiesta
al server di destinazione dopo i quali il server di destinazione deve essere contrassegnato come non disponibile e rimosso
dalla rotazione per tutte le richieste successive.
Un esempio di configurazione con MaxFailures
specificato:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
Nell'esempio precedente, se cinque richieste consecutive non sono andate a buon fine per "target1", "target1" verrà rimosso dalla rotazione e tutte le richieste successive verranno inviate solo a target2.
Antipattern
Non è consigliabile avere un singolo TargetServer in una configurazione LoadBalancer
del criterio TargetEndpoint o Service Callout con MaxFailures
impostato su un valore diverso da zero, in quanto può avere implicazioni negative.
Prendi in considerazione la seguente configurazione di esempio con un singolo TargetServer
chiamato "target1" con MaxFailures
impostato su 5 (valore diverso da zero):
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection>
Se le richieste al TargetServer "target1" non riescono cinque volte (numero specificato in MaxFailures
),
il TargetServer viene rimosso dalla rotazione. Poiché non sono presenti altri TargetServer a cui eseguire il failover, tutte le richieste successive all'API Proxy con questa configurazione non andranno a buon fine con un errore 503 Service Unavailable
.
Anche se TargetServer "target1" torna allo stato normale ed è in grado di inviare risposte positive, le richieste al proxy API continueranno a restituire errori 503. Questo accade perché Apigee non inserisce automaticamente TargetServer nuovamente nella rotazione anche dopo che il target è di nuovo attivo e funzionante. Per risolvere il problema, è necessario eseguire nuovamente il deployment del proxy API affinché Apigee possa rimettere il TargetServer in rotazione.
Se viene utilizzata la stessa configurazione nel criterio di callout del servizio, le richieste API riceveranno l'errore 500 dopo che le richieste al server di destinazione "target1" non andranno a buon fine per 5 volte.
Impatto
L'utilizzo di un singolo TargetServer in una configurazione di LoadBalancer
del criterio TargetEndpoint o Callout di servizio con MaxFailures
impostato su un valore diverso da zero comporta:
- Le richieste API non devono riuscire con errori 503/500 in modo continuo (dopo che le richieste non sono riuscite per il numero di volte specificato in MaxFailures) fino a quando il proxy API non viene reimplementato.
- Interruzione più lunga perché è complicata e può richiedere più tempo per diagnosticare la causa del problema (senza conoscenza pregressa di questo antipattern).
Best practice
- Avere più di un TargetServer nella configurazione
LoadBalancer
per una maggiore disponibilità. Definisci sempre un monitoraggio dell'integrità quando
MaxFailures
è impostato su un valore diverso da zero. Un server di destinazione verrà rimosso dalla rotazione quando il numero di errori raggiunge il numero specificato inMaxFailures
. La presenza di un HealthMonitor garantisce che TargetServer venga reintegrato nella rotazione non appena il server di destinazione diventa di nuovo disponibile, il che significa che non è necessario eseguire nuovamente il deployment del proxy.Per assicurarti che il controllo di integrità venga eseguito sullo stesso numero di porta utilizzato da Apigee per connettersi ai server di destinazione, Apigee consiglia di omettere l'elemento secondario
<Port>
in<TCPMonitor>
, a meno che non sia diverso dalla porta del server di destinazione. Per impostazione predefinita,<Port>
corrisponde alla porta del server di destinazione.Configurazione di esempio con HealthMonitor:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <Server name="target2" /> <MaxFailures>5</MaxFailures> </LoadBalancer> <Path>/test</Path> <HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <TCPMonitor> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> </TCPMonitor> </HealthMonitor> </HTTPTargetConnection> </TargetEndpoint>
Se esiste un vincolo che prevede un solo TargetServer e se HealthMonitor non viene utilizzato, non specificare
MaxFailures
nella configurazione diLoadBalancer
.Il valore predefinito di MaxFailures è 0. Ciò significa che Apigee tenta sempre di connettersi al target per ogni richiesta e non rimuove mai il server target dalla rotazione.
Per approfondire
- Bilanciamento del carico tra server di backend
- Come utilizzare i server di destinazione nei proxy API