id | title | description | sidebar_label | sidebar_position | hide_title | custom_edit_url |
---|---|---|---|---|---|---|
rate-limits |
Rate limits |
Rate limits |
1 |
true |
import ApiLogo from "@theme/ApiLogo"; import SchemaTabs from "@theme/SchemaTabs"; import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; import Export from "@theme/ApiExplorer/Export";
A rate limit restricts the number of requests or actions allowed within a certain timeframe to prevent overuse or abuse. Port enforces multiple rate limits to control extensive usage of Port's API.
Port's rate limits vary based on the API being accessed and may be more lenient for some APIs. Port API's rate limits are enforced at the IP level. The table below shows the rate limit assigned to each API:
Description | Rate limit |
---|---|
Unauthenticated requests | 100 requests per 5 minutes |
Ocean integrations | 20,000 requests per 5 minutes |
External exporters | 15,000 requests per 5 minutes |
IaC integrations and CI/CD actions | 5,000 requests per 5 minutes |
Entity API requests | 5,000 requests per 5 minutes |
All other API requests | 2,500 requests per 5 minutes |
Exponential backoff is a technique used to prevent overwhelming a server with too many requests in a short period of time. It involves progressively increasing the delay between retries when encountering rate limits or server errors.
To implement exponential backoff, you can follow these steps:
- Define a base delay: Start with a small delay, such as 1 second, as the base delay for the first retry.
- Define a maximum number of retries: Determine the maximum number of retries you want to attempt before giving up.
- Implement retry logic: Wrap your API request code in a retry loop that will retry the request if it encounters a rate limit or server error.
- Calculate the delay: Use an exponential function to calculate the delay for each retry. The delay can be calculated using the formula:
delay
=baseDelay
* (2 ^retryCount
), whereretryCount
starts from 0 for the first retry. - Apply the delay: Before each retry, pause the execution of the code for the calculated delay duration.
Here's are examples of how you can implement exponential backoff:
<Tabs groupId="code-examples" defaultValue="python" values={[ {label: "Python", value: "python"}, {label: "Javascript", value: "javascript"}, ]}>
import time
base_delay = 1 # 1 second
max_retries = 5
max_delay = 32
def make_api_request():
# Your API request code goes here
pass
def retry_with_exponential_backoff():
attempt = 0
delay = base_delay
while attempt < max_retries:
try:
result = make_api_request()
return result
except Exception as e:
attempt += 1
if attempt >= max_retries:
raise e
sleep_time = min(delay * (2 ** attempt), max_delay)
print(f"Attempt {attempt} failed. Retrying in {sleep_time:.2f} seconds...")
time.sleep(sleep_time)
raise Exception("All retry attempts failed.")
retry_with_exponential_backoff()
const baseDelay = 1000; // 1 second
const maxRetries = 5;
let retryCount = 0;
function makeApiRequest() {
// Your API request code goes here
}
function retryWithExponentialBackoff() {
if (retryCount < maxRetries) {
const delay = baseDelay * Math.pow(2, retryCount);
setTimeout(() => {
retryCount++;
makeApiRequest();
}, delay);
} else {
console.log('Exceeded maximum retries');
}
}
retryWithExponentialBackoff();
In this example, the makeApiRequest
function represents your actual API request code. The retryWithExponentialBackoff
function is responsible for calculating the delay and retrying the request using exponential backoff. It uses the setTimeout
function to pause the execution for the calculated delay duration. Remember to adjust the baseDelay
and maxRetries
values according to your specific requirements.
Exponential backoff helps to distribute the load on the server and increases the chances of a successful request without exceeding rate limits.