wildfirechat / im-server

即时通讯(IM)系统
http://docs.wildfirechat.cn
Other
7.83k stars 1.78k forks source link

云信IM切换到野火 #639

Closed NieWeiChao closed 12 months ago

NieWeiChao commented 1 year ago

issue

想用野火的全套方案,但是目前我们是用的云信的IM

有没有快速迁移数据的方案

heavyrain2012 commented 1 year ago

我们目前还没有整理过这方面知识,我可以简单的列几点,你们在实施之前可以在测试环境先演练一遍迁移,如果有什么心得可以在这里交流。

切换其实是双向的,既可以是其他切换到野火,也可以是野火切换到其他。

切换大概分为2种类型,一种是强切,强制所有用户更新到新版本,切换到新平台。另外一种是平滑迁移,部分用户用旧平台,部分用户升级后用新平台,新旧平台共存。

一,基础信息的迁移

基础信息包括用户信息,群组信息,公众号信息,好友信息等。可以编写代码,把所有这些信息从旧平台读出然后再映射到新平台的数据格式并导入。注意需要保持用户id,群组id,公众号id保持一致。

如果是强切,可以在停机后一次性把这些信息从一个系统导入另外一个系统;

如果是平滑升级,就需要事件变更通知,当一个系统中某个信息变更时,另外一个系统就同步更新。比如当一个系统中的用户更新了头像,那么这个系统中的事件回调到“平滑迁移服务”,平滑迁移服务调用另外一个系统的API,把这个用户的头像更新。另外再定期同步数据库,防止中间有网络问题导致数据不一致。

二,消息的迁移

野火IM消息是没有办法直接导入消息的。所以就需要用别的方法来处理。

一种办法是不迁移服务器端消息,这样当切换过来后就没有消息,可以在应用本地把消息做迁移,比如当新版本第一次上线时,2个IM都连上,等旧系统消息收完后,把消息从旧系统读出来然后写入到新系统中,此后断开旧系统。

第二种办法是同步发送消息,当一个系统中发送消息,消息转发到“平滑迁移服务”,平滑迁移服务把消息发送到另外一个系统中。这套机制运行一段时间后,2个系统就具有相同的消息,这样当一个用户从旧系统中切换到新系统中时,新系统中就有消息了。唯一的问题就是新系统中的所有消息都变成了未读状态。

总结

迁移不是一件台容易的事,建议先在测试环境进行验证后再进行实施,并保留好回退的可能。具体是强切还是平滑迁移还要看那种情况更适合自己。