4

我有一个服务器应用程序,它稍微简化了,它定期通过一个不够强大的服务器的 rest-api 进行测量。这些值应该在本地缓存(并且带有时间戳/不可变),可以存储为FloatBuffer,其中每个位置对应于一个测量样本。有一个 webbrowser 应用程序会定期发出 ajax 请求来更新网页上的一些整洁的统计信息,如下图所示:

描述 REST 测量服务和演示的系统架构的图片

假设服务器已经启动并运行,还有很多地方可能会出现错误

  • REST 测量服务器可能无法访问(服务器只是在本地存储测量值)
  • 与测量服务器的网络连接可能已断开
  • 存储可能已满或以某种方式损坏
  • 浏览器可能会失去与服务器的联系并尝试再次使用它

我处理错误的一般策略应该如下:

如果通过 REST 从测量服务获取值时出现问题,则应该每分钟重试一次。如果错误持续超过 30 分钟,则应通知管理员。如果出现磁盘问题,应立即通知管理员,或者最好在磁盘变满之前通知管理员。

最终用户体验应尽可能对错误透明,但应用程序仍应尽可能正常运行通过通知用户发生错误并显示可用的最新数据。

关于网络问题(通过由作业触发的代理使用clj-httpScheduledThreadPoolExecutor发出 REST 请求)以及尝试刷新磁盘时的磁盘问题,我如何找到要处理的错误FloatBuffer

什么是实现上述相当有状态但算法策略的明智方法?我应该在报告错误时简单地处理错误agent并切换到某种恢复模式作业吗?

4

1 回答 1

0

在这种涉及不同系统上的多个组件的交互中,应避免最终用户执行许多同步操作。它只是有时间限制并需要立即报告错误的同步操作。

一旦最终用户的交互将系统异步,您在错误处理机制上也有很多选择......在最终用户与系统交互的地方,您可以拥有一个错误映射器来翻译所有错误来自各个组件的用户可以理解的消息。

应该给用户一个 API 来查询他提交的请求的状态。那应该能够判断请求是否完成或是否有错误。如果网络连接需要更多时间,状态消息可以通知用户。

在任何分布式系统中,每个组件都会在某个时刻报告错误。一些 API 为此提供了错误侦听器接口。这将异步向用户报告错误。看看 JMS 之类的 API ( http://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html )。它们被证明可用于复杂系统,并具有良好的错误处理机制。

于 2014-01-18T03:54:16.220 回答