首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请帮我设计这个事件报告系统

请帮我设计这个事件报告系统
EN

Stack Overflow用户
提问于 2011-06-30 21:38:07
回答 3查看 156关注 0票数 1

我正在尝试设计一个通过web服务将活动事件报告到数据库的系统。web服务和数据库已经构建好了(COTS软件)-我所要做的就是提供事件源。

不过,问题是事件源需要具有容错能力。我们有多个可与之对话的复制数据库,因此,如果我正在与之对话的web服务或数据库出现故障,软件可以快速切换到另一个正常运行的数据库。

不过,我需要帮助的是当所有数据库都关闭时的情况。我已经设计了一个队列,它将在事件堆积时保持不变(一旦连接恢复,就会将它们突起),但该队列是一个内存结构:如果我的应用程序在这种状态下崩溃,或者如果断电等,那么队列中的所有事件都会丢失。这是不可接受的。我需要的是一种持久化事件的方法,这样当数据库重新联机时,即使在断电或崩溃的情况下,我也可以发送一系列排队的事件。

我知道我不想重新实现队列本身来使用文件系统作为后备存储。这是可行的(我也试过了)--但是当硬盘成为瓶颈时,这种方法会显著降低系统的速度。除此之外,我想不出一种方法来设计这个系统,以便只有在无法访问数据库的情况下,才能将所有事件安全地存储在硬盘上。

有谁有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-30 21:51:23

当我需要具有容错能力的消息传递(和/或有保证的交付,根据您的描述,我猜您也需要)时,我通常求助于MSMQ。它提供了容错(在机器重新启动的情况下,消息存储在磁盘上)和有保证的传递(消息将自动且连续地重新发送,直到它们被接收为止),以及事务性发送和接收、消息日志记录、有害消息处理和其他功能。

我已经能够使用MSMQ实现每秒几千条消息的吞吐量。坦率地说,我不确定您在保持容错能力的同时还能做得更好。

票数 0
EN

Stack Overflow用户

发布于 2011-06-30 21:54:35

msmq。我想你也可以看看Job object的概念。

票数 0
EN

Stack Overflow用户

发布于 2011-06-30 21:59:58

我同意大家的观点,最好使用像MSMQ这样的开箱即用的系统,并且手头有一套消息传递模式。

无论如何,如果你必须自己做,你可以在内存数据库中使用,而不是自己序列化数据,我相信它应该足够快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6535624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档