AppFabric缓存API(本地,而不是Azure)是否使用WCF作为其通信机制?我们将AppFabric集成到一个非常高容量的Web应用程序中,并且在一些WCF调用中看到了大量瓶颈。分析器使似乎像这些来自我们的缓存库,但它们都是非常低级别的系统调用,所以我们很好奇......
是通过一组直接的TCP套接字连接访问的appfabric缓存吗?或者它们是否是一些更高级别的协议/设计? Appfabric除了其他提供程序(如memcached)之外还有很多好处,但是如果协议开销在高容量系统上如此之多,我们担心它可能会导致问题。
谢谢!
答案 0 :(得分:3)
是的,它使用了WCF。更具体地说,它使用tcp传输上的二进制消息编码全部使用自定义配置的设置,我确信这是由AppFabric缓存团队在大量负载测试场景之后选择的。它还默认启用安全性(传输和消息签名/加密),肯定会增加一些CPU开销。如果您确定网络设计是安全的,可以禁用它们。
安全性往往会增加很多开销,如果您为缓存集群/客户端应用程序提供了安全的环境,那么您应该尝试取消它。 Check out the section titled "Security Settings" on this MSDN page了解有关如何配置客户端的更多详细信息。 Also check out the section titled "Cluster Configuration Storage Location Settings" on this MSDN page有关如何在主机上配置安全性的详细信息(注意:,您可以使用Set-CacheClusterSecurity
PowerShell命令轻松设置这些内容。)
答案 1 :(得分:2)
AppFabric的分布式缓存和本地缓存方面使用WCF,是的。你在使用perfmon吗? WCF和AppFabric Cache都提供了perfmon计数器,可以让你精确地固定它。如果您使用本地缓存,是否使用通知?那当然会增加骚扰。
访问缓存时,您是否正在进行大量锁定?根据我的经验,这似乎大大降低了AppFabric Cache的性能。
此外,Windows安全性以及Sign或EncryptAndSign保护也会受到相当大的惩罚。
答案 2 :(得分:0)
完全赞同德鲁所说的。
我想通信部分已经针对性能进行了优化,不应该成为瓶颈。
您可能还想看一下针对Windows Server AppFabric的缓存性能的此案例研究http://www.griddynamics.com/images/files/af_cache_benchmarking_1.4.pdf