API Throttling
API throttling is a configurable framework solution for monitoring and regulating the use of finite system resources by Oracle B2C Service applications. In Connect Common Object Model (CCOM) v1.4, API throttling has been implemented only for database connections that are assigned to inbound public API (PAPI) requests.
Using API throttling you can regulate the number of database connections assigned to an inbound PAPI request.
This topic contains the following sections:
Benefits of API Throttling
The benefits of API throttling are as follows:
- Protects application pods: Pods are collections of applications or sites. API throttling prevents one or more applications from monopolizing all available database connections. It helps prevent other applications or the application pod from becoming unresponsive.
- Optimal resource utilization: It improves database throughput by balancing application requests.
- Proactively protects database: It reduces database downtime by preventing the database from being overloaded.
- Flexible setup: The business administrator can configure the API throttling feature to suit the business needs of the organization.
Business Administrator Tasks in Oracle B2C Service
To use the API throttling framework, the business administrator must define the resource pools and applications in the Oracle B2C Service Agent Browser UI in line with the business requirements of the organization. For more information, see Regulating Inbound Public API Traffic.
Resource Pools
A resource pool is a logical collection of applications that give rise to PAPI requests. By default, there is one pool labeled Default
, which can't be deleted.
In addition to the Default
resource pool, the business administrator can create any number of additional resource pools. When creating a new resource pool, the administrator must, in addition to the name of the pool, specify the capacity for the pool. The capacity of the resource pool is a percentage. It indicates the fraction of concurrent database connections available to the throttling framework that you can assign to the pool. The actual number of maximum concurrent database connections that you can assign to the pool is the capacity multiplied by the number of concurrent database connections available to the throttling framework and rounded down to the nearest integer. For example, if the number of concurrent database connections available to the throttling framework is 47 and the capacity of a resource pool is 10, then the maximum number of requests for concurrent database connections for the resource pool is 4.
Note:
The business administrator can't configure the number of concurrent database connections available to the throttling framework. If you want to increase or decrease the number of database connections available to the throttling framework, submit an incident on Oracle Support.Managed Applications
An application is a PAPI request that comes from outside the Oracle B2C Service and is tagged with a specific application code. An application code uniquely identifies the PAPI request type and is set on the header of the incoming request.
The business administrator defines the application codes for the applications and maps them to specific resource pools. If the business administrator doesn't specify the resource pool for an application code then the mapping defaults to the Default
resource pool. An application code has to be unique (case insensitive) and can have a maximum of 20 characters.
Note:
- The application code must be mapped to a resource pool. Otherwise, it's automatically mapped to the
Default
resource pool. - Applications mapped to the
Default
resource pool are always assigned a database connection irrespective of whether the maximum number of concurrent requests or database connections for theDefault
pool have been exceeded or not.
Runtime Behavior
To use API throttling for a CREST PAPI request, you must use the custom OSvC-CREST-Application-Context
HTTP header to specify the application code. The application code that you specify in the request must be defined in Oracle B2C Service. The following example requests the data for the account with ID 2 having valid OSvC-CREST-Application-Context
header value 'ABCD'.
Sample Request
https://mysite.example.com/services/rest/connect/latest/accounts/2
The following table lists the OSvC-CREST-Application-Context
header information:
Header | Value |
---|---|
OSvC-CREST-Application-Context |
ABCD |
Assume that the number of concurrent connections available to the throttling framework is 47. The following setup indicates that a maximum of four concurrent requests or database connections are available for application code 'ABCD' that's mapped to the CREST Request Pool resource pool. Note that if additional application codes are associated with the sample CREST Request Pool below, then the four concurrent requests are shared between all the applications associated with the pool.
The following table contains the application code definition and resource pool mapping as present in Oracle B2C Service Agent Browser UI:
Application Code | Application Name | Resource Pool |
---|---|---|
ABCD |
This is a sample application code for CREST. |
CREST Request Pool |
The following table contains the resource pool definition as present in Oracle B2C Service Agent Browser UI:
Name | Description | Capacity (Percent) | Requests |
---|---|---|---|
CREST Request Pool |
This is a sample resource pool for CREST. |
10 |
4 |
Sample Response
If the number of concurrent requests is less than or equal to four then you get a successful (status 200 OK) response that returns the account information for account ID 2.
{
"id": 2,
"lookupName": "George Hewitt",
"accountHierarchy": {
...
}
If the number of concurrent requests exceeds four then you get a '503 Service Temporarily Unavailable' response. API throttling doesn't allow the request to be assigned a database connection because the resource pool limit of four was exceeded.
{
"type": "https://mysite.example.com/services/rest/connect/exceptions/OSC-CREST-00035",
"title": "Server Busy",
"status": 503,
"detail": "Resource busy, please try again later",
"instance": "https://mysite.example.com/services/rest/connect/latest/accounts/2",
"o:errorCode": "OSC-CREST-00035"
}