0

如何使内存中的数据结构在两个进程之间保持同步。两个进程是同一个进程(服务器)——一个是活动的,另一个是备用的。在活动的崩溃/或类似情况下,备用需要接管。为了让备用服务器接管活动服务器,内存中的数据结构需要保持同步。我可以使用虚拟同步吗?会有帮助吗?如果有我可以使用的图书馆吗?我在 Windows(Visual Studio)上使用 C++ 进行编码。

如果这不是解决方案,我可以参考什么好的解决方案?

TIA

4

2 回答 2

1

最简单的解决方案是将状态存储在单独的数据库中,这样当您进行故障转移时,备用数据库将继续使用同一个数据库。如果您担心数据库崩溃,请支付拥有主数据库和备用数据库所需的资金和复杂性,同时数据库也会发生故障转移。这是一种尝试将跨故障转移处理状态的复杂性推到数据库上。当然,您可能会发现数据库事务的开销成为瓶颈。为此使用 NoSQL 可能很诱人,但请记住,您可能依赖于使用传统数据库获得的 ACID 保证。如果你放弃这些,通常会获得最终的一致性作为回报,你将不得不考虑这对故障转移意味着什么。您会丢失少量有关故障转移的最新信息吗?你关心?

虚拟同步看起来很有趣。我搜索了类似的东西,发现了像http://www.cs.cornell.edu/ken/这样的学术页面,其中一些,像这样,有研究小组制作的开源软件的链接。我从来没有使用过它们。我似乎记得有报道称,它们在连接性非常好的少量机器上工作得很好,但在规模上遇到了性能问题,我认为这对你来说不是问题。

曾几何时,人们通过让进程通过共享内存或内存映射文件进行通信,在 Unix 机器上构建多进程系统。对于非常简单的数据结构,这可以工作。您遇到的一个问题是,如果其中一个进程在修改共享数据的过程中崩溃了——这会扰乱其他进程吗?您可以解决这些问题,但您可能会发现您已经实现了我在第一段中描述的数据库中的所有内容。

于 2017-02-08T06:09:28.113 回答
0

You can go for in memory database like memcached or redis.

于 2017-02-08T07:06:59.590 回答