通过TCP或更好的协议更快地进行状态复制

时间:2011-12-20 20:58:13

标签: c# performance tcp replication tcpclient

我有一个双节点系统,我试图在节点之间复制内存状态......为了简化,只需要想想Master-Slave( Active-Passive )。节点A具有相对恒定的更改流,然后尝试将状态推送到节点B.目前,这通过批处理状态并使用TcpClient的实例推送它而定期发生。

当前的TcpClient进程似乎效率低下。这是一种我可以在两个系统之间建立链接的方式,只要建立了通道,就可以将状态从一个流转换为另一个系统。

出于性能原因,我不能使用像WCF或Remoting这样的东西...我对较低级别的网络结构相对缺乏经验,但我非常愿意尝试任何新的东西。理想情况下,解决方案是我可以用原生C#4完成的,不需要任何新产品。

2 个答案:

答案 0 :(得分:2)

TCP是基于低级连接的流式传输协议。这似乎是正确的选择。

关于TCP遇到的唯一问题是延迟问题。

你可以使用UDP,但从它的声音来看,你最终会模拟TCP over UDP。

答案 1 :(得分:2)

您使用TCP是正确的。 您应该建立连接并保持打开状态,直到完成所有操作。 你无法真正击败它。

如果更改不是太大,最好只发送增量更改,而不是整个数据副本。 我过去这样做的方法是使用Differental Execution。 这可能比你想要尝试的更多,但基本的想法是你编写一个函数来遍历数据。可以将其视为同步串行器/解串器。 在该控制结构下,它会自动检测自上次行走以来的所有更改。 您可以抓取这些更改并将其发送到另一端的接收器,其工作方式相同,但会在更改中折叠。

这可能对你正在做的事情有点多,但无论如何,TCP是要走的路。 顺便说一下,尽量避免new。这很昂贵。