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