【发布时间】:2010-10-05 07:48:13
【问题描述】:
我有一个接受来自提供商的回调的服务。 动机:我不想丢失任何回调(当然,除非我的网络无法访问)。
假设不可能的事情发生了,我的 mysql 服务器在一段时间内无法访问, 我想在重试几次但失败后回退到辅助持久性存储。
我有哪些选择?队列,内存缓存?
【问题讨论】:
标签: mysql performance architecture persistence uptime
我有一个接受来自提供商的回调的服务。 动机:我不想丢失任何回调(当然,除非我的网络无法访问)。
假设不可能的事情发生了,我的 mysql 服务器在一段时间内无法访问, 我想在重试几次但失败后回退到辅助持久性存储。
我有哪些选择?队列,内存缓存?
【问题讨论】:
标签: mysql performance architecture persistence uptime
我推荐某种作业队列服务器。我个人使用 Starling 并取得了很好的效果。它使用 memcache 协议,因此很容易用作持久队列。 Starling on Github
【讨论】:
我之前已经为此在 SQLite 中放置了一个队列。不过,就我而言,这是为了防止与 MySQL 服务器的网络链接丢失——数据是本地生成的。
【讨论】:
您可以拥有一个备份 MySQL 服务器,并在主服务器出现故障时将您的连接切换到该服务器。如果它只是一个故障转移存储,您可以在应用程序服务器上本地运行它。
【讨论】:
你说你正在接收“回调”——你还没有说清楚它们是什么。什么是协议?是否通过网络。
如果是 HTTP,那么我想说最好的方法是,如果您的应用程序无法将数据写入永久存储,它应该向来电者,请稍后再试。
像回调这样的异步进程应该始终能够处理下游故障并将其请求排队。
我曾与支付服务提供商(Paypal)合作过。如果您无法完全处理请求,只需将错误发送回调用者即可。
【讨论】: