SQL Azure与WCF性能比较

4
我看过很多关于Azure性能的基准测试,但我想知道是否有人进行了比较,以查看以下哪种情况对于厚客户端应用程序的性能更好。
  1. 连接到在云中运行并连接到本地SQL数据库的WCF服务以访问数据。 为了举例,让我们说它是一个具有底层实体框架模型的WCF数据服务,该模型连接到Azure上的SQL数据库。
  2. 直接从客户端连接到SQL Azure实例。 为了举例,让我们说它与上述相同的查询和实体框架模型,但是直接连接到SQL Azure实例而不是通过WCF数据服务。
谢谢。
3个回答

3
我强烈建议您选择WCF+SQL Azure。
SOA的基本理念之一是构建厚重而不是冗长的接口。当在云中托管时,这一点尤为重要,因为客户端距离数据较远。
如果您需要填充复杂的业务对象,则可能需要运行多个查询。通过使用WCF服务与SQL Azure通信,您可以在Azure环境中运行所有这些查询,并将Internet往返次数保持最少。
当然,这样做的成本更高,但随着服务层的可扩展性,它的规模也更大。
这样做有许多优点:
1.客户端和数据库之间的分离(可以更新数据结构而不更改客户端)。
2.由于1,如果您需要对数据库进行分片,则可以。
3.如果您以后需要升级到SQL Azure联邦(发布后),则可以。
4.如果您想使用Azure缓存,则可以轻松挂钩。
5.安全性(1):您的数据库位于防火墙后面。
6.安全性(2):您可以对每个请求进行身份验证,而不仅仅是在连接时。
7.安全性(3):如果您正在处理文档/ blob存储,则不需要将存储帐户密钥提供给客户端。
我正在管理一些相当大的多租户系统,后端采用WCF+SQL Azure架构,效果非常好。
SQL Azure本身在Web上运行良好,以至于我甚至愿意在Azure中运行我的Dev数据库,但我不认为它是生产应用程序的好选择。
希望这有所帮助。

感谢 Jeff 的认可。在等待所有升级角色实例启动时获得的50个额外积分不算是一夜的坏工作。 - David Steele

1

从逻辑上看,我自己还没有进行过基准测试。

你正在询问哪个更快:SQL Azure(S) + Entity Framework (EF) + WCF 还是 S + EF

如果我们假设从云中以查询参数和结果集的形式传输的数据大致相同(除非 WCF 服务使用 SOAP 或其他 XML 格式,否则它可能会传输更多的数据),那么这两种情况之间唯一的区别就是 WCF 在中间所做的处理。虽然这种通信通常很小,但它不等于零,因此直接方法应该更快。

与速度无关,我认为创建一个 Web/Worker 角色来托管这个 WCF 服务并不值得。对于一个 10GB 的数据库,您将增加托管数据库的成本,并增加了一个似乎不合理的复杂性。

如果您已经有一个角色可以托管 WCF,则从设计角度来看,这可能是有意义的,我认为它不会对性能产生太大影响(取决于传输方法和使用的安全性)。


1

这个问题有几个方面需要考虑:

  • 性能
  • 成本
  • 安全性

在性能方面,你的第一个选项会多一次跳转,因此速度会慢一些。但是如果你有一个非常复杂的查询,两者之间的差异将非常小,与总时间相比可以忽略不计。

在成本方面,你的第一个选项需要额外的实例来运行WCF服务,因此成本更高。

在安全性方面,你的第二个选项会从互联网打开到数据库的端口,因此不太安全。


如果您在WAN上运行标准的SQL Server数据库连接,性能会非常慢...因此,问题实际上与MS为Azure驱动程序所做的优化有关... - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接