Hello and thanks in advance!
Is there embedded replicated map solution with 'read your writes' guaranties and async updates propagation of frequently changed data?
System comprised with two services (just for example):
I'm tring improve response time of 'user_api' by holding up-to-date data (2GB on average) within in-memory replicated map (history data rarely requested and MySQL used). I need only put/get/remove operations.
I've tried Hazelcast's ReplicatedMap where each service embedded with Hazelcast instance. Also I add separate not embedded Hazelcast instance (using default docker image) to have ability restart entire cluster without data losing (preventing initial fillup from MySQL). And it works almost like a charm. BUT there seems to be one strong downside - it slowdown import process within 'importer' by blocking on write operations.
What I need it is speed of local Map read/writes with async updates propagation to other cluster nodes. I need 'read your writes' guaranties and async changes propagation to 'user_api' services.
I found discussion here: Replicated caching solutions compatible with AWS. The difference: the questioner was not interested in the case with frequent updates.
I read a bit about Ignite and seems like it works the same as Hazelcast for this case. About the Geode: could not understand whether he fits the described case by quickly going over the review - need more time to investigate.
I think Ignite would do what you need. There’s a cache property called write synchronisation mode. The default is PRIMARY_SYNC, which writes synchronously to the primary and asynchronously to the backups. There’s also FULL_SYNC and FULL_ASYNC.
Ignite works the same way as Hazelcast, in the sense that you can have a separate cluster rather than embedding your nodes. Ignite also has persistence, so you could restart the cluster as well and still not lose data.