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à một giao diện dành cho các ứng dụng khách để 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 HTTP liên tục, còn được gọi là duy trì hoạt động HTTP hoặc sử dụng lại kết nối HTTP. Đây là một khái niệm cho phép Kết nối TCP để 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ợ. Duy trì kết nối tồn tại trong 60 giây theo mặc định. Tức là nếu một kết nối ở trạng thái rảnh trong nhóm kết nối cho hơn 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 thuộc tính có tên là keepalive.timeout.millis, được chỉ định trong cấu hình TargetEndpoint của proxy API. Ví dụ: duy trì có thể đặt khoảng thời gian 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 TargetEndpoint cấu hình:

<!-- /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 cho 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 hành vi duy trì hoạt động cho tất cả các dịch vụ phụ trợ trong tất cả proxy. HTTPTransport.keepalive.timeout.millis có thể định cấu hình trong thành phần Trình xử lý thư. 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 cũng 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 tất cả proxy API.

Phản mẫu

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

Trong ví dụ bên dưới, cấu hình TargetEndpoint sẽ tắt các kết nối liên tục (duy trì hoạt động) dành 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 tính năng Duy trì kết nối đang hoạt động bị tắt đối với 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à HTTP, Edge cũng sẽ thực hiện bắt tay SSL cho từng yêu cầu mới, bổ sung thêm độ trễ của các yêu cầu API.

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à thực hiện bắt tay SSL cho mọi yêu cầu mới.
  • Kết nối có thể bị hết khi điều kiện lưu lượng truy cập cao, vì cần chút thời gian để huỷ 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 HTTP liên tục theo tiêu chuẩn HTTP 1.1 chuẩn.
  • 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 bền vững (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 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ý các kết quả ổn định hoặc không ổn định kết nối với các dịch vụ phụ trợ mà không yêu cầu thay đổi proxy API.

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