当前位置: 代码迷 >> C# >> 关于分布式开发的一个有关问题-数据状态同步
  详细解决方案

关于分布式开发的一个有关问题-数据状态同步

热度:82   发布时间:2016-05-05 03:10:40.0
关于分布式开发的一个问题-数据状态同步
问题:分布式数据,快速获取某数据的状态。
诸位C友大家好,前些日子做了个有意思的项目;
项目用CS做数据展示C#写的后台ICE做数据传输。
项目需求:将子节点的数据"状态"发送给父节点,还可以这么说,父节点收集子节点的状态数据。
因为篇幅原因这里省去业务需求及其他技术问题往后项目完事了再跟大家分析经验,这里我先说问题。
先上图:

因为数据是分布式的,所以我将节点分了层次关系,即A节点只处理A1、A2俩个节点的数据B只处理B1的数据;
而平台处理A、B俩个节点的数据,这里说明一下数据存在的包含关系,即A节点中只包含了A1、A2的数据B节点只包含B1的数据,平台有下面所有节点的数据。
我的思路:
之前想着如果平台能够知道每个节点的ICE连接地址我用ob设计模式数据推送岂不是很快就搞定了?设计出来后人家说网络可能是跨网段(内网)的,平台可能只能连接A、B节点的网段不能连到A1、A2的网段(哭晕在厕所);
后来我干脆让父节点用多线程的方式每隔多少秒去子节点取一遍数据,即A节点隔5秒去取A1、A2的数据B也一样,然后平台也每隔5s从A、B取一次数据,刚开始数据量不大的时候还好,可是当数据量多了的时候这个状态的反应就会越来越慢,可能节点A1的状态变化很久了平台才抓到。
综合起来有这样几点原因:1:数据量多(万级)ICE传输慢;2:数据接收后需要状态处理我写的算法有问题;3:网络不稳点。
和客户交涉说网络是硬伤(假装安慰下我自己)但客户说会搞定这个问题,所以第三点暂不考虑;第一个问题数据量多的话我在传输数据时对数据进行压缩后再传输出去,这个压缩数据后经测试好了一点点但是因为网络原因有时候数据会丢包不能正常转换!不知道有没有对ICE传输有深入研究过的大神;第二个问题我在处理数据时用多线程的方式每一个节点分一个线程,如果某节点数据特别大的话我在处理状态时还会分线程,当然还是可能存在父节点会取到历史数据的问题(A节点在处理数据时平台正好来取数据,这时因为没有处理完成新的状态数据还在锁定状态所以只能先给历史副本不然会报错,因为是多线程处理想必大家应该都知道)。
经过以上处理数据的状态能达到秒级(10s),但是人家要求必须达到3s最多不能超过5s!(请允许我再哭一个)...
求大神们帮我看看,是不是我的设计思路有问题。

------解决思路----------------------
子节点不受你控制吗?为什么你要用定时轮询(pull)的模式,而不是主动推送(push)的模式呢
另外通篇没看出分布式
------解决思路----------------------
平台不是从A和B取结果进行处理吗,那下面的访问不了也没问题啊
------解决思路----------------------
如果轮询,就不要“哭”。只有在笑的时候才敢轮询啊。
  相关解决方案