<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
API 代理是用于连接后端服务的客户端应用的接口。Apigee Edge 提供了多种通过 API 代理连接到后端服务的方法:
- TargetEndpoint 连接到任何 HTTP/HTTPs、NodeJS 或托管目标服务。
- ServiceCallout 政策,用于在调用 TargetEndpoint 中的目标服务器之前或之后调用任何外部服务。
- 向 JavaScript 政策或 JavaCallout 政策添加自定义代码,以连接到后端服务。
持久性连接
HTTP 持久性连接(也称为 HTTP keep-alive或 HTTP 连接重复使用)是一种概念,允许单个 TCP 连接发送和接收多个 HTTP 请求/响应,而不是为每个请求/响应对打开新连接。
Apigee Edge 使用永久性连接与后端服务进行通信。默认情况下,连接保持活动状态 60 秒。也就是说,如果连接在连接池中的空闲时间超过 60 秒,则该连接会关闭。
keep-alive 超时期限可通过 API 代理的 TargetEndpoint 配置中指定的名为 keepalive.timeout.millis
的属性进行配置。例如,对于 TargetEndpoint 中的特定后端服务,您可以将 keep-live 时间段设置为 30 秒。
在以下示例中,keepalive.timeout.millis
在 TargetEndpoint 配置中设置为 30 秒:
<!-- /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>
在上面的示例中,keepalive.timeout.millis
用于控制 API 代理中特定后端服务的 keep-alive 行为。此外,还有一个控制所有代理中所有后端服务 keep-alive 行为的属性。HTTPTransport.keepalive.timeout.millis
可以在消息处理器组件中配置。此属性的默认值是 60 秒。对此属性进行任何修改都会影响
Apigee Edge 以及所有 API 代理中的所有后端服务。
反模式
不建议通过在特定 API 代理的 TargetEndpoint 配置中将属性 keepalive.timeout.millis
设置为 0 或在消息处理器上将 HTTPTransport.keepalive.timeout.millis
设置为 0 来停用持久性(keep-alive)连接,因为这会影响性能。
在以下示例中,TargetEndpoint 配置将 keepalive.timeout.millis
设置为 0,以为特定后端服务停用持久性(keep-alive)连接:
<!-- /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>
如果为一项或多项后端服务停用了保持活跃的连接,则 Edge 必须打开一个 为发送到目标后端服务的每个新请求创建一个新连接。如果后端是 HTTPS Edge 还将为每个新请求执行 SSL 握手, API 请求的延迟时间
影响
- 增加 API 请求的总响应时间,因为 Apigee Edge 必须打开新的连接并 为每个新请求执行 SSL 握手。
- 在高流量条件下,连接可能会耗尽,因为将连接撤销到系统需要一些时间。
最佳做法
- 后端服务应按照 HTTP 1.1 标准遵守和处理 HTTP 持久性连接。
- 如果后端服务能够处理持久性(keep-alive)连接,则应使用
Connection:keep-alive
标头做出响应。 - 如果后端服务无法处理持久性连接,则应使用
Connection:close
标头做出响应。
实现此模式将确保 Apigee Edge 可以自动处理永久性或非永久性 而无需更改 API 代理。