在会话中缓存数据集以按需获取

时间:2014-04-21 15:02:51

标签: c# performance wcf delphi rest

我考虑使用WCF或mormot作为RESTful服务的框架,其中需要访问的业务/遗留代码是用Delphi编写的。绩效是项目的前提。 应用程序必须为负载平衡做好准备。 REST服务桌面的客户端是Windows应用程序。这些桌面客户端允许用户查看大量数据,SQL语句中包含大量结果集。实现服务以缓存记录集并通过REST服务缓慢使用它的最佳方法是什么。能展示一个很好的例子吗?记录集必须缓存在会话中,直到客户端完成咨询或决定进行完整提取。我正在寻找合适的架构?

启用负载均衡可以在WCF中运行吗?由于记录集缓存在单个服务器上,因此行获取请求(如果有)必须位于同一服务器上。

1 个答案:

答案 0 :(得分:3)

WCF和 mORMot 共享相同的高性能内核模式 http.sys 服务器。两者都具有IOCP和多线程功能。

为了提高性能, mORMot will be lighter将分配(更多)更少的内存,不会受到垃圾收集器冻结的影响,并且能够直接从数据库引擎获取JSON内容(绕过大多数临时数据转换和分配) - 以便can achieve amazing speed。简而言之, mORMot 旨在从头开始实现服务REST / JSON内容的性能 - 使用多线程内核(而例如node.js是单线程的)。如果您的目的也是缓存某些数据,那么 mORMot 可以很好地用作64位本机服务,如果需要可以访问所有系统RAM,并且内置real-time content compression

WCF是一个很棒的通用通信库,它可以是RESTful,但不是来自其(历史)根源的RESTful。我在WCF中看到的主要问题是难以在应用程序之间配置它(.exe.config调整可能令人困惑),并且它是一个很大的黑盒子。例如,当服务器作为Windows服务托管时,无法使用WCF实现Cross-origin resource sharing(WCF删除Access-Control-Allow-Origin: HTTP标头!):您必须在IIS中托管它 - 并且无法解决问题,而使用完整的开源解决方案,您可以解决任何问题。

可以使用相同的算法在 mORMot 和WCF中实现负载平衡。在您的情况下,不使用循环算法,基于内容的简单路由可能就足够了。

使用WCF来提供用Delphi编写的业务逻辑将是缓慢的,容易出错并且难以维护。混合技术会导致不必要的复杂性。我不会这样做。

如果您有现有的Delphi代码库和一些Delphi技能,我猜 mORMot 可能是更好的选择。它was reported例如生产中的单个服务器每天能够处理超过一百万个请求,服务于数千个并发客户端,服务器端为dedicated JavaScript process mORMot 设计目标之一是help working with existing code and legacy projects。但我不是100%公平,因为我是这个开源项目的主要维护者。 :)

相关问题