We are developing an e-commerce site in ROR. We have a table which
stores the prices of our products. To save on repeated database
queries, we read the table and store it in memory.
As the admin can change the prices through the management console we
are facing the problem of updating the in-memory data. We are running
the application on mutiple servers,with multiple instances of mongrels
serving the requests. Thus all the mongrels have their own copy of the
Now we think there are few issues
1. We would need to update it on every mongrel.
2. We don't want the scene where there are different servers/mongrels
have different version of the pricing.
3. We are hoping there is some way where we won't need to shut down
the whole site !
We tried to use the SEE-SAW. but i think it doesn't take the business
of mongrels into account. Thus if one of the mongrels is serving a
long request while it receives the restart request, things go wrong
and the mongrel dies in the end.
We have been discussing this issue and come up with the following
1. Copy the prices to the user's session (which is anyway read every
time) and use that to create the shopping cart etc.
2. Update the each of the mongrels through an http request/ web
This way the user will see only one version of the prices throughout
But this again has some problem. What if a user somehow keeps his
session to be alive for a very long duration ( if he knows the pending
price update.) Even though we don't keep persistent shopping cart, a
malicious user can, though a script, keep his session alive for days/
weeks or even months and thus use the old prices. We did use this
trick for our online submission of assignments in college
As a last resort we can check the staleness of session prices in the
last checkout step.
We think this is a common problem and every e-commerce site should be
facing this but can't seem to find any published solution. We are
hoping some can put some light or point us in the right direction. Any
help would be appreciated