我有一个应用程序正在查询的只读SQL Server数据库。数据库托管在SQL Server Express上,SQL Server Express在Azure虚拟机中运行。所有执行的查询都非常相似。
现在我想在那里添加更多的虚拟机,并在它们之间进行负载平衡。目标是提高性能和高可用性(如果一台服务器宕机,我希望将查询返回到其余服务器)。
负载均衡的正确方式是什么?我的应用程序是一个.NET应用程序。
我可以将虚拟机配置为云服务。在这种情况下,Azure可以在TCP连接级别上在它们之间进行负载平衡。我能想到的另一种选择是在应用程序级别上执行此操作,以循环方式选择要连接的服务器。
发布于 2015-11-04 13:40:58
SQL Express和Performance或High Availability这两个词不能放在一起。同样,您将重新发明更高的SQL版本已经提供的特性。
在性能方面,SQL Express的内存限制为1 1GB,这是微不足道的。SQL性能的第一条规则是将数据保存在内存中,并避免进入磁盘。如果您不能在一个SQL实例中做到这一点,那么拥有多个实例可能不会充分改善情况,只会延迟最终的磁盘流失。您需要使用更高的版本,这会增加内存限制,更重要的是,它还包括其他几个有助于向外扩展的功能(例如,复制、可用性组、日志传送...)
如果您的数据大小非常小,可以放入1 1GB的内存中,那么只需在每个应用程序服务器上安装SQL Express即可。您声明您的数据库是只读的,因此您将不得不开发自己的方法来部署所述数据库(e.q.脚本)复制到多个实例。将SQL Express实例保留在每个应用程序服务器的本地,您可以完全跳过TCP,并通过使用共享内存与SQL对话来获得一些效率提升,而且您对高可用性的需求在某种程度上是没有意义的。您拥有一对一的应用程序到SQL实例架构。
现在,您的问题变成了前端负载平衡。如果您的应用程序确实是无状态的,则使用DNS轮询,或者使用粘性/会话感知的代理负载均衡器。
https://stackoverflow.com/questions/33511504
复制相似问题