- 每隔固定的时间会进行stw, controller负责像每个worker发送stw信号,然后等待所有worker进入safe point,之后再对每张表的账户状态进行检查,检查完毕后恢复worker(检查不通过则程序退出)
- 在内存中维护了一组正确的状态,用于和db中的进行比对
- 利用转帐事务次序不影响最终结果的特性, 内存状态的更新完全使用atomic进行无锁更新, 以保证对吞吐量的影响最小
- 在数据库无法提供服务的情况也能持续运行, 等到数据库启动成功则转帐和检查将继续正常执行
./bank 127.0.0.1:3306 -U root -P xxx -D 5s -I 1s
注:要预先在mysql中新建test库
127.0.0.1:3306
为测试db所在的ip地址和端口号- root为使用的数据库用户名
- xxx为数据库密码
- 5s表示持续转帐5s, 当校验发生错误时,程序就会立即停止,不会等到这个时间
- 1s表示STW之间的间隔为1s
在程序运行过程中可以对数据库进行任意的关闭和重启,不会影响程序的验证。
如果校验失败,程序就会退出并且dump出预期的一致状态(程序运行目录下生成dump.log) ,然后退出。