性能架构设计:CRDTs与交易策略优化
1. CRDTs在自动交易系统中的应用
在自动交易系统中,CRDTs(冲突无感知复制数据类型)是一个很好的实现选择。每个节点可以将每个客户的余额状态以计数器的形式保存在内存中,在下单时更新该计数器,并将更新消息广播到系统的其他部分。这种广播可以在关键路径之外完成,而且由于CRDTs的特性,我们无需担心冲突处理问题。最终,所有节点的内存中每个余额都会有相同的值,并且能够在本地检查交易授权,这样就可以完全移除余额监控服务器。
为了将余额状态实现为CRDT,我们需要一个比之前更复杂的计数器。因为订单有时会被取消,系统必须对客户账户进行贷记,所以余额不能用仅递增的计数器来表示,该计数器必须能够处理递增和递减操作。以下是一个基于状态的计数器的简单实现:
case class PNCounterState(incState: GCounterState, decState: GCounterState)
class StateBasedPNCounter private(
incCounter: StateBasedGCounter,
decCounter: StateBasedGCounter) {
def value = incCounter.value - decCounter.value
def update(change: CounterUpdate): (StateBasedPNCounter, PNCounterState) = {
val (newIncCounter, newDecCounter, stateUpdate) =
change
超级会员免费看
订阅专栏 解锁全文
6

被折叠的 条评论
为什么被折叠?



