mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
this structure should allow us to keep the consistent hash code and just use consistent hashing on a subset of nodes, then in order to satisfy the oracle service stuff in functions-service we can just implement a different "Grouper" that does vm allocation and whatever other magic we need to manage nodes and poop out sets of nodes based on tenant id / func. for the suga... see main.go and proxy.go, the rest is basically renaming / moving stuff (not easy to follow changes, nature of the beast). the only 'issues' i can think of is that down in the ch stuff (or Router) we will need a back channel to tell the 'Grouper' to add a node (i.e. all nodes for that shard are currently loaded) which isn't great and also the grouper has no way of knowing that a node in the given set may not be being used anymore. still thinking about how to couple those two. basically don't want to have to just copy that consistent hash code but after munging with stuff i'm almost at 'fuck it' level and maybe it's worth it to just copy and hack it up in functions-service for what we need. we'll also need to have different key funcs for groupers and routers eventually (grouper wants tenant id, router needs tenant id + router). anyway, open to any ideas, i haven't come up with anything great. feedback on interface would be great after this can plumb the datastore stuff into the allGrouper pretty easily
Oracle Functions LoadBalancer
Loadbalancing several Oracle Functions
You can run multiple Oracle Functions instances and balance the load amongst them using fnlb as follows:
fnlb --listen <address-for-incoming> --nodes <node1>,<node2>,<node3>
And redirect all traffic to the load balancer.
NOTE: For the load balancer to work all function nodes need to be sharing the same DB.