Open summerhoum opened 6 years ago
比如我在工程中使用master功能解决有状态的服务的单点问题,有三个节点ABC,A节点目前是master,执行相关的业务逻辑。但是master选举和业务逻辑是处于不同的线程中,在业务逻辑线程中首先判断当前节点是否为master,如果是,则执行相应的操作,如果不是直接return。但是在A节点中,t1时间点,业务线程判断所在节点是master,然后业务线程运行过程中,A节点变成了非master,B变成了master,然后B的业务线程就会执行,那就出现了两个节点在执行业务逻辑操作,请问怎么解决这个问题?
这两个节点执行的业务逻辑操作,在状态机中是串行的,所以两个节点的状态还是一致的
如果我只是使用master的功能,不是用状态机呢? 业务逻辑是另外一个线程,这个线程会一直检查当前节点是否是master,如果是则执行相关操作,不是的话就一直检查
业务线程可以在判断master的同时,取master版本号,业务用这个版本号做乐观锁。
比如我在工程中使用master功能解决有状态的服务的单点问题,有三个节点ABC,A节点目前是master,执行相关的业务逻辑。但是master选举和业务逻辑是处于不同的线程中,在业务逻辑线程中首先判断当前节点是否为master,如果是,则执行相应的操作,如果不是直接return。但是在A节点中,t1时间点,业务线程判断所在节点是master,然后业务线程运行过程中,A节点变成了非master,B变成了master,然后B的业务线程就会执行,那就出现了两个节点在执行业务逻辑操作,请问怎么解决这个问题?