最近调试的系统牵涉到多个区,而且一个区内有多个角色、部分角色有多个节点,如果只是这样,用树状结构即可统一管理,但偏偏每个节点允许多区共用。复杂的关系导致系统的状态维护起来很麻烦,而且时刻要面临的一个问题是:如何保证系统的实际状态和统计状态一致?
之前一直做单区测试,晚上加上多区以后,其中一个角色core掉,数据库中也多了几条记录——和实际状态不一致了。调试core文件、检查日志均无思路,无奈之下手动将状态调成一致、重启core掉的角色并重复之前的操作希望问题重现。很可惜,系统运行良好。
于是推测是系统内部状态累积的问题。重启后角色所维护的状态重新初始化,和实际状态一致,所以问题没有重现。
晚上和kevin沟通了一下今天的进度,他提到了几点:
1. 系统中加入检查点。各个层面:代码级别、模块级别、节点级别的,检查系统的一致性;
2. 定期的清理不一致的状态。状态比对,定时重启;
3. 我们不要零bug系统,要得是可用的系统。