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 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 vào proxy API hoặc bạn có thể đặt hạn mức dựa trên:
- Sản phẩm có 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
Đừng sử dụng Hạn mức để tránh tình trạng lưu lượng truy cập tăng đột biến. Để làm được điều đó, hãy sử dụng . Xem video Bị bắt giữSpike .
Video
Những video sau đây giới thiệu cách quản lý hạn mức thông qua chính sách về Hạn mức:
Giới thiệu (Lợi thế mới)
Giới thiệu (Cổ điển)
Hạn mức động
Đã phân phối và Đồng bộ
Trọng số thư
Lịch
Cửa sổ cuốn
Flexi
Hạn mức có điều kiện
Biến luồng
Xử lý lỗi
Mẫu
Các mã mẫu chính sách sau minh hoạ cách bắt đầu và kết thúc khoảng thời gian hạn mức theo:
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 linh độ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 Hạn mức dựa trên thông tin được chuyển đến chính sách Hạn mức. Một thuật ngữ khác của chế độ cài đặt Hạn mức trong ngữ cảnh này là "Gói dịch vụ". Hạn mức động kiểm tra ứng dụng "Gói dịch vụ" sau đó 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ẽ được ưu tiên. Nếu tham chiếu không phân giải được trong thời gian chạy, thì giá trị sẽ là đã sử dụng.
Ví dụ: khi tạo một sản phẩm API, bạn có thể tuỳ ý đặt hạn mức được phép giới hạn, đơn vị thời gian và khoảng thời gian. Tuy nhiên, việc đặt các giá trị này trên sản phẩm API không thực thi việc sử dụng chúng trong proxy API. Bạn cũng phải thêm chính sách Hạn mức vào proxy API mà đọc các giá trị này. Xem bài viết Tạo API sản phẩm để tìm hiểu thêm.
Trong ví dụ trên, proxy API chứa chính sách Hạn mức sử dụng VerifyAPIKey
chính sách có tên verify-api-key
để xác thực khoá API được chuyển trong một yêu cầu. Chiến lược phát hành đĩa đơn
Sau đó, chính sách về hạn mức sẽ truy cập vào các biến luồng từ chính sách VerifyAPIKey để đọc hạn mức
đã đặt trên sản phẩm API. Để biết thêm thông tin về các biến luồng VerifyAPIKey, hãy xem chính sách 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 mỗi nhà phát triển. Trong trường hợp này, bạn đặt thuộc tính tùy chỉnh đối với nhà phát triển có chứa giới hạn, đơn vị thời gian và khoảng thời gian. 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ư dưới đây 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 thiết lập cho nhà phát triển.
Bạn có thể sử dụng bất kỳ biến nào để đặt thông số của chính sách về Hạn mức. Những biến đó có thể đến từ:
- Biến luồng
- Tài sản trên sản phẩm, ứng dụng hoặc nhà phát triển API
- Bản đồ 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 chính sách Hạn mức tham chiếu đến cùng một biến như tất cả các chính sách khác về Hạn mức trong tất cả các proxy khác hoặc chính sách về Hạn mức có thể tham chiếu các biến 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
bất cứ lúc nào. Nếu bạn không cung cấp giá trị <StartTime>
cho một chính sách thuộc loại
calendar
, Edge gặp lỗi.
Bộ đếm hạn mức cho mỗi ứng dụng được làm mới dựa trên <StartTime>
,
Các giá trị <Interval>
và <TimeUnit>
. Để làm việc này
Ví dụ: Hạn mức bắt đầu tính từ 10:30 sáng theo giờ GMT vào ngày 18 tháng 2 năm 2017 và làm mới mỗi
5 giờ. Do đó, lần làm mới tiếp theo là vào lúc 3:30 chiều theo giờ GMT ngày 18 tháng 2 năm 2017.
Bộ đếm quyền truy cập
<Quota name="QuotaPolicy"> <Interval>5</Interval> <TimeUnit>hour</TimeUnit> <Allow count="99"/> </Quota>
Proxy API có quyền truy cập vào các biến luồng được đặt theo chính sách Hạn mức. 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 tiến gần đến giới hạn hạn mức, trả lại bộ đếm hạn mức hiện tại cho một ứng dụng hoặc cho lý do.
Bởi vì việc truy cập vào các biến luồng cho chính sách là dựa trên các chính sách
đối với chính sách ở trên đã đặt tên là QuotaPolicy
, thuộc tính name
truy cập vào các biến luồng trong biểu mẫu:
ratelimit.QuotaPolicy.allowed.count
: Số lượng cho phép.ratelimit.QuotaPolicy.used.count
: Giá trị bộ đếm hiện tại.ratelimit.QuotaPolicy.expiry.time
: Thời gian UTC khi bộ đếm được đặt lại.
Bạn có thể sử dụng nhiều biến luồng khác như mô tả dưới đây.
Ví dụ: bạn có thể sử dụng chính sách AllowedMessage sau đây để trả về các giá trị của Hạn mức biến luồng làm 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>
Hãy 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ẽ được đặ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 cuộc gọi Trước khi hết giờ, 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ẽ được đặt lại thành
0 lúc 2017-07-08 08:00:00
(1 giờ kể từ thời gian bắt đầu). Nếu thông báo đầu tiên là
đã nhận vào 2017-07-08 07:35:28
và số lượng tin nhắn đạt đến 10.000
trước 2017-07-08 08:00:00
, các cuộc gọi vượt quá số lượng đó sẽ bị từ chối cho đến
số lượng sẽ được đặt lại ở đầu giờ.
Thời gian đặt lại bộ đếm dựa trên sự kết hợp giữa <Interval>
và
<TimeUnit>
Ví dụ: nếu bạn đặt <Interval>
thành
12 trong <TimeUnit>
giờ, sau đó bộ đếm sẽ đặt lại 12 giờ một lần.
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ể hãy đặt lớp này trên Proxy PreFlow để được thực thi trên mọi yêu cầu. Hoặc, bạn có thể đặt nó trên nhiều luồng trong proxy API. Nếu bạn sử dụng chính sách này ở nhiều nơi trong proxy, công cụ này sẽ duy trì một bộ đếm duy nhất được cập nhật qua tất cả các phiên bản 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 về hạn mức
duy trì 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 cho proxy API, bất kể
nguồn gốc của một yêu cầu. Ngoài ra, bạn có thể dùng thuộc tính <Identifier>
bằng 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. Theo yêu cầu đến proxy của bạn, ứng dụng khách 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>
. Cho
ví dụ: bạn có thể chỉ định rằng tham số truy vấn có tên id
sẽ chứa thông số duy nhất
giá trị nhận dạng:
<Identifier ref="request.queryparam.id"/>
Nếu bạn sử dụng chính sách VerifyAPIKey để xác thực khoá API hoặc chính sách OAuthV2
với mã thông báo OAuth, bạn có thể sử dụng thông tin trong khoá API hoặc mã thông báo để xác định
cho cùng một chính sách về Hạn mức. Ví dụ: như sau
Thẻ <Identifier>
sử dụng biến luồng client_id
của một
Chính sách VerifyAPIKey có tên là verify-api-key
:
<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>
Mỗi giá trị client_id
riêng biệt hiện xác định bộ đếm riêng trong 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 theo lớp. Trong ví dụ này,
hạn mức được xác định theo giá trị của developer_segment
được chuyển cùng với mỗi yêu cầu. Biến đó có thể có giá trị là platinum
hoặc silver
. Nếu tiêu đề có giá trị không hợp lệ, chính sách sẽ trả về một hạn mức
lỗi vi phạm.
Giới thiệu về chính sách về Hạn mức
Hạn mức là việc phân bổ thông báo yêu cầu mà 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 kiểm đếm số lượng các yêu cầu mà proxy API nhận được. Chức năng này cho phép nhà cung cấp API thực thi các giới hạn về số lệnh gọi API do ứng dụng thực hiện trong một khoảng thời gian. Khi sử dụng chính sách Hạn mức, bạn có thể, đối với ví dụ: giới hạn ứng dụng ở 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 tin nhắn mỗi tháng, thì giới hạn số lượng yêu cầu sẽ bắt đầu sau tin nhắn thứ 10.000. Không quan trọng việc 10.000 tin nhắn có được tính vào ngày đầu tiên hay không ngày hoặc 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 cho đến Bộ đếm hạn mức tự động đặt lại khi hết khoảng thời gian đã chỉ định hoặc cho đến khi Hạn mức được chỉ định rõ ràng đặt lại bằng cách sử dụng tính năng Đặt lại hạn mức .
Một biến thể về Hạn mức có tên là SpikeArrest ngăn chặn việc tăng đột biến (hoặc tăng đột biến) lưu lượng truy cập có thể do việc sử dụng tăng đột ngột, ứng dụng 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, hãy xem Chính sách về chính sách bắt giữ củaSpike.
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 không được dùng chung 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 về Hạn mức hỗ trợ nhiều loại chính sách: mặc định, calendar
,
flexi
và rollingwindow
. Mỗi loại xác định thời điểm bộ đếm hạn mức
thời điểm bắt đầu và thời điểm đặ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 yêu cầu đầu tiên |
giờ | Đầu giờ tiếp theo | Một giờ sau <StartTime> |
Một giờ sau yêu cầu đầu tiên |
ngày | Nửa đêm GMT của ngày hiện tại | 24 giờ sau <StartTime> |
24 giờ sau yêu cầu đầu tiên |
tuần | Nửa đêm Chủ Nhật theo giờ GMT cuối tuần | Một tuần sau <StartTime> |
Một tuần sau yêu cầu đầu tiên |
tháng | Nửa đêm theo giờ GMT của ngày cuối cùng của tháng | Một tháng (28 ngày) sau <StartTime> |
Một tháng (28 ngày) sau yêu cầu đầu tiên |
Đối với type="calendar"
, bạn phải chỉ định giá trị của
<StartTime>
Bảng không liệt kê giá trị cho loại rollingwindow
. Cửa sổ xoay
hạn mức hoạt động bằng cách đặt kích thước của "cửa sổ", chẳng hạn như khoảng thời gian một giờ hoặc một ngày. Khi một
yêu cầu mới đến, chính sách xác định xem bạn đã vượt quá hạn mức trước đó hay chưa
"cửa sổ" thời gian.
Ví dụ: bạn xác định khoảng thời gian 2 giờ cho phép 1.000 yêu cầu. Yêu cầu mới đến lúc 4:45 chiều.Chính sách tính toán số lượng hạn mức cho khoảng thời gian hai giờ qua, là số lượng yêu cầu kể từ 2:45 chiều. Nếu bạn chưa vượt quá hạn mức trong thời hạn 2 giờ, thì yêu cầu sẽ được cho phép.
Một phút sau, lúc 4:46 chiều lại nhận được một yêu cầu khác. Bây giờ, chính sách sẽ tính toán 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 theo mỗi 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 duy trì một bộ đếm duy nhất, bất kể bạn nhập bao nhiêu lần
tham chiếu tệp đó 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 là 5
yêu cầu và đặt nó trên nhiều luồng (Flow A, B và C) trong proxy API. Mặc dù
được sử dụng trong nhiều luồng, nó duy trì một bộ đếm duy nhất được cập nhật bởi tất cả các thực thể của
chính sách của Google:
- Quy trình A được thực thi -> My OutlinePolicy được thực thi và bộ đếm của nó = 1
- Quy trình B được thực thi -> My OutlinePolicy được thực thi và bộ đếm của nó = 2
- Quy trình A được thực thi -> My OutlinePolicy được thực thi và bộ đếm của nó = 3
- Quy trình C được thực thi -> My OutlinePolicy được thực thi và bộ đếm của nó = 4
- Quy trình A được thực thi -> My OutlinePolicy được thực thi và bộ đếm của nó = 5
Yêu cầu tiếp theo của bất kỳ quy trình nào trong 3 quy trình đều bị từ chối vì đã đạt đến bộ đếm hạn mức giới hạn của nó.
Sử dụng cùng một chính sách Hạn mức ở nhiều nơi trong luồng proxy API. Điều này có thể vô tình khiến Hạn mức chạy nhanh hơn dự kiến. Đây là một lỗi phản mẫu được mô tả trong Cuốn sách về hành vi phản mẫu của Apigee Edge.
Ngoài ra, bạn có thể xác định nhiều chính sách Hạn mức trong proxy API và sử dụng một
chính sách trong mỗi luồng. Mỗi chính sách Hạn mức duy trì bộ đếm riêng, dựa trên
thuộc tính name
của chính sách.
Hoặc, 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 riêng biệt trong một chính sách. Bằng cách sử dụng
một chính sách duy nhất có thể duy trì các bộ đếm khác nhau 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ã ứng dụng khách khác, v.v. 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 Hạn mức được đặt theo Thời gian phối hợp Universal Múi giờ (UTC).
Ký hiệu thời gian hạn mức tuân theo ký hiệu ngày theo tiêu chuẩn quốc tế được xác định trong quốc tế Tiêu chuẩn ISO 8601.
Ngày được định nghĩa là năm, tháng và ngày ở đị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 định nghĩa là giờ, phút và giây theo định dạng sau:
hours:minutes:seconds
. Ví dụ: 23:59:59
biểu thị thời gian một
giây trước nửa đêm.
Lưu ý rằng có hai ký hiệu, 00:00:00
và 24:00:00
, có sẵn cho
hãy phân biệt hai thời điểm nửa đêm có thể liên quan đến một ngày. Do đó, 2015-02-04
24:00:00
cùng ngày và giờ với 2015-02-05 00:00:00
. Chính sách thứ hai là
thường là ký hiệu ưu tiên.
Tải chế độ cài đặt hạn mức qua cấu hình sản phẩm API
Bạn có thể đặt giới hạn hạn mức trong cấu hình sản phẩm API. Các 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 hạn mức. Sau đây là một số lợi thế 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:
- Các chính sách về hạn mức có thể sử dụng chế độ cài đặt thố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 trong thời gian chạy đối với sản phẩm API và các chính sách về hạn mức tham chiếu đến giá trị tự động được cập nhật giá trị hạn mức.
Để biết thêm thông tin về cách sử dụng chế độ cài đặt hạn mức của một sản phẩm API, hãy xem bài viết "Hạn mức động" ví dụ trên..
Để biết thông tin về cách định cấu hình các sản phẩm API có giới hạn, hãy xem bài viết Tạo sản phẩm API.
Tham chiếu phần tử
Sau đây là các phần tử và thuộc tính mà bạn có thể thiết lập theo chính sách này. Lưu ý rằng một số phần tử
các tổ hợp loại trừ lẫn nhau hoặc không bắt buộc. Xem các mẫu để biết mức sử dụng cụ thể. Chiến lược phát hành đĩa đơn
verifyapikey.VerifyAPIKey.apiproduct.*
biến bên dưới có sẵn theo mặc định khi
chính sách Xác minh khoá API có tên là "VerifyAPIKey" được dùng để kiểm tra khoá API của ứng dụng trong yêu cầu.
Các giá trị biến được lấy từ chế độ cài đặt hạn mức trên sản phẩm API có liên kết với khoá
như được mô tả trong Lấy chế độ cài đặt hạn mức từ sản phẩm API
cấu hình.
<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>
<Quota> thuộc tính
<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 | 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 mức sử dụng hạn mức. Xem 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ị Các giá trị hợp lệ bao gồm:
|
lịch | Không bắt buộc |
The following table describes attributes that are common to all policy parent elements:
Attribute | Description | Default | Presence |
---|---|---|---|
name |
The internal name of the policy. The value of the Optionally, use the |
N/A | Required |
continueOnError |
Set to Set to |
false | Optional |
enabled |
Set to Set to |
true | Optional |
async |
This attribute is deprecated. |
false | Deprecated |
<DisplayName> element
Use in addition to the name
attribute to label the policy in the
management UI proxy editor with a different, natural-language name.
<DisplayName>Policy Display Name</DisplayName>
Default |
N/A If you omit this element, the value of the policy's |
---|---|
Presence | Optional |
Type | String |
<Allow> phần tử
Xác định giới hạn số lượng cho hạn mức. Nếu thông báo đếm cho chính sách đó đạt đến giới hạn này các lệnh gọi tiếp theo sẽ bị từ chối cho đến khi bộ đếm được đặ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ả count
và countRef
thì countRef
sẽ đượ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 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 | 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 |
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 hạn mức.
|
không có | Không bắt buộc |
<Allow>/<Class> phần tử
Phần tử <Class>
cho phép bạn điều chỉnh giá trị theo điều kiện
của phần tử <Allow>
dựa trên giá trị của biến luồng. Cho
từng thẻ con <Allow>
khác nhau của <Class>
,
chính sách sẽ duy trì một bộ đếm khác.
Để 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 <Allow>
thẻ con nhằm xác định các biến được cho phép
số lượng chính sách. Cạnh khớp với giá trị của biến luồng với 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ó một giá trị
peak_time
hoặc off_peak_time
. Nếu thông số truy vấn chứa thông số 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 | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
tham chiếu |
Dùng để chỉ định một biến luồng chứa lớp hạn mức cho hạn mức. |
không có | Bắt buộc |
<Allow>/<Class>/<Allow> phần tử
Phần tử <Allow>
chỉ định giới hạn cho bộ đếm hạn mức
do phần tử <Class>
xác định. Đối với mỗi
thẻ con <Allow>
khác của <Class>
, thẻ
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 về Hạn mức duy trì hai bộ đếm hạn mức được đặt tên là
về peak_time
và off_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 | 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 |
<Interval> phần tử
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 hàm
TimeUnit
mà bạn chỉ định (phút, giờ, ngày, tuần hoặc tháng) để xác định thời gian
trong đó Edge tính toán mức sử dụng hạn mức.
Ví dụ: Interval
trong 24
có
TimeUnit
là hour
có nghĩa là hạn mức sẽ
được tính trong khoảng thời gian 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 | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
tham chiếu |
Sử dụng để chỉ định một biến luồng có chứa khoảng thời gian cho một
hạn mức. |
không có | Không bắt buộc |
<TimeUnit> phần tử
Dùng để chỉ định đơn vị thời gian áp dụng cho hạn mức.
Ví dụ: Interval
trong 24
có
TimeUnit
là hour
có nghĩa là hạn mức sẽ
được tính trong khoảng thời gian 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 trong số |
Thuộc tính
Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
tham chiếu | Dùng để chỉ định một biến luồng chứa đơn vị thời gian cho hạn mức. ref
được ưu tiên hơn giá trị khoảng thời gian rõ ràng. Nếu ref có
không được 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 |
<StartTime> phần tử
Khi bạn đặt type
thành calendar,
sẽ chỉ định ngày
và thời gian khi bộ đếm hạn mức sẽ bắt đầu được tính, bất kể có yêu cầu nào
nhận được từ bất kỳ ứng dụng nào.
Bạn phải cung cấp StartTime
rõ ràng khi type
được đặt rõ ràng
đối với 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 đặt giá trị type
nào, thì bạn sẽ nhận được
.
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 type được đặt thành calendar . |
Loại: |
Chuỗi trong ISO 8601 ngày và giờ. |
<Đã phân phối> phần tử
Khi cài đặt Edge, bạn có thể dùng một hoặc nhiều Trình xử lý tin nhắn để xử lý yêu cầu. Thiết lập
vào true
để chỉ định rằng chính sách cần duy trì
và liên tục đồng bộ hoá dữ liệu này trên tất cả các Bộ xử lý thư. Trình xử lý tin nhắn
có thể ở nhiều vùng tình trạng còn hàng và/hoặc khu vực.
Nếu sử dụng giá trị mặc định là false
, thì bạn có thể vượt quá hạn mức do
số lượng của mỗi Trình 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ập nhật trên mọi yêu cầu, hãy đặt
<Distributed>
và <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 |
<Synchronous> phần tử
Đặt thành true
để cập nhật bộ đếm hạn mức phân phối một cách đồng bộ. Chiến dịch này
có nghĩa là việc cập nhật bộ đếm được thực hiện cùng lúc hạn mức được kiểm tra đối với một yêu cầu
cho API. Đặt thành true
nếu bạn không cho phép 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ẽ được thực hiện, 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 phải
tác động tiềm ẩn liên quan đến hiệu suất của các bản cập nhật đồng bộ.
Khoảng thời gian mặc định của một lần 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 |
<AsynchronousConfiguration> phần tử
Đị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 chính sách này
phần tử cấu hình <Synchronous>
không hiện diện hoặc hiện diện và đã được đặt
đến false
.
Bạn có thể đồng bộ hoá sau một khoảng thời gian hoặc sau khi đã đếm số thư, sử dụng
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; bị bỏ qua khi đặt <Synchronous> thành
true |
Loại: |
Khu vực khép kín |
<AsynchronousConfiguration>/<SyncIntervalInSeconds> phần tử
Sử dụng phương thức này để ghi đè hành vi mặc định mà trong đó cập nhật không đồng bộ được thực hiện sau khi 10 giây.
<AsynchronousConfiguration> <SyncIntervalInSeconds>20</SyncIntervalInSeconds> </AsynchronousConfiguration>
Khoảng thời gian đồng bộ hoá phải từ 10 giây trở lên theo 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 |
<AsynchronousConfiguration>/<SyncMessageCount> phần tử
Chỉ định số lượng yêu cầu trên tất cả các trình xử lý tin nhắn Apigee trong hạn mức bản cập nhật.
<AsynchronousConfiguration> <SyncMessageCount>5</SyncMessageCount> </AsynchronousConfiguration>
Ví dụ này chỉ định rằng số lượng hạn mức được cập nhật sau mỗi 5 yêu cầu trong mỗi Apigee Trình xử lý tin nhắn cạnh.
Mặc định: | không áp dụng |
Sự hiện diện: | Không bắt buộc |
Loại: |
Số nguyên |
<Identifier> phần tử
Sử dụng phần tử <Identifier>
để định cấu hình chính sách nhằm tạo ra một giá trị duy nhất
bộ đếm dựa trên biến luồng.
Nếu bạn không sử dụng phần tử này, 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 | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
tham chiếu |
Chỉ định một biến luồng xác định bộ đếm để sử dụng cho yêu cầu. Chiến lược phát hành đĩa đơn 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ư riêng biệt với mỗi ứ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 nổi bật.
Trong một số trường hợp, bạn phải truy xuất chế độ cài đặt Hạn mức nếu không có
|
Không áp dụng | Không bắt buộc |
<MessageWeight> phần tử
Dùng để chỉ định trọng số được gán cho mỗi thông báo. Sử dụng độ đậm của thư để tăng mức độ ảnh hưởng của yêu cầu các thông báo tiêu tốn nhiều tài nguyên điện toán hơn các thông báo khác.
Ví dụ: bạn muốn tính thư POST là gấp đôi "nặng" hoặc đắt tiền, như GET
tin nhắn. Do đó, bạn đặt MessageWeight
thành 2 cho một POST và 1 cho một
NHẬN. Bạn thậm chí 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ỳ. Bất kỳ yêu cầu bổ sung nào, POST hay GET,
trước khi bộ đếm đặt lại bị từ chối.
Giá trị biểu thị MessageWeight
phải được chỉ định bằng một luồng
và có thể được trích xuất từ tiêu đề HTTP, tham số truy vấn, yêu cầu XML hoặc JSON
tải trọng hoặc bất kỳ biến luồng nào khác. Ví dụ: bạn đặt giá trị đó 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 Quy trình được xác định trước sau đây sẽ được tự động điền khi áp dụng chính sách về Hạn mức thực thi. Để biết thêm thông tin về Biến luồng, hãy xem Tài liệu tham khảo về biến.
Biến | Loại | Quyền | 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 thời gian hạn mức |
ratelimit.{policy_name}.available.count | Dài | Chỉ có thể đọc | Trả về số lượng hạn mức có sẵn trong khoảng thời gian 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. Thời gian này sẽ xác định thời điểm hạn mức hết hạn và thời gian mới khoảng thời gian hạn mức. Khi loại chính sách Hạn mức là |
giới hạn tỷ lệ.{policy_name}.identifier | Chuỗi | Chỉ có thể đọc | Trả về tệp tham chiếu giá trị nhận dạng (khách hàng) đính kèm với chính sách |
giới hạn tỷ lệ.{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 cho 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 trong lớp trong khoảng thời gian 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ả
khoảng thời gian hạn mức, nên đây là tổng của class.exceed.count với tất cả
khoảng thời gian hạn mức. |
giới hạn tỷ lệ.{policy_name}.failed | Boolean | Chỉ có thể đọc |
Cho biết chính sách có lỗi (true hay false). |
Tham chiếu lỗi
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
policies.ratelimit.FailedToResolveQuotaIntervalReference |
500 | Occurs if the <Interval> element is not defined within the Quota policy. This element
is mandatory and used to specify the interval of time applicable to the quota. The time interval
can be minutes, hours, days, weeks, or months as defined with the <TimeUnit> element. |
build |
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference |
500 | Occurs if the <TimeUnit> element is not defined within the Quota policy. This element
is mandatory and used to specify the unit of time applicable to the quota. The time interval
can be in minutes, hours, days, weeks, or months. |
build |
policies.ratelimit.InvalidMessageWeight |
500 | Occurs if the value of the <MessageWeight> element specified through a flow variable
is invalid (a non-integer value). |
build |
policies.ratelimit.QuotaViolation |
500 | The quota limit was exceeded. | N/A |
Deployment errors
Error name | Cause | Fix |
---|---|---|
InvalidQuotaInterval |
If the quota interval specified in the <Interval> element is not
an integer, then the deployment of the API proxy fails. For example, if the quota interval
specified is 0.1 in the <Interval> element, then the deployment of the
API proxy fails.
|
build |
InvalidQuotaTimeUnit |
If the time unit specified in the <TimeUnit> element is unsupported,
then the deployment of the API proxy fails. The supported time units are minute ,
hour , day , week , and month .
|
build |
InvalidQuotaType |
If the type of the quota specified by the type attribute in the <Quota>
element is invalid, then the deployment of the API proxy fails. The
supported quota types are default , calendar , flexi , and rollingwindow .
|
build |
InvalidStartTime |
If the format of the time specified in the <StartTime> element is
invalid, then the deployment of the API proxy fails. The valid format is yyyy-MM-dd HH:mm:ss ,
which is the ISO 8601 date and time format. For
example, if the time specified in the <StartTime> element is
7-16-2017 12:00:00 then the deployment of the API proxy fails.
|
build |
StartTimeNotSupported |
If the <StartTime> element is specified whose quota type is not
calendar type, then the deployment of the API proxy fails. The <StartTime> element is
supported only for the calendar quota type. For example, if the type attribute is set
to flexi or rolling window in the <Quota> element, then the
deployment of the API proxy fails.
|
build |
InvalidTimeUnitForDistributedQuota |
If the <Distributed> element is set to true and the <TimeUnit> element is set to
second then the deployment of the API proxy fails. The timeunit second is invalid for
a distributed quota. |
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
If the value specified for the <SyncIntervalInSeconds> element within the
<AsynchronousConfiguration> element in a Quota policy is less than zero, then the
deployment of the API proxy fails. |
build |
InvalidAsynchronizeConfigurationForSynchronousQuota |
If the value of the <AsynchronousConfiguration> element is set to true in a Quota policy, which also
has asynchronous configuration defined using the <AsynchronousConfiguration> element, then
the deployment of the API proxy fails. |
build |
Fault variables
These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "QuotaViolation" |
ratelimit.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | ratelimit.QT-QuotaPolicy.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.QuotaViolation" }, "faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default" } }
Example fault rule
<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
SpikeArrest chính sách của Google
So sánh Các chính sách về hạn mức, việc tăng đột biến và giới hạn số lần yêu cầu đồng thời