需要关于Web应用程序的设计/体系结构的意见

时间:2009-11-22 06:12:06

标签: scala push lift

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

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

谢谢, 加里

4 个答案:

答案 0 :(得分:4)

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

Richard Monson-Haefel的book on JMS涵盖了它。

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

BTW,Twitter使用Scala的东西很像你正在考虑的东西。这是与他们的一些开发人员的interview;他们描述了他们使用Scala的一种方式:

  

Robey Pointer:我们的很多架构都是基于让Rails做最好的事情,即AJAX,网络前端,网站 - 用户看到的内容。我们可以在请求/响应周期中卸载任何内容。因此,我们将这些任务排入邮件系统并让后端守护程序处理它们。

答案 1 :(得分:2)

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

Udi Dahan关于此方法的博客很多,也是可以在这种情况下使用的.NET消息总线(NServiceBus)的作者。请参阅示例http://msdn.microsoft.com/en-us/architecture/aa699424.aspx

答案 2 :(得分:1)

演员将是一种方式。你实际上是在设置一个轻量级的JMS版本。而且Lift很好地完成了彗星的工作。 除了Scala演员和Lift Actors之外,你还有akka actors。当Scala Swarm成为生产准备就绪时,您也将为此做好准备。

答案 3 :(得分:0)

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