Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Un proxy API è un'interfaccia per le applicazioni client utilizzate per la connessione ai servizi di backend. Apigee offre diversi modi per connettersi ai servizi di backend tramite un proxy API:
- TargetEndpoint per connettersi a qualsiasi servizio HTTP/HTTP, NodeJS o destinazione in hosting.
- Criterio di callout di servizio per richiamare qualsiasi servizio esterno prima o dopo la chiamata del server di destinazione in TargetEndpoint.
- Codice personalizzato aggiunto ai criteri JavaScript o ai criteri JavaCallout per connettersi ai servizi di backend.
Connessioni permanenti
La connessione HTTP permanente, chiamata anche keep-alive HTTP o riutilizzo della connessione HTTP, è un concetto che consente a una singola connessione TCP di inviare e ricevere più richieste/risposte HTTP, invece di aprire una nuova connessione per ogni coppia di richiesta/risposta.
Apigee utilizza una connessione permanente per comunicare con i servizi di backend. Per impostazione predefinita, una connessione rimane attiva per 60 secondi. Ciò significa che se una connessione è inattiva nel pool di connessioni per più di 60 secondi, la connessione si chiude.
Il periodo di timeout del keep-alive è configurabile tramite una proprietà denominata keepalive.timeout.millis
,
specificata nella configurazione TargetEndpoint di un proxy API. Ad esempio, il periodo di tempo keep-alive può essere impostato su 30 secondi per un servizio di backend specifico in TargetEndpoint.
Nell'esempio seguente, keepalive.timeout.millis
è impostato su 30 secondi nella configurazione
TargetEndpoint:
<!-- /antipatterns/examples/disable-persistent-connections-1.xml --> <TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="keepalive.timeout.millis">30000</Property> </Properties> </HTTPTargetConnection>Disable HTTP persistent (Reusable keep-alive) connections </TargetEndpoint>
Nell'esempio precedente, keepalive.timeout.millis
controlla il comportamento keep alive per un
servizio di backend specifico in un proxy API. Esiste anche una proprietà che mantiene il comportamento attivo per tutti i servizi di backend in tutti i proxy. L'elemento HTTPTransport.keepalive.timeout.millis
è configurabile nel componente per il processore di messaggi. Questa proprietà ha anche un valore predefinito di 60 secondi. Eventuali modifiche a questa proprietà influiscono sul comportamento della connessione keep-alive tra Apigee e tutti i servizi di backend in tutti i proxy API.
Antipattern
La disabilitazione delle connessioni permanenti (mantenimento attivo) impostando la proprietà keepalive.timeout.millis
su 0 nella configurazione TargetEndpoint di un proxy API specifico o
HTTPTransport.keepalive.timeout.millis
su 0 sui processori di messaggi non è consigliata, perché
potrebbe influire sulle prestazioni.
Nell'esempio seguente, la configurazione di TargetEndpoint disabilita le connessioni permanenti (keep alive) per un servizio di backend specifico impostando keepalive.timeout.millis
su 0:
<!-- /antipatterns/examples/disable-persistent-connections-2.xml --> <TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="keepalive.timeout.millis">0</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
Se le connessioni keep attive sono disabilitate per uno o più servizi di backend, Apigee deve aprire una nuova connessione per ogni nuova richiesta ai servizio di backend di destinazione. Se il backend è HTTPS, Apigee eseguirà anche l'handshake SSL per ogni nuova richiesta, aumentando la latenza complessiva delle richieste API.
Impatto
- Aumenta il tempo di risposta complessivo delle richieste API poiché Apigee deve aprire una nuova connessione ed eseguire l'handshake SSL per ogni nuova richiesta.
- Le connessioni possono esaurirsi in condizioni di traffico elevato, poiché il rilascio delle connessioni al sistema richiede un po' di tempo.
Best practice
- I servizi di backend devono rispettare e gestire la connessione permanente HTTP in conformità con gli standard HTTP 1.1.
- I servizi di backend dovrebbero rispondere con un'intestazione
Connection:keep-alive
se sono in grado di gestire le connessioni permanenti (keep alive). - I servizi di backend dovrebbero rispondere con un'intestazione
Connection:close
se non sono in grado di gestire le connessioni permanenti.
L'implementazione di questo pattern garantisce che Apigee possa gestire automaticamente una connessione permanente o non persistente con i servizi di backend, senza richiedere modifiche al proxy API.