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 Ngăn chặn sự gia tăng đột biến giúp bảo vệ khỏi sự gia tăng đột biến về lưu lượng truy cập bằng phần tử <Rate>
. Phần tử này điều tiết số lượng yêu cầu do proxy API xử lý và gửi đến phần phụ trợ, giúp ngăn chặn tình trạng hiệu suất bị trễ và thời gian ngừng hoạt động.
Phần tử <SpikeArrest>
Xác định chính sách Ngăn chặn sự kiện tăng đột biến.
Giá trị mặc định | Xem thẻ Chính sách mặc định ở bên dưới |
Bắt buộc? | Không bắt buộc |
Loại | Đối tượng phức tạp |
Phần tử mẹ | Không có |
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 chế độ cài đặt mặc định khi bạn thêm chính sách Ngăn chặn sự kiện tăng đột biến vào luồng 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 cho thấy một số cách bạn có thể sử dụng chính sách Chặn sự kiện tăng đột biến:
Ví dụ 1
Ví dụ sau đây đặt tốc độ thành 5 lần/giây:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Chính sách này làm trơn tốc độ để cho phép một yêu cầu mỗi 200 mili giây (1000/5).
Ví dụ 2
Ví dụ sau đây đặt tốc độ thành 300 mỗi phút:
<SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArreast"> <DisplayName>SpikeArreast</DisplayName> <Rate>300pm</Rate> </SpikeArrest>
Tốc độ hiệu quả là 300pm, nghĩa là một mã thông báo mới được thêm vào bộ chứa mỗi 200 mili giây. Kích thước bộ chứa luôn được định cấu hình là 10% của messagesPerPeriod
. Do đó, với messagesPerPeriod
là 300, kích thước bộ chứa là 30 mã thông báo.
Ví dụ 3
Ví dụ sau đây giới hạn số yêu cầu ở mức 12 yêu cầu mỗi phút (một yêu cầu được phép mỗi 5 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 (tiêu đề weight
) để điều chỉnh trọng số thông báo cho các ứng dụng hoặc ứng dụng khách cụ thể. Điều này giúp bạn kiểm soát thêm 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 giá trị thời gian chạy được đặt thông qua yêu cầu được truyền vào dưới dạng biến flow request.header.runtime_rate
:
<SpikeArrest name="Spike-Arrest-1"> <Rate ref="request.header.runtime_rate" /> </SpikeArrest>
Giá trị của biến flow phải ở 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>
Sử dụng cùng với thuộc tính name
để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng một tên khác, nghe tự nhiên hơn.
Phần tử <DisplayName>
là phần tử chung cho tất cả các chính sách.
Giá trị mặc định | Không có |
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 sẽ được sử 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 nào.
<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 Chặn sự kiện tăng đột biến dựa trên ứng dụng. Ví dụ: bạn có thể nhóm các yêu cầu theo mã nhận dạng nhà phát triển. Trong trường hợp này, mỗi yêu cầu của nhà phát triển sẽ được tính vào tỷ lệ chặn sự kiện tăng đột biến của riêng họ chứ không phải tất cả yêu cầu đến proxy.
Sử dụng kết hợp với phần tử <MessageWeight>
để kiểm soát chặt chẽ hơn việc điều tiết yêu cầu.
Nếu bạn để trống phần tử <Identifier>
, hệ thống sẽ thực thi một giới hạn tốc độ cho tất cả các yêu cầu vào proxy API đó.
Giá trị mặc định | Không có |
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 Chặn sự kiện tăng đột biến cho mỗi mã nhận dạng 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à Spike Arrest nhóm các yêu cầu đến. Bạn có thể sử dụng bất kỳ biến flow nào để chỉ báo một ứng dụng khách duy nhất, chẳng hạn như các biến có sẵn trong chính sách VerifyAPIKey. Bạn cũng có thể đặt biến tuỳ chỉnh bằng cách sử dụng chính sách JavaScript hoặc chính sách AssignMessage. | Không có | Bắt buộc |
Phần tử này cũng được thảo luận trong bài đăng sau đây trên 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. Tỷ lệ trọng số của thông báo sẽ sửa đổi mức tác động của một yêu cầu duy nhất đối với việc tính tỷ lệ chặn sự kiện tăng đột biến. Trọng số của thông báo có thể là bất kỳ biến luồng nào, chẳng hạn như tiêu đề HTTP, tham số truy vấn, tham số biểu mẫu hoặc nội dung nội dung thông báo. Bạn cũng có thể sử dụng biến tuỳ chỉnh bằng chính sách JavaScript hoặc chính sách AssignMessage.
Sử dụng kết hợp với <Identifier>
để điều tiết thêm các yêu cầu theo
ứng dụng hoặc ứng dụng cụ thể.
Ví dụ: nếu <Rate>
của tính năng Ngăn chặn sự kiện tăng đột biến là 10pm
và một ứng dụng gửi các yêu cầu có trọng số là 2
, thì ứng dụng đó chỉ được phép gửi 5 thông báo mỗi phút vì mỗi yêu cầu được tính là 2.
Giá trị mặc định | Không có |
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 ở mức 12 yêu cầu mỗi phút (một yêu cầu được phép mỗi 5 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 (tiêu đề weight
trong yêu cầu) để điều chỉnh trọng số thông báo cho các ứng dụng cụ thể. Điều này giúp bạn kiểm soát thêm 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 flow chứa trọng số thông báo cho ứng dụng cụ thể. Đâ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 nội dung thông báo. Để biết thêm thông tin, hãy xem nội dung Tham khảo về biến Flow. Bạn cũng có thể đặt biến tuỳ chỉnh bằng cách sử dụng chính sách JavaScript hoặc chính sách AssignMessage. | 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 sự kiện tăng đột biến) về lưu lượng truy cập bằng cách đặt số lượng yêu cầu được phép trong mỗi phút hoặc mỗi giây. Bạn cũng có thể sử dụng phần tử này cùng với <Identifier>
và <MessageWeight>
để điều tiết lưu lượng truy cập một cách trơn tru trong thời gian chạy bằng cách chấp nhận các giá trị từ ứng dụng.
Giá trị mặc định | Không có |
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 giá theo một trong những cách sau:
- Một tốc độ tĩnh mà bạn chỉ định làm nội dung của phần tử
<Rate>
- Giá trị biến mà ứng dụng khách có thể truyền; xác định tên của biến flow 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ị tỷ lệ hợp lệ (được xác định là giá trị biến hoặc 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 làm mượt thành các khoảng thời gian tính bằng mili giây)intpm
(số yêu cầu mỗi phút, được làm mượt thành khoảng thời gian bằng giây)
Giá trị của int phải là 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 trơn tốc độ để cho phép một yêu cầu mỗi 200 mili giây (1000/5).
Ví dụ 2
Ví dụ sau đây đặt tốc độ là 12 yêu cầu mỗi phút:
<SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArreast"> <DisplayName>SpikeArreast</DisplayName> <Rate>300pm</Rate> </SpikeArrest>
Chính sách mẫu này làm trơn tốc độ để cho phép một yêu cầu mỗi 5 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 flow chỉ định tốc độ. Đây có thể là bất kỳ biến dòng nào, chẳng hạn như tham số truy vấn HTTP, tiêu đề hoặc nội dung nội dung thông báo hoặc một giá trị như KVM. Để biết thêm thông tin, hãy xem phần Tham khảo về biến Flow.
Bạn cũng có thể sử dụng biến tuỳ chỉnh bằng cách sử dụng chính sách JavaScript hoặc chính sách AssignMessage. 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ách không truyền tiêu đề "custom_rate", thì tốc độ của proxy API là 1 yêu cầu mỗi phút cho tất cả ứng dụng khách. Nếu ứng dụng truyền tiêu đề "custom_rate", 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ó tiêu đề "custom_rate" được gửi. Bạn có thể sử dụng Nếu bạn chỉ định một giá trị cho |
Không bắt buộc | Không có |
<UseEffectiveCount>
Phân phối số lượng lượt chặn đột biến trên các Trình xử lý thông báo (MP) khi sử dụng các nhóm tự động mở rộng quy 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à phần tử không bắt buộc. Giá trị mặc định là false
khi phần tử bị bỏ qua khỏi chính sách Chống sự kiện 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> . Đâ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 nội dung thông báo. Để biết thêm thông tin, hãy xem phần Tham khảo về biến Flow. Bạn cũng có thể đặt biến tuỳ chỉnh bằng cách sử dụng chính sách JavaScript hoặc chính sách AssignMessage. |
Không có | Không bắt buộc |
Hiệu ứng của <UseEffectiveCount>
phụ thuộc vào giá trị của thuộc tính này:
true
: Giới hạn tốc độ tăng đột biến của một MP là<Rate>
chia cho số lượng MP hiện tại trong cùng một nhóm. Giới hạn tổng hợp là giá trị của<Rate>
. Khi các MP được thêm (hoặc xoá) một cách linh động, hạn mức tốc độ tăng đột biến riêng lẻ của chúng 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ạn bỏ qua): Giới hạn tốc độ tăng đột biến của mỗi MP chỉ 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 bạn thêm (hoặc xoá) MP, giới hạn tốc độ tăng đột biến riêng lẻ của các MP đó sẽ giữ nguyên, nhưng giới hạn tổng hợp sẽ tăng (hoặc giảm).
Bảng sau đây cho thấy ảnh hưởng của <UseEffectiveCount>
đối với 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ố lượng 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 nghị sĩ | 10 | 10 | 10 | 5 | 10 | 20 |
Hạn mức tổng hợp | 80 | 40 | 20 | 40* | 40* | 40* |
* Tương tự như <Rate> . |
Trong ví dụ này, hãy lưu ý rằng khi số lượng MP giảm từ 4 xuống 2 và <UseEffectiveCount>
là false
, tỷ lệ hiệu quả trên mỗi MP vẫn giữ nguyên (ở mức 10). Tuy nhiên, khi <UseEffectiveCount>
là true
, tỷ lệ hiệu quả trên mỗi MP sẽ tăng từ 10 lên 20 khi số lượng MP giảm từ 4 xuống 2.
Biến flow
Khi chính sách Chặn sự kiện tăng đột biến thực thi, biến flow sau đây sẽ được điề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ất bại hay không (true hoặc false ). |
Để biết thêm thông tin, hãy xem phần 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 cho việc vượt quá giới hạn tốc độ do chính sách Hạn mức hoặc Chặn đột biến đặt 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ộ), hãy đặt thuộc tính features.isHTTPStatusTooManyRequestEnabled
thành false
bằng API
Cập nhật thuộc tính 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 lược đồ XML (.xsd
). Để tham khảo, bạn có thể xem lược đồ chính sách trên GitHub.
Chủ đề có liên quan
- Chính sách hạn mức: Chính sách hạn mức để giới hạn lưu lượng truy cập trên từng ứng dụng
- Giới hạn tốc độ để xem thông tin tổng quan về giới hạn tốc độ
- So sánh chính sách Hạn mức và SpikeArrest
- Mẫu hoạt động của proxy API