Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Un proxy API è un'interfaccia per le applicazioni client utilizzata per connettersi ai servizi di backend. Apigee offre diversi modi per connettersi ai servizi di backend tramite un proxy API:
- TargetEndpoint per connetterti a qualsiasi servizio HTTP/HTTPs, NodeJS o Target ospitato.
- Criterio di ServiceCallout 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
Connessione permanente HTTP chiamato anche keep-alive HTTP o riutilizzo della connessione HTTP, è un concetto che consente Connessione TCP per inviare e Ricevere più richieste/risposte HTTP anziché aprire una nuova connessione per ogni coppia richiesta/risposta.
Apigee utilizza una connessione permanente per comunicare con i servizi di backend. La connessione rimane attivo per 60 secondi per impostazione predefinita. Vale a dire, se una connessione è inattiva nel pool di connessioni per per più di 60 secondi, la connessione si chiude.
Il periodo di timeout keep-alive è configurabile tramite una proprietà denominata keepalive.timeout.millis
,
specificata nella configurazione di TargetEndpoint di un proxy API. Ad esempio, keep-alive
può essere impostato su 30 secondi per un servizio di backend specifico nel TargetEndpoint.
Nell'esempio seguente, keepalive.timeout.millis
è impostato su 30 secondi nella configurazione di 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
un servizio di backend specifico
in un proxy API. Esiste anche una proprietà che controlla il comportamento di keep alive per tutti i servizi di backend in tutti i proxy. HTTPTransport.keepalive.timeout.millis
configurabili nel componente
Processore di messaggi. Anche questa proprietà ha un valore predefinito di 60 secondi. Eventuali modifiche apportate a questa proprietà influiscono sul comportamento della connessione keepalive tra
Apigee e tutti i servizi di backend in tutti i proxy API.
Antipattern
La disattivazione delle connessioni permanenti (keep-alive) impostando la proprietà keepalive.timeout.millis
su 0 nella configurazione di TargetEndpoint di un proxy API specifico o impostando HTTPTransport.keepalive.timeout.millis
su 0 sui processori di messaggi non è consigliata in quanto influirà sul rendimento.
Nell'esempio seguente, la configurazione di TargetEndpoint disattiva 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-alive sono disattivate per uno o più servizi di backend, Apigee deve aprire una nuova connessione per ogni nuova richiesta ai servizi di backend di destinazione. Se il backend è HTTPS, Apigee eseguirà inoltre l'handshake SSL per ogni nuova richiesta, aggiungendo latenza delle richieste API.
Impatto
- Aumenta il tempo di risposta complessivo delle richieste API, in quanto Apigee deve aprire una nuova connessione e eseguire l'handshake SSL per ogni nuova richiesta.
- Le connessioni potrebbero esaurirsi in condizioni di traffico elevato, in quanto occorre un po' di tempo per rilasciare le connessioni al sistema.
Best practice
- I servizi di backend devono rispettare e gestire la connessione persistente HTTP in conformità con gli standard HTTP 1.1.
- I servizi di backend devono rispondere con un'intestazione
Connection:keep-alive
se sono in grado di gestire le connessioni permanenti (keep-alive). - I servizi di backend devono rispondere con un'intestazione
Connection:close
se non sono in grado di farlo e gestire le connessioni permanenti.
L'implementazione di questo pattern garantisce che Apigee possa gestire automaticamente la connessione persistente o non persistente con i servizi di backend, senza richiedere modifiche al proxy API.