很多服务依赖数据版本迭代。如搜索系统,每天会产生一个全量索引版本。路网系统,每天会加载新版本的路网数据。一个简单的做法是每次更新数据版本时,都停止服务,重新加载最新的数据(通常在流量最低的时间点)。但这种做法显然不够优雅。更常用的方案是加载双版本数据,动态切换,而不需要停止服务。本文介绍这种方案的一种实现方式。

1、数据推送如何保障数据的完整性?
答:一般数据推送会由专门的团队负责,主要会考虑各机器的流量均衡,使用p2p的方式加速传输。
2、服务端如何保证数据的完整性?
答:通过md5校验能确保完整性。会消耗一定的性能。最简单的方式可以在推送完成后,添加一个标签文件,但这种方式的容错性较低。
3、数据加载与卸载的顺序
答:先加载的方式。好处:加载失败后容易回退到之前的状态;坏处:会消费很多的内存。先卸载的方式。好处:内存使用不会超过平时状态;坏处:一旦后续加载新版本失败,处理比较麻烦。
4、版本中心提供sdk与client的区别
答:使用client的方式部署比较麻烦。在大数据交互的场景,使用sdk的性能更高(直接加载到进程中)。Client的方式可以做到与服务的隔离,对于服务的稳定性有好处。
5、如果有数据分片,如何控制每台机器加载哪几个分片?
答:添加了分片维度,对系统的复杂度提升了一个量级,不过基本的流程还是一样的,都是由版本管理中心来进行中心控制。
6、数据拉取由各服务自己拉取,还是有单独的推送服务推送?
答:数据由服务自己拉取,这样的好处是架构简单,数据统一存储在数据中心。坏处是所有的机器可能同一时间都向数据中心要数据,会造成数据中心异常繁忙,网络传输的效率低下。使用单独的数据推送服务,整体系统的复杂度上升,推送服务需要和版本管理中心保持通信,实时同步推送状态。