@foobargeez Thank you for the interest! Our current use cases deal in the realm of on-premises distributed applications, but this is in no way means that Iris is limited to that type of use.
Here are some types of use cases we’ve needed Iris for:
In a museum exhibit we would use Iris to stream a value, maybe a sensor reading, to one or many applications subscribed to it. Such as monitoring proximity to an exhibit and turning on a light or activating a screen when the user approaches it. The monitoring of the sensor would happen with one computer (node A) and the processing of the value would happen on another (node B). Node B is only subscribed to the sources and/or keys it cares about.
Another use case we’ve worked on recently is to store the location of larger assets. Using Iris as a way to quickly identify when a larger asset, such as a video, has been modified. Iris would send the updated URL value to this asset and the application would download or act on it accordingly.
We’d love for your mobile use case to become a case study! And we’d be more than happy to help you troubleshoot any issues you may run into.
@stephanbaker can go into more details on how the data is persisted across instances but the simple answer is this is handled by Raft.
We don’t have current plans for a Java client, but Java has great support for gRPC so it should be a fairly straight port from the Go API. I’d be more than happy to help if you had interest in starting one.
@foobargeez Data persistence of key-value pairs in Iris is provided through the mechanisms of the raft consensus algorithm. When a request to modify a key-value pair is received, the request is forwarded to the leader of the cluster, who then seeks to reach a majority of nodes that agree to the update. Once the majority is reached, the leader commits the update to the local raft log, and communicates that log message to the other members of the cluster. When new members are brought up (or existing members are brought back up after going down for some time), snapshots of the raft log are used to bring them up to date with the other members. It is this log that is stored in the Bolt database on each machine, kept in sync by the raft mechanisms over HTTP, providing data persistence between runtimes.
If you are interested in reading more about the Raft Consensus Algorithm, the following is a great resource: https://raft.github.io/
Hi @Valed, you can definitely use the gRPC API directly from Python without any other dependencies. The Go and Node APIs give you a few conveniences and are mostly for handling subscribing and unsubscribe of callbacks on services.
If you need any of those helpers it should be fairly straight forward to port the API to Python. I'd be more than happy to help if you ran into any issues too!
Here are the Go and Node APIs for reference: https://github.com/forestgiant/stela/blob/master/api/api.go