事务:构建处理故障的可扩展系统,防止丢失数据

本文将介绍以下内容:

稳定的消息传送

事务和系统一致性

处理错误队列问题

消息大小和计时

本文使用以下技术:

WCF、MSMQ

设计分布式系统一直都是个挑 战。有了功能日益强大的 CLR、高效的 Visual Studio 以及框架中建立的细粒度控制(如 Windows Communication Foundation (WCF)),开发人员便拥有了构建可扩展系统所需的全部工具 。遗憾的是,这些还不够。

在处理大型分布式系统时,我的团队发现开发可处理故障且不丢失数据的可靠系统远不是那么简单。 这并不是工具集失效,而是需要以极特殊的方式来使用这些工具才能实现既可扩展又可靠的系统。

HTTP 和消息丢失

团队面对的第一个难题就是消息丢失。刚开始设计我们的系统时,我们 已决定使用 HTTP 传输基于 WCF 的服务。作为消息处理的一部分,我们的服务会经常向数据库中写入数 据。这里没有谴责的意思,但很多系统都是这样设计的。

在系统进入配置环境之前,已经过了非 常严格的压力测试 – 系统在繁重负荷下运行了一周时间。压力测试的结果表明我们的系统发生了 消息丢失。

在分析事因的过程中,我们确定丢失的主要是那些包含订单信息的消息 - 这并不令人 惊讶,因为系统中的大部分负荷都与订单信息有关。但让我们惊奇的是所有这些消息丢失都是在一个 10 分钟的时间间隔内发生的。此后,系统又正常运行了。

在研究了多方面的日志文件后,我们发现 ,这一周中发布了一个关键的 Windows 补丁,而配置实验室中的服务器自己在自动安装了该补丁后重新 启动。考虑到这个新发现蕴藏的信息 – 服务器会不时重新启动 – 我们意识到不能忽略这一 点。系统将需要连续运行数年并需要经受住多次服务器升级和重新启动的考验。

通过 HTTP 处理 消息时,服务会打开一个针对数据库的事务,尝试写入数据,然后提交该事务。正常情况下,此操作会成 功执行。如果消息处理服务器重新启动了中间事务,数据库会检测到该事务超时,并回滚其更改,从而保 持其状态一致。但当服务器再次启动后,原始消息的数据既不会出现在内存中也不会出现在服务器的网络 处理堆栈中 – 该消息将会丢失。

对于订单处理系统,这就意味着经济损失。任何人都很难 接受在空中交通控制系统中出现这样噩梦般的情形 - “飞机 A 与飞机 B 正处于碰撞航向” 这一事件丢失。

时间: 2024-08-31 07:17:14

事务:构建处理故障的可扩展系统,防止丢失数据的相关文章

WebSphere MQ集群中的迁移、故障转移和扩展

消息对SOA的影响 在任务:消息的前一部分中,我曾写到从点对点消息体系结构到面向服务的发展要求更新消息领域中的许多长期存在的最佳实践.这里,我们将考虑一个案例研究,以了解队列管理器的迁移.故障转移和扩展,以及在SOA的上下文中考虑这些活动时对命名约定.工具.管理流程和操作的影响. 首先让我们了解一些术语: 本讨论中的迁移包括任何重新承载队列管理器的情况,也许是为了更新基础硬件或者为了移动到不同的平台.迁移将始终涉及到构建新的队列管理器.将应用程序和队列逻辑地移动到新的队列管理器,以及最终使旧的队

UPS技术新突破 轻松构建高效、可靠、可扩展的中大型数据中心

在云计算.大数据等新技术和应用的推动下,数据中心大型化的趋势非常明显.不仅互联网巨头们的数据中心规模越来越大,一些云服务提供商的数据中心的规模也迅速膨胀(出现了10万+台服务器以上的数据中心),相应地,市场对中大功率UPS的需求也大增. 实际上,中大功率的需求不仅来自数据中心也来自工业应用领域.根据HIS的研究,预计到2019年500KVA以上功率UPS市场将以近2位数的速率增长,而中国市场对中大功率UPS的需求更为强烈,2014年到2019年的年复合增长率将达到13.6%.面对这个高速增长的市

SQL Server误区30日谈 第1天 正在运行的事务在服务器故障转移后继续执行_MsSql

误区 #1:在服务器故障转移后,正在运行的事务继续执行 这当然是错误的! 每次故障转移都伴随着某种形式的恢复.但是如果当正在执行的事务没有Commit时,由于服务器或实例崩溃导致连接断开,SQL Server可没有办法在故障转移后的服务器重新建立事务的上下文并继续执行事务-无论你使用的故障转移方式是集群,镜像,日志传送或是SAN复制. 对于故障转移集群来说,当故障转移发生后,一个SQL Server实例在另一个故障转移集群的节点启动.所有实例上的数据库都要经历Recovery阶段-也就是所有没有

actor-based programming与构建大规模扩展性的并行系统

1.actor-based  programming  actor based 类似于object based ,但是它比object 多了自己的message queue 和message processor.message handler 也就是说一个actor是一个独立的处理单元,但是他不是真正的物理上的thread 可以看成是轻量级的thread. 一个actor可以给另一个actor push msg 这样系统中就可以存在大量的独立活动单元,是并行系统的基本组件. 2.Intel TB

氪信资深数据科学家主讲:如何构建基于AI的金融风控系统 | 硬创公开课

高风险.高收益是金融行业永恒的标签.也因如此,金融行业非常重视风控.据多位资深金融人士表示,从事风控后,他们总是处于战战兢兢的忧虑中.他们上一次大规模的忧虑发生在十几年前.世纪之交的美国缺乏对于风控意义的认知,明明借着互联网的东风却在半途摔了个七零八落. 新科技的出现必然会对原行业产生一定影响.技术无所谓利弊,问题在于人的使用.在风控得到足够重视,AI成为最热门科技的现在,诸多从业人士不由得开始思考AI的应用价值,如何将AI与风控相结合并发挥出其积极作用? 本期雷锋网公开课邀请到氪信资深数据科学

Plume公司同名家庭WIFI扩展系统

Plume公司宣布将在今年秋天推出同名的WIFI扩展系统,其核心组件是售价49美元的Pod,这种类似于插头Pod插入电源插座,即可为每间客房提供需要的无线网络连接,这种Pod基本算是AP产品,但是Plume声称已经开发了一个漂亮的智能系统来支持这些Pod. 安装这种智能系统应用程序大约需要两分钟,这些Pod与Plume云通信,所提供的覆盖范围,速度和可靠性远远超越其他任何解决方案.用户在智能手机上通过Plume应用程序即可控制一切. Plume表示这套系统提供自适应无线网络连接,是针对整个家庭的

转 两次hbase丢失数据的故障及原因分析--hbase split过程

hbase的稳定性是近期社区的重要关注点,毕竟稳定的系统才能被推广开来,这里有几次稳定性故障和大家分享.     第一次生产故障的现象及原因     现象:       1 hbase发现无法写入       2 通过hbck检测发现.META.表中出现空洞,具体log            是:;Chain of regions in table ...  is broken; edges does not contain ...       3 此时读写失败       修复方法:直接使用c

横向扩展NAS迎战大数据的5大原则

对将http://www.aliyun.com/zixun/aggregation/13739.html">非结构化数据转化为可操作的商业智能的美好前景感到兴奋?你需要做的第一步是创建一个可以处理PB级数据的820.html">存储架构.EMCIsilon的Nick Kirsch表示,横向扩展NAS(网络附加存储)是最佳解决方案,他还为首席信息官提供了用以判断横向扩展NAS的五个原则. 随着企业开始进军大数据世界---数字化纸张文件和保存电子邮件通信,Word文档.Exce

Windows Server 2008系统下的数据备份技巧

WindowsServer2008的设计允许管理员修改其基础结构来适应不断变化的业务需求,同时保持了此操作的灵活性.它允许用户从远程位置(如远程应用程序和终端服务网关)执行程序,这一技术为移动工作人员增强了灵活性.Windows Server 2008使用Windows部署服务(WDS)加速对IT系统的部署和维护,使用WindowsServer虚拟化(WSv)帮助合并服务器.对于需要在分支机构中使用域控制器的组织,Windows Server 2008提供了一个新配置选项:只读域控制器(RODC