Chống lại mô hình: Phản hồi lỗi bộ nhớ đệm

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Lưu vào bộ nhớ đệm là quá trình lưu trữ tạm thời dữ liệu trong một vùng lưu trữ được gọi là bộ nhớ đệm cho các mục đích sử dụng trong tương lai tham chiếu. Việc lưu dữ liệu vào bộ nhớ đệm mang lại lợi ích đáng kể về hiệu suất vì:

  • Cho phép truy xuất dữ liệu nhanh hơn
  • Giảm thời gian xử lý bằng cách tránh tạo lại dữ liệu nhiều lần
  • Ngăn các yêu cầu API gửi đến máy chủ phụ trợ và do đó làm giảm chi phí các máy chủ phụ trợ
  • Cho phép khai thác hiệu quả hơn tài nguyên của hệ thống/ứng dụng
  • Cải thiện thời gian phản hồi của API

Bất cứ khi nào chúng tôi phải thường xuyên truy cập vào một số dữ liệu không thay đổi quá thường xuyên, chúng tôi khuyên bạn sử dụng một bộ nhớ đệm để lưu trữ dữ liệu này.

Apigee Edge cung cấp khả năng lưu trữ dữ liệu vào bộ nhớ đệm trong thời gian chạy để đảm bảo tính ổn định và nhanh hơn truy xuất. Tính năng lưu vào bộ nhớ đệm được cung cấp thông qua chính sách điền sẵn trên bộ nhớ đệm. Chính sách LookupCache, Chính sách Không xác thực bộ nhớ đệmchính sách Bộ nhớ đệm phản hồi.

Trong phần này, hãy tìm hiểu Chính sách về bộ nhớ đệm phản hồi. Chính sách về bộ nhớ đệm phản hồi trong Apigee Edge cho phép bạn lưu các phản hồi từ các máy chủ phụ trợ vào bộ nhớ đệm. Nếu ứng dụng khách đăng ký thực hiện nhiều lần yêu cầu đến cùng một tài nguyên phụ trợ và tài nguyên được cập nhật theo định kỳ thì chúng tôi có thể lưu các phản hồi này vào bộ nhớ đệm bằng chính sách này. Chính sách về bộ nhớ đệm của câu trả lời giúp trả lại các phản hồi được lưu vào bộ nhớ đệm và do đó tránh chuyển tiếp các yêu cầu vào máy chủ phụ trợ một cách không cần thiết.

Chính sách về Bộ nhớ đệm câu trả lời:

  • Giảm số lượng yêu cầu gửi đến phần phụ trợ
  • Giảm băng thông mạng
  • Cải thiện hiệu suất của API và thời gian phản hồi

Phản mẫu

Chính sách Bộ nhớ đệm phản hồi cho phép bạn lưu các phản hồi HTTP vào bộ nhớ đệm với bất kỳ Mã trạng thái nào có thể có, theo mặc định. Điều này có nghĩa là cả phản hồi thành công và phản hồi lỗi đều có thể được lưu vào bộ nhớ đệm.

Dưới đây là ví dụ về chính sách Bộ nhớ đệm phản hồi có cấu hình mặc định:

<!-- /antipatterns/examples/1-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
  <DisplayName>TargetServer ResponseCache</DisplayName>
  <CacheKey>
    <Key Fragment ref="request.uri" /></CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
      <TimeoutInSec ref="flow.variable.here">600</TimeoutInSec>
    </ExpirySettings>
  <CacheResource>targetCache</CacheResource>
</ResponseCache>

Chính sách Bộ nhớ đệm phản hồi sẽ lưu các phản hồi lỗi vào bộ nhớ đệm theo mặc định . Tuy nhiên, bạn không nên lưu các phản hồi lỗi vào bộ nhớ đệm nếu không có suy nghĩ đáng kể về các hệ quả bất lợi vì:

  • Tình huống 1: Sự cố xảy ra trong một khoảng thời gian tạm thời, không xác định và chúng tôi có thể tiếp tục gửi phản hồi lỗi do việc lưu vào bộ nhớ đệm ngay cả sau khi sự cố đã được khắc phục

    HOẶC

  • Tình huống 2: Lỗi sẽ được quan sát trong một khoảng thời gian cố định, thì chúng ta sẽ phải sửa đổi mã để tránh lưu phản hồi vào bộ nhớ đệm sau khi vấn đề được khắc phục

Hãy cùng giải thích điều này bằng cách xem xét chi tiết hơn hai trường hợp này.

Trường hợp 1: Lỗi phụ trợ/tài nguyên tạm thời

Hãy lưu ý rằng lỗi ở máy chủ phụ trợ là do một trong những nguyên nhân sau:

  • Sự cố mạng tạm thời
  • Máy chủ phụ trợ đang rất bận và không thể phản hồi các yêu cầu truy cập hiệp
  • Tài nguyên phụ trợ được yêu cầu có thể bị xoá/không sử dụng được trong một khoảng thời gian tạm thời
  • Máy chủ phụ trợ phản hồi chậm do thời gian xử lý cao trong một khoảng thời gian tạm thời, v.v.

Trong tất cả những trường hợp này, lỗi có thể xảy ra trong một khoảng thời gian không xác định và sau đó chúng tôi có thể bắt đầu nhận được phản hồi thành công. Nếu chúng tôi lưu các phản hồi lỗi vào bộ nhớ đệm thì chúng tôi có thể tiếp tục gửi phản hồi lỗi cho người dùng ngay cả khi sự cố với máy chủ phụ trợ đã được khắc phục.

Trường hợp 2: Lỗi phụ trợ/tài nguyên kéo dài hoặc đã khắc phục

Hãy lưu ý rằng chúng ta biết lỗi trong phần phụ trợ là trong một khoảng thời gian cố định. Ví dụ: bạn biết rằng:

  • Một tài nguyên phụ trợ cụ thể sẽ không hoạt động trong 1 giờ

    HOẶC

  • Máy chủ phụ trợ bị xoá/không sử dụng được trong 24 giờ do lỗi trang web đột ngột, các vấn đề về nhân rộng, bảo trì, nâng cấp, v.v.

Với thông tin này, chúng ta có thể thiết lập thời gian hết hạn bộ nhớ đệm một cách thích hợp trong Bộ nhớ đệm phản hồi để chúng tôi không lưu phản hồi lỗi vào bộ nhớ đệm trong thời gian dài hơn. Tuy nhiên, sau khi máy chủ/tài nguyên phụ trợ vẫn hoạt động trở lại, chúng tôi sẽ phải sửa đổi chính sách để tránh việc lưu vào bộ nhớ đệm phản hồi lỗi. Điều này là do nếu xảy ra lỗi tạm thời/một lần từ phần phụ trợ máy chủ, chúng tôi sẽ lưu phản hồi vào bộ nhớ đệm và chúng tôi sẽ khắc phục sự cố được giải thích trong tình huống 1 ở trên.

Tác động

  • Phản hồi lỗi lưu vào bộ nhớ đệm có thể khiến phản hồi lỗi được gửi ngay cả sau khi sự cố đã được đã phân giải trong máy chủ phụ trợ
  • Người dùng có thể tốn nhiều công sức để khắc phục nguyên nhân của vấn đề mà không biết rằng lỗi này là do bộ nhớ đệm phản hồi lỗi của máy chủ phụ trợ

Phương pháp hay nhất

  • Không lưu trữ phản hồi lỗi trong bộ nhớ đệm phản hồi. Đảm bảo rằng Phần tử <ExcludeErrorResponse> được đặt thành true trong phần tử Chính sách Bộ nhớ đệm phản hồi để ngăn phản hồi lỗi được lưu vào bộ nhớ đệm như minh hoạ trong đoạn mã dưới đây đoạn trích. Bằng cấu hình này chỉ phản hồi cho các mã thành công mặc định từ 200 đến 205 (trừ khi mã thành công được sửa đổi) sẽ được lưu vào bộ nhớ đệm.
    <!-- /antipatterns/examples/1-2.xml -->
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
      <DisplayName>TargetServerResponseCache</DisplayName>
      <CacheKey>
        <KeyFragment ref="request.uri" />
      </CacheKey>
      <Scope>Exclusive</Scope>
      <ExpirySettings>
        <TimeoutinSec ref="flow.variable.here">600</TimeoutinSec>
      </ExpirySettings>
      <CacheResource>targetCache</CacheResource>
      <ExcludeErrorResponse>true</ExcludeErrorResponse>
    </ResponseCache>
  • Nếu có yêu cầu phải lưu các phản hồi lỗi vào bộ nhớ đệm vì một số lý do cụ thể, thì bạn có thể xác định khoảng thời gian tối đa/chính xác mà hệ thống sẽ quan sát lỗi (nếu có thể):
    • Đặt Thời gian hết hạn một cách thích hợp để đảm bảo bạn không lưu các phản hồi lỗi vào bộ nhớ đệm lâu hơn thời gian có thể thấy lỗi.
    • Sử dụng chính sách ResponseCache (Bộ nhớ đệm phản hồi) để lưu các phản hồi lỗi vào bộ nhớ đệm mà không có Phần tử <ExcludeErrorResponse>.

    Chỉ làm việc này nếu bạn hoàn toàn chắc chắn rằng lỗi máy chủ phụ trợ không phải là do khoảng thời gian ngắn/tạm thời.

  • Bạn không nên lưu phản hồi 5xx từ các máy chủ phụ trợ vào bộ nhớ đệm.