Wcf 第一次架构?
我最近接到了重建现有RIA的任务。我设计的新RIA基于Silverlight,带有连接到MS SQL Server的WCF服务。这是我第一次做这样的事情,所以我不知道如何设计整个东西 基本上,客户端可以查看“股票”图表(允许客户端选择不同的时段、设置等)。我基本上已经编写了整个应用程序,但我不知道如何将其组合起来 这些图应该直接基于数据库,要在图上创建数据点,需要进行一些计算(不是非常昂贵的计算) 我面临的问题是决定将计算放在哪里(客户端还是服务器端?还是一半一半一半?) 我应该寻找哪些因素来帮助我决定应该在哪里进行计算?我该如何进行优化(缓存等)Wcf 第一次架构?,wcf,silverlight,architecture,Wcf,Silverlight,Architecture,我最近接到了重建现有RIA的任务。我设计的新RIA基于Silverlight,带有连接到MS SQL Server的WCF服务。这是我第一次做这样的事情,所以我不知道如何设计整个东西 基本上,客户端可以查看“股票”图表(允许客户端选择不同的时段、设置等)。我基本上已经编写了整个应用程序,但我不知道如何将其组合起来 这些图应该直接基于数据库,要在图上创建数据点,需要进行一些计算(不是非常昂贵的计算) 我面临的问题是决定将计算放在哪里(客户端还是服务器端?还是一半一半一半?) 我应该寻找哪些因素来帮
显然,这是一个非常广泛的主题,因此我不希望立即得到答案,但任何帮助/指向正确方向/资源都将不胜感激。这类应用的一些提示。
将尽可能多的逻辑放在客户端上。
使客户端负责会话数据,使所有服务器代码无状态。
尽量减少往返服务器的流量(较大的请求比多个较小的请求更有效),以便在可能的情况下整合请求。如果此项目可能超出其当前功能集,我认为在客户端执行计算可能是一个好主意。这可以避免扩展问题,因为您使用的所有客户端CPU都比单个宝贵的服务器CPU更糟糕。然而,这确实依赖于能够以有效的方式将所需的数据传输到客户端,否则您将用网络瓶颈替换处理器瓶颈 至于缓存,它取决于您的输入,客户端的用户会影响哪些变量?如果它们可以改变的任何变量是离散的(即它们可以是一组固定的值),那么它们就是缓存的候选对象。例如,如果用户可以选择要查看的股票变化的日期范围,那么这可能不是很有用,但是如果用户只能选择一年,那么您可以按年缓存数据集(将每个数据集下载到客户端并执行计算)。我不担心缓存太多,除非你发现这是一个真正的性能问题,它只会使你的代码更复杂,所以在你证明你需要它之前不要添加它
还有一件事,如果这个项目不太可能是一个长期问题,那么在最容易和最快的地方实施计算,如果项目以后变得更重要,您可以重新考虑。在实施客户端缓存时要非常小心。在保持性能、安全性和正确性的同时,缓存很难做到正确。请注意,您的DB服务器的缓存机制可能已经比您可能在不到2周的时间内实现的任何本地缓存机制要好得多 我敦促您尽可能多地在后端进行工作,并限制您的客户端以适合您的用户的方式呈现数据。虽然许多人可能会对这一建议犹豫不决,但这是基于过去建造许多此类系统的大量观察结果:
- 如果您要过滤服务返回的一些数据,那么您就浪费了数千个时钟周期来传送从未离开服务器的数据
- 如果要对数据进行排序,则DB可以在等待从其磁盘读取数据时为您进行排序(通常使用空闲的CPU标记)
- 您的服务器很可能比您的客户机有更多的可用CPU和RAM,并且在等待磁盘读取扇区等时,有大量“空闲时间”用于排序、筛选、运行内联计算等