高性能服务器 – 我应该使用什么?

我有一个大型游戏引擎,为手机客户端和网站提供服务。 DB是MSSQL2008,引擎是用C#编写的。

该网站是用ASP.NET MVC构build的,手机的Web服务也是基于ASP.NET MVC(可能将被迁移到WCF或纯套接字服务器)。

Web站点和Web服务位于IIS 7服务器上,而DB位于专用服务器上。 两者都连接在本地快速LAN上。

游戏需要每个用户的实时响应(不到1秒)。 当我对服务进行了一些负载testing时,似乎在〜250个用户上达到了1秒的响应(在50秒左右,大约是200ms)。 它应该支持超过10000个连接的用户。 (我猜是服务器复制)。

我想添加一个层 – 一个专门的游戏Web服务的实时服务器。 我听说Python可以用来构build非常高性能的服务 – 这将是一个聪明的想法来添加这个层? (该层应该有内存中的临时数据库来为实时播放器提供服务,然后每隔X秒将其全部转储到后端数据库)。

我的build筑好吗? 那怎么能改进?

我可以对SQL Server部分说话。

你有什么硬件规格? 什么是您正在使用的SQL Server版本? 虽然您可以将更多的内存添加到框中,并将数据保存在内存中,但解决scheme在一段时间后不会缩放。 如果你想扩展许多用户,你需要在这里使用很多好的实践。

通常的瓶颈是内存,IO,CPU。

  1. 有更多的记忆帮助。
  2. 有良好的磁盘系统[RAID 10]确实有帮助。 将数据和事务日志分离到单独的主轴上是一个好习惯。 根据IO的数量,将tempdb移动到它自己的主轴上并寻找瓶颈。 是否受到IO或分配瓶颈的限制? 使用跟踪标志TF 1118和许多tempdb数据文件有帮助。
  3. 预先分配数据和日志文件,以便在正常业务操作期间不会自动增长。
  4. 在做一些尽职调查之后,先从好的模式+好的代码开始。 蹩脚的代码是蹩脚的代码和垃圾是垃圾出来,不pipe你使用什么平台。
  5. 理解索引结构非常好,并有一个很好的索引维护计划(更新统计)
  6. 用大量的数据加载testing你的sql代码。
  7. 查看SQL Server中的瓶颈和性能问题。 等待统计数据和虚拟文件统计在这里非常重要。 根据cu,逻辑IO和高执行计数确定哪些程序是昂贵的。 看看缺less的指标DMV。 学习从SQL Server计划caching中读取数据。
  8. 查看即时文件初始化
  9. 这里还有很多其他的东西,很难把它们全部列出来。 这是一个很好的起点,但它不是一个详尽的列表。

参考: http : //dl.dropbox.com/u/13748067/SQL%20Server%202008%20Diagnostic%20Information%20Queries%20%28April%202011%29.sql

http://www.sqlskills.com/BLOGS/KIMBERLY/category/Indexes.aspx

http://www.sqlskills.com/BLOGS/PAUL/category/Indexes-From-Every-Angle.aspx

http://www.datamanipulation.net/sqlquerystress/

它接近我,你应该问自己,瓶颈是第一位的。

  • 大多数情况下,SQL服务器是磁盘IO的硬消费者; 本身就是一个整体优化的主题(数据库模式,SQL查询与StoreProc等)。 您可能想要使用SQL分析器。
  • 你是否使用任何使用Web服务的状态机制,如果你使用SQL服务器来保持这个状态,这可能是一个性能问题。
  • 你有没有试图分析你的.Net代码和你的SQL查询代码?
  • 您是否通过SOAP发送二进制块,二进制内容需要在base64中编码,这可能会导致一些开销(networking和Bandwith)与SSL相同;
  • 你有没有要求你使用WebService / SOAP以外的较less口头协议? 也许是一个HTTP / JSON协议,甚至是一个自定义的二进制文件。
  • build立一个python代理是一件有趣的事情,但我敢肯定,你可以使用.Net和Windows服务来实现类似的概念,但是你也可以问自己以什么样的价格,如果你需要把整个事情集中起来,提供更多的同步和健壮性(防撞function)。

游戏需要每个用户的实时响应(不到1秒)。

这些都是手机用户,具有不同的服务质量(3G / 3G / 4G / Wi-Fi),接收,延迟,抖动,碎片等,您预计响应时间<1s? 你有没有testing过这一个电话,更不用说数百?

  1. 游戏服务器通常使用基于UDP协议的自定义协议
  2. 就我所知,没有公共的框架或者其他什么东西可以帮助我们从这个低层次上为这个协议创build这个服务器
  3. 用于存储状态使用内存或某些caching,而不是SQL DB