This is an automated email from the ASF dual-hosted git repository.

wangdan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 116f6116 Update the throttling en docs (#107)
116f6116 is described below

commit 116f61164bceecb6e5508b41bedc77212c2445ec
Author: Yingchun Lai <laiyingc...@apache.org>
AuthorDate: Thu Apr 17 11:53:26 2025 +0800

    Update the throttling en docs (#107)
---
 _docs/en/administration/throttling.md | 80 ++++++++++++++++++++++++++++++++++-
 1 file changed, 79 insertions(+), 1 deletion(-)

diff --git a/_docs/en/administration/throttling.md 
b/_docs/en/administration/throttling.md
index a37d0804..11b2b723 100755
--- a/_docs/en/administration/throttling.md
+++ b/_docs/en/administration/throttling.md
@@ -2,4 +2,82 @@
 permalink: administration/throttling
 ---
 
-TRANSLATING
+# Background
+Throttling refers to controlling the speed of read/write requests through 
certain mechanisms.
+
+Why implement throttling? Mainly to reduce cluster pressure and improve 
stability. If write traffic to the cluster is too high, it will consume 
significant system resources (CPU, IO, etc.), affecting read request latency. 
Some services have high requirements for read performance, and without write 
throttling, quality of service cannot be guaranteed.
+
+From the perspective of throttling location, it can be divided into:
+* Client-side throttling: Controls traffic at the source. Advantage is 
avoiding unnecessary network transmission; disadvantage is requiring additional 
client logic and difficulty in precise control due to unpredictable user 
behavior.
+* Server-side throttling: Implements throttling on ReplicaServer nodes. 
Advantage is being transparent to clients with centralized control; 
disadvantage is only being able to throttle by increasing latency or rejecting 
requests, which is less direct and may not avoid unnecessary network 
transmission.
+
+From the granularity perspective, it can be divided into:
+* Table-level throttling: Controls throttling for individual tables with finer 
granularity.
+* Node-level throttling: Implements throttling at the ReplicaServer node level 
without distinguishing specific tables (node-level throttling is not yet 
supported).
+
+# Client-side Throttling
+
+The Java client currently provides throttling tools. See [Java Client 
Documentation#Throttling](/clients/java-client#throttling).
+
+# Server-side Throttling
+
+## Table Write Throttling
+
+Starting from version `v1.11.2`, Pegasus added server-side table-level write 
throttling based on QPS. From version `v1.12.0`, Pegasus added table-level 
throttling based on throughput.
+
+Implementation principle:
+* Users can set `replica.write_throttling` and 
`replica.write_throttling_by_size` environment variables in [Table Environment 
Variables](table-env). `replica.write_throttling` is QPS-based throttling, 
while `replica.write_throttling_by_size` is throughput-based throttling.
+* MetaServer asynchronously notifies all ReplicaServers of the environment 
variables, allowing each replica of the table to obtain them. This process 
typically takes several seconds to tens of seconds, but no more than one minute.
+* After obtaining the environment variables, replicas parse the 
write_throttling configuration and immediately put it into effect.
+
+write_throttling currently supports two operation types:
+* delay: The server does not process requests immediately upon receipt but 
delays them for a period, increasing client-side write latency to indirectly 
achieve throttling.
+* reject: The server does not process requests upon receipt but returns an 
ERR_BUSY error code. The error code can be delayed to increase client-side 
error latency, preventing immediate retries and frequent unnecessary retries.
+
+Environment variable 
`replica.write_throttling`/`replica.write_throttling_by_size` value format:
+```
+{delay_qps_threshold}*delay*{delay_ms},{reject_qps_threshold}*reject*{delay_ms_before_reject}
+```
+Notes:
+* delay_qps_threshold: QPS threshold triggering delay operation. If write 
requests processed within 1 second exceed this value, subsequent requests 
within that second will be delayed.
+* delay_ms: Delay time in milliseconds, must be >=0.
+* reject_qps_threshold: QPS threshold triggering reject operation. If write 
requests processed within 1 second exceed this value, subsequent requests 
within that second will be rejected.
+* delay_ms_before_reject: Delay time before returning error code in 
milliseconds, must be >=0.
+* Both delay and reject configurations can be provided together or separately.
+* If both delay and reject configurations are provided and QPS reaches both 
thresholds, the reject operation will be executed.
+* Table-level throttling is distributed across each partition, so thresholds 
shouldn't be set too small. For example, if table `temp` has 256 partitions 
with the sample throttling parameters below, throttling will trigger when a 
partition's QPS exceeds (1000/256) for delay or (2000/256) for reject. For 
size-based throttling, delay triggers at (10^9/256) bytes/sec and reject at 
(20^9/256) bytes/sec.
+
+**Write throttling configuration example:**
+
+```bash
+$ ./run.sh shell -n {clusterName}
+>>> use temp
+OK
+>>> set_app_envs replica.write_throttling 1000*delay*100,2000*reject*200
+set app envs succeed
+>>> set_app_envs replica.write_throttling_by_size 
1000K*delay*100,2000K*reject*200
+set app envs succeed
+>>> set_app_envs replica.write_throttling_by_size 
1000M*delay*100,2000M*reject*200
+set app envs succeed
+>>> get_app_envs
+[app_envs]
+replica.write_throttling          : 1000*delay*100,2000*reject*200
+replica.write_throttling_by_size  : 1000M*delay*100,2000M*reject*200
+```
+
+## Table Read Throttling
+
+Starting from version `v2.4.x`, server-side read throttling based on QPS was 
added. Read throttling follows the same implementation principle as write 
throttling.
+
+**Read throttling configuration example:**
+
+```shell
+$ ./run.sh shell
+>>> use temp
+OK
+>>> set_app_envs replica.read_throttling 1000*delay*100,2000*reject*200
+set app envs succeed
+>>> get_app_envs
+[app_envs]
+replica.read_throttling           : 1000*delay*100,2000*reject*200
+```


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pegasus.apache.org
For additional commands, e-mail: commits-h...@pegasus.apache.org

Reply via email to