TroubleShooting - 迁移到集群环境数据错乱问题
2015-05-16 17:40
232 查看
最近系统出了个问题,发现系统发布出去的某一条链式结构的数据出现断链的问题,调查发现这是在单系统迁移到集群环境中没有考虑清楚导致多个节点同时修改数据而出现的错误,这里介绍下问题的来龙去脉。
我们的系统持续接受外部系统提供的产品的信息(每次一个产品),对产品信息进行加工,把加工后的产品数据按产品类型加入内存数组,每次有新产品加入数组,就需要把数组数据打包成链式结构(外部数据结构要求),然后发给其他外部系统。单节点的时候对数组的产品添加,以及整个链式数据发送在同个类中使用了synchronized,所以产品都是先添加进数组,然后再组装成链式结构发送出去,在发送过程中也不会出现数组数据被修改的可能性,系统工作正常。在搬到集群环境中后由于多个节点都可以接受产品信息,所以数组被存在了distributedmap里面,但是数组数据没有使用distributed lock来保证组装链式数据的时候数组数据不被修改,链式数据可能会出现nextlink不存在,但是数据却真实存在。
这个问题的源头是要解决多节点同时修改数据的问题,可以通过使用distribution lock来解决。
不过发现更坑爹的问题,因为每次有新产品加入数组,都会触发一次同类型产品的链表结构的组装和发送,如果网络有问题,可能会出现后发出链式数据先到下个节点。单节点的时候由于链式数据中存有创建时间戳,所以下个节点不会出现后创建的链式数据被覆盖的现象。不过对于集群环境,链式数据的时间戳不再是顺序的,当短时间很多个产品进入系统的时候,就可能发生数据多的链式数据的创建时间戳更早同时更早到达下个节点,结果就悲催的被覆盖了。
为了解决这个问题,最好的办法就把发送任务做成集群里的单节点任务 (可以参考clustertimer规范的实现),其他节点只更新distributedmap中的内存数组。同时为了防止链式数据发送过于频繁,把收到产品就发送链式数据改成每分钟检测一次是否有缓存的新产品,有才创建链式数据发送到下一个节点。
我们的系统持续接受外部系统提供的产品的信息(每次一个产品),对产品信息进行加工,把加工后的产品数据按产品类型加入内存数组,每次有新产品加入数组,就需要把数组数据打包成链式结构(外部数据结构要求),然后发给其他外部系统。单节点的时候对数组的产品添加,以及整个链式数据发送在同个类中使用了synchronized,所以产品都是先添加进数组,然后再组装成链式结构发送出去,在发送过程中也不会出现数组数据被修改的可能性,系统工作正常。在搬到集群环境中后由于多个节点都可以接受产品信息,所以数组被存在了distributedmap里面,但是数组数据没有使用distributed lock来保证组装链式数据的时候数组数据不被修改,链式数据可能会出现nextlink不存在,但是数据却真实存在。
这个问题的源头是要解决多节点同时修改数据的问题,可以通过使用distribution lock来解决。
不过发现更坑爹的问题,因为每次有新产品加入数组,都会触发一次同类型产品的链表结构的组装和发送,如果网络有问题,可能会出现后发出链式数据先到下个节点。单节点的时候由于链式数据中存有创建时间戳,所以下个节点不会出现后创建的链式数据被覆盖的现象。不过对于集群环境,链式数据的时间戳不再是顺序的,当短时间很多个产品进入系统的时候,就可能发生数据多的链式数据的创建时间戳更早同时更早到达下个节点,结果就悲催的被覆盖了。
为了解决这个问题,最好的办法就把发送任务做成集群里的单节点任务 (可以参考clustertimer规范的实现),其他节点只更新distributedmap中的内存数组。同时为了防止链式数据发送过于频繁,把收到产品就发送链式数据改成每分钟检测一次是否有缓存的新产品,有才创建链式数据发送到下一个节点。
相关文章推荐
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十五)Structured Streaming:同一个topic中包含一组数据的多个部分,按照key它们拼接为一条记录(以及遇到的问题)。
- 集群间 Hive 数据 迁移 问题
- ES-MongoDB学习1_elasticsearch与mongodb分布式集群环境下数据同步以及遇到的相应问题解答
- hadoop 集群环境Sqoop 将数据导入mysql问题 many connection errors; unblock with 'mysqladmin flush-hosts'
- elasticsearch与mongodb分布式集群环境下数据同步以及遇到的相应问题解答
- 集群间 Hive 数据 迁移 问题
- FastDFS集群整体迁移的问题
- 不同hadoop集群之间迁移hive数据
- MongoDB集群,解决数据不分片问题
- storm集群任务迁移问题平滑迁移
- Hadoop大数据框架研究(6)——Hadoop环境部署问题汇总
- Android ListView数据错乱问题解决
- listview、gridview单项更新及滑动时数据错乱重复问题
- Oralce9i升级Oralce10g时大量数据迁移问题
- sqoop从mysql迁移数据到hive中遇到的问题
- UAT环境正常,上线生产环境后访问不到数据的原因分析及问题解决
- 数据迁移中碰见的一些问题
- 解决kafka数据目录迁移后,flume无法正常调用Consumer的问题
- 解决kafka数据目录迁移后,flume无法正常调用Consumer的问题
- 3,数据挖掘环境搭建-Hadoop集群搭建与测试