2009-11-22 43 views
2

我正在研究需要从某些本地资源和某些非本地资源获取数据然后显示它的Web应用程序。因为从这些资源获取数据可能需要很长时间,所以我正在考虑使用actors概念,以便每个actor都负责从相应资源中获取数据。请求线程将等待每个参与者完成其任务,然后使用ajax仅更新依赖于该数据的网页部分。这样,用户一收到数据就会立即开始查看数据,而不是等待所有数据完成,然后再查看数据。需要关于Web应用程序的设计/体系结构的意见

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

感谢, 加里

回答

4

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

Richard Monson-Haefel的book on JMS包括它。

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

顺便说一句,Twitter使用Scala的东西很像你正在考虑的东西。这里有一个interview与他们的一些开发者;他们描述他们使用Scala的一种方式:

罗比指针:我们的很多建筑是基于让Rails在做自己最擅长的,这是AJAX,网络前端的网站是什么,用户看到。我们可以从请求/响应循环中卸载任何内容。因此,我们将这些任务排入消息传递系统,并由后端守护进程处理它们。

2

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

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

1

行动者将是一种方式。你基本上建立了一个JMS的轻量级版本。 Lift很好地完成了彗星的工作。 除了斯卡拉演员和电梯演员外,您还有akka actors。当Scala Swarm生产准备就绪时,您也可以做好准备。

0

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

相关问题