From 46b98a5e20d9692ed18f7b8f2b8d70820db0790b Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Tue, 12 Jul 2022 02:26:44 -0700 Subject: [PATCH 1/4] Notes on Load Balancer --- design/LoadBalancing/LoadBalancing.md | 221 +++++++++++++++++++++++++ design/LoadBalancing/LoadBalancing.pdf | Bin 0 -> 103993 bytes 2 files changed, 221 insertions(+) create mode 100644 design/LoadBalancing/LoadBalancing.md create mode 100644 design/LoadBalancing/LoadBalancing.pdf diff --git a/design/LoadBalancing/LoadBalancing.md b/design/LoadBalancing/LoadBalancing.md new file mode 100644 index 0000000000..3e809c2e88 --- /dev/null +++ b/design/LoadBalancing/LoadBalancing.md @@ -0,0 +1,221 @@ +# Load Balancing in FoundationDB + +In FoundationDB, often multiple *interface*s are available for the same type of *request*s. A load balancer can be used to distribute the requests to those interfaces, while awaring the possible failures. + +Two load balancer are provided: `basicLoadBalance` and `loadBalance`, both defined in `LoadBalance.actor.h`. The `basicLoadBalance` is a simple + +## `basicLoadBalance` + +`basicLoadBalance` implements a simple load balancing algorithm. It applies to + +* Commit proxy interface +* GetReadVersion proxy interface +* ConfigFollower interface + +The interface is assumed to be always *fresh*, i.e. the list of the servers is fixed. + +```mermaid +graph LR + H0{Has alternatives?} + H1[Pick up an alternative] + H2[Backoff] + H3[Request] + H4([Reply]) + H5([Error]) + H6([Never]) + H((Start)) --> H0 + H0 --No--> H6 + H0 --Yes--> H1 + H1 --No healthy alternatives--> H2 --> H1 + H1 --Has alternative--> H3 --Success--> H4 + H3 --Exception--> H5 + H3 --Broken Promise --> H2 +``` + +### Alternative pick up algorithm + +In `basicLoadBalance`, a *best* alternative is picked up and used at the beginning. At this stage, this alternative is randomly picked up among all alternatives. If the best alternative does not work, it will iteratively try other interfaces, see [here](#picking-up-an-alternative-in-basic-load-balancing-algorithm). + +## `loadBalance` + +`loadBalance` provides a more sophisticated implementation of load balancing. In addition of the basic load balancing, it also provides a variety of features, such like + +* Support for Test Storage Server ([TSS](https://github.com/apple/foundationdb/blob/main/documentation/sphinx/source/tss.rst)) +* Distance-based candidate election +* Able to handle timeouts and exceptions with retries +* etc. + +Currently it is used for + +* Storage Server interface +* BlobWorker interface + + + +```mermaid +graph LR + H((Start)) + H0{Has alternatives?} + H1[Choose initial candidates] + H4([Never]) + H5[Pick up an alternative] + H6[Send request] + H7[Wait for available alternative] + H8([Response]) + H9([All alternatives failed]) + + H --> H0 --No--> H4 + H0 --Yes--> H1 + H1 --> H5 + H5 --Has alternative--> H6 + H5 --No alternative-->H7 + H6 --Success--> H8 + H6 --Failure--> H5 + H7 --At least one alternative--> H5 + H7 --> H9 +``` + +Note: + +* Response could be an exception, e.g. `process_behind` or `request_maybe_delivered`, and will be delivered as `Error` to the caller. + +### Choose initial candidates + +Two initial candidates will be picked up before the requests start. They will be selected as the first two alternatives for the load balancer. If both of them failed, other alternatives are used in a round-robin way. + +#### No `QueueModel` + +If no `QueueModel` is provided, the initial candidates are picked up randomly. The first candidate, or the *best* alternative, will always be one of local workers. + +#### With `QueueModel` + +`QueueModel` holds information about each candidate related to future version, latency and penalty. + +* If the storage server is returning a future version error, it is marked as not available until some certain time. +* Penalty is reported by storage server in each response (see `storageserver.actor.cpp:StorageServer::getPenalty`). It is determined by the write queue length and the version lagging. + +If `QueueModel` exists, the candidates will be picked base on the penalty. Workers with high penalties will be avoided when picking up the first two candidates. + +### Pick up an alternative + +As mentioned above, the alternatives are chosen in the round-robin way when the first two candidates failed. + +If all alternatives failed, a flag is set, so if the next request fails with `process_behind`, the caller will receive the `process_behind` error. + +### Send requests to workers + +Here it is assumed that there are at least one alternative available. + +```mermaid +graph LR + H((start)) + H0{Is first request} + H1[Send first request] + H2([Response]) + H3[Pick up next alternative] + H4[Send additional request] + + H --> H3 + H3 -->H0 + H0 --Yes--> H1 + H1 --Success--> H2 + H1 --Timeout--> H3 + H0 --No--> H4 + H4 --First request succeed--> H2 + H4 --Second request succeed--> H2 + H4 --Additional request failed--> H3 +``` + +If the first request failed, it is reset and the next request will be considered as the first request. Certain types of errors can also be returned as response, e.g. `request_may_be_delivered` or `process_behind`, which may not trigger a load-balancer retry. + +### Wait for available alternative + +When there is no alternatives available, the load balancer may wait until at least one interface is up. + +```mermaid +graph LR + H0((start)) + H1{Is first request in-flight} + H2[Wait for the first request] + H3([Response]) + H4([Retry]) + H5[Wait for alternatives] + H6([all_alternatives_failed]) + + H0 --> H1 + H1 --Yes--> H2 + H1 --No--> H5 + H5 --Timeout-->H6 + H5 --Success-->H4 + H2 --Success-->H3 + H2 --Failed-->H4 +``` + +Note that "Wait for alternatives" will only timeout if the alternatives are not always fresh, i.e. this only happens when accessing storage servers. + +#### Requests + +Original requests in `loadBalancer` are wrapped by `LoadBalance.actor.h:RequestData`. It provides the following additional operations besides the original `flow` request: + +* TSS support if `QueueModel` is available +* Translate some errors into `maybe_delivered`, `process_behind` or retries +* Update the `QueueModel` information including latency, penalty, etc. + +## Appendix + +### Picking up an alternative in load balancing algorithm + +The following script simulates the alternative picking up algorithm. The chosen alternatives will be printed out one-by-one. + +```python +#! /usr/bin/env python3 + +import random +import time + + +class Alternatives: + + def __init__(self, num_alternatives): + self._size = num_alternatives + + def size(self): + return self._size + + def get_best(self): + return random.randint(0, self._size - 1) + + +# Entry +NUM_ALTERNATIVES = 10 +alts = Alternatives(NUM_ALTERNATIVES) + +best_alt = alts.get_best() +next_alt = random.randint(0, alts.size() - 2) +if next_alt >= best_alt: + next_alt += 1 +start_alt = next_alt +start_distance = (best_alt + alts.size() - start_alt) % alts.size() +use_alt = None + +print("best_alt = {}".format(best_alt)) +print("start_alt = {}".format(start_alt)) +print("start_distance = {}".format(start_distance)) + +while True: + for alt_num in range(0, alts.size()): + use_alt = next_alt + if next_alt == start_alt: + print(" Going back to the start_alt") + use_alt = best_alt + elif (next_alt + alts.size() - start_alt) % alts.size() <= start_distance: + print(" Entering start_distance") + use_alt = (next_alt + alts.size() - 1) % alts.size() + + print("Attempting alt: {}".format(use_alt)) + + # Next loop + next_alt = (next_alt + 1) % alts.size() + time.sleep(.2) +``` + diff --git a/design/LoadBalancing/LoadBalancing.pdf b/design/LoadBalancing/LoadBalancing.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a0ef91dbd7bd1cd117e72653c0016cc5b322ae69 GIT binary patch literal 103993 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 z z!UAc&6<>NiA|}$+zd_~+9tht_qaf+sTbFU-(M zQ4<(%(IzotAcz71autGXYhlE&h=gM1(;GA07a9ZO7HNay%P(G@d;`GZBNP;pSqfD- zRE1bWM;~$SJA#NqC3ccOTXx`m%P34lD2%127#mhAPD$^hH-9;?KIP_g+-loFdgprL zaiVkLYZ7R?W!C^-6*!YEjx)pVLd2?=O7zu%g|S~{%c`GeSg8Z!IYq%GjZeZ!e|LZG zR?P)+9~uQqJX>9w4e8er%a3$sDD~-{p1HwfvQhkjH6@BTb+= zvP1=-?ABt{^IgX=8(42i>QQ|mvVf@NHX`lIz}?NJz7yWyx`3#zPEc=Ux4&M9>zn6? z!HQZgfemN8t5TTouqr_`kljqnnY)htIR?#|3}#6)c?$EE?6gI~j2N&v#(05BULnnO zGeox>p_<*zZQMcI>y*P5Z43oyi)}nQo(Ft}9KO{Ek!LNeFz%Bl?&j1l%}dYaD;-nw z5~E$*LzajhOrx@MC91Ge>b(Xo? zJM-W0k`X;ehD6xKJ5sF;jt^8P6z|Va4}=l#KP193tZ42awYe0=AH~%dn~T0UWO2pX z1I3jPe*{?D5H%zu@KYf@h{n;FdzkYs5(!Vlur06^F^;n>gh`QA$z)=KJjeQrv2ruJ z#q5h{7dO;#DZ56CQ*K8cN-tRejA8^diw(rJ2|KHb44#EujM2}JPGL@WbPj1w?R@4g z*e6}XOxJupEbCJJ0=QZm|4kP<^$Rze`UeU8g1tu8o-WuY5<^w^$ z&=7uPTaQC-6M!_D7X2O9WIRO5<{@NjJ}~%|9u~vAvxvzIsnPL9?mnJZOvOuQEH$A9hpQ zA6I=9ymk{0`N8aN*p8e)*ZtWJ^359Ott1DnJ0UDlW;zHfa*n2Af+p-1azrvLS{1br zIJcHO?L@JM<=)=z`#IXpy~rEHjB%V~L~UVNGX;ehTLI1e`f}Q+bbT?^rmW^U%#F#6 z*Ctv^XD6{$+Iwy20cCY{7`svVu(g!SxM~6w96P$^5Rttb=BGVfCE`mV3XlhjOZ~cB zzI-9XDhu4}2Ret&^0coG2CX6Yijm7p?d?lkV=Jz_`bt*b+n%~~4qn{NOIMODBm45Imb`a9<-Wmy*eh(GV7b5U1B&rKF zU1`aut~tK$3j zJ=m_lFiLN+eB(om>kR7Kd1MWF`{{;&n+wv5M=$?k;CXmo61Y9bT{t1fU%kAZgiwj( z9@B)JpA|R^V~aPBZ8g0#!g<&X^c*E3xBomvp1Z>F?C^%|@KH5lH%8#uNM;x6NM<+A zNXd6FiBtak3MJ(BU%p9xOm9xentKgYhRKQcwSe*#@Jh)H&w|kIrOZKceDW3Vga5UB z%K_9tL)NzLGY;W&2@k?AfNaDmQvWv)RhtYnp)Jqy@N?=#cySHb`NPyjGzkWdKl{dq z@0T6;DW?M+Q%*etaxRp(s+Cd$<|E>VJ#Xg)Y5h!+EMQiM_{&BD3JbilBR40;Sys%kN-kIMT zS!dQul4IelL_%Lx)U2CZ;+vho%8GQjNMU3ZC+<`}4|GHl)R<8RsBIy;5jln)m#+iSΝP4`4kR&7xltB2}bW?JIDDTpJ-`a;61CQ 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 Date: Thu, 14 Jul 2022 11:26:55 -0700 Subject: [PATCH 2/4] Update design/LoadBalancing/LoadBalancing.md Co-authored-by: Zhe Wu --- design/LoadBalancing/LoadBalancing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/design/LoadBalancing/LoadBalancing.md b/design/LoadBalancing/LoadBalancing.md index 3e809c2e88..262f4bc36c 100644 --- a/design/LoadBalancing/LoadBalancing.md +++ b/design/LoadBalancing/LoadBalancing.md @@ -38,7 +38,7 @@ In `basicLoadBalance`, a *best* alternative is picked up and used at the beginni ## `loadBalance` -`loadBalance` provides a more sophisticated implementation of load balancing. In addition of the basic load balancing, it also provides a variety of features, such like +`loadBalance` provides a more sophisticated implementation of load balancing. In addition to the basic load balancing, it also provides a variety of features, such as * Support for Test Storage Server ([TSS](https://github.com/apple/foundationdb/blob/main/documentation/sphinx/source/tss.rst)) * Distance-based candidate election From 6e7716d078b3cd06597a0603706f1df3ef779b3a Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Thu, 14 Jul 2022 11:42:20 -0700 Subject: [PATCH 3/4] Update design/LoadBalancing/LoadBalancing.md Co-authored-by: Zhe Wu --- design/LoadBalancing/LoadBalancing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/design/LoadBalancing/LoadBalancing.md b/design/LoadBalancing/LoadBalancing.md index 262f4bc36c..2adf29cd5b 100644 --- a/design/LoadBalancing/LoadBalancing.md +++ b/design/LoadBalancing/LoadBalancing.md @@ -104,7 +104,7 @@ If all alternatives failed, a flag is set, so if the next request fails with `pr ### Send requests to workers -Here it is assumed that there are at least one alternative available. +Here it is assumed that there is at least one alternative available. ```mermaid graph LR From bb05c83e196b2ad4bcbebaec622df84dd94954b5 Mon Sep 17 00:00:00 2001 From: Xiaoge Su Date: Fri, 15 Jul 2022 17:21:41 -0700 Subject: [PATCH 4/4] fixup! Update documentation per comments --- design/LoadBalancing/LoadBalancing.md | 58 +++++++++++++++------------ 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/design/LoadBalancing/LoadBalancing.md b/design/LoadBalancing/LoadBalancing.md index 2adf29cd5b..5100437825 100644 --- a/design/LoadBalancing/LoadBalancing.md +++ b/design/LoadBalancing/LoadBalancing.md @@ -1,8 +1,16 @@ # Load Balancing in FoundationDB -In FoundationDB, often multiple *interface*s are available for the same type of *request*s. A load balancer can be used to distribute the requests to those interfaces, while awaring the possible failures. +## Introduction -Two load balancer are provided: `basicLoadBalance` and `loadBalance`, both defined in `LoadBalance.actor.h`. The `basicLoadBalance` is a simple +FoundationDB is a distributed key-value database. A FoundationDB cluster is constituted by one or more processes over one or more physical machines, where each process is a *worker* and takes certain *role*s, such as coordinator, proxy, TLog, storage server, etc., in the system. + +The interpocess communications (IPC) between the processes are supported by the [`flow`](https://github.com/apple/foundationdb/tree/main/flow) infrastructure. In the `flow` context, each process will expose one or more *interface*(s). Each interface is able to accept given type of *request*s, and *reply* `Void`, requested data or error. The interfaces and the corresponding request/reply pairs forms the IPC protocol of FoundationDB. + +In many cases, the same request can be proceed by multiple processes, e.g. all commit proxies can accept commit requests, and multiple storage server processes can provide values for a given key in double/triple redundancy mode. A load balancer (LB) can be used to distribute the requests over the possible interfaces, preventing one or a few processes getting overloaded. The interface candidates are also referred as *alternative*s. The LB is also able to react when one or more interfaces are (temporarily) unavailable by retrying, or re-routing the request to other candidates. The interface candidates are also known as *alternative*s. + +Two LBs are provided in FoundationDB: `basicLoadBalance` and `loadBalance`, both defined in [`LoadBalance.actor.h`](https://github.com/apple/foundationdb/blob/main/fdbrpc/include/fdbrpc/LoadBalance.actor.h). The `basicLoadBalance` is a simple load balancer which each interface is equally chosen; while the `loadBalance` accepts a model object, which provides [datacenter](https://apple.github.io/foundationdb/configuration.html#configuring-regions) (DC) awaring balancing algorithms, allowing requests being sent to interfaces in the same DC. + +In the following sections, the two LBs will be discussed in details. ## `basicLoadBalance` @@ -12,12 +20,12 @@ Two load balancer are provided: `basicLoadBalance` and `loadBalance`, both defin * GetReadVersion proxy interface * ConfigFollower interface -The interface is assumed to be always *fresh*, i.e. the list of the servers is fixed. +Here, the interfaces are assumed to be always *fresh*, i.e. the list of the servers is fixed. ```mermaid graph LR H0{Has alternatives?} - H1[Pick up an alternative] + H1[Pick an alternative] H2[Backoff] H3[Request] H4([Reply]) @@ -26,24 +34,24 @@ graph LR H((Start)) --> H0 H0 --No--> H6 H0 --Yes--> H1 - H1 --No healthy alternatives--> H2 --> H1 + H1 --No healthy alternatives--> H2 --Retry--> H1 H1 --Has alternative--> H3 --Success--> H4 H3 --Exception--> H5 H3 --Broken Promise --> H2 ``` -### Alternative pick up algorithm +### Alternative pick algorithm -In `basicLoadBalance`, a *best* alternative is picked up and used at the beginning. At this stage, this alternative is randomly picked up among all alternatives. If the best alternative does not work, it will iteratively try other interfaces, see [here](#picking-up-an-alternative-in-basic-load-balancing-algorithm). +In `basicLoadBalance`, a *best* alternative is picked and used at the beginning. At this stage, this alternative is randomly picked among all alternatives. If the best alternative does not work, it will iteratively try other interfaces, see [here](#picking-up-an-alternative-in-basic-load-balancing-algorithm). ## `loadBalance` -`loadBalance` provides a more sophisticated implementation of load balancing. In addition to the basic load balancing, it also provides a variety of features, such as +`loadBalance` provides a more sophisticated implementation of load balancing. In addition of the basic load balancing, it also provides a variety of features: * Support for Test Storage Server ([TSS](https://github.com/apple/foundationdb/blob/main/documentation/sphinx/source/tss.rst)) -* Distance-based candidate election -* Able to handle timeouts and exceptions with retries -* etc. +* Datacenter awaring alternative election +* Recording the latency and penalty from interfaces, and [prioritize the interfaces based on previously stored data](#with-queuemodel). +* Able to handle timeouts and SS exceptions with retries. Currently it is used for @@ -58,7 +66,7 @@ graph LR H0{Has alternatives?} H1[Choose initial candidates] H4([Never]) - H5[Pick up an alternative] + H5[pick an alternative] H6[Send request] H7[Wait for available alternative] H8([Response]) @@ -77,34 +85,32 @@ graph LR Note: -* Response could be an exception, e.g. `process_behind` or `request_maybe_delivered`, and will be delivered as `Error` to the caller. +* The response could be either a reply, or an `Error`, e.g. `process_behind` or `request_maybe_delivered`. ### Choose initial candidates -Two initial candidates will be picked up before the requests start. They will be selected as the first two alternatives for the load balancer. If both of them failed, other alternatives are used in a round-robin way. +Two initial candidates will be picked before the requests start. They will be selected as the first two alternatives for the load balancer. If both of them failed, other alternatives are used in a round-robin way. #### No `QueueModel` -If no `QueueModel` is provided, the initial candidates are picked up randomly. The first candidate, or the *best* alternative, will always be one of local workers. +If no `QueueModel` is provided, the initial candidates are picked randomly. The first candidate, or the *best* alternative, will be the one that in the same DC, if possible. #### With `QueueModel` `QueueModel` holds information about each candidate related to future version, latency and penalty. * If the storage server is returning a future version error, it is marked as not available until some certain time. -* Penalty is reported by storage server in each response (see `storageserver.actor.cpp:StorageServer::getPenalty`). It is determined by the write queue length and the version lagging. +* Penalty is reported by storage server in each response (see `storageserver.actor.cpp:StorageServer::getPenalty`). It is determined by the write queue length and the durability lagging. -If `QueueModel` exists, the candidates will be picked base on the penalty. Workers with high penalties will be avoided when picking up the first two candidates. +If `QueueModel` exists, the candidates will be picked base on the penalty. Workers with high penalties will be avoided when picking the first two candidates. -### Pick up an alternative +### Pick an alternative -As mentioned above, the alternatives are chosen in the round-robin way when the first two candidates failed. - -If all alternatives failed, a flag is set, so if the next request fails with `process_behind`, the caller will receive the `process_behind` error. +The alternatives are chosen in the round-robin way when the first two candidates failed. If all alternatives failed, a flag is set, and if the next request fails with `process_behind`, the caller will receive the `process_behind` error. ### Send requests to workers -Here it is assumed that there is at least one alternative available. +Here it is assumed that there are at least one alternative available. If no alternative is available, the LB will wait. ```mermaid graph LR @@ -126,7 +132,7 @@ graph LR H4 --Additional request failed--> H3 ``` -If the first request failed, it is reset and the next request will be considered as the first request. Certain types of errors can also be returned as response, e.g. `request_may_be_delivered` or `process_behind`, which may not trigger a load-balancer retry. +The first request has a timeout option. If the LB is not able to retrieve the response within the timout, more requests will be sent to secondary and other available interfaces. If the first request failed, it is reset and the next request will be considered as the first request. Certain types of errors can also be returned as response, e.g. `request_may_be_delivered` or `process_behind`, which may not trigger a load-balancer retry. ### Wait for available alternative @@ -151,7 +157,7 @@ graph LR H2 --Failed-->H4 ``` -Note that "Wait for alternatives" will only timeout if the alternatives are not always fresh, i.e. this only happens when accessing storage servers. +Note that "Wait for alternatives" will only timeout if the alternatives are always not fresh, i.e. this only happens when accessing storage servers. LB will throw `all_alternatives_failed` when timeout in this case. #### Requests @@ -163,9 +169,9 @@ Original requests in `loadBalancer` are wrapped by `LoadBalance.actor.h:RequestD ## Appendix -### Picking up an alternative in load balancing algorithm +### Picking an alternative in basic load balancing algorithm -The following script simulates the alternative picking up algorithm. The chosen alternatives will be printed out one-by-one. +The following script simulates the alternative picking up algorithm. The chosen alternatives will be printed out one-by-one. The `loadBalance` function uses a similar approach, though the interfaces in the same DC are used firstly. ```python #! /usr/bin/env python3