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 |
Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:
Thuộc tính | 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 (Không bắt buộc) Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Hãy đặt thành Đặt thà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 |
<DisplayName> phần tử
Hãy sử dụng cùng với thuộc tính name
để gắn nhãn chính sách trong phần
trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.
<DisplayName>Policy Display Name</DisplayName>
Mặc định |
Không áp dụng Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<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
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 rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách và Xử lý lỗi.
Lỗi thời gian chạy
Những lỗi này có thể xảy ra khi chính sách này thực thi.
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à 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> . |
build |
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à dùng để xác định đơn vị thời gian áp dụng cho hạn mức. Khoảng thời gian
có thể theo phút, giờ, ngày, tuần hoặc tháng. |
build |
policies.ratelimit.InvalidMessageWeight |
500 | Xảy ra nếu giá trị của phần tử <MessageWeight> được chỉ định thông qua một biến luồng
không hợp lệ (giá trị không phải là số nguyên). |
build |
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 hạn mức được chỉ định trong phần tử <Interval> không phải
một số nguyên thì việc triển khai proxy API sẽ không thành công. Ví dụ: nếu khoảng thời gian hạn mức
được chỉ định là 0,1 trong phần tử <Interval> , thì việc triển khai phần tử
Proxy API không thành công.
|
build |
InvalidQuotaTimeUnit |
Nếu đơn vị thời gian đã chỉ định trong phần tử <TimeUnit> không được hỗ trợ,
thì việc triển khai proxy API không thành công. Các đơn vị thời gian được hỗ trợ là minute ,
hour , day , week và month .
|
build |
InvalidQuotaType |
Nếu loại hạn mức do thuộc tính type trong <Quota> chỉ định
không hợp lệ, thì việc triển khai proxy API không thành công. Chiến lược phát hành đĩa đơn
các loại hạn mức được hỗ trợ là default , calendar , flexi và rollingwindow .
|
build |
InvalidStartTime |
Nếu định dạng của thời gian được chỉ định trong phần tử <StartTime> là
không hợp lệ, thì việc triển khai proxy API không thành công. Định dạng hợp lệ là yyyy-MM-dd HH:mm:ss ,
đó là định dạng ngày và giờ ISO 8601. Cho
Ví dụ: nếu thời gian được chỉ định trong phần tử <StartTime> là
7-16-2017 12:00:00 thì việc triển khai proxy API không thành công.
|
build |
StartTimeNotSupported |
Nếu phần tử <StartTime> được chỉ định có loại hạn mức không phải là
calendar , thì việc triển khai proxy API sẽ không thành công. Phần tử <StartTime> là
chỉ được hỗ trợ cho loại hạn mức calendar . Ví dụ: nếu thuộc tính type được đặt
vào flexi hoặc rolling window trong phần tử <Quota> , thì phương thức
không triển khai được proxy API.
|
build |
InvalidTimeUnitForDistributedQuota |
Nếu phần tử <Distributed> được đặt thành true và phần tử <TimeUnit> được đặt thành
second thì không triển khai proxy API được. Đơn vị thời gian second không hợp lệ cho
hạn mức được phân phối. |
build |
InvalidSynchronizeIntervalForAsyncConfiguration |
Nếu giá trị được chỉ định cho phần tử <SyncIntervalInSeconds> trong phần tử
Phần tử <AsynchronousConfiguration> trong chính sách Hạn mức nhỏ hơn 0, thì
không triển khai được proxy API. |
build |
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ì việc này cũng
có cấu hình không đồng bộ được xác định bằng phần tử <AsynchronousConfiguration> , sau đó
không triển khai proxy API được. |
build |
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 bài viết 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ư được 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 do người dùng chỉ định của chính sách gây ra lỗi. | ratelimit.QT-QuotaPolicy.failed = true |
Ví dụ về phản hồi khi gặp 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
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