关于日志事务的问题

今天公司在讨论关于如何从百万级别库中取出唯一一条记录的问题进行讨论,而且不允许两个用户取同一条记录。方案是有,但是对于错误处理方式有些问题,我提的观点是:将数据放入队列,从队列中获取,但是如果用户获取队列中的数据操作期间失败,这个时候需要将这个数据再放回队列尾部,供其他人使用,但是队列服务器有可能是在其他位置,这样如何此时队列服务器响应慢,返回给客户超时,那此条记录就在队列中丢失,无法跟踪到这条记录,我当时提到的方案是利用日志记录的方式。但是我同事马上提到了,如果日志操作失败呢?

对于这种情况,我也感觉很迷茫,如果按照同事的说法,那么每一步都有可能存在错误,而且在分布式系统中尤其明显,如果每一步都有可能出错,我们这个思想是不是进入了死循环,没有了事物概念可言,那么这样的操作就会出现问题。。。不知道是我的想法除了问题,还是我同事这样对每一步错误追根问底的方式的问题呢?请帮忙分析下。

后来我想到了利用库的方式去保存,但是按照同事的说法,库中存放如果失败,数据仍然丢失。。那么接着用日志,然后日志要失败呢?还是丢失。。。那到什么时候是个头儿呢?

只要关键点的日志做双机备份即可。

安全性和性能可扩展性以及性能是一对矛盾,没有绝对安全方案。

最新一篇文章:Hazelcast 2.0 Released with Off-Heap Storage and Distributed Backups

Hazelcast是类似ehcache+terracota的分布式缓存,它的重要特点是分布式备份,集群中任何一个节点丢失都没有关系:
Backup data is distributed in a way that losing a node has very little effect on the cluster. This matters a lot when you have big-data in memory.


[该贴被banq于2012-03-20 13:06修改过]

对于一个分布式系统来说,网络间的传输也会存在问题,比如实际上在远程主机上已经完成了处理,但是当返回给客户端状态的时候,网络通信异常,这样的情况client端的通知是异常,但是实际上远程主机已经完成了相应的操作。这样如何来保证呢?基本原理是什么?

2012年03月20日 14:18 "@lovejdon"的内容
对于一个分布式系统来说,网络间的传输也会存在问题, ...

这在当初EJB集群原理中早已经解决,属于failover的问题,主机处理好后,如果客户端得不到通讯,它会再向其他主机发出请求,那个主机相当于做路由,从之前处理好的那个主机把结果拿过来。

多谢banq的解答,我大体理解了,那这种情况在所有分布式,哪怕没有采用集群的环境下是否也适用,就是说RMI远程调用主机的时候不需要考虑主机那里的具体细节,只要是主机没有返回响应,就不会出现主机完成了请求,响应因网络通讯错误无返回的情况呢?