最近在进行一些架构重组。
重看过去的代码,有时候难免会问一句,为什么要这样写呢?
最近面临的一个问题,架构完全无法多机器拓展。
因为处理的msg中间有状态,A和B状态必须是A在B之前处理,所以多机器同时处理时,必须要保证拿到B的时候,A已经处理完。
因此,为了能迁移,需要考虑到一些中间状态的存储。
从这个功能来看,redis的结构是很方便的。
简单点说,在接收A状态信息的时候,往redis里存储一个状态,代表A正在处理,那么B状态信息拿到的时候,就只要从redis里获取是否还存在A状态正在处理的信息就可以了。所以,A若处理完了,就需要立刻删除这个状态,B状态只有在这个时候才可以被处理。
后来,我才知道,这样一个过程,其实已经在利用redis加锁了。
存储状态即是加锁,而删除状态就是解锁。
这样的话,能保证,不同机器,只要迁移代码,直接启动,就可以同时消费数据,一起处理。