Dynamic Throttling with Bit Rate Throttling
In the latest RTW release of Bit Rate Throttling, we have an amazing feature - dynamic throttling. It can also be looked at as bandwidth splitting. The primary intentions of this post is to serve as an introduction to this feature.
In our earlier releases if we had Bit Rate Throttling enabled, we would just throttle the media/data file at the desired rate. This is very useful, however there are scenarios where you want to use throttling to plan bandwidth better, for example, you want to be able to support more simultaneous downloads. In these scenarios there might be conditions where the load on the server is less. In this situation you may not want to throttle the response or you may want to split the available bandwidth among all active connections at any given point. Dynamic throttling allows you to do this. This feature lets you use all of the availble bandwidth and split is among all active connections. The availble bandwidth needs to be configured in IIS by setting the "Site target throughput rate" setting in Advanced Settings in the UI. As the name suggested this setting is availble at site level or below only.
This can also be set in the config directly (not advised though). Here is an example web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<media>
<bitrateThrottling targetThroughputRateKbps="1000000" />
</media>
</system.webServer>
</configuration>
Dynamic Throttling in simple scenarios
Using Dynamic Throttling with media/data rules
Consider the scenario below:
-
All files being served are .wmv
-
Each file is encoded at 400 Kbps
-
The throttle rate for each wmv is 100% (i.e., 100% of 400 Kbps = 400 Kbps)
-
The site target throughput rate is configured at 1 Gbps
In this case the media throttle rate acts as a minimum required. The availble bandwidth (1 Gbps) will now be distributed evenly among all active connections from a server perspective. For example, if there are 1000 concurrent connections, each will be throttled at 1 Mbps. This will go on till a maximum of 1 Gbps / 400 Kbps = 2500 concurrent connections. Although, here we take an example for media rule, the same is valid for data rule too.
Using Dynamic Throttling with default Throttle rate
The scenario is as under:
-
There are NO media / data rules configured
-
The default throttle rate is configured at 200 Kbps
-
The site target throughput rate is configured at 1 Gbps
In this case the default throttle rate acts as a minimum required. The availble bandwidth (1 Gbps) will now be distributed evenly among all active connections from a server perspective. For example, if there are 1000 concurrent connections, each will get 1 Mbps. This will go on till a maximum of 1 Gbps / 200 Kbps = 5000 concurrent connections.
Dynamic Throttling in advanced scenarios
In the advanced scenario you could have:
-
Two rules - Let us assume media rule for .wmv and data rule for .msi
-
Each rule could have a different throttle rate (e.g., .wmv - 100% (400 Kbps), .msi - 100 Kbps and so on)
In this case, the BRT will compute the throttle rate for each request by splitting the available bandwidth in the ratio of thier configured throttle rates. In the above case, for example the availble bandwidth will be split in the ratio of 4:1 for .wmv:.msi. So in case there are 500 .wmv connections and 500 .msi connections, the .wmv connections wil get 800 Mpbs (1.6 Mbps per connection) and .msi connections will get 200 Mbps (400 Kbps per connection). In this example we took only two possible rules but this logic would apply to any number of rules too.