Difference between revisions of "Apertium-apy/load balancing"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
OrderedDict( |
|||
( |
( |
||
(ServerHost, ServerPort), #('http://localhost/', 2738) |
(ServerHost, ServerPort), #('http://localhost/', 2738) |
||
(AggregateServerScore, { #12.55266488 - Sum of values in following dict (weight them somehow - check numbers to see how) |
(AggregateServerScore, { #12.55266488 - Sum of values in following dict (weight them somehow - check numbers to see how) |
||
'/list.*': MovingAverageResponseTime (how many? - exponential moving average maybe?) |
'/list.*': MovingAverageResponseTime (how many? - exponential moving average maybe?) |
||
'/analyze': MovingAverageResponseTime/ResponseLength, |
'/analyze': MovingAverageResponseTime/ResponseLength, |
||
'/translate': MovingAverageResponseTime/ResponseLength, |
'/translate': MovingAverageResponseTime/ResponseLength, |
||
'/generate': MovingAverageResponseTime/ResponseLength |
'/generate': MovingAverageResponseTime/ResponseLength |
||
} |
} |
||
) ... |
) ... |
||
) |
|||
)</pre> |
|||
The plan for a "Fastest" paradigm load balancer (Random, RoundRobin, and LeastConnections exist; WeightedRandom in dev.) |
The plan for a "Fastest" paradigm load balancer (Random, RoundRobin, and LeastConnections exist; WeightedRandom in dev.) |
||
# On gateway start, call each server's '/list's and initalize the server pool while checking for valid responses |
# On gateway start, call each server's '/list's and initalize the server pool while checking for valid responses - drop any servers that don't respond properly |
||
# For each request, inform the handler on request start and end |
# For each request, inform the handler on request start and end |
||
# If the request is on the list of acceptable benchmark URLs, update the cooresponding moving average and aggregate score, re-sort the serverpool |
# If the request is on the list of acceptable benchmark URLs, update the cooresponding moving average and aggregate score, re-sort the serverpool on aggregate score |
||
# Periodically, call each server's '/list's and drop all existing data (what intervals?) |
# Periodically, call each server's '/list's and drop all existing data (what intervals?) |
||
# When the request handler asks for a server, return the handler which has the LOWEST aggregateServerScore - this will form a negative feedback loop |
# When the request handler asks for a server, return the handler which has the LOWEST aggregateServerScore - this will form a negative feedback loop |
||
Future: integrate least connections and fastest load balancer... maybe even query servers to ask for their current load status |
Future: integrate least connections and fastest load balancer... maybe even query servers to ask for their current load status (is their integrity a concern?) |
||
Notes to self: |
Notes to self: |
Latest revision as of 02:59, 25 December 2013
OrderedDict( ( (ServerHost, ServerPort), #('http://localhost/', 2738) (AggregateServerScore, { #12.55266488 - Sum of values in following dict (weight them somehow - check numbers to see how) '/list.*': MovingAverageResponseTime (how many? - exponential moving average maybe?) '/analyze': MovingAverageResponseTime/ResponseLength, '/translate': MovingAverageResponseTime/ResponseLength, '/generate': MovingAverageResponseTime/ResponseLength } ) ... )
The plan for a "Fastest" paradigm load balancer (Random, RoundRobin, and LeastConnections exist; WeightedRandom in dev.)
- On gateway start, call each server's '/list's and initalize the server pool while checking for valid responses - drop any servers that don't respond properly
- For each request, inform the handler on request start and end
- If the request is on the list of acceptable benchmark URLs, update the cooresponding moving average and aggregate score, re-sort the serverpool on aggregate score
- Periodically, call each server's '/list's and drop all existing data (what intervals?)
- When the request handler asks for a server, return the handler which has the LOWEST aggregateServerScore - this will form a negative feedback loop
Future: integrate least connections and fastest load balancer... maybe even query servers to ask for their current load status (is their integrity a concern?)
Notes to self:
- Ignore requests that response is 4xx HTTP code
- If server returns a 5xx for a '/list' at anytime, float('inf') for that server (effectively remove it from pool), let it only reenter the server pool when periodic testing occurs
- Check if pool is ever empty, if so, raise critical error and return 503 for all requests