请教章博士。有关应用程序使用LVS

我们的应用程序,有2类client端,来的数据走不同处理流程。程序内部使用了多线程和锁。同时在内存中存储了很多状态位。在数据处理过程中,为了避免冲突2类client端同时访问一段数据,会对一个处理过程加锁,即这个过程中,其他线程是不可以访问更改状态位的。
现在想把这个系统放在LVS上,这一部分状态位存储到数据库中。现在的问题是,RS1查询了状态位,进行了处理,但之后这个状态位被RS2改变了。由此,RS1内部的状态位不是真实的,举例来说,接下来RS1认为状态位允许它删除DB中数据。而实际由于没有锁的机制控制,RS2认为这些数据还存在,就去访问。

我想问章博士,对于这种情况您有没有遇到过?能否给些提示,我们该从何处着手解决这个问题呢?

Forums:

我想最好不要在RS1和RS2中放中间状态,可以考虑使用DB加集中的内存缓存(如memcached)来提高持久数据的访问速度。这种模式比较简单,对于Web应用比较有效。

如果RS1和RS2是运行非Web应用并且有内置的Cache机制,你可能需要在数据库DB的前端架设持久数据访问层,RS1和RS2通过持久数据访问层来操作数据库,当有数据更新和删除时,数据访问层会即时通知RS1和RS2来淘汰相应的Cache,来实现Cache的一致性。