-
Notifications
You must be signed in to change notification settings - Fork 7
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
Distributed dynamic graph . #31
Comments
Dynamically modifying the dependency graph is one of the strengths of MemoizR. There are several ways to do so. I will add examples for more advanced cases to modify the tree/graph at runtime. Distributed locking/etc. of evaluation of nodes is not yet supported. But that will be the next concern I plan to work on. Persisting the graph definition is something that this model has advantages over things like ReactiveX. But there are multiple ways how you could do it. And depending on your usecase, you would need it differently. What are the use cases you would like to handle with persisting the graph definition? There are already possibilities to persist the graph definition. But they require some manual steps at the moment. |
I am considering a Bloom Clock based locking strategy. @jvmlet could you describe your use case in a little more detail. What would you want to build with it? Do you already have something similar that you could show? |
Hi @timonkrebs All aspects of these is pluggable :
I think saga pattern is the closest to all these .... |
@jvmlet I think of the strength of this library more in terms of state synchronization. But the core should also be able to support a distributed transaction model that I think you are looking for. I would like to let the core be as generic as possible to also allow to build other aspects on top of it. That is why I named it MemoizR as this core concept allows for a lot of aspects to be built (pluggable) on top. Combined with something like the masstransit saga pattern implementation most of the aspects you are looking for should already be possible. But as I mentioned most require some amount of manual work and are not (yet) supported directly by this library. For example traversal strategies would be possible to implement in a pluggable way if you serialize the graph. I am considering to provide a serialization API but this is not yet on any roadmap. If you are interested in that I would be open to contributions. One thing I would still be interested is how you think of locking. Would you like to lock entire subgraphs? Would you need to explicitly lock them? What would be the use case for that? |
@timonkrebs , given the simple DAG Imagine that processing of node interface ITraversalContext<V,E> {
delegate bool OnVisit (ITraversalContext ctx, V node); // bool to continue/stop traversal
ILock Lock {get;set;}
ITraverseStartegy {get;set;}
// other
} |
I do not think that this is obvious: Lamport Timestamp
I think a Decentralized locking strategy is the best way to do it. As I mentioned I am considering a Bloom Clock based locking strategy. It could be done quite like you mentioned it by waiting at I think exposing OnVisit in some sort of Thank you for your inputs. Unfortunately at the moment I have other responsibilities that are quite time consuming and I would like to put out a complete release of the core functionality. But having a clearer picture of how I would like to evolve the library will help make decisions on how to implement the current functionality. I plan to work on this as soon as the core functionality is finished. |
First of all - thanks for such an interesting library.
Question : imagine distributed system in which trees are born dynamically on several nodes.
Tree branches might overlap (branch of tree A is basicly a tree B), or tree C shares the branch of tree D.
Trees A, B, C and D compose distributed graph.
Does API allow to plugi-n/support distributed locking of evaluation of nodes?
Distributed notification of completion event?
Basically, I'm after the integration of this library and masstransit saga pattern implementation.
Is it possible to modify the tree (insert node in the middle ) dynamically?
What about persisting the graph definition?
The text was updated successfully, but these errors were encountered: