2012-02-09 90 views
3

我正在研究iOS应用程序将使用WCF服务的项目。网络服务器在任何特定时间点的点击次数大约为900-1000次。每个请求可能需要1-2秒才能完成。预计每24/7每秒都会有相同数量的请求。WCF - 解决方案体系结构

这是我的计划:

  1. 写WCF RESTful服务(实例上下文模式将percall)。
  2. 请求/响应将在Json中。
  3. 有一些信息需要在服务器中保存 - 这些信息实际上是从另一个远程系统接收的 - 它在所有请求之间共享。由于使用数据库可能不是一个好主意(响应时间非常重要 - 客户可以等待最长时间为2秒),将它保存在服务器内存中会更好吗(比如静态字典 - 假设这个字典是一个收集150000个对象 - 每个对象由5-7个字符串类型及其键组成)。我知道,这是不稳定的!
  4. 每个请求会产生一个新的线程(通过使用Threading.Timers)来做一些清理 - 这个线程也会做一些数据库读写。

现在,如果稍后推出负载均衡器,那么内存中存储的对象不能在通过另一个节点路由的请求之间共享 - 任何想法?

我希望你的大师能够通过在整个架构上抛出你的意见/建议,WCF节流,对象状态持久等来帮助我。请提供一些关于所需硬件的指针。我们计划使用Windows 2008 Enterprise Edition服务器,IIS和SQL Server 2008 Std版本数据库。

添加更多t#3: 正如我所说的,我们从远程系统获得一些信息给服务。在托管WCF的Web服务器上,将安装远程系统的客户端,并且WCF引用其中一个客户端DLL以哈希表的形式获取信息(该方法返回哈希表 - 约150000个对象将在这里收集)。您是否建议将此信息写入数据库,并且到达该服务的iOS请求(每秒)会直接从数据库中检索此信息?如果它是静态的,它会比直接从这个散列表中消耗更好吗?

+0

如果你引入负载平衡器,我会坚持一个无共享架构。 – 2012-02-09 16:34:30

+0

我也会使用像Velocity这样的缓存平台,而不是自己滚动。 – 2012-02-09 16:35:04

+0

请参阅http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ – 2012-02-09 17:26:26

回答

3

由于您使用的是Windows Server 2008中我肯定会使用Windows Server应用程序面料缓存来存储您的状态:

http://msdn.microsoft.com/en-us/library/ff383813.aspx

它是免费使用,很好的支持和集成,是(更多或更少)与Windows Azure应用程序结构缓存兼容的API,如果您每次都将您的服务转移到Azure。在我们的公司(免责声明:不是我的团队),我们过去使用MemCache,但更改为App Fabirc Cache并不后悔。

3

让我根据我在WCF框架下服务于类似数量或请求的经验,3.5在当时的经验,抛出一些意见/建议。

我不同意#3。在这里使用数据库是正确的事情。为了解决响应时间,实施缓存和可能的cache dependency为了保持跨所有实例的数据同步(假设您是负载平衡的)(也参见上面/下面建议的应用结构)。在现实世界的场景中,数据经常发生变化,您必须将影响降至最低。

据我所知,我们使用梭子鱼硬件和软件来处理可扩展性。

考虑索引keys/values与Lucene如果适用。当涉及到读/写时,Lucene提供了非常好的性能。不要用它来存储你的整个数据,阅读它。如果使用正确,救生员。请注意,在负载平衡的环境中实现可能会很复杂。

基本上,缓存可能是您的体系结构唯一必要的更改。

+1

+1反对#3,以及如果服务因某种原因坠毁?再见150000个对象 – 2012-02-09 18:24:01

+1

但是可靠的分布式缓存可以大幅度提高性能...... – 2012-02-09 20:01:45

+0

@MikeGoodwin认为App Fabric只有Azure并且是$$$。很高兴知道,我一定会试一试! – maxbeaudoin 2012-02-09 20:11:11