Chính sách định mức

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

Nội dung

Sử dụng chính sách Hạn mức để định cấu hình số lượng thông báo yêu cầu mà proxy API cho phép trong một khoảng thời gian, chẳng hạn như phút, giờ, ngày, tuần hoặc tháng. Bạn có thể đặt hạn mức là như nhau cho tất cả các ứng dụng truy cập proxy API, hoặc bạn có thể đặt hạn mức dựa trên:

  • Sản phẩm chứa proxy API
  • Ứng dụng yêu cầu API
  • Nhà phát triển ứng dụng
  • Nhiều tiêu chí khác

Không sử dụng Hạn mức để tránh tăng đột biến lưu lượng truy cập tổng thể. Để làm được việc đó, hãy sử dụng chính sách Tăng đột biến. Vui lòng xem chính sách về việc Bắt giữ người trượt ván.

Video

Những video sau đây giới thiệu về việc quản lý hạn mức bằng chính sách Hạn mức:

Giới thiệu (Edge mới)

Giới thiệu (Edge phiên bản cũ)

Hạn mức động

Phân phối và đồng bộ

Trọng lượng thông báo

Lịch

Cửa sổ cuộn

linh hoạt

Hạn mức có điều kiện

Biến luồng

Xử lý lỗi

Mẫu

Mã mẫu chính sách này minh hoạ cách bắt đầu và kết thúc khoảng thời gian hạn mức bằng cách:

Hạn mức động khác

<Quota name="CheckQuota"> 
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
  <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/>
</Quota>

Hạn mức động cho phép bạn thiết lập một chính sách Hạn mức duy nhất để thực thi nhiều chế độ cài đặt Hạn mức khác nhau dựa trên thông tin được chuyển đến chính sách Hạn mức. Trong trường hợp này, có một thuật ngữ khác gọi là "Gói dịch vụ". Hạn mức động sẽ kiểm tra "Gói dịch vụ" của ứng dụng rồi thực thi các chế độ cài đặt đó.

Lưu ý: Nếu bạn chỉ định cả giá trị và tham chiếu cho một phần tử, thì tệp đối chiếu sẽ nhận được mức độ ưu tiên. Nếu tệp đối chiếu không phân giải trong thời gian chạy, thì giá trị này sẽ được sử dụng.

Ví dụ: khi tạo một sản phẩm API, bạn có thể tuỳ ý đặt giới hạn hạn mức, đơn vị thời gian và khoảng thời gian cho phép. Tuy nhiên, việc đặt các giá trị này trên sản phẩm API sẽ không thực thi việc sử dụng các giá trị đó trong proxy API. Bạn cũng phải thêm một chính sách Hạn mức vào proxy API có nhiệm vụ đọc các giá trị này. Hãy xem bài viết Tạo sản phẩm API để biết thêm thông tin.

Trong ví dụ trên, proxy API chứa chính sách Hạn mức sử dụng chính sách VerifyAPIKey có tên là verify-api-key để xác thực khoá API được truyền trong một yêu cầu. Sau đó, chính sách Hạn mức truy cập vào các biến luồng trong chính sách VerifyAPIKey để đọc các giá trị hạn mức được đặt trên sản phẩm API. Để biết thêm về các biến luồng VerifyAPIKey, hãy xem Chính sách về xác minh khoá API.

Một cách khác là đặt thuộc tính tuỳ chỉnh trên từng nhà phát triển hoặc ứng dụng, sau đó đọc các giá trị đó trong Chính sách về hạn mức. Ví dụ: bạn muốn đặt các giá trị hạn mức khác nhau cho từng nhà phát triển. Trong trường hợp này, bạn đặt thuộc tính tuỳ chỉnh chứa giới hạn, đơn vị thời gian và khoảng thời gian cho nhà phát triển. Sau đó, bạn hãy tham chiếu các giá trị này trong chính sách về Hạn mức như được nêu bên dưới:

<Quota name="DeveloperQuota"> 
  <Identifier ref="verifyapikey.verify-api-key.client_id"/> 
  <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/> 
  <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/> 
  <Allow countRef="verifyapikey.verify-api-key.developer.limit"/> 
</Quota>

Ví dụ này cũng sử dụng các biến luồng VerifyAPIKey để tham chiếu đến các thuộc tính tuỳ chỉnh được đặt trên nhà phát triển.

Bạn có thể dùng bất kỳ biến nào để đặt các thông số của chính sách Hạn mức. Những biến đó có thể đến từ:

  • Biến luồng
  • Thuộc tính trên sản phẩm, ứng dụng hoặc nhà phát triển API
  • Sơ đồ khoá-giá trị (KVM)
  • Tiêu đề, tham số truy vấn, tham số biểu mẫu, v.v.

Đối với mỗi proxy API, bạn có thể thêm một chính sách Hạn mức tham chiếu cùng một biến với tất cả các chính sách Hạn mức khác trong tất cả các proxy khác, hoặc chính sách Hạn mức có thể tham chiếu các biến dành riêng cho chính sách và proxy đó.

Thời gian bắt đầu

<Quota name="QuotaPolicy" type="calendar">
  <StartTime>2017-02-18 10:30:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Đối với Hạn mức có type được đặt thành calendar, bạn phải xác định giá trị <StartTime> rõ ràng. Giá trị thời gian là giờ GMT, không phải giờ địa phương. Nếu bạn không cung cấp giá trị <StartTime> cho chính sách thuộc loại calendar, thì Edge sẽ báo lỗi.

Bộ đếm hạn mức cho mỗi ứng dụng được làm mới dựa trên các giá trị <StartTime>, <Interval><TimeUnit>. Đối với ví dụ này, Hạn mức bắt đầu được tính vào lúc 10:30 sáng theo giờ GMT vào ngày 18 tháng 2 năm 2017 và được làm mới 5 giờ một lần. Do đó, lần làm mới tiếp theo là vào lúc 3:30 chiều GMT ngày 18 tháng 2 năm 2017.

Bộ đếm truy cập

<Quota name="QuotaPolicy">
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Một proxy API có quyền truy cập vào các biến luồng do chính sách Hạn mức đặt ra. Bạn có thể truy cập các biến luồng này trong proxy API để thực hiện xử lý có điều kiện, theo dõi chính sách khi chính sách sắp đạt đến hạn mức, trả về bộ đếm hạn mức hiện tại cho một ứng dụng hoặc vì lý do khác.

Vì quyền truy cập các biến luồng cho chính sách dựa trên thuộc tính name của chính sách, nên đối với chính sách có tên là QuotaPolicy ở trên, bạn sẽ truy cập vào các biến luồng của chính sách theo dạng:

  • ratelimit.QuotaPolicy.allowed.count: Số lượng được phép.
  • ratelimit.QuotaPolicy.used.count: Giá trị bộ đếm hiện tại.
  • ratelimit.QuotaPolicy.expiry.time: Giờ UTC khi bộ đếm đặt lại.

Có nhiều biến luồng khác mà bạn có thể truy cập, như được mô tả dưới đây.

Ví dụ: bạn có thể sử dụng chính sách tắt lựa chọn sau đây để trả về giá trị của các biến luồng Hạn mức dưới dạng tiêu đề phản hồi:

<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars">
    <AssignTo createNew="false" type="response"/>
    <Set>
        <Headers>
            <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header>
            <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header>
            <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Yêu cầu đầu tiên

<Quota name="MyQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="10000"/>
</Quota>

Sử dụng mã mẫu này để thực thi hạn mức 10.000 cuộc gọi mỗi giờ. Chính sách này sẽ đặt lại bộ đếm hạn mức ở đầu mỗi giờ. Nếu bộ đếm đạt đến hạn mức 10.000 lệnh gọi trước khi hết giờ, thì các cuộc gọi vượt quá 10.000 cuộc gọi sẽ bị từ chối.

Ví dụ: nếu bộ đếm bắt đầu từ 2017-07-08 07:00:00, thì bộ đếm sẽ đặt lại về 0 lúc 2017-07-08 08:00:00 (1 giờ kể từ thời điểm bắt đầu). Nếu bạn nhận được tin nhắn đầu tiên vào lúc 2017-07-08 07:35:28 và số lượng tin nhắn đạt đến 10.000 trước ngày 2017-07-08 08:00:00, thì các lệnh gọi vượt quá số lượng đó sẽ bị từ chối cho đến khi số lượng tin nhắn được đặt lại vào đầu giờ.

Thời gian đặt lại bộ đếm dựa trên sự kết hợp giữa <Interval><TimeUnit>. Ví dụ: nếu bạn đặt <Interval> thành 12 trong <TimeUnit> giờ, thì bộ đếm sẽ đặt lại sau mỗi 12 giờ. Bạn có thể đặt <TimeUnit> thành phút, giờ, ngày, tuần hoặc tháng.

Bạn có thể tham khảo chính sách này ở nhiều vị trí trong proxy API. Ví dụ: bạn có thể đặt phương thức này trên Proxy PreFlow để quy trình được thực thi trong mọi yêu cầu. Bạn cũng có thể đặt phương thức này trên nhiều luồng trong proxy API. Nếu bạn sử dụng chính sách này ở nhiều vị trí trong proxy, thì chính sách sẽ duy trì một bộ đếm duy nhất được cập nhật qua tất cả các trường hợp của chính sách.

Ngoài ra, bạn có thể xác định nhiều chính sách Hạn mức trong proxy API. Mỗi chính sách Hạn mức sẽ có bộ đếm riêng, dựa trên thuộc tính name của chính sách.

Đặt giá trị nhận dạng

<Quota name="QuotaPolicy" type="calendar">
  <Identifier ref="request.header.clientId"/> 
  <StartTime>2017-02-18 10:00:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Theo mặc định, chính sách Hạn mức xác định một bộ đếm duy nhất cho proxy API, bất kể nguồn gốc của yêu cầu. Ngoài ra, bạn có thể dùng thuộc tính <Identifier> có chính sách Hạn mức để duy trì các bộ đếm riêng biệt dựa trên giá trị của thuộc tính <Identifier>.

Ví dụ: sử dụng thẻ <Identifier> để xác định các bộ đếm riêng biệt cho mỗi mã ứng dụng khách. Khi có yêu cầu tới proxy của bạn, ứng dụng khách sẽ chuyển tiêu đề chứa clientID, như trong ví dụ trên.

Bạn có thể chỉ định bất kỳ biến luồng nào cho thuộc tính <Identifier>. Ví dụ: bạn có thể chỉ định rằng tham số truy vấn có tên id chứa giá trị nhận dạng duy nhất:

<Identifier ref="request.queryparam.id"/>

Nếu sử dụng chính sách VerifyAPIKey để xác thực khoá API hoặc các chính sách OAuthV2 với mã thông báo OAuth, thì bạn có thể dùng thông tin trong khoá API hoặc mã thông báo để xác định từng bộ đếm riêng lẻ cho cùng một chính sách Hạn mức. Ví dụ: thẻ <Identifier> sau đây sử dụng biến luồng client_id của chính sách VerifyAPIKey có tên là verify-api-key:

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

Giờ đây, mỗi giá trị client_id riêng biệt xác định bộ đếm riêng trong chính sách về Hạn mức.

Lớp

<Quota name="QuotaPolicy">
  <Interval>1</Interval>
  <TimeUnit>day</TimeUnit>
  <Allow>
    <Class ref="request.header.developer_segment">
      <Allow class="platinum" count="10000"/>
      <Allow class="silver" count="1000" />
    </Class>
  </Allow>
</Quota>

Bạn có thể đặt Hạn mức một cách linh động bằng cách sử dụng số lượng Hạn mức dựa trên lớp. Trong ví dụ này, hạn mức được xác định bằng giá trị của tiêu đề developer_segment được chuyển cùng với mỗi yêu cầu. Biến đó có thể có giá trị platinum hoặc silver. Nếu tiêu đề có giá trị không hợp lệ, thì chính sách sẽ trả về lỗi vi phạm hạn mức.


Giới thiệu về chính sách Hạn mức

Hạn mức là một tập hợp các thông báo yêu cầu mà một proxy API có thể xử lý trong một khoảng thời gian, chẳng hạn như phút, giờ, ngày, tuần hoặc tháng. Chính sách này duy trì các bộ đếm đếm số lượng yêu cầu mà proxy API nhận được. Khả năng này cho phép nhà cung cấp API thực thi giới hạn về số lượng lệnh gọi API do các ứng dụng thực hiện trong một khoảng thời gian. Ví dụ: Khi sử dụng chính sách Hạn mức, bạn có thể giới hạn ứng dụng ở mức 1 yêu cầu mỗi phút hoặc 10.000 yêu cầu mỗi tháng.

Ví dụ: nếu Hạn mức được xác định là 10.000 thông báo mỗi tháng, thì việc giới hạn tốc độ sẽ bắt đầu sau thông báo thứ 10.000. Không quan trọng là 10.000 tin nhắn được tính vào ngày đầu tiên hay ngày cuối cùng của khoảng thời gian đó; không cho phép khu vực yêu cầu bổ sung nào được phép cho đến khi bộ đếm Hạn mức tự động đặt lại vào cuối khoảng thời gian đã chỉ định hoặc cho đến khi Hạn mức được đặt lại một cách rõ ràng bằng chính sách Đặt lại hạn mức.

Một thay đổi về Hạn mức có tên là SpikeArrest giúp ngăn chặn tình trạng lưu lượng truy cập tăng đột biến (hay đột biến) có thể do mức sử dụng tăng đột ngột, máy khách bị lỗi hoặc các cuộc tấn công độc hại. Để biết thêm thông tin về SpikeArrest, vui lòng xem chính sách về SpikeArrest.

Hạn mức áp dụng cho các proxy API riêng lẻ và không được phân phối giữa các proxy API. Ví dụ: nếu bạn có ba proxy API trong một sản phẩm API, thì một hạn mức duy nhất không được chia sẻ cho cả ba ngay cả khi cả ba đều sử dụng cùng một cấu hình chính sách hạn mức.

Các loại chính sách về hạn mức

Chính sách Hạn mức hỗ trợ một số loại chính sách: mặc định, calendar, flexirollingwindow. Mỗi loại xác định thời điểm bộ đếm hạn mức bắt đầu và đặt lại, như minh hoạ trong bảng sau:

Đơn vị Thời gian Đã đặt lại mặc định (hoặc rỗng) đặt lại lịch đặt lại flexi
phút Bắt đầu phút tiếp theo Một phút sau <StartTime> Một phút sau lần yêu cầu đầu tiên
giờ Đầu giờ tiếp theo Một giờ sau <StartTime> Một giờ sau lần yêu cầu đầu tiên
ngày Nửa đêm theo giờ GMT của ngày hiện tại 24 giờ sau <StartTime> 24 giờ sau lần yêu cầu đầu tiên
tuần Nửa đêm theo giờ GMT vào cuối tuần Một tuần sau <StartTime> Một tuần sau lần yêu cầu đầu tiên
tháng Nửa đêm theo giờ GMT của ngày cuối cùng trong tháng Một tháng (28 ngày) sau ngày <StartTime> Một tháng (28 ngày) sau lần yêu cầu đầu tiên

Đối với type="calendar", bạn phải chỉ định giá trị <StartTime>.

Bảng này không liệt kê giá trị cho loại rollingwindow. Hạn mức thời hạn chuyển đổi hoạt động bằng cách đặt kích thước của một "thời hạn" hạn mức, chẳng hạn như khoảng thời gian một giờ hoặc một ngày. Khi có yêu cầu mới được gửi đến, chính sách này sẽ xác định xem hạn mức đã bị vượt quá trong "khoảng thời gian" trước đó hay chưa.

Ví dụ: bạn xác định khoảng thời gian là 2 giờ cho phép 1.000 yêu cầu. Một yêu cầu mới được gửi đến lúc 4:45 chiều.Chính sách này tính toán hạn mức cho khoảng thời gian 2 giờ qua, nghĩa là số lượng yêu cầu kể từ 2:45 chiều. Nếu chưa vượt quá giới hạn trong khoảng thời gian 2 giờ đó, thì hệ thống sẽ cho phép yêu cầu.

Một phút sau, vào lúc 4:46 chiều, lại nhận được một yêu cầu khác. Hiện tại, chính sách này sẽ tính số lượng hạn mức kể từ 2:46 chiều để xác định xem đã vượt quá giới hạn hay chưa.

Đối với loại rollingwindow, bộ đếm không bao giờ đặt lại, nhưng sẽ được tính toán lại mỗi khi có yêu cầu.

Tìm hiểu về bộ đếm hạn mức

Theo mặc định, chính sách Hạn mức vẫn duy trì một bộ đếm duy nhất, bất kể bạn tham chiếu bao nhiêu lần chính sách đó trong proxy API. Tên của bộ đếm hạn mức dựa trên thuộc tính name của chính sách.

Ví dụ: bạn tạo một chính sách Hạn mức có tên là MyQuotaPolicy với giới hạn 5 yêu cầu và đặt chính sách này trên nhiều luồng (Luồng A, B và C) trong proxy API. Mặc dù được sử dụng trong nhiều luồng, nhưng phương thức này vẫn duy trì một bộ đếm duy nhất được cập nhật cho mọi thực thể của chính sách:

  • Luồng A được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của luồng = 1
  • Luồng B được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của luồng B = 2
  • Luồng A được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của luồng = 3
  • Luồng C được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của luồng C = 4
  • Luồng A được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của luồng = 5

Yêu cầu tiếp theo đến một trong 3 quy trình bất kỳ trong số 3 quy trình đó đều bị từ chối vì bộ đếm hạn mức đã đạt đến giới hạn.

Việc dùng cùng một chính sách Hạn mức ở nhiều nơi trong luồng proxy API. Việc này có thể vô tình khiến Hạn mức hết nhanh hơn dự kiến. Đây là cách chống mẫu được mô tả trong Sách về Apigee Edge Antipatterns.

Ngoài ra, bạn có thể xác định nhiều chính sách Hạn mức trong proxy API và dùng một chính sách khác nhau trong mỗi quy trình. Mỗi chính sách Hạn mức sẽ có bộ đếm riêng, dựa trên thuộc tính name của chính sách.

Bạn cũng có thể sử dụng phần tử <Class> hoặc <Identifier> trong chính sách Hạn mức để xác định nhiều bộ đếm duy nhất trong một chính sách. Bằng cách sử dụng các phần tử này, một chính sách duy nhất có thể duy trì nhiều bộ đếm dựa trên ứng dụng đưa ra yêu cầu, nhà phát triển ứng dụng đưa ra yêu cầu, mã ứng dụng khách hoặc mã nhận dạng ứng dụng khách khác, v.v. Hãy xem các ví dụ ở trên để biết thêm thông tin về cách sử dụng phần tử <Class> hoặc <Identifier>.

Ký hiệu thời gian

Tất cả thời gian của Hạn mức đều được đặt theo múi giờ Giờ phối hợp quốc tế (UTC).

Ký hiệu thời gian hạn mức tuân theo ký hiệu ngày tiêu chuẩn quốc tế được xác định trong Tiêu chuẩn quốc tế ISO 8601.

Ngày được xác định là năm, tháng và ngày theo định dạng sau: YYYY-MM-DD. Ví dụ: 2015-02-04 đại diện cho ngày 4 tháng 2 năm 2015.

Thời gian trong ngày được xác định là giờ, phút và giây theo định dạng sau: hours:minutes:seconds. Ví dụ: 23:59:59 đại diện cho thời gian 1 giây trước nửa đêm.

Xin lưu ý rằng bạn có thể dùng 2 ký hiệu 00:00:0024:00:00 để phân biệt 2 thời điểm nửa đêm có thể liên kết với một ngày. Do đó, 2015-02-04 24:00:00 có cùng ngày và giờ với 2015-02-05 00:00:00. Ký tự sau thường là ký hiệu ưu tiên.

Nhận chế độ cài đặt hạn mức từ cấu hình sản phẩm API

Bạn có thể đặt hạn mức trong cấu hình sản phẩm API. Những giới hạn đó không tự động thực thi hạn mức. Thay vào đó, bạn có thể tham khảo chế độ cài đặt hạn mức sản phẩm trong chính sách về hạn mức. Dưới đây là một số lợi ích của việc đặt hạn mức cho sản phẩm để tham khảo chính sách hạn mức:

  • Chính sách về hạn mức có thể sử dụng một chế độ cài đặt đồng nhất trên tất cả các proxy API trong sản phẩm API.
  • Bạn có thể thay đổi chế độ cài đặt hạn mức cho một sản phẩm API trong thời gian chạy và thay đổi chính sách hạn mức tham chiếu đến giá trị đó tự động có giá trị hạn mức được cập nhật.

Để biết thêm thông tin về cách sử dụng chế độ cài đặt hạn mức từ một sản phẩm API, hãy xem ví dụ về "Hạn mức động" ở trên..

Để biết thông tin về cách định cấu hình sản phẩm API có giới hạn hạn mức, hãy xem phần Tạo sản phẩm API.

Tham chiếu phần tử

Dưới đây là các phần tử và thuộc tính mà bạn có thể thiết lập trong chính sách này. Xin lưu ý rằng một số tổ hợp phần tử mang tính loại trừ lẫn nhau hoặc không bắt buộc. Hãy xem ví dụ để biết cách sử dụng cụ thể. Theo mặc định, các biến verifyapikey.VerifyAPIKey.apiproduct.* dưới đây có sẵn khi dùng chính sách Xác minh khoá API có tên là "VerifyAPIKey" để kiểm tra khoá API của ứng dụng trong yêu cầu. Giá trị biến được lấy từ chế độ cài đặt hạn mức trên sản phẩm API liên kết với khoá, như mô tả trong phần Cách tải chế độ cài đặt hạn mức từ cấu hình sản phẩm API.

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
   <DisplayName>Quota 3</DisplayName>
   <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
   <Allow>
      <Class ref="request.queryparam.time_variable">
        <Allow class="peak_time" count="5000"/>
        <Allow class="off_peak_time" count="1000"/>
      </Class>
   </Allow>
   <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval> 
   <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
   <StartTime>2017-7-16 12:00:00</StartTime> 
   <Distributed>false</Distributed> 
   <Synchronous>false</Synchronous> 
   <AsynchronousConfiguration> 
      <SyncIntervalInSeconds>20</SyncIntervalInSeconds> 
      <SyncMessageCount>5</SyncMessageCount> 
   </AsynchronousConfiguration> 
   <Identifier/> 
   <MessageWeight/> 
</Quota>

Thuộc tính <Hạn mức>

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">

Sau đây là các thuộc tính dành riêng cho chính sách này.

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
loại

Dùng để xác định thời điểm và cách bộ đếm hạn mức kiểm tra hạn mức sử dụng. Hãy xem phần Các loại chính sách về hạn mức để biết thêm thông tin.

Nếu bạn bỏ qua giá trị type, bộ đếm sẽ bắt đầu ở đầu phút/giờ/ngày/tuần/tháng.

Các giá trị hợp lệ bao gồm:

  • calendar: Định cấu hình hạn mức dựa trên thời gian bắt đầu rõ ràng. Bộ đếm hạn mức cho mỗi ứng dụng sẽ được làm mới dựa trên các giá trị <StartTime>, <Interval><TimeUnit> mà bạn đặt.
  • rollingwindow: Định cấu hình hạn mức sử dụng "cửa sổ cuộn" để xác định mức sử dụng hạn mức. Với rollingwindow, bạn xác định kích thước của cửa sổ bằng các phần tử <Interval><TimeUnit>; ví dụ: 1 ngày. Khi một yêu cầu được gửi đến, Edge sẽ xem xét chính xác thời gian của yêu cầu (chẳng hạn như 5:01 chiều), đếm số lượng yêu cầu trong khoảng thời gian từ thời điểm đó đến 5:01 chiều của ngày hôm trước (1 ngày) và xác định xem đã vượt quá hạn mức trong khoảng thời gian đó hay chưa.
  • flexi: Định cấu hình hạn mức khiến bộ đếm bắt đầu khi ứng dụng nhận được thông báo yêu cầu đầu tiên và đặt lại dựa trên các giá trị <Interval>, <TimeUnit>.
lịch Không bắt buộc

Bảng sau đây mô tả các thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

Nếu muốn, bạn có thể sử dụng phần tử <DisplayName> để gắn nhãn cho chính sách này trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi một chính sách không hoạt động. Đây là hành vi dự kiến đối với hầu hết các chính sách.

Đặt thành true để quá trình thực thi luồng tiếp tục ngay cả khi chính sách không thành công.

false Không bắt buộc
enabled

Đặt thành true để thực thi chính sách.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi chính sách vẫn được đính kèm vào một quy trình.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

Phần tử <DisplayName>

Sử dụng cùng với thuộc tính name để gắn nhãn cho chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên khác theo ngôn ngữ tự nhiên.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, thì giá trị thuộc tính name của chính sách sẽ được sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

Phần tử <Allow>

Chỉ định giới hạn số lượng cho hạn mức. Nếu bộ đếm của chính sách đạt đến giá trị giới hạn này, thì các lệnh gọi tiếp theo sẽ bị từ chối cho đến khi bộ đếm đặt lại.

Dưới đây là 3 cách để đặt phần tử <Allow>:

<Allow count="2000"/> 
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> 
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/> 

Nếu bạn chỉ định cả countcountRef, thì countRef sẽ nhận được mức độ ưu tiên. Nếu countRef không phân giải trong thời gian chạy, thì giá trị của count sẽ được sử dụng.

Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
số lượng

Sử dụng để chỉ định số lượng thư cho hạn mức.

Ví dụ: giá trị thuộc tính count là 100, Interval là 1 và TimeUnit của tháng chỉ định hạn mức là 100 thư mỗi tháng.

2000 Không bắt buộc
countRef

Dùng để chỉ định một biến luồng chứa số lượng thư cho một hạn mức. countRef được ưu tiên hơn so với thuộc tính count.

không có Không bắt buộc

Phần tử <Allow>/<Class>

Phần tử <Class> cho phép bạn điều chỉnh giá trị của phần tử <Allow> dựa trên giá trị của biến luồng. Đối với mỗi thẻ con <Allow> của <Class>, chính sách này sẽ duy trì một bộ đếm khác nhau.

Để sử dụng phần tử <Class>, hãy chỉ định một biến luồng bằng cách sử dụng thuộc tính ref cho thẻ <Class>. Sau đó, Edge sử dụng giá trị của biến luồng để chọn một trong các thẻ con <Allow> nhằm xác định số lượng được phép của chính sách. Edge so khớp giá trị của biến luồng với thuộc tính class của thẻ <Allow>, như minh hoạ dưới đây:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

Trong ví dụ này, bộ đếm hạn mức hiện tại được xác định bằng giá trị của tham số truy vấn time_variable được truyền cùng với mỗi yêu cầu. Biến đó có thể có giá trị là peak_time hoặc off_peak_time. Nếu tham số truy vấn chứa giá trị không hợp lệ, thì chính sách sẽ trả về lỗi vi phạm hạn mức.

Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Không áp dụng

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
giới thiệu

Dùng để chỉ định một biến luồng chứa lớp hạn mức cho một hạn mức.

không có Bắt buộc

Phần tử <Allow>/<Class>/<Allow>

Phần tử <Allow> chỉ định giới hạn của bộ đếm hạn mức do phần tử <Class> xác định. Đối với mỗi thẻ con <Allow> của <Class>, chính sách này sẽ duy trì một bộ đếm khác nhau.

Ví dụ:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

Trong ví dụ này, chính sách Hạn mức duy trì 2 bộ đếm hạn mức có tên là peak_timeoff_peak_time.

Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Không áp dụng

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
lớp

Xác định tên của bộ đếm hạn mức.

không có Bắt buộc
số lượng Chỉ định giới hạn cho bộ đếm. không có Bắt buộc

Phần tử <Interval>

Dùng để chỉ định một số nguyên (ví dụ: 1, 2, 5, 60, v.v.) sẽ được ghép nối với TimeUnit mà bạn chỉ định (phút, giờ, ngày, tuần hoặc tháng) để xác định khoảng thời gian mà Edge tính toán mức sử dụng hạn mức.

Ví dụ: Interval của 24 với TimeUnithour có nghĩa là hạn mức sẽ được tính trong 24 giờ.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Mặc định: không có
Sự hiện diện: Bắt buộc
Loại: Số nguyên

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
giới thiệu

Dùng để chỉ định một biến luồng chứa khoảng thời gian cho một hạn mức. ref được ưu tiên hơn một giá trị khoảng thời gian rõ ràng. Nếu cả tham chiếu và giá trị đều được chỉ định, thì tham chiếu sẽ nhận được mức độ ưu tiên. Nếu ref không phân giải trong thời gian chạy, thì giá trị này sẽ được sử dụng.

không có Không bắt buộc

Phần tử <TimeUnit>

Sử dụng để chỉ định đơn vị thời gian áp dụng cho hạn mức.

Ví dụ: Interval của 24 với TimeUnithour có nghĩa là hạn mức sẽ được tính trong 24 giờ.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Mặc định: không có
Sự hiện diện: Bắt buộc
Loại:

Chuỗi. Chọn minute, hour, day, week hoặc month.

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
giới thiệu Sử dụng để chỉ định một biến luồng chứa đơn vị thời gian cho một hạn mức. ref được ưu tiên hơn giá trị khoảng thời gian rõ ràng. Nếu ref không phân giải trong thời gian chạy, thì giá trị này sẽ được sử dụng. không có Không bắt buộc

Phần tử <StartTime>

Khi bạn đặt type thành calendar,, hệ thống sẽ chỉ định ngày và giờ mà bộ đếm hạn mức sẽ bắt đầu đếm, bất kể ứng dụng có nhận được yêu cầu nào hay không.

Bạn phải cung cấp StartTime rõ ràng khi type được đặt rõ ràng là calendar,, bạn không thể sử dụng tham chiếu đến biến luồng. Nếu bạn chỉ định giá trị StartTime khi không có giá trị type nào được đặt, thì bạn sẽ gặp lỗi.

Ví dụ:

<StartTime>2017-7-16 12:00:00</StartTime>
Mặc định: không có
Sự hiện diện: Bắt buộc khi đặt type thành calendar.
Loại:

Chuỗi ở định dạng ngày và giờ ISO 8601.

Phần tử <Phân phối>

Khi cài đặt Edge, bạn có thể sử dụng một hoặc nhiều Bộ xử lý tin nhắn để xử lý yêu cầu. Đặt phần tử này thành true để chỉ định rằng chính sách nên duy trì một bộ đếm trung tâm và liên tục đồng bộ hoá bộ đếm đó trên mọi Bộ xử lý thông báo. Trình xử lý thông báo có thể ở nhiều khu vực và/hoặc khu vực hỗ trợ hoạt động.

Nếu sử dụng giá trị mặc định là false, thì bạn có thể vượt quá hạn mức vì số lượng của mỗi Bên xử lý thư không được chia sẻ:

<Distributed>true</Distributed>

Để đảm bảo rằng các bộ đếm được đồng bộ hoá và được cập nhật trong mọi yêu cầu, hãy đặt <Distributed><Synchronous> thành true:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
Mặc định: false
Sự hiện diện: Không bắt buộc
Loại: Boolean

Phần tử <Đồng bộ>

Đặt thành true để cập nhật bộ đếm hạn mức phân phối một cách đồng bộ. Điều này có nghĩa là việc cập nhật bộ đếm được thực hiện cùng lúc với hạn mức được kiểm tra theo yêu cầu đối với API. Hãy đặt thành true nếu cần thiết rằng bạn không cho phép bất kỳ lệnh gọi API nào vượt quá hạn mức.

Đặt thành false để cập nhật bộ đếm hạn mức một cách không đồng bộ. Điều này có nghĩa là có thể một số lệnh gọi API vượt quá hạn mức sẽ trải qua, tuỳ thuộc vào thời điểm bộ đếm hạn mức trong kho lưu trữ trung tâm được cập nhật không đồng bộ. Tuy nhiên, bạn sẽ không gặp phải các tác động tiềm ẩn về hiệu suất liên quan đến các bản cập nhật đồng bộ.

Khoảng thời gian mặc định cho việc cập nhật không đồng bộ là 10 giây. Sử dụng phần tử AsynchronousConfiguration để định cấu hình hành vi không đồng bộ này.

<Synchronous>false</Synchronous>
Mặc định: false
Sự hiện diện: Không bắt buộc
Loại: Boolean

Phần tử <không đồng bộ>

Định cấu hình khoảng thời gian đồng bộ hoá giữa các bộ đếm hạn mức được phân phối khi phần tử cấu hình chính sách <Synchronous> không có hoặc được đặt thành false.

Bạn có thể đồng bộ hoá sau một khoảng thời gian hoặc số lượng thông báo, bằng cách sử dụng các phần tử con SyncIntervalInSeconds hoặc SyncMessageCount. Chúng loại trừ lẫn nhau. Ví dụ:

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

hoặc

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
Mặc định: SyncIntervalInSeconds = 10 giây
Sự hiện diện: Không bắt buộc; sẽ bỏ qua khi đặt <Synchronous> thành true.
Loại:

Khu vực khép kín

Phần tử <asyncConfiguration>/<SyncIntervalInSeconds>

Sử dụng thuộc tính này để ghi đè hành vi mặc định, trong đó các bản cập nhật không đồng bộ được thực hiện sau khoảng thời gian 10 giây.

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

Khoảng thời gian đồng bộ hoá phải lớn hơn 10 giây như mô tả trong chủ đề Giới hạn.

Mặc định: 10
Sự hiện diện: Không bắt buộc
Loại:

Số nguyên

Phần tử <không đồng bộ>/<SyncMessageCount>

Chỉ định số lượng yêu cầu trên tất cả các trình xử lý tin nhắn Apigee giữa các lần cập nhật hạn mức.

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

Ví dụ này cho biết rằng hạn mức sẽ được cập nhật sau mỗi 5 yêu cầu trên từng trình xử lý tin nhắn Apigee Edge.

Mặc định: không áp dụng
Sự hiện diện: Không bắt buộc
Loại:

Số nguyên

Phần tử <Identifier>

Sử dụng phần tử <Identifier> để định cấu hình chính sách nhằm tạo các bộ đếm duy nhất dựa trên biến luồng.

Bạn có thể tạo các bộ đếm duy nhất cho các đặc điểm do biến luồng xác định. Ví dụ: bạn có thể sử dụng địa chỉ email của nhà phát triển để ràng buộc hạn mức cho một nhà phát triển cụ thể. Bạn có thể sử dụng nhiều biến để xác định hạn mức, cho dù bạn đang sử dụng biến tuỳ chỉnh hay biến được xác định trước (chẳng hạn như biến có sẵn trong Chính sách xác minh khoá API). Hãy xem thêm bài viết Tài liệu tham khảo về biến.

Nếu bạn không sử dụng phần tử này, thì chính sách sẽ sử dụng một bộ đếm duy nhất được áp dụng cho hạn mức.

Yếu tố này cũng được thảo luận trong bài đăng sau đây trên thẻ Cộng đồng Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại:

Chuỗi

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
giới thiệu

Chỉ định một biến luồng giúp xác định bộ đếm cần sử dụng cho yêu cầu. Giá trị nhận dạng có thể là tiêu đề HTTP, tham số truy vấn, tham số biểu mẫu hoặc nội dung thông báo dành riêng cho từng ứng dụng, người dùng ứng dụng, nhà phát triển ứng dụng, sản phẩm API hoặc đặc điểm khác.

<Identifier> thường dùng để xác định riêng biệt ứng dụng là client_id. client_id là tên khác của khoá API (hoặc khoá người dùng) được tạo cho một ứng dụng khi ứng dụng được đăng ký trong một tổ chức trên Apigee Edge. Bạn có thể sử dụng giá trị nhận dạng này nếu đã bật khoá API hoặc chính sách uỷ quyền OAuth cho API của mình.

Trong một số trường hợp, bạn phải truy xuất chế độ cài đặt Hạn mức khi không có client_id, chẳng hạn như khi không có chính sách bảo mật nào. Trong những trường hợp đó, bạn có thể sử dụng chính sách Thực thể truy cập để truy xuất các chế độ cài đặt thích hợp của sản phẩm API, sau đó trích xuất các giá trị bằng ExtractVariables, sau đó sử dụng biến ngữ cảnh được trích xuất trong chính sách Hạn mức. Để biết thêm thông tin, hãy xem Chính sách về thực thể truy cập.

Không áp dụng Không bắt buộc

Phần tử <MessageWeight>

Sử dụng để chỉ định trọng lượng gán cho mỗi tin nhắn. Sử dụng trọng số của thông báo để tăng tác động của các thông báo yêu cầu, chẳng hạn như sử dụng nhiều tài nguyên điện toán hơn những thông báo khác.

Ví dụ: bạn muốn tính số lượng thông báo POST là "nặng" hoặc tốn kém gấp đôi so với thông báo GET. Do đó, bạn đặt MessageWeight thành 2 cho yêu cầu POST và 1 cho yêu cầu GET. Thậm chí bạn có thể đặt MessageWeight thành 0 để yêu cầu không ảnh hưởng đến bộ đếm. Trong ví dụ này, nếu hạn mức là 10 tin nhắn mỗi phút và MessageWeight cho các yêu cầu POST là 2, thì hạn mức sẽ cho phép 5 yêu cầu POST trong khoảng thời gian 10 phút bất kỳ. Mọi yêu cầu bổ sung, POST hoặc GET, trước khi yêu cầu đặt lại bộ đếm bị từ chối.

Giá trị biểu thị MessageWeight phải được chỉ định bằng một biến luồng và có thể được trích xuất từ các tiêu đề HTTP, tham số truy vấn, tải trọng yêu cầu XML hoặc JSON hoặc bất kỳ biến luồng nào khác. Ví dụ: bạn đặt trong tiêu đề có tên weight:

<MessageWeight ref="message_weight"/>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại:

Số nguyên

Biến luồng

Các biến Luồng (Flow) được xác định trước sau đây sẽ được tự động điền sẵn khi thực thi chính sách Hạn mức. Để biết thêm thông tin về biến Flow, hãy xem bài viết Tài liệu tham khảo về biến.

Biến Loại Quyền Nội dung mô tả
ratelimit.{policy_name}.allowed.count Dài Chỉ có thể đọc Trả về số lượng hạn mức được phép
ratelimit.{policy_name}.used.count Dài Chỉ có thể đọc Trả về hạn mức hiện tại được sử dụng trong một khoảng hạn mức
ratelimit.{policy_name}.available.count Dài Chỉ có thể đọc Trả về số lượng hạn mức hiện có trong khoảng hạn mức
ratelimit.{policy_name}.exceed.count Dài Chỉ có thể đọc Trả về 1 sau khi vượt quá hạn mức.
ratelimit.{policy_name}.total.exceed.count Dài Chỉ có thể đọc Trả về 1 sau khi vượt quá hạn mức.
ratelimit.{policy_name}.expiry.time Dài Chỉ có thể đọc

Trả về thời gian UTC (tính bằng mili giây) xác định thời điểm hạn mức hết hạn và khoảng thời gian hạn mức mới bắt đầu.

Khi loại chính sách Hạn mức là rollingwindow, giá trị này sẽ không hợp lệ vì khoảng thời gian hạn mức không bao giờ hết hạn.

ratelimit.{policy_name}.identifier Chuỗi Chỉ có thể đọc Trả về giá trị tham chiếu giá trị nhận dạng (ứng dụng khách) được đính kèm với chính sách
ratelimit.{policy_name}.class Chuỗi Chỉ có thể đọc Trả về lớp được liên kết với mã nhận dạng ứng dụng khách
ratelimit.{policy_name}.class.allowed.count Dài Chỉ có thể đọc Trả về số lượng hạn mức được phép đã xác định trong lớp
ratelimit.{policy_name}.class.used.count Dài Chỉ có thể đọc Trả về hạn mức đã sử dụng trong một lớp
ratelimit.{policy_name}.class.available.count Dài Chỉ có thể đọc Trả về số lượng hạn mức hiện có trong lớp
ratelimit.{policy_name}.class.exceed.count Dài Chỉ có thể đọc Trả về số lượng yêu cầu vượt quá giới hạn của lớp trong khoảng hạn mức hiện tại
ratelimit.{policy_name}.class.total.exceed.count Dài Chỉ có thể đọc Trả về tổng số yêu cầu vượt quá giới hạn trong lớp trên tất cả các khoảng hạn mức, nên kết quả này là tổng của class.exceed.count cho tất cả các khoảng hạn mức.
ratelimit.{policy_name}.failed Boolean Chỉ có thể đọc

Cho biết liệu chính sách có bị lỗi hay không (đúng hoặc sai).

Tham chiếu lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về, cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi thực thi chính sách.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 Xảy ra nếu phần tử <Interval> không được xác định trong chính sách Hạn mức. Phần tử này là bắt buộc và được dùng để chỉ định khoảng thời gian áp dụng cho hạn mức. Khoảng thời gian có thể là phút, giờ, ngày, tuần hoặc tháng như được xác định bằng phần tử <TimeUnit>.
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 Xảy ra nếu phần tử <TimeUnit> không được xác định trong chính sách Hạn mức. Phần tử này là bắt buộc và được dùng để chỉ định đơn vị thời gian áp dụng cho hạn mức. Khoảng thời gian có thể tính bằng phút, giờ, ngày, tuần hoặc tháng.
policies.ratelimit.InvalidMessageWeight 500 Xảy ra nếu giá trị của phần tử <MessageWeight> được chỉ định thông qua biến luồng không hợp lệ (một giá trị không phải số nguyên).
policies.ratelimit.QuotaViolation 500 Đã vượt quá hạn mức. Không áp dụng

Lỗi triển khai

Tên lỗi Nguyên nhân Khắc phục
InvalidQuotaInterval Nếu khoảng thời gian hạn mức được chỉ định trong phần tử <Interval> không phải là số nguyên, thì sẽ không triển khai được proxy API. Ví dụ: nếu khoảng hạn mức được chỉ định là 0, 1 trong phần tử <Interval>, thì sẽ không triển khai được proxy API.
InvalidQuotaTimeUnit Nếu đơn vị thời gian được chỉ định trong phần tử <TimeUnit> không được hỗ trợ, thì sẽ không triển khai được proxy API. Các đơn vị thời gian được hỗ trợ là minute, hour, day, weekmonth.
InvalidQuotaType Nếu loại hạn mức do thuộc tính type chỉ định trong phần tử <Quota> không hợp lệ, thì tức là không triển khai được proxy API. Các loại hạn mức được hỗ trợ là default, calendar, flexirollingwindow.
InvalidStartTime Nếu định dạng của thời gian được chỉ định trong phần tử <StartTime> không hợp lệ, thì tức là không triển khai được proxy API. Định dạng hợp lệ là yyyy-MM-dd HH:mm:ss, là định dạng ngày và giờ ISO 8601. Ví dụ: nếu thời gian chỉ định trong phần tử <StartTime>7-16-2017 12:00:00, thì sẽ không triển khai được proxy API.
StartTimeNotSupported Nếu bạn chỉ định phần tử <StartTime> có loại hạn mức không phải là loại calendar, thì sẽ không triển khai được proxy API. Phần tử <StartTime> chỉ được hỗ trợ cho loại hạn mức calendar. Ví dụ: nếu bạn đặt thuộc tính type thành flexi hoặc rolling window trong phần tử <Quota>, thì quá trình triển khai proxy API sẽ không thành công.
InvalidTimeUnitForDistributedQuota Nếu bạn đặt phần tử <Distributed> thành true và đặt phần tử <TimeUnit> thành second, thì sẽ không triển khai được proxy API. Đơn vị thời gian second không hợp lệ đối với hạn mức phân phối.
InvalidSynchronizeIntervalForAsyncConfiguration Nếu giá trị được chỉ định cho phần tử <SyncIntervalInSeconds> trong phần tử <AsynchronousConfiguration> của chính sách Hạn mức nhỏ hơn 0, thì quá trình triển khai proxy API sẽ không thành công.
InvalidAsynchronizeConfigurationForSynchronousQuota Nếu bạn đặt giá trị của phần tử <AsynchronousConfiguration> thành true trong chính sách Hạn mức, thì chính sách này cũng có cấu hình không đồng bộ được xác định bằng phần tử <AsynchronousConfiguration>, thì sẽ không triển khai được proxy API.

Biến lỗi

Các biến này được đặt khi chính sách này kích hoạt lỗi. Để biết thêm thông tin, hãy xem Những điều bạn cần biết về lỗi chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi, như liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name Matches "QuotaViolation"
ratelimit.policy_name.failed policy_name là tên của chính sách báo lỗi do người dùng chỉ định. ratelimit.QT-QuotaPolicy.failed = true

Ví dụ về phản hồi lỗi

{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.QuotaViolation"
      },
      "faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default"
   }
}

Ví dụ về quy tắc lỗi

<FaultRules>
    <FaultRule name="Quota Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "QuotaViolation") </Condition>
        </Step>
        <Condition>ratelimit.Quota-1.failed=true</Condition>
    </FaultRule>
</FaultRules>

Giản đồ

Chủ đề có liên quan

Chính sách Đặt lại hạn mức

Chính sách của SpikeArrest

So sánh các chính sách về Hạn mức, Hạn chế tăng đột biến và Giới hạn số lượng yêu cầu đồng thời