如何在两个进程之间保持内存中数据结构同步。两个进程都是相同的进程(服务器) - 一个是活动的,另一个是备用的。在发生崩溃/或类似活动时,备用需要接管。为了使备用数据库接管活动状态,内存中的数据结构需要保持同步。我可以使用Virtual Synchrony吗?会有帮助吗?如果有可以使用的库吗?我在Windows(Visual Studio)上编写C ++代码。
如果这不是解决方案,我可以参考什么是一个好的解决方案?
TIA
答案 0 :(得分:1)
实现最简单的解决方案是将状态存储在单独的数据库中,以便在故障转移时,备用数据库将继续使用相同的数据库。如果您担心数据库崩溃,请支付主数据库和备用数据库所需的资金和复杂性,数据库也会失败。这是尝试将跨故障转移处理状态的复杂性推向数据库。当然,您可能会发现数据库事务的开销成为瓶颈。为此可能很有诱惑力去NoSQL,但请记住,您可能依赖ACID保证您使用传统数据库。如果你抛弃这些,通常会得到最终的一致性,你将不得不考虑这对故障转移意味着什么。您是否会丢失少量有关故障转移的最新信息?你在乎吗?
虚拟同步看起来很有趣。我搜索了类似的东西,找到了像http://www.cs.cornell.edu/ken/这样的学术页面,其中一些像这样,有链接到研究小组制作的开源软件。我从来没有用过它们。我似乎记得有报告称它们对于少量具有良好连接性的机器非常有效,但是在尺度上遇到性能问题,我认为这对你来说不是问题。
曾几何时,人们通过共享内存或内存映射文件进行通信,在Unix机器上构建多进程系统。对于非常简单的数据结构,可以使其工作。你遇到的一个问题是,如果其中一个进程在修改共享数据的过程中崩溃了 - 这会搞乱其他进程吗?你可以解决这些问题,但是你发现你已经实现了我在第一段中描述的数据库中的所有内容。
答案 1 :(得分:0)
你可以在内存数据库中找到像memcached或redis。