Đặt thời gian hết hạn bộ nhớ đệm L1 trên Trình xử lý thông báo

Apigee Edge cung cấp bộ nhớ đệm để lưu trữ dữ liệu lâu dài trên các yêu cầu. Khi nhận được dữ liệu API, dữ liệu đó sẽ được lưu trữ trong bộ nhớ đệm trong một khoảng thời gian ngắn rồi bị xoá. Khoảng thời gian tối đa mà một phần dữ liệu được lưu giữ trước khi bị xoá được gọi là thời hạn hoặc thời gian tồn tại (TTL) của bộ nhớ đệm. Mỗi bộ nhớ đệm đều có TTL mặc định, nhưng trong một số trường hợp, bạn có thể cần thay đổi giá trị TTL để cải thiện hiệu suất API.

Các loại bộ nhớ đệm

Dữ liệu API được lưu trữ trong hai loại bộ nhớ đệm:

  • Cấp 1 (L1): Bộ nhớ đệm trong bộ nhớ, có tốc độ truy cập nhanh hơn nhưng dung lượng lưu trữ còn trống ít hơn.
  • Cấp 2 (L2): Bộ nhớ đệm ổn định trong kho dữ liệu Cassandra, có quyền truy cập chậm hơn nhưng dung lượng lưu trữ lớn hơn.

Khi một mục dữ liệu trong bộ nhớ đệm L1 đạt đến TTL L1, mục đó sẽ bị xoá. Tuy nhiên, một bản sao của mục nhập được lưu giữ trong bộ nhớ đệm L2 (có TTL dài hơn bộ nhớ đệm L1), nơi các bộ xử lý thông báo khác vẫn có thể truy cập được. Hãy xem phần Cấp độ bộ nhớ đệm trong bộ nhớ và bộ nhớ đệm ổn định để biết thêm thông tin chi tiết về bộ nhớ đệm.

TTL L1 tối đa

Trong Edge cho đám mây riêng tư, bạn có thể đặt TTL tối đa của bộ nhớ đệm L1 cho mỗi bộ xử lý thông báo bằng thuộc tính TTL tối đa của L1 (conf_cache_max.l1.ttl.in.seconds). Một mục trong bộ nhớ đệm L1 sẽ hết hạn sau khi đạt đến giá trị TTL tối đa của L1 và bị xoá.

Lưu ý:

  • Theo mặc định, TTL L1 tối đa sẽ bị tắt (với giá trị -1), trong trường hợp đó, TTL của một mục trong bộ nhớ đệm L1 được xác định theo chế độ cài đặt thời gian hết hạn của chính sách PopulateCache (cho cả bộ nhớ đệm L1 và L2).
  • TTL tối đa của L1 chỉ có hiệu lực nếu giá trị của TTL nhỏ hơn thời gian hết hạn tổng thể của bộ nhớ đệm.

Đặt TTL tối đa cho L1

Bạn có thể đặt TTL L1 tối đa trên bộ xử lý thông báo như sau:

  1. Mở tệp cấu hình /opt/apigee/customer/application/message-processor.properties trong trình chỉnh sửa. Nếu tệp không tồn tại, hãy tạo tệp.
  2. Đặt thuộc tính Max L1 TTL thành giá trị mong muốn:
    conf_cache_max.l1.ttl.in.seconds = 180

    Bạn nên đặt giá trị là 180 giây.

  3. Đảm bảo tệp thuộc tính thuộc sở hữu của người dùng "apigee":
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Khởi động lại bộ xử lý thông báo:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Nguyên tắc đặt TTL L1 tối đa

Khi đặt TTL L1 tối đa, hãy lưu ý các nguyên tắc sau:

  • Lỗi RPC: Nếu bạn nhận thấy lỗi lệnh gọi quy trình từ xa (RPC) giữa các bộ xử lý thông báo (MP) – đặc biệt là trên nhiều trung tâm dữ liệu – thì có thể bộ nhớ đệm L1 có các mục cũ và các mục này sẽ vẫn cũ cho đến khi bị xoá khỏi bộ nhớ đệm L1. Việc đặt TTL tối đa của L1 thành giá trị thấp hơn sẽ buộc mọi mục cũ phải bị xoá và thay thế bằng các giá trị mới từ bộ nhớ đệm L2 sớm hơn.
    Giải pháp: Giảm conf_cache_max.l1.ttl.in.seconds.
  • Tải quá mức trên Cassandra: Khi bạn đặt giá trị cho TTL L1 tối đa, các mục nhập bộ nhớ đệm L1 sẽ hết hạn thường xuyên hơn, dẫn đến nhiều lần thiếu bộ nhớ đệm L1 và nhiều lần tìm thấy kết quả trong bộ nhớ đệm L2 hơn. Vì bộ nhớ đệm L2 sẽ được truy cập thường xuyên hơn, nên Cassandra sẽ phải chịu tải nhiều hơn.
    Giải pháp: Tăng conf_cache_max.l1.ttl.in.seconds

Theo nguyên tắc chung, hãy điều chỉnh TTL L1 tối đa thành một giá trị cân bằng tần suất bỏ lỡ RPC giữa các MP với tải tiềm năng trên Cassandra.

Bạn nên đặt giá trị của conf_cache_max.l1.ttl.in.seconds thành ít nhất là 180 giây (3 phút) để quá trình xử lý diễn ra suôn sẻ.