-
Notifications
You must be signed in to change notification settings - Fork 76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
universal模式下的领导选举机制 #182
Comments
由于多副本选主需要用到分布式锁,下面是我的一些想法: 基于表主键唯一做分布式锁通常来说,基于mysql排他锁来实现是最简单的方式,缺点是可能引起表锁。再者,参与的副本数量是不断变化的,所以通过select~for update这种方式前提还需要不断的更新维护数据。既然如此,不如直接insert更新数据时,利用主键唯一直接来实现分布式锁。这两点最大区别是一个利用了mysql自身的排他锁,一个则是自己像mysql写入主键相同的数据来实现。 设计的目的以及折中对于这种场景,我们有以下几种情况需要考虑:
针对这一点,扩展到golang项目中,在golang开发中使用多个协程处理公共资源一般情况下不需要考虑锁的重入问题,因为golang 协程一般不像在java线程那样,使用线程池对线程进行复用,协程处理完任务golang进行回收,所以不存在协程再次需要获取锁的情况。再者,golang中获取唯一标识这点也略微麻烦
实现方案
使用方式
|
Very good proposal, we will adopt this solution. |
我们需要在universal的模式下建立一个领导选举机制。目的是为了防止某些动作被执行多次。
The text was updated successfully, but these errors were encountered: