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.
Chuyển đến tài liệu về Apigee X.
thông tin

Proxy API là giao diện dành cho ứ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 proxy API:

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

Kết nối liên tục HTTP (còn gọi là kết nối HTTP giữ kết nối 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, 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 ở trạng thái rảnh trong nhóm kết nối trong hơn 60 giây, thì kết nối sẽ đóng lại.

Bạn có thể định cấu hình khoảng thời gian chờ duy trì hoạt động thông qua thuộc tính có tên keepalive.timeout.millis, được chỉ định trong cấu hình TargetEndpoint của proxy API. Ví dụ: bạn có thể đặt khoảng thời gian duy trì hoạt động thành 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ì hoạt động của một dịch vụ phụ trợ cụ thể trong proxy API. Ngoài ra còn có một thuộc tính kiểm soát việc duy trì hoạt động cho mọi dịch vụ phụ trợ trong mọi proxy. Bạn có thể định cấu hình HTTPTransport.keepalive.timeout.millis trong thành phần Trình xử lý thông báo. 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 duy trì kết nối giữa Apigee Edge và tất cả các dịch vụ phụ trợ trong tất cả các proxy API.

Phản mẫu

Bạn không nên tắt các kết nối cố định (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 Proxy API cụ thể hoặc đặt HTTPTransport.keepalive.timeout.millis thành 0 trên Trình xử lý thông báo vì điều này sẽ ảnh hưởng đến hiệu suất.

Trong ví dụ bên dưới, cấu hình TargetEndpoint vô hiệu hoá các kết nối liên tục (duy trì hoạt động) đối với 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 tính năng giữ kết nối đang hoạt động bị tắt 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 tới(các) dịch vụ phụ trợ mục tiêu. Nếu phần phụ trợ là HTTPs, Edge cũng sẽ thực hiện giao thức 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.

Mức độ tác động

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

Phương pháp hay nhất

  • Các dịch vụ phụ trợ phải tôn trọng và xử lý kết nối HTTP liên tục 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 thể xử lý các kết nối ổn định.

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 ổn định 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