-
Notifications
You must be signed in to change notification settings - Fork 57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multi-node / distributed setup (scaling to huge datasets / multi-tenant) #213
Comments
Perhaps there is some wisdom to borrow from 4store - or maybe ask its author, Steve Harris, to provide input here? |
Thanks! |
A different approach to multi-node, is FAAS. Convert all logic to stateless functions. Has some interesting benefits to scalability - no longer needed to copy instances and all their logic.
|
@AlexMikhalev has made some interesting progress on having a multi-node Atomic-Server setup. See the He suggests: One docker instance per user
Some thoughts about this approach:
|
Another approach: Link Drives to Nodes
|
Check out #463 - the sync between nodes was the whole point of using fluvio. |
Another approach: Use a multi-node KV storeWherever we're currently using The big advantage is that Atomic-Server instances are no longer tied to specific data. In other words, tikv deals with the complexities of having a multi-node system. However, there are still some stateful resources that are currently linked to machines. Plugins, specifically. Also, we'll still need to make sure that the For now, let's ignore plugins. Because even if we fix that problem, I'm not sure the solution will be very performant. There is quite a bit of overhead required when our storage system is on a different machine. Where we now get nanosecond responses, this will definitely become milliseconds. However, tikv still is very fast - on average one response takes less than 1 ms as well. This only becomes a bit worrisome if we do multiple consecutive gets that require multiple round trips. There are probably ways to work around this. I'm assuming there are ways we can do batch requests in their client. 2024-01 EDIT: This doesn't solve all issues:
I think this approach will not be sufficient. Back to the drawing board. |
https://github.com/lnx-search/datacake/tree/main/examples/replicated-kv Data cake also seems interesting, I'll take a closer look soon |
Coordinator node approachThis is a load balancer / proxy server / rust server (actix / axum?) that forwards requests to AtomicServer instances, depending on the used subdomain ( This means:
Existing tools
Write our own
|
Atomic-server has been designed to run on low-end hardware, as a self-hosted server. This was why I decided to use an embedded database (sled) and search engine (tantivy).
However, this introduces a problem. What do you do when the physical constraints of a single machine are exceeded by the demands? For example, when a single CPU is not fast enough to host your data, or if the RAM is bottlenecking performance, or if the disk size is insufficient? This is where distributed setups come in handy, but the current architecture is not designed to deal with this.
This thread is for exploring what might need to happen to facilitate a multi-node setup.
Thoughts
Commits
to all nodes.registering
new nodes. They should probably tell the network that they would like to receive some range of resources that they are responsible for.subject-property-value
store and thevalue-property-subject
stores should probably be distributed. Should nodes specialize in one or the other?Interesting tools
monolith
project, might be inspring)The text was updated successfully, but these errors were encountered: