1

我们有两个用于控制关键系统的工业控制器。这个想法是,当一个控制器发生故障时,另一个控制器将自动接管。为确保交换是无缝的,每个备用控制器必须始终镜像在线控制器的状态。

我们有一个解决方案,它的编码和记录都很差。问题是,是否有一种通用的设计模式可以实现这样的系统或开源软件来实现类似的东西,它们可用于创建可用于控制器或 PC 的通用解决方案,并且可以扩展以允许任意数量的控制器作为备用程序。

4

6 回答 6

1

故障转移和透明故障转移是有区别的。你真的有透明故障转移的要求吗?如果是这样,您最终将为此付出代价(在成本和复杂性方面)。

话虽如此,请查看Buddy Replication上的这篇文章,以找到解决问题的优雅方法。

于 2009-06-04T10:16:10.620 回答
1

方法是“缓存一致性”。商业产品——例如Tangosol——就是这样做的。

另一种方法是企业服务总线 (ESB) 或面向服务的体系结构 (SOA) 的轻量级版本。几乎所有的 SOA 供应商都有这方面的产品。我将从Tibco开始,它有一个轻量级的组件集,您可以使用它。

由于 SOA 并不难您可以使用 HTTP 协议自行开发,这样一个控制器就可以将状态发布到它的影子控制器。

于 2009-06-04T10:05:33.120 回答
0

航天飞机的计算机也有类似的情况。在那种情况下,他们使用了 5 台计算机,如果其中一台计算机迟到或与其他计算机不同,它(本质上)就被从岛上投票了。

在您的情况下,您如何确定哪个控制器坏了?判断机是否也考虑单点故障?

两个控制器之间可用的通信级别是多少?共享内存、以太网,还是更慢的东西?

两者之间的状态信息变化有多快?

是否可以向两个控制器提供相同的信息,并且两个控制器会计算相同的状态转换?

于 2009-06-11T05:15:21.787 回答
0

我几乎所有的 DBMS 都使用了标准的主从模式,它支持集群、分布式架构和复制(http://en.wikipedia.org/wiki/Database_replication)。

因此,基本上在您的情况下,您可以让主机保持状态,而从机坐在那里除了从主机更新自己的状态外什么都不做。如果 master 宕机了,slave 会看到 master 不再存在,并且可以接管状态的控制,master 只有在从 slave 的状态更新自己的状态(在主服务器尚未激活)。

于 2009-06-04T10:08:59.450 回答
0

控制实时关键系统的传统方法是同步运行两个单元。多年来,Tandem 一直在使用这种技术构建一些非常令人印象深刻的容错机器。

然而,锁步在很大程度上是一种硬件级别的解决方案。我认为您不能纯粹在软件级别实现经典锁步。或者至少,不是直截了当的。也许使用通过交换矢量时钟或同样螺旋桨式的东西同步的状态机?

于 2009-06-04T10:46:22.493 回答
-1

也许是共享的 SQLite 数据库或类似的东西?

于 2009-06-04T10:03:11.487 回答