2010-11-30 44 views
2

我很好奇用于构建确保没有数据丢失的系统的技术是最重要的。举一个简单的例子,金融机构做什么来确保在账户之间转移资金时,一旦从一个账户中提取资金,毫无疑问就会将其存入另一个账户。我并不是在寻找诸如数据库事务这样的特殊技术,而是寻找更大,更体系结构的概念,比如如果服务器关闭或者队列用完空间或者其他什么时,数据如何保存。永不丢失数据技术

如果有人能指点我的书籍或文章,我会非常感激。

+0

此问题可能更适合http://serverfault.com/ – 2010-11-30 21:30:54

+0

我认为在这些情况下,交易应该回滚。我认为这个东西可能属于“两阶段承诺” ,这是交叉> = 2系统的交易,而不是100%确定... – FrustratedWithFormsDesigner 2010-11-30 21:31:48

回答

0

基本技巧是消除任何单点故障。任何在您的设置中可能会失败的情况都需要备份或多个备份。从多台交换机,服务器,UPS,硬盘驱动器等......数据库不断被复制,数据备份和存储在异地,以防发生火灾或其他可能会损坏建筑物的灾难。

0

它可以真正归结为在两个地方有相同的数据;从下到在数据提交之前持有缓存的代码,一直到服务器冗余。

确保您不会丢失东西的唯一方法是获得多份副本。

0

您可能想了解XA或X/Open事务,这些事务可以将多个系统(包括数据库,队列等)协调为ACID类似DB的事务。

我还没有使用它,但我听说它可能是昂贵的延迟明智和计算。但是,您的数据完整性又值多少钱?

http://en.wikipedia.org/wiki/X/Open_XA

0
在银行例子中

,各银行将保持记录的每一笔交易,说明什么多少,并在那里和从那里多少,以及他们的时间顺序

这样以后如果你比较两个事务日志的一个问题,如果他们不匹配,你可以找出丢失的交易

这也涵盖了一个银行不能信任另一个记录保留它

问题

,因为他们交叉检查这几乎是一个分布式的交易协议

0

正如你所指,有各种机制(如交易),以确保基于“握手”的软件是可靠的,并成功完成。

建筑上 - 是的有两个副本的东西给你redundencey,这有助于不丢失的东西。除此之外:

  • 清除流程:人们需要知道信息的确切位置 - 无论是在阳光明媚的日子里,还是在棕色的东西打到粉丝身上。拥有数据但无法找到它或识别它与损失它一样糟糕。更清晰(且有据可查)的流程更好。
  • 一致性:自动化显然更好,随机的人为错误。
  • 要专门回答你的问题 - 但上述观点应该在体系结构和设计中得到回应,这种体系结构和设计清晰明确,并且明确分开了担忧。
  • 尽可能减少故障点。
  • 重点关注高风险领域。
  • 使用成熟的技术(我想这就是你实际要求的)。
  • 让事情尽可能简单。

我一直在为现成的文档管理系统解决方案架构,没有数据丢失是最重要的驱动因素。该系统在全国范围内推出,因此在用于为当地用户提供服务的“区域”缓存和实际的“数据中心”方面实现了多地点。感兴趣的几点:

  • 所有组件(如果可能)被部署到虚拟盒,这是背版到SAN,所以IUN一个肌肉发展主机的情况下下降,我们可以更快地恢复服务。就数据丢失而言,这意味着如果系统关闭,用户更有可能使用受保护的系统,而不是在本地存储东西。
  • 另外,SAN被认为比本地磁盘更安全。
  • 以上是现有设置的一部分,所以Ops无需学习。
  • 故障切换站点,带有复制。这不是实时的,而是由数据库上的事务日志增强的。

我想这一切都不是严重软件中心,但我认为所有好的软件架构/设计原则“我们”使用帮助指导我的思想。