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 Hạn chế tăng đột biến giúp ngăn chặn tình trạng lưu lượng truy cập tăng đột biến bằng phần tử <Rate>
. Phần tử này điều tiết số lượng yêu cầu được proxy API xử lý và được gửi đến một phần phụ trợ, giúp bảo vệ chống lại độ trễ về hiệu suất và thời gian ngừng hoạt động.
Phần tử <SpikeArrest>
Xác định chính sách về 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 á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 chính sách Tăng đột biến vào quy trình (flow) 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ụ
Dưới đây là một số ví dụ cho thấy một số cách mà bạn có thể áp dụng chính sách về việc Gia tăng đột biến:
Ví dụ 1
Ví dụ sau đây đặt tốc độ thành 5 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 cho phép mỗi 200 mili giây (1000/5).
Ví dụ 2
Ví dụ sau đây đặt tốc độ thành 12 phút/phút:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Chính sách mẫu này làm mượt tỷ lệ 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ố lượng yêu cầu ở mức 12 yêu cầu mỗi phút (mỗi 5 giây được phép thực hiện một yêu cầu 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>
còn chấp nhận một giá trị tuỳ chỉnh (tiêu đề 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ể. Thao tác này giúp tăng cường kiểm soát việc điều tiết cho 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 một 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 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 ở 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 cho chính sách này bằng một tên khác nghe tự nhiên hơn trong trình chỉnh sửa proxy giao diện người dùng quản lý.
Phần tử <DisplayName>
là phần tử 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 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.
<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 Tăng đột biến dựa trên ứng dụng 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 đó, các yêu cầu của mỗi nhà phát triển sẽ được tính vào tỷ lệ Tăng đột biến của riêng họ chứ không phải tất cả các yêu cầu đến proxy.
Sử dụng kết hợp với phần tử <MessageWeight>
để kiểm soát chi tiết hơn đối với chế độ điều tiết yêu cầu.
Nếu bạn để trống phần tử <Identifier>
, một giới hạn tốc độ sẽ được áp dụng cho tất cả các yêu cầu gửi đến 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 Gia tăng đột biến cho mỗi 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 | Nội dung mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
ref |
Xác định biến mà Spike Arrest dùng để nhóm các yêu cầu đến. Bạn có thể sử dụng biến luồng bất kỳ để chỉ ra một ứng dụng riêng biệt, chẳng hạn như những ứng dụng có sẵn trong chính sáchVerifyAPIKey. 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 á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. Trọng số thông báo sẽ điều chỉnh tác động của một yêu cầu đối với việc tính toán tốc độ bắt giữ tăng đột biến. Trọng số 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 cách sử dụng chính sách JavaScript hoặc chính sách AttributionMessage.
Sử dụng kết hợp với <Identifier>
để điều tiết thêm các yêu cầu của các ứng dụng hoặc ứng dụng cụ thể.
Ví dụ: nếu sự tăng đột biến <Rate>
là 10pm
và một ứng dụng gửi các yêu cầu có trọng số 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 á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ố lượng yêu cầu ở mức 12 yêu cầu mỗi phút (mỗi 5 giây được phép thực hiện một yêu cầu 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ể. Thao tác này giúp tăng cường kiểm soát việc điều tiết cho 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 | Nội dung 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 ứ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 Tài liệu tham khảo về biến luồng. 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 GánMessage. | Bắt buộc | Không áp dụng |
<Rate>
Chỉ định tốc độ để hạn chế mức tăng đột biến (hoặc hàng loạt) lưu lượng truy cập bằng cách đặt số lượng yêu cầu được cho phép tính theo phút hoặc theo 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 suôn sẻ 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 á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á theo một trong những cách sau:
- Tốc độ 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 có thể được ứng dụng truyền; hãy 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>
Các giá trị tỷ lệ hợp lệ (được xác định dưới dạng 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 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 các 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 cho 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 mẫu này làm mượt tỷ lệ 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 | Nội dung mô tả | Sự hiện diện | Mặc định |
---|---|---|---|
ref |
Xác định một biến luồng chỉ định tốc độ. Đâ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ư hoặc 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 luồng.
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 GánMessage. 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 tiêu đề "custom_rate" (tỷ lệ tuỳ chỉnh), thì tốc độ cho proxy API là 1 yêu cầu mỗi phút cho tất cả ứng dụng. Nếu ứng dụng chuyển tiêu đề "custom_rate" (tỷ lệ tuỳ 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ó tiêu đề "custom_rate" được gửi đ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 của bạn cho các Bộ xử lý tin nhắn (MP) khi sử dụng nhóm tự động cấp tài nguyên bổ sung.
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ử này bị bỏ qua trong chính sách của bạn về việc 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 | Nội dung mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
ref |
Xác định biến chứa giá trị <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 Tài liệu tham khảo về biến luồng. 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 GánMessage. |
không áp dụng | Không bắt buộc |
Tác độ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ị của<Rate>
. Khi tệp MP được thêm (hoặc xoá) một cách linh động, hạn mức riêng lẻ về tốc độ tăng đột biến sẽ tăng (hoặc giảm), nhưng giới hạn tổng hợp sẽ vẫn giữ nguyên.false
(đây là giá trị mặc định nếu bị 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 nghị sĩ. Khi thêm (hoặc xoá) MP, mức giới hạn riêng lẻ về tỷ lệ tăng đột biến sẽ không thay đổi, nhưng hạn mức 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 độ thực tế của từng MP:
Giá trị của <UseEffectiveCount> |
||||||
---|---|---|---|---|---|---|
false |
false |
false |
true |
true |
true |
|
Số MP | 8 | 4 | 2 | 8 | 4 | 2 |
Giá trị của <Rate> |
10 | 10 | 10 | 40 | 40 | 40 |
Tốc độ 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, hãy lưu ý rằng khi số lượng MP giảm từ 4 xuống 2 và <UseEffectiveCount>
là false
, thì tỷ lệ 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ẽ tăng từ
10 lên 20 khi số lượng MP giảm từ 4 xuống 2.
Biến luồng
Khi chính sách Bắt giữ tăng đột biến thực thi, biến luồng sau đây sẽ được điền:
Biến | Loại | Quyền | Nội dung mô tả |
---|---|---|---|
ratelimit.policy_name.failed |
Boolean | Chỉ có thể đọc | Cho biết liệu chính sách có bị lỗi hay không (true hoặc
false ). |
Để biết thêm thông tin, hãy xem Tài liệu tham khảo về biến luồng.
Tham chiếu lỗi
Phần này mô tả các mã lỗi và thông báo lỗi được trả về, cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem 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 thực thi chính sách.
Mã lỗi | Trạng thái HTTP | Nguyên nhân | Khắc phục |
---|---|---|---|
policies.ratelimit.FailedToResolveSpikeArrestRate |
500 |
Lỗi này xảy ra nếu không phân giải được tham chiếu đến biến chứa chế độ cài đặt tốc độ trong phần tử <Rate> thành một giá trị trong chính sách Tạm ngưng tăng đột biến. Phần tử này là bắt buộc và được dùng để chỉ định tốc độ bắt giữ tăng đột biến ở 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ệ (một giá trị không phải 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 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 Chính sách về gia tăng đột biến
không phải là số nguyên hoặc nếu tỷ lệ đó không chứa ps hoặc pm làm hậu tố,
thì tức là không triển khai được proxy API. |
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 Những điều bạn cần biết về lỗi chính sách.
Biến | Trong đó | Ví dụ: |
---|---|---|
fault.name="fault_name" |
fault_name là tên của lỗi, như liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. | fault.name Matches "SpikeArrestViolation" |
ratelimit.policy_name.failed |
policy_name là tên của chính sách báo lỗi do người dùng chỉ định. | ratelimit.SA-SpikeArrestPolicy.failed = true |
Ví dụ về phản hồi 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à một 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ề việc vượt quá giới hạn tốc độ do chính sách Hạn mức hoặc Hạn chế 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ộ), hãy đặt thuộc tính features.isHTTPStatusTooManyRequestEnabled
thành false
bằng cách sử dụng API
Cập nhật các 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 có sẵn trên GitHub để bạn tham khảo.
Chủ đề có liên quan
- Chính sách về hạn mức: Chính sách về 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
- Rate-limiting (Giới hạn số lượng yêu cầu) để xem thông tin tổng quan về giới hạn tốc độ
- So sánh chính sách về Hạn mức và SpikeArrest
- Mẫu proxy hoạt động của API