我如何处理多个事务



我有一个c# rest服务,它分布在不同的服务器上。在服务中,我对传入请求金额进行余额检查,如果存在余额,我们继续并创建交易。

if(txnamount> balamount){
// return
}
else{
//create txn
}

余额是使用之前的txn金额计算的。如果在快速会话中出现批量请求,当未从余额中减去先前的txn金额时,余额检查条件失败。如何解决这个

这是计算机系统的一个基本限制。

在单个系统上,这是相当微不足道的,因为您在语言和操作系统中内置了锁。

对于多个系统,简单的答案是使用数据库并让它处理锁定等问题。数据库是专门为处理这类问题而建立的。只要打开一个交易,并在交易中进行操作。或者在每行上保留一个版本值,如果版本值在读和写之间发生了变化,则提交失败。

在更基本的层面上,您需要确保独占访问。这可以通过一个中央机构来管理访问(如数据库)。或者您可以将值分配给特定的机器,因此对该值的所有请求都需要在该机器上运行(如数据库分片)。或者你可以用两相锁定。如果你想深入研究这个话题,你可能会用你的整个职业生涯来研究。

看起来你正在处理一些需要事件溯源技术的事情,你需要某种不可变状态,特别是在处理财务问题时

最新更新