Skip to content
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

请求级原子操作 #479

Open
zozoh opened this issue Jun 28, 2019 · 0 comments
Open

请求级原子操作 #479

zozoh opened this issue Jun 28, 2019 · 0 comments

Comments

@zozoh
Copy link
Owner

zozoh commented Jun 28, 2019

为了保证数据的可靠性,可以考虑增加原子操作的策略

在 Io 层面,

可以为每个对象设置两把锁,一把锁自己,一把锁子节点

  • 锁是有时间期限的,譬如1秒钟,到时自动解锁
  • 锁自己的可以认为是行级锁
  • 锁子节点的可以认为是表级锁
  • 锁持久化在一个锁服务内,服务可以在内存实现,也可以来自一个统一的数据表
  • 在线程上下文设置也取消锁,这样 Io 层面就能知道锁
  • 锁的钥匙是一个 UUID,每次操作需要提供钥匙(封装在线程上下文中,透明)
  • 锁不能嵌套,如果线程已经申请锁了(会生成一个钥匙),再次申请则会返回旧钥匙
  • 带有钥匙的线程,每次执行写操作(元数据和内容),都要锁一下操作对象,并且将对象原本的内容备份一下
  • 注销锁前,需要主动将备份内容删掉,这样注销时就不会触发还原
  • 备份服务也是一个服务,分作内存版和持久版

在调用层面

  • 一个请求,创建上下文时就创建锁,请求退出是就注销锁,正常退出的话会先删除备份内容
  • 在 Job 里,也可以用这种逻辑加锁
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant