High availability? #5147
Replies: 4 comments 14 replies
-
Not yet, but I would propose to create something based on Apache Ratis. |
Beta Was this translation helpful? Give feedback.
-
I would like to start another thread here to talk about implementing support for Jena's RDF Delta Patch Log Server instead of actually developing a HA system from scratch. What makes the Jena setup HA is that the patch log server runs in HA with multiple servers. We could create a Sail that interfaces with the patch log server to track which patch version we are on, fetch any newer patches and apply them to the underlying store, and also sync back changes to the patch log server before a transaction is allowed to finish committing. The NotifyingSail would allow us to track changes in a transaction, and we can override the begin, prepare and commit methods to add the interaction with the patch log server. An important simplification that the patch log server allows for is that a transaction starts at a patch version, and needs to be commit at the same version. This means that a high replicated write load would end up with a lot of cancelled transactions. |
Beta Was this translation helpful? Give feedback.
-
(Sorry if I'm butting in here) Just to be clear; RDF Delta isn't part of Apache Jena. There's no technical barrier but RDF Delta is significantly more user-support-intensive. Not surprising - it is affected by the deployment environment. Delta could do with a refresh, even a V2. Apache Zookeeper takes quite a lot of effect to deploy and operate. It can not store the patches (size limits). Apache Ratis for the system lock and metadata would be a good choice. I'm not clear whether storing bulk data in Ratis for a long-lived deployment is a good idea or not. This might depend if the design is to keep patches "for a long time" (c.f. incremental backup, rebuild new triplestores from a long-term data snapshot) or just until the triplestores have all taken the updates. RDF Delta does not track the state of the front ends. If patches are outside Ratis, for storing the patches, there are options: There is a lot to be said in favour of small deployments using a "safe" filesystem for patch storage. The advantage for users is that the deployment is simple to operate. SPARQL is continuously available for query; yes, there is there is a pause on updates if the patch server needs to be bumped. It starts up very fast (1-2s). Only loosing the patches is catastrophic; a blank patch server can discover log state (once) and that takes a little longer to startup. For a more complex deployment, Apache Pulsar looks interesting. It is designed to be a distributed log. It supports migrating stored data to different storage hierarchies and also ageing off patches. Apache Kafka nowadays can be used in a log-like manner if old patches are migrated away from expensive broker storage. This still needs Ratis to coordinate writing the log consistently. Current RDF Delta can use blob stores - that is another operational cost. Pulsar should be a more integrated solution as well as being cloud-neutral. |
Beta Was this translation helpful? Give feedback.
-
Having a machine Ratis in the Ratis membership group could be writing out to the long term log. The members don't have to have the same functionality. Delta minimised implementation on the triplestore process because Zookeeper isn't a library. @kenwenzel What are your thoughts on recover after a failure? |
Beta Was this translation helpful? Give feedback.
-
There is a HA solution for Jena Is there anything comparable for RDF4J?
(Alternatively, is there appetite for creating it?)
Beta Was this translation helpful? Give feedback.
All reactions