2

我正在开发一个 web 应用程序,它需要从一些本地和一些非本地资源中获取数据,然后显示它。由于从这些资源中获取数据可能需要任意时间,我正在考虑使用参与者概念,以便每个参与者负责从各自的资源中获取数据。请求线程将等待每个参与者完成其任务,然后使用 ajax 仅更新依赖于该数据的网页部分。这样,用户将在收到数据后立即开始查看数据,而不是等待所有数据完成,然后再查看数据。

我计划为此研究 scala/lift 框架。我在网上阅读了一些关于 scala/lift 的文章,并想探索这是否是解决这个问题的正确方法,以及 scala/lift 是否是一个不错的选择平台。我以前曾在 Java 和 C# 中工作过。欢迎任何意见、意见、建议。

谢谢,加里

4

4 回答 4

4

看看像 Java 的 JMS 这样的消息队列技术。消息队列允许您异步且可靠地处理长时间运行的后台任务。这是 Flickr 和 YouTube 等网站用于异步进行媒体转码的技术。您可以使用 Java EE 服务器或 JMS 技术(如 Apache 的ActiveMQ),然后在其上分层您的 Scala/Lift 代码。

Richard Monson-Haefel关于 JMS 的书很好地涵盖了它。

有关网站扩展和构建的更多一般帮助,请查看 Todd Hoff 的优秀博客highscalability.com/。有一些很好的指导可以使用消息队列以这种方式卸载长时间运行的任务。

顺便说一句,Twitter 将 Scala 用于您正在考虑的事情。这是对他们的一些开发人员的采访;他们描述了他们使用 Scala 的一种方式:

Robey Pointer:我们的很多架构都是基于让 Rails 做它最擅长的事情,即 AJAX、Web 前端、网站——用户所见。我们可以从请求/响应周期中卸载任何内容。因此,我们将这些任务排队到消息传递系统中,并让后端守护进程处理它们。

于 2009-11-22T06:17:02.250 回答
2

如果非本地资源源自其他服务或系统,事件驱动架构可能适合您。您可以将此 Web 应用程序设置为这些服务发布的事件的订阅者,而不是从非本地资源中提取。在收到有关其部分功能的消息后,它将在本地缓存它感兴趣的数据。这应该让您避免异步更新页面部分的问题(所有数据都可以在本地访问)。

Udi Dahan经常在博客中介绍这种方法,他还是可用于此类场景的 .NET 消息总线 ( NServiceBus ) 的作者。参见例如http://msdn.microsoft.com/en-us/architecture/aa699424.aspx

于 2009-11-22T11:08:45.580 回答
1

演员将是一条路要走。您实际上是在设置 JMS 的轻量级版本。而Lift在彗星方面做得很好。除了 Scala 演员和电梯演员,你还有akka 演员。当Scala Swarm准备好生产时,您也将为此做好准备。

于 2009-11-22T19:02:22.727 回答
0

如果延迟的信息与需要立即显示的信息不同,您可以使用 Lift 使用 LazyLoad 片段,该片段具有运行时间较长的计算(调用 Web 服务)作为其逻辑的一部分。当它准备好时,Lift 会负责将其插入页面。

于 2012-06-21T01:59:32.470 回答