我计划托管多台服务器(50+),每台服务器将有超过 20K 的用户保持连接。用户之间有很多共享数据(例如,一个用户需要参考另一个用户准备的数据)。
如果我托管单个数据库服务器(最好是 Microsoft SQL 服务器),所有 (50*20000) 查询将排队到该单个服务器,这可能是主要的性能瓶颈。是否可以让多个服务器共享单个数据库。这样我就可以在多个数据库服务器上分发我的查询。如果这是不可能的,有哪些可用的选项?
更新:这是正在开发的全新游戏应用程序,我希望设计具有高度可扩展性。随着每个用户的分数发生变化(增加或减少一定数量),它将更新到服务器。反过来,服务器将回复“最近 50 个用户的列表”到该分数。这计划在每位用户不少于 1 分钟内发生。
因此,如果数据库表是按分数索引的,我们可以说每个用户每分钟将进行一次写入和 50 次读取。现在,如果 20K 用户连接到每个“连接服务器”,并且所有这些“连接服务器”依次查询单个 DB Server,它实际上将所有百万个请求排队到单个 DB Server。这显然无法在一分钟内完成所有这些请求。
因此,我正在寻找我们是否可以将这些查询分布在共享单个数据库的多个 SQL 服务器上。
不,您不能在多个服务器之间共享来自单个数据库的相同数据,至少不能在读/写模式下。冒着忽略您在这里过早优化的风险,有一些非常常见的扩展 SQL Server 的方法,但它们并不像您想象的那么简单,而且它们也可能无法满足您的所有要求(或预算,因为许多选项都需要企业版)。
读/写
对于读写缩放,您可以使用联合服务器和分布式分区视图“分片”数据。但请注意,这并不容易设置。另一种选择是合并复制,但它也可能需要设置和维护。
只读
您可以通过使用日志传送(或简单的备份/恢复)、事务复制、数据库镜像(尽管此功能已弃用,因此请注意长期项目)和镜像的数据库快照,将读取仅扩展到多个其他服务器,或者在 SQL Server 2012 中,AlwaysOn Availability Groups with readable secondarys。(此处与竞争供应商解决方案进行了一些很好但公认有偏见的比较。)
顺便说一句,我真的不喜欢“活动辅助”这个词,因为这对我来说意味着你可以读/写它们,而你不能。
编辑
鉴于更新问题中的新要求,似乎需要扩展的部分几乎已全部阅读。一个建议可能是在每个应用程序服务器上都有一个小实例(可以是 Express,只要其资源限制 - 最重要的是 10GB 数据文件 - 就足够了)。这个实例有两个主要目的:(1) 将更新排队到主服务器,这样应用程序就不必等待它们(并且可以组合来自不同用户的多个更新)和 (2) 作为数据存储只读信息,以便不必总是从主服务器检索。有了这个想法,实际上并没有一个简单的“打开”功能可以帮助实现这一点,但是在宏伟的计划中,设置非常简单。
根据您发布的要求,我建议使用事务复制将工作负载分散到服务器场,然后将只读 SQL Server 场放在硬件负载平衡器后面,然后硬件负载平衡器可以平衡整个服务器之间的连接。 SQL Server 场。
应用程序需要以这样的方式编写:写入全部完成到主服务器(您需要对其进行集群、镜像或设置在可用性组中以实现高可用性),并通过用于读取数据的负载均衡器。
这将为您提供跨只读服务器场的“近实时”数据同步。
我之前已经为大量工作负载设置过这样的配置。如果做得正确的话,效果会很好,但缺点是,如果你第一次没有做对,修复起来就会很麻烦。
归档时间: |
|
查看次数: |
23934 次 |
最近记录: |