工作者角色WCF性能

时间:2011-10-20 15:02:46

标签: wcf azure

我正在尝试确定性能最佳的WCF服务托管方案。我正在组装一个非常高容量的内部部署Web应用程序(最终将在Azure中托管)。 ASP.Net应用程序将使用NetTcpBinding与工作者角色中托管的WCF服务进行通信。我想验证以下假设:

1)以工作者角色托管服务,然后使用服务总线(使用ACS进行安全性)连接客户端和服务总是比在工作者角色中托管WCF服务,直接连接到端点和使用用户名慢/密码方法。

2)REST服务总是比NetTcpBinding服务慢,因为它们使用HTTP而不是二进制。

最初,我选择了ServiceBus方法,因为我喜欢安全机制的清洁程度,但除非正在进行的连接可以是Direct,否则继电器将导致大量开销。

基于这些假设,我选择了: -WCF服务托管在工作者角色中 -custom用户名/密码或使用ACS用户名/密码?????? -NetTcpBinding

这听起来对吗?另一个要求是我需要创建的安全特定代码量最少。那么,我应该使用ACS用户名/密码模型还是????

如何设置性能最佳,自定义最少的代码安全性的任何见解都会很棒!

感谢

2 个答案:

答案 0 :(得分:2)

第一:基准,基准,基准。我们对Azure的性能特征感到非常惊讶;特别是SQL Azure比我们的Rackspace托管系统要慢两到三倍。数据库和服务器之间的延迟使其他一切都黯然失色。

那说:理论上我确认你猜测在客户端和服务之间使用用户名/密码会比ACS快。

但是你需要进行任何凭据检查吗?你可以使用私有内部端点(如下所示:http://msdn.microsoft.com/en-us/library/windowsazure/gg432980.aspx) - 如果是这样,那么就不需要任何凭据检查。

如果您确实需要公开公共端点,那么我会认真考虑使用客户端SSL证书,因为这可以提供加密和身份验证。

关于REST与二进制文件,很大程度上取决于您正在使用的应用程序类型。我使用Microsoft REST堆栈的经验是它非常有效:在实践中,当建立连接和数据流动时,您基本上在客户端和服务器之间有一个原始的TCP连接。但是,您通过REST获得的是HTTP语义,使用负载均衡器的能力以及一般的便利性。

但是,再次:我会创建一些示例应用程序并自行测试。 (然后回来并发布指向您发布结果的博客条目的链接,嗯?)

答案 1 :(得分:0)

我不会使用ACL,除非你真的需要它,我不认为这是你的场景。添加额外的代理仅用于验证客户端将增加不必要的延迟。其次,使用NetTcp不需要辅助角色,只需使用tcp端点配置Web角色即可。这将使用WAS和TCP在IIS中托管您的服务。您甚至可以在azure的私有端点中配置WCF服务,只有在azure中托管的Web应用程序才能看到,因此不需要身份验证。