You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have some strong consistency scenarios like upgrade business logic in production.
I noticed that actor/grain of protoactor-go/cluster lost states when the cluster nodes shrinking by cluster.Shutdown(true).
So I create a workaround.
When my actor/grain is starting, it will try to get the PID of old one from external storage.
If there was an old one, the new one will send a message to tell the old one:"just persist states and forward message to me".
After that, the new one will persist PID to override the old one.
I'm trying to create a new workflow for restart a cluster without losing states and cluster.Request timeout.
e.g.:
Start some new nodes, and join in cluster.
Keep the old nodes, just marks them as outflowing only which meaning they still works like normal node, but they will refuse the new ActivationRequest and respond with "Sorry, I'm outflowing only. Please request to a normal node." .
Wait for a long time, until all of the actors/grains owned by old nodes become inactive.
Then, shutdown the old nodes.
That's all. The step 2 will introduce a lot complexity and some delay jitter, but I think it's better than losing states and cluster.Request timeout.
I have some strong consistency scenarios like upgrade business logic in production.
I noticed that
actor/grain
ofprotoactor-go/cluster
lost states when the cluster nodes shrinking bycluster.Shutdown(true)
.So I create a workaround.
actor/grain
is starting, it will try to get thePID
of old one from external storage.PID
to override the old one.Race problem could be resolved by
distributed lock
, but it's low performance and disgraceful.I'm looking for a better solution, maybe it could be similar as
akka
ororleans
.https://doc.akka.io/docs/akka/current/additional/rolling-updates.html
https://dotnet.github.io/orleans/docs/grains/grain_versioning/deploying_new_versions_of_grains.html
Any suggestions?
The text was updated successfully, but these errors were encountered: