Web服务的可扩展性框架/模式/良好实践?

时间:2010-06-21 09:05:19

标签: c# .net web-services architecture

我目前正在开发一个大型实时OLAP应用程序。所有数据都保存在RAM(几千兆字节)中,常见任务涉及对大量数据进行粗暴扫描(这很好)。处理结果通过Web服务(单例/多线程)公开,并使用基于Silverlight的客户端显示。

问题是各种客户需要不同的功能/算法,我不知道如何在服务器端提供可扩展性。对于客户端(Silverlight),我可以使用MEF / Prism,但我不确定在服务器上解决此问题的好方法。

请注意,理想情况下,其他网络服务应该对拥有大数据模型的主/当前服务的数据进行直接访问(即不进行编组)。

有没有:

a)框架/库

b)模式

c)良好的实践

这有助于我模块化应用程序并选择所需的模块及其部署相对容易吗?

1 个答案:

答案 0 :(得分:1)

听起来像是依赖倒置是必需的:通过定义接口来隔离系统的逻辑部分(算法等),然后使用DI / IoC框架在运行时(或应用程序启动等)加载所需的实现。

我没有使用Ninject,但很多人都喜欢它,所以你可以尝试一下;还有Spring.Net

良好做法:

  • 确保您有明确的精确记录,以便了解正在使用的内容以及何时使用。
  • 考虑一下,如果所需的实现失败,是否需要加载“默认”实现,或者您是否故意想要失败以便错误地返回错误的数据(例如使用不同的算法)。
  • 我发现使用属性来装饰可注入模块确实很有用(特别是在你没有访问权限的基于Web的系统中)一个原因是你可以构建列出所有的页面或控件运行时的已知/可用实现。

您还可以使用属性方法构建一个UI,让用户选择他们想要的UI;我将它用于我构建的开源Web应用程序框架:http://www.morphological.geek.nz/Morphfolia/Capabilities/AttributeDriven.aspx