Phản mẫu: Vô hiệu hoá các kết nối HTTP liên tục (có thể tái sử dụng)

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

API proxy là một giao diện cho các ứng dụng khách dùng để kết nối với các dịch vụ phụ trợ. Apigee Edge cung cấp nhiều cách để kết nối với các dịch vụ phụ trợ thông qua một proxy API:

Kết nối liên tục

Kết nối liên tục HTTP (còn gọi là HTTP keep-alive hoặc sử dụng lại kết nối HTTP) là một khái niệm cho phép một kết nối TCP duy nhất gửi và nhận nhiều yêu cầu HTTP/phản hồi thay vì mở một kết nối mới cho mỗi cặp yêu cầu/phản hồi.

Apigee Edge sử dụng kết nối liên tục để giao tiếp với các dịch vụ phụ trợ. Theo mặc định, một kết nối sẽ duy trì hoạt động trong 60 giây. Tức là nếu một kết nối không hoạt động trong nhóm kết nối quá 60 giây, thì kết nối đó sẽ đóng.

Bạn có thể định cấu hình khoảng thời gian chờ duy trì hoạt động thông qua một thuộc tính có tên là keepalive.timeout.millis, được chỉ định trong cấu hình TargetEndpoint của một proxy API. Ví dụ: bạn có thể đặt khoảng thời gian duy trì kết nối là 30 giây cho một dịch vụ phụ trợ cụ thể trong TargetEndpoint.

Trong ví dụ bên dưới, keepalive.timeout.millis được đặt thành 30 giây trong cấu hình 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>

Trong ví dụ trên, keepalive.timeout.millis kiểm soát hành vi duy trì kết nối cho một dịch vụ phụ trợ cụ thể trong một proxy API. Ngoài ra, còn có một thuộc tính kiểm soát hành vi duy trì hoạt động cho tất cả các dịch vụ phụ trợ trong tất cả các proxy. Bạn có thể định cấu hình HTTPTransport.keepalive.timeout.millis trong thành phần Trình xử lý tin nhắn. Thuộc tính này cũng có giá trị mặc định là 60 giây. Việc sửa đổi thuộc tính này sẽ ảnh hưởng đến hành vi kết nối duy trì hoạt động giữa Apigee Edge và tất cả các dịch vụ phụ trợ trong mọi proxy API.

Antipattern

Bạn không nên tắt các kết nối liên tục (duy trì hoạt động) bằng cách đặt thuộc tính keepalive.timeout.millis thành 0 trong cấu hình TargetEndpoint của một API Proxy cụ thể hoặc đặt HTTPTransport.keepalive.timeout.millis thành 0 trên Message Processor vì việc này sẽ ảnh hưởng đến hiệu suất.

Trong ví dụ dưới đây, cấu hình TargetEndpoint sẽ tắt các kết nối liên tục (duy trì hoạt động) cho một dịch vụ phụ trợ cụ thể bằng cách đặt keepalive.timeout.millis thành 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>

Nếu các kết nối duy trì hoạt động bị vô hiệu hoá cho một hoặc nhiều dịch vụ phụ trợ, thì Edge phải mở một kết nối mới cho mỗi yêu cầu mới đến(các) dịch vụ phụ trợ mục tiêu. Nếu là HTTP, Edge cũng sẽ thực hiện bắt tay SSL cho mỗi yêu cầu mới, làm tăng độ trễ tổng thể của các yêu cầu API.

Tác động

  • Tăng thời gian phản hồi tổng thể của các yêu cầu API vì Apigee Edge phải mở một kết nối mới và thực hiện bắt tay SSL cho mọi yêu cầu mới.
  • Các kết nối có thể bị cạn kiệt trong điều kiện lưu lượng truy cập cao, vì cần một khoảng thời gian để giải phóng các kết nối trở lại hệ thống.

Phương pháp hay nhất

  • Các dịch vụ phụ trợ phải tuân thủ và xử lý kết nối liên tục HTTP theo tiêu chuẩn HTTP 1.1.
  • Các dịch vụ phụ trợ phải phản hồi bằng tiêu đề Connection:keep-alive nếu có thể xử lý các kết nối liên tục (duy trì hoạt động).
  • Các dịch vụ phụ trợ phải phản hồi bằng tiêu đề Connection:close nếu không xử lý được các kết nối liên tục.

Việc triển khai mẫu này sẽ đảm bảo rằng Apigee Edge có thể tự động xử lý kết nối liên tục hoặc không liên tục với các dịch vụ phụ trợ mà không cần thay đổi proxy API.

Tài liệu đọc thêm