Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Chính sách về việc Bắt giữ tăng đột biến bảo vệ khỏi tình trạng lưu lượng truy cập tăng đột biến bằng phần tử <Rate>
. Chiến dịch này
phần tử điều tiết số lượng yêu cầu được một proxy API xử lý và được gửi tới một phần phụ trợ,
giúp bảo vệ chống lại trễ hiệu suất và thời gian ngừng hoạt động.
<SpikeArrest>
phần tử
Xác định Chính sách bắt giữ tăng đột biến.
Giá trị mặc định | Xem tab Chính sách mặc định bên dưới |
Bắt buộc? | Không bắt buộc |
Loại | Phức tạp đối tượng |
Phần tử mẹ | không áp dụng |
Phần tử con |
<Identifier> <MessageWeight> <Rate> (Bắt buộc)<UseEffectiveCount> |
Cú pháp
Phần tử <SpikeArrest>
sử dụng cú pháp sau:
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <DisplayName>display_name</DisplayName> <Properties/> <Identifier ref="flow_variable"/> <MessageWeight ref="flow_variable"/> <Rate ref="flow_variable">rate[pm|ps]</Rate> <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Chính sách mặc định
Ví dụ sau đây cho thấy các chế độ cài đặt mặc định khi bạn thêm một chính sách về việc Bắt giữ tăng đột biến vào trong giao diện người dùng Edge:
<SpikeArrest async="false" continueOnError="false" enabled="true" name="Spike-Arrest-1"> <DisplayName>Spike Arrest-1</DisplayName> <Properties/> <Identifier ref="request.header.some-header-name"/> <MessageWeight ref="request.header.weight"/> <Rate>30ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
Phần tử này có các thuộc tính chung cho tất cả các chính sách:
Thuộc tính | Mặc định | Bắt buộc? | Nội dung mô tả |
---|---|---|---|
name |
Không áp dụng | Bắt buộc |
Tên nội bộ của chính sách. Giá trị của thuộc tính Nếu muốn, hãy sử dụng phần tử |
continueOnError |
sai | Không bắt buộc | Đặt thành "false" để trả về lỗi khi một chính sách không thành cô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" để tiếp tục thực thi luồng ngay cả sau khi chính sách không hoạt động. |
enabled |
true | Không bắt buộc | Đặt thành "true" để thực thi chính sách này. Đặt thành "false" để "tắt" chính sách này. Chính sách sẽ không được thực thi ngay cả khi vẫn được liên kết với một luồng. |
async |
sai | Không được dùng nữa | Thuộc tính này không còn được dùng nữa. |
Ví dụ
Các ví dụ sau đây trình bày một số cách mà bạn có thể sử dụng Chính sách về việc bắt giữ tăng đột biến:
Ví dụ 1
Ví dụ sau đây đặt tốc độ thành 5 lần mỗi giây:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Chính sách này làm mượt tốc độ thành một yêu cầu được phép mỗi 200 mili giây (1000/5).
Ví dụ 2
Ví dụ sau đây đặt tốc độ thành 12 lần/phút:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Chính sách ví dụ này làm mượt tỷ lệ thành một yêu cầu được cho phép mỗi năm giây (60/12).
Ví dụ 3
Ví dụ sau đây giới hạn số yêu cầu thành 12 yêu cầu mỗi phút (cứ năm yêu cầu được phép có một yêu cầu giây hoặc 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
Ngoài ra, phần tử <MessageWeight>
chấp nhận một giá trị tuỳ chỉnh (giá trị
weight
) giúp điều chỉnh trọng số thông báo cho các ứng dụng hoặc ứng dụng cụ thể. Chiến dịch này
cung cấp thêm khả năng kiểm soát cho việc điều tiết đối với các thực thể được xác định bằng
Phần tử <Identifier>
.
Ví dụ 4
Ví dụ sau đây hướng dẫn Spike Arrest tìm kiếm một giá trị thời gian chạy được đặt thông qua
yêu cầu được chuyển vào dưới dạng biến luồng request.header.runtime_rate
:
<SpikeArrest name="Spike-Arrest-1"> <Rate ref="request.header.runtime_rate" /> </SpikeArrest>
Giá trị của biến luồng phải có dạng intpm
hoặc
intps
.
Để thử ví dụ này, hãy thực thi một yêu cầu như sau:
curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'
Tham chiếu phần tử con
Phần này mô tả các phần tử con của <SpikeArrest>
.
<DisplayName>
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ý với một cái tên khác, nghe tự nhiên hơn.
Phần tử <DisplayName>
áp dụng chung cho mọi chính sách.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc. Nếu bạn bỏ qua <DisplayName> , giá trị của
Thuộc tính name của chính sách được dùng |
Loại | Chuỗi |
Phần tử mẹ | <PolicyElement> |
Phần tử con | Không có |
Phần tử <DisplayName>
sử dụng cú pháp sau:
Cú pháp
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Ví dụ:
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Phần tử <DisplayName>
không có thuộc tính hoặc phần tử con.
<Identifier>
Cho phép bạn chọn cách nhóm các yêu cầu để có thể áp dụng chính sách Bắt giữ tăng đột biến dựa trên trên máy khách. Ví dụ: bạn có thể nhóm các yêu cầu theo mã nhà phát triển, trong trường hợp đó, mỗi yêu cầu các yêu cầu của nhà phát triển sẽ được tính vào tỷ lệ Bắt giữ tăng đột biến của chính họ và không phải tất cả các yêu cầu đối với proxy.
Sử dụng cùng với phần tử <MessageWeight>
để chi tiết hơn
quyền kiểm soát đối với việc điều tiết yêu cầu.
Nếu bạn để trống phần tử <Identifier>
, hệ thống sẽ áp dụng một giới hạn tốc độ cho tất cả yêu cầu
vào proxy API đó.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<SpikeArrest>
|
Phần tử con | Không có |
Cú pháp
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Identifier ref="flow_variable"/> </SpikeArrest>
Ví dụ 1
Ví dụ sau đây áp dụng Chính sách bắt giữ tăng đột biến theo mã nhà phát triển:
<SpikeArrest name="Spike-Arrest-1"> <Identifier ref="developer.id"/> <Rate>42pm</Rate/> </SpikeArrest>
Bảng sau đây mô tả các thuộc tính của <Identifier>
:
Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
ref |
Xác định biến mà theo đó Spike Arrest nhóm các yêu cầu đến. Bạn có thể sử dụng bất kỳ biến luồng nào để chỉ ra một ứng dụng duy nhất, chẳng hạn như những ứng dụng có sẵn với Chính sáchVerifyAPIKey. Bạn cũng có thể đặt các biến tuỳ chỉnh bằng cách sử dụng Chính sách JavaScript hoặc chính sách AssignmentMessage. | không áp dụng | Bắt buộ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.
<MessageWeight>
Chỉ định trọng số được xác định cho mỗi thông báo. Thay đổi trọng số thư sửa đổi mức độ tác động về một yêu cầu tính toán Tỷ lệ gia tăng tăng đột biến. Độ đậm của thư có thể là bất kỳ biến luồng, chẳng hạn như tiêu đề HTTP, tham số truy vấn, tham số biểu mẫu hoặc nội dung thư. Bạn cũng có thể sử dụng các biến tùy chỉnh bằng cách sử dụng chính sách JavaScript hoặc Chính sách assignMessage.
Sử dụng cùng với <Identifier>
để điều tiết thêm các yêu cầu bằng cách
ứng dụng khách hoặc ứng dụng cụ thể.
Ví dụ: nếu Spike Bắt giữ <Rate>
là 10pm
và một ứng dụng gửi
các yêu cầu có trọng số là 2
, thì chỉ được phép gửi năm tin nhắn mỗi phút từ
khách hàng đó vì mỗi yêu cầu được tính là 2.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | Số nguyên |
Phần tử mẹ |
<SpikeArrest>
|
Phần tử con | Không có |
Cú pháp
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <MessageWeight ref="flow_variable"/> </SpikeArrest>
Ví dụ 1
Ví dụ sau đây giới hạn số yêu cầu thành 12 yêu cầu mỗi phút (cứ năm yêu cầu được phép có một yêu cầu giây hoặc 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
Trong ví dụ này, <MessageWeight>
chấp nhận một giá trị tuỳ chỉnh (weight
trong yêu cầu) giúp điều chỉnh mức độ tác động của thông báo cho các khách hàng cụ thể. Chiến dịch này
cung cấp thêm khả năng kiểm soát cho việc điều tiết đối với các thực thể được xác định bằng
Phần tử <Identifier>
.
Bảng sau đây mô tả các thuộc tính của <MessageWeight>
:
Thuộc tính | Mô tả | Sự hiện diện | Mặc định |
---|---|---|---|
ref |
Xác định biến luồng chứa trọng số thông báo cho khách hàng cụ thể. Đây có thể là bất kỳ biến luồng nào, chẳng hạn như dưới dạng tham số truy vấn HTTP, tiêu đề hoặc nội dung thư. Để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến luồng. Bạn cũng có thể đặt các biến tuỳ chỉnh bằng cách dùng chính sách JavaScript hoặc chính sách AssignmentMessage. | Bắt buộc | Không áp dụng |
<Rate>
Chỉ định tốc độ giới hạn mức tăng đột biến (hoặc cụm) lưu lượng truy cập bằng cách đặt số lượng
được phép theo khoảng thời gian mỗi phút hoặc mỗi giây. Bạn cũng có thể sử dụng phần tử này trong
kết hợp với <Identifier>
và <MessageWeight>
để
điều tiết trơn tru lưu lượng truy cập trong thời gian chạy bằng cách nhận các giá trị từ ứng dụng.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Bắt buộc |
Loại | Số nguyên |
Phần tử mẹ |
<SpikeArrest>
|
Phần tử con | Không có |
Cú pháp
Bạn có thể chỉ định mức giá bằng một trong những cách sau:
- Tỷ lệ tĩnh mà bạn chỉ định làm phần nội dung của phần tử
<Rate>
- Một giá trị biến mà ứng dụng có thể truyền; xác định
tên của biến luồng bằng thuộc tính
ref
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Rate ref="flow_variable">rate[pm|ps]</Rate> </SpikeArrest>
Giá trị mức phí hợp lệ (được xác định dưới dạng một giá trị biến hoặc nằm trong phần nội dung của phần tử) phải tuân theo định dạng sau:
intps
(số yêu cầu mỗi giây, được thực hiện theo khoảng thời gian mili giây)intpm
(số yêu cầu mỗi phút, được thực hiện theo khoảng thời gian giây)
Giá trị của int phải là một số nguyên dương, khác 0.
Ví dụ 1
Ví dụ sau đây đặt tốc độ thành 5 yêu cầu mỗi giây:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Chính sách này làm mượt tốc độ thành một yêu cầu được phép mỗi 200 mili giây (1000/5).
Ví dụ 2
Ví dụ sau đây đặt tốc độ thành 12 yêu cầu mỗi phút:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Chính sách ví dụ này làm mượt tỷ lệ thành một yêu cầu được cho phép mỗi năm giây (60/12).
Bảng sau đây mô tả các thuộc tính của <Rate>
:
Thuộc tính | Mô tả | Sự hiện diện | Mặc định |
---|---|---|---|
ref |
Xác định một biến luồng chỉ định mức phí. Đây có thể là bất kỳ quy trình nào
biến, chẳng hạn như tham số truy vấn HTTP, tiêu đề, nội dung nội dung thư hay một giá trị
chẳng hạn như KVM. Để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến Flow.
Bạn cũng có thể dùng biến tuỳ chỉnh bằng cách dùng chính sách JavaScript hoặc chính sách AssignmentMessage. Nếu bạn xác định cả Ví dụ: <Rate ref="request.header.custom_rate">1pm</Rate> Trong ví dụ này, nếu ứng dụng không chuyển "custom_rate" thì tiêu đề cho proxy API là 1 yêu cầu mỗi phút cho tất cả ứng dụng. Nếu máy khách truyền "thuế suất_tùy_chỉnh" thì giới hạn tốc độ sẽ trở thành 10 yêu cầu mỗi giây cho tất cả ứng dụng trên proxy — cho đến khi một yêu cầu không có "custom_rate" tiêu đề được gửi. Bạn có thể sử dụng Nếu bạn chỉ định giá trị cho |
Không bắt buộc | không áp dụng |
<UseEffectiveCount>
Phân phối số lượng Tăng đột biến đối với các Bộ xử lý tin nhắn (MP) khi sử dụng phương thức tự động cấp tài nguyên bổ sung nhóm.
Cú pháp
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Ví dụ 1
Ví dụ sau đây đặt <UseEffectiveCount>
thành true:
<SpikeArrest name='Spike-Arrest-1'> <Rate>40ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
Phần tử <UseEffectiveCount>
là không bắt buộc. Giá trị mặc định là false
khi phần tử bị bỏ qua trong chính sách về việc Bắt giữ tăng đột biến.
Giá trị mặc định | Sai |
Bắt buộc? | Không bắt buộc |
Loại | Boolean |
Phần tử mẹ |
<SpikeArrest>
|
Phần tử con | Không có |
Bảng sau đây mô tả các thuộc tính của phần tử <UseEffectiveCount>
:
Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
ref |
Xác định biến chứa giá trị của <UseEffectiveCount> . Thông tin này có thể là
bất kỳ biến luồng nào, chẳng hạn như tham số truy vấn HTTP, tiêu đề hoặc nội dung thư. Để biết thêm
hãy xem Tài liệu tham khảo về biến luồng. Bạn cũng có thể đặt các biến tuỳ chỉnh
bằng cách dùng chính sách JavaScript hoặc chính sách AssignmentMessage. |
không áp dụng | Không bắt buộc |
Hiệu ứng của <UseEffectiveCount>
phụ thuộc vào giá trị của nó:
true
: Giới hạn tốc độ tăng đột biến của MP là<Rate>
chia cho số MP hiện tại trong cùng một nhóm. Giới hạn tổng hợp là giá trị trong tổng số<Rate>
. Khi số lượng MP được thêm vào (hoặc bị xóa) một cách linh động, thì từng mức tăng đột biến giới hạn số lượng yêu cầu sẽ tăng (hoặc giảm) nhưng hạn mức tổng hợp sẽ giữ nguyên.false
(đây là giá trị mặc định nếu bỏ qua): Giới hạn tốc độ tăng đột biến của mỗi MP là chỉ đơn giản là giá trị của<Rate>
. Giới hạn tổng hợp là tổng tỷ lệ của tất cả các MP. Khi thêm (hoặc xóa) các nghị sĩ, thì giới hạn tỷ lệ tăng đột biến riêng lẻ của họ sẽ giữ nguyên, nhưng tổng hạn mức sẽ tăng lên (hoặc giảm).
Bảng sau đây trình bày tác động của <UseEffectiveCount>
đến giới hạn tốc độ hiệu quả của
mỗi MP:
Giá trị của <UseEffectiveCount> |
||||||
---|---|---|---|---|---|---|
false |
false |
false |
true |
true |
true |
|
Số nghị sĩ | 8 | 4 | 2 | 8 | 4 | 2 |
Giá trị của <Rate> |
10 | 10 | 10 | 40 | 40 | 40 |
Tỷ lệ hiệu quả trên mỗi MP | 10 | 10 | 10 | 5 | 10 | 20 |
Giới hạn tổng hợp | 80 | 40 | 20 | 40* | 40* | 40* |
* Tương tự như <Rate> . |
Trong ví dụ này, chú ý rằng khi số MP giảm từ 4 xuống 2 và
<UseEffectiveCount>
là false
, tốc độ hiệu quả trên mỗi MP vẫn giữ nguyên (ở mức
10). Nhưng khi <UseEffectiveCount>
là true
, tỷ lệ hiệu quả trên mỗi MP sẽ thay đổi từ
10 đến 20 khi số lượng MP giảm từ 4 xuống 2.
Biến luồng
Khi thực thi Chính sách về việc giam giữ tăng đột biến, biến luồng sau sẽ được điền sẵn:
Biến | Loại | Quyền | Mô tả |
---|---|---|---|
ratelimit.policy_name.failed |
Boolean | Chỉ có thể đọc | Cho biết chính sách có thành công hay không (true hoặc
false ). |
Để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến Flow.
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 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.FailedToResolveSpikeArrestRate |
500 |
Lỗi này xảy ra nếu tham chiếu đến biến chứa chế độ cài đặt mức giá
trong phần tử <Rate> không thể được giải quyết thành một giá trị trong Spike Arrest
. Phần tử này là bắt buộc và dùng để chỉ định tỷ lệ ngăn chặn tăng đột biến ở
dưới dạng intpm hoặc intps . |
build |
policies.ratelimit.InvalidMessageWeight |
500 |
Lỗi này xảy ra nếu giá trị được chỉ định cho phần tử <MessageWeight> thông qua
biến luồng không hợp lệ (giá trị không phải là số nguyên). |
build |
policies.ratelimit.SpikeArrestViolation |
429 |
Đã vượt quá giới hạn tốc độ. |
Lỗi triển khai
Những lỗi này có thể xảy ra khi bạn triển khai proxy có chứa chính sách này.
Tên lỗi | Nguyên nhân | Khắc phục |
---|---|---|
InvalidAllowedRate |
Nếu tỷ lệ bắt giữ tăng đột biến được chỉ định trong phần tử <Rate> của báo cáo Mức độ bắt giữ tăng đột biến
Chính sách không phải là số nguyên hoặc nếu giá phòng không có hậu tố ps hoặc pm ,
thì việc triển khai proxy API không thành công. |
build |
Biến lỗi
Các biến này được đặt khi xảy ra lỗi thời gian chạy. Để 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 lỗi, như đã nêu trong Bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng mã lỗi. | fault.name Matches "SpikeArrestViolation" |
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.SA-SpikeArrestPolicy.failed = true |
Ví dụ về phản hồi khi gặp lỗi
Dưới đây là ví dụ về phản hồi lỗi:
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.SpikeArrestViolation" }, "faultstring":"Spike arrest violation. Allowed rate : 10ps" } }
Ví dụ về quy tắc lỗi
Dưới đây là ví dụ về quy tắc lỗi để xử lý lỗi SpikeArrestViolation
:
<FaultRules> <FaultRule name="Spike Arrest Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "SpikeArrestViolation") </Condition> </Step> <Condition>ratelimit.Spike-Arrest-1.failed=true</Condition> </FaultRule> </FaultRules>
Mã trạng thái HTTP hiện tại để vượt quá giới hạn tốc độ do chính sách Hạn mức hoặc chính sách Bắt giữ tăng đột biến đặt ra
là 429
(Quá nhiều yêu cầu). Để thay đổi mã trạng thái HTTP thành 500
(Lỗi máy chủ nội bộ), đặt giá trị
từ thuộc tính features.isHTTPStatusTooManyRequestEnabled
đến false
bằng cách sử dụng
API Cập nhật thuộc tính của tổ chức.
Ví dụ:
curl -u email:password -X POST -H "Content-type:application/xml" http://api.enterprise.apigee.com/v1/organizations/myorg -d \ "<Organization type="trial" name="MyOrganization"> <Properties> <Property name="features.isHTTPStatusTooManyRequestEnabled">true</Property> . . . </Properties> </Organization>"
Giản đồ
Mỗi loại chính sách được xác định bằng một giản đồ XML (.xsd
). Giản đồ chính sách để tham khảo
đều có trên GitHub.
Chủ đề có liên quan
- Chính sách về hạn mức: Hạn mức để hạn chế lưu lượng truy cập trên các khách hàng cá nhân
- Giới hạn giá đối với giới hạn số lượng yêu cầu tổng quan
- So sánh Chính sách về hạn mức và SpikeArrest
- Mẫu hoạt động của proxy API