Update release notes and documentation for the Throttle Filter

and Adaptive Routing
This commit is contained in:
Niclas Antti 2018-10-05 13:39:11 +03:00
parent 59d45aabb4
commit 9c52ba5c07
4 changed files with 28 additions and 2 deletions

View File

@ -9,6 +9,7 @@
* A Comment filter has been added.
* Services and filters can be created at runtime via the REST API
* Runtime router reconfiguration is now possible
* New Throttle filter that replaces and extends on the limit_queries functionality
* MaxCtrl
* The `create monitor` command now accepts a list of key-value parameters
* The new `drain server` drains the server of connections
@ -20,6 +21,7 @@
* Consistent reads on slaves via MASTER_GTID_WAIT
* Transaction load balancing for normal transactions
* Support for runtime router reconfiguration
* A new load balancing method: ADAPTIVE_ROUTING
* Experimental resultset concatenation router, `cat`
* The schema router is now capable of table family sharding.
* The binlog router can now automatically switch to secondary masters

View File

@ -219,6 +219,10 @@ The `source` parameter can now contain a list of comma separated addresses.
The SchemaRouter is now capable of table family sharding. Please see the
SchemaRouter [documentation](../Routers/SchemaRouter.md) for details.
### Throttle filter
The [throttlefilter](../Filters/Throttle.md) replaces and extends on the limit_queries
functionality of [the Database Firewall filter](../Filters/Database-Firewall-Filter.md).
### Interactive Mode for MaxCtrl
### ReadWriteSplit
@ -258,6 +262,10 @@ transactions (i.e. `START TRANSACTION` or `BEGIN`) are load balanced across
slaves. If the transaction tries to modify a row, it is migrated to the master
and rolled back on the slave.
#### 'Adaptive Routing'
A new load balancing method. Server load conditions are proxied by measuring
query response times for each server.
### MaxCtrl
#### Interactive Mode for MaxCtrl

View File

@ -150,16 +150,26 @@ Where `<criteria>` is one of the following values.
* `LEAST_ROUTER_CONNECTIONS`, the slave with least connections from this service
* `LEAST_BEHIND_MASTER`, the slave with smallest replication lag
* `LEAST_CURRENT_OPERATIONS` (default), the slave with least active operations
* `ADAPTIVE_ROUTING`, based on server average response times. See below.
The `LEAST_GLOBAL_CONNECTIONS` and `LEAST_ROUTER_CONNECTIONS` use the
connections from MariaDB MaxScale to the server, not the amount of connections
reported by the server itself.
`LEAST_BEHIND_MASTER` does not take server weights into account when choosing a
server.
`LEAST_BEHIND_MASTER` and `ADAPTIVE_ROUTING` do not take server weights into account
when choosing a server.
`ADAPTIVE_ROUTING` Measures average server response times. The server averages
are used as proxies of server load conditions. At selection time the averages
are copied and modified to favor faster servers, while at the same time
guaranteeing at lest some traffic to the slowest servers. The server selection
is probabilistic based on roulette wheel selection.
#### Server Weights and `slave_selection_criteria`
NOTE: Server Weights have been deprecated in MaxScale 2.3 and will be removed
at a later time.
The following formula is used to calculate a score for a server when the
`weightby` parameter is defined.

View File

@ -1577,14 +1577,20 @@ void Server::response_time_add(double ave, int num_samples)
int current_max = m_response_time.sample_max();
int new_max {0};
// This server handles more samples than EMA max.
// Increasing max allows all servers to be fairly compared.
if (num_samples >= current_max)
{
new_max = num_samples * drift;
}
// This server is experiencing high load of some kind,
// lower max to give more weight to the samples.
else if (m_response_time.average() / ave > 2)
{
new_max = current_max * 0.5;
}
// Let the max slowly trickle down to keep
// the sample max close to reality.
else
{
new_max = current_max / drift;