2010-05-19 69 views
3

我最近被赋予重建现有RIA的任务。我设计的新RIA基于Silverlight,具有连接到MS SQL Server的WCF服务。这是我第一次做这样的事情,所以我不知道如何设计整个事情。首次架构?

基本上,客户端可以通过看“股”(允许客户选择不同的时间段,设置等)的图表。我从本质上写了整个应用程序,但我不确定如何把它放在一起。

的图表是直接基于数据库,并创建图表上的数据点应该,一些计​​算需要做的(不是很贵的)。

我遇到的问题是决定在哪里把计算(客户端或服务器端?还是一半一半?)

我应该找帮我决定在计算应做哪些因素?我该如何去优化这个(缓存等)?

显然,这是一个很广泛的主题,所以我不希望立即回答,但任何帮助/在正确的方向指向/资源将不胜感激。

+0

不应该标记为CW? – pblasucci 2010-05-19 18:39:54

回答

4

这种应用程序的一些提示。
在客户端放置尽可能多的逻辑。
使客户端负责会话数据,使所有的服务器代码无状态。
尽量减少进出服务器的流量(较大的请求比多个较小的请求效率更高),以便尽可能合并请求。

3

如果这个项目很可能会增长超过它的当前功能设置,我认为它可能是执行计算客户端是一个好主意。这可以避免扩展问题,因为您使用的所有客户端CPU比您单一的贵重服务器CPU要高。然而,这依赖于能够以有效的方式将所需的数据传输到客户端,否则您会用网络瓶颈来替换处理器瓶颈。

至于缓存它取决于您的输入,客户端的用户可以影响哪些变量?如果它们可以改变的任何变量都是离散的(即它们可以是一组固定的值),那么它们就是缓存的候选对象。例如,如果用户可以选择股票变化的日期范围来查看,那么这可能不是很有用,但是如果他们只能选择一年,那么您可以按年份缓存数据集(将每个数据集下载到客户端并执行您的计算)。我不担心缓存过多,除非你发现它是一个真正的性能问题,它只会让你的代码更复杂,所以在你证明你需要它之​​前不要添加它。其他

一两件事,如果这个项目不太可能是一个长期的关注,然后执行计算无论是简单和最快的,你可以,如果项目变得更加重要稍后再讲。

2

真的真的仔细有关实现客户端缓存。缓存是INSANELY很难做到正确,同时保持性能,安全性和正确性。请注意,您的数据库服务器的缓存机制已经可能比您在不到2周的时间内实现的任何本地缓存机制好得多!

我希望您尽可能在后端做更多的工作,并限制客户以适合您用户的方式呈现数据。虽然许多人可能在这个建议望而​​却步,它基于的若干意见从过去建设许多这样的系统:

  • 如果你要过滤一些您的服务返回的数据,你刚刚浪费了数千个时钟周期,无需离开服务器
  • 如果您要对数据进行排序,您的数据库可能会在等待数据的同时为您进行排序(通常使用空闲的CPU滴答)从磁盘读取。
  • 您的服务器很可能比您的客户端拥有更多的CPU和RAM,并且在等待磁盘读取扇区时,可以使用排序,筛选,运行内联计算等等的“空闲时间”。

正如Roman的建议:尽可能减少客户端和服务器之间的往返次数。

但最重要的是:

  1. ,然后再开始设计系统,说明你的绩效目标
  2. 设计你的想法会实现这些目标。尝试找到设计中的瓶颈,尤其是您拨打阻止电话的地方。无论你在哪里,都可以重新设计这些区域以使用异步模式。
  3. 构建您的预期解决方案
  4. 测量您的实际perforamnce实际的真实世界负载
  5. 如果你在你的预期业绩目标,那么你就大功告成了下。
  6. 如果不是,请确定您花费的时间过长并调整系统该部分的设计。转到3.

不要试图在一个尝试中构建完美的系统 - 无论您尝试多么努力,都有可能出现各种原因,包括用户期望,服务器处理所需负载的能力,客户处理返回数据的能力,网络承载流量的能力等。

现在他们已经有点老了,但我建议您阅读一些早期的帖子在http://blogs.msdn.com/richardt关于设计和构建面向服务和分布式系统的更多想法。