工作者角色WCF性能



我正在尝试确定性能最好的WCF服务托管方案。我正在组装一个非常大容量的本地web应用程序(最终将托管在Azure上)。ASP。Net应用程序将使用netttcpbinding与驻留在worker角色中的WCF服务通信。我想验证以下假设:

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

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

最初,我选择了ServiceBus方法,因为我喜欢安全机制的干净性,但是除非正在进行的连接可以是Direct,否则中继将导致显著的开销。

基于这些假设,我选择了:在worker角色中托管的wcf服务-自定义用户名/密码或使用ACS用户名/密码??????-NetTcpBinding

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

任何关于如何设置最佳性能,最少自定义代码安全性的见解将是伟大的!

谢谢

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

也就是说:理论上我同意你的猜测,在客户端和服务之间使用用户名/密码将比ACS更快。

但是你需要做任何凭证检查吗?您可以使用私有的内部端点(如:http://msdn.microsoft.com/en-us/library/windowsazure/gg432980.aspx)吗?如果可以,则不需要进行任何凭据检查。

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

关于REST与二进制,很大程度上取决于您正在使用的应用程序的类型。我对Microsoft REST栈的经验是,它非常高效:在实践中,在连接建立和数据流动之前,基本上在客户端和服务器之间已经有了一个原始的TCP连接。然而,使用REST所获得的是HTTP语义、使用负载平衡器的能力和一般的便利性。

但是,再一次:我将创建一些示例应用程序并为您自己测试。(一定要回来贴一个链接到你发布结果的博客,嗯?)

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

最新更新