如何在简单的Web服务中实现可伸缩性

时间:2012-02-29 09:45:37

标签: .net scalability

这可能是一个愚蠢的查询,但我多次遇到这个查询。如果您只有一个Web服务,进行正常计算(例如A + B),该怎么办?

现在,数十亿用户正在使用此服务。如何确保您的服务具有可扩展性?你怎么能说它可以处理数十亿次点击。

最初,这对我来说似乎是一个愚蠢的问题。但实际上,如果你只有一个正常计算的网络服务,它就无法处理数十亿次点击。

那么,我们如何才能实现数十亿不断增长的用户希望使用此服务的可扩展性。

注意:请求不要基于硬件部分或负载均衡器进行回复。此查询仅与软件(其他负载均衡器)

相关

1 个答案:

答案 0 :(得分:1)

在某些时候,您将受到CPU,RAM或OS / NIC连接等限制的约束。这个问题非常模糊,但是在一般情况下的内容

  • 适当使用缓存(A + B没有任何缓存,但在大多数实际情况下都有)
  • 确保开销最小化 - 例如,启用了大量协议选项的WCF(例如,会话+事务+消息加密)和原始套接字服务器之间的开销存在差异; ServiceStack是中间的一个很好的折衷方案,提供精益吞吐量,没有WCF那样多的开销
  • 如果服务的某些部分涉及外部时间限制资源,您可能需要考虑基于异步的实现
  • 衡量一切并优化;我们使用mini-profiler来帮助告诉我们在哪里花时间

但也许比什么都重要:

  • 设计系统,以便您可以通过添加其他app-server
  • 进行扩展

抱歉,即使你不想这样做 - 这也是你在这里拥有的最好的工具。尝试在单个节点上执行此操作存在许多问题(尤其是正常运行时间) - 例如,它希望在某个时刻运行垃圾收集;如果你的所有流量都流向一个节点,那么可能会导致积压波动大到足以造成伤害