当前位置:C++技术网 > 资讯 > 新旧系统用户数据渐进式无缝迁移方案探究

新旧系统用户数据渐进式无缝迁移方案探究

更新时间:2017-11-07 13:42:55浏览次数:1+次

    当一个系统升级重构,或者一个系统要使用旧系统的数据时,为了保证业务的连续性,我们需要让数据接入到新系统。对于一般的数据,我们都可以直接导入到新系统。然而对于用户密码,我们则无法直接同步。除非新旧系统的密码加密机制是一样的。为什么这么说呢?你当然不能想着把密码解密还原为明文密码啦。如果是这样,算你赢。不过这样的加密方式往往是不安全的。我们一般的系统都是不可逆的密码加密方式,所以我们无法还原用户密码,这样我们就无法将还原后的密码再用新的加密方式加密。
    但是新系统确实需要用户密码重新加密存储,如何做呢?既然我们不知道密码,只有用户自己知道,是不是让用户来完成呢?我们设想的一个方案就是,提示让用户重新设置密码。但是这样的做法,波及系统所有用户,你并不能保证所有用户都会执行这个操作。这样你的迁移工作也不知道什么时候完成,完成效果也不好。另外,这样强制重置密码的做法,体验是极差的。当然,这个做法我之前确实做过一次。那是对密码进行了一次加密升级时做的,效果并不好。很多用户并不活跃,可能好几个月才登陆一次。
    有没有用户体验好,新旧系统又可以渐进式无缝迁移的方案呢?我说没有,那你岂不是要打死我。看标题也知道,本文就是来探讨这个方案的。
    对于用户的信息,关键点在于用户的密码,其他信息都可以通过简单的方式直接迁移。而用户密码只有用户自己知道,所以,我们就只能依靠用户自己了。不过,我们采用的方式和之前强制用户改密码不一样,我们这次是不需要用户改密码,用户只要和正常使用一样登陆系统即可。
    另一个问题,在系统迁移时我们还得保证系统能够正常的注册用户,正常的登陆。
    那么迁移数据我们就从两方面下手,即登陆和注册。当用户登陆或注册的时候,就会自动触发数据迁移工作。换句话说,当一个用户登陆时,如果旧系统中的密码和登陆的密码验证通过时,我们就可以进行数据迁移了。如果新用户注册时发现系统已经存在了这个用户,我们也会触发迁移此用户信息到新系统,并告知正在注册的人,这个用户名已经被注册了。通过登录时迁移本人和注册时迁移他人信息,我们可以实现系统的自动迁移数据。而且此时如果新旧系统都不存在当前的用户,那么用户的注册就会正常的完成。等绝大多数的用户都完成了迁移,自动关闭旧系统,然后剩余为数不多的用户,可以使用密码重置功能重新设置密码。

    下面分别针对登陆和注册来说说实现数据迁移的步骤:
登陆
1.登陆新系统,成功则返回,失败则执行下一步。(登陆新系统可以提高效率,如果是新系统用户,就可以直接登陆到系统。只有是旧系统的用户,且未迁移到新系统,才需要进一步的去登陆旧系统。)
2.登陆旧系统,失败则返回,成功则执行下一步。(失败了表示用户不存在。成功表示旧系统有此用户,新系统没有,所以需要将旧系统的此用户的信息迁移到新系统里。)
3.信息同步开始。将旧系统的用户信息迁移到新系统,将用户登陆成功的密码按照新系统的密码机制加密存储到新系统。将旧系统的此用户的数据标记为删除。供后续判断是否可以关闭旧系统参考。如果旧系统的用户数据都标记为了删除,或者绝大多数都标记为删除,那么就可以关闭旧系统了。也就是说,以后的登陆和注册,就不再去验证旧系统了。
4.旧系统数据标记删除完毕,表示同步数据完成。
5.如果有些用户长期不登录,那么关闭旧系统后,也会直接迁移旧数据,但是此时用户密码则重置为新系统密码机制的一个随机密码。用户再登陆时则提示密码不对,可以使用密码重置功能。
6.当数据迁移完成,我们就可以关闭旧系统了。此时,登陆机制的数据迁移就完成了。

注册
1.注册到新系统,如果存在此用户,则返回注册失败,如果不存在,则执行下一步。
2.查询旧系统是否存在此用户,不存在则向新系统注册用户。存在则执行下一步。
3.将旧系统的用户信息同步到新系统,密码设置为新系统格式的随机密码,真正的用户登陆时提示密码错误,需用重置免密。如果觉得此方法不合适,可以不触发迁移数据。不过,考虑到用户体验,此方式不推荐。
4.等旧系统数据迁移完成,就可以不再验证旧系统了。注册里完成的主要是新旧系统迁移时不影响到新用户注册。所以在注册时需要验证两个系统,要保持信息一致。

    当然,还会有更好的方案,这里就抛砖引玉了。