【问题标题】:How to achieve scalability in a simple web service如何在简单的 Web 服务中实现可伸缩性
【发布时间】:2012-03-18 19:12:45
【问题描述】:

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

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

一开始对我来说这似乎是一个愚蠢的问题。但实际上,如果您只有一个 Web 服务进行正常计算,它也无法处理数十亿次的点击。

那么,在数十亿不断增长的用户想要使用这项服务的情况下,我们如何实现可扩展性。

注意:请不要根据硬件部分或负载均衡器回复。此查询仅与软件相关(负载均衡器除外)

【问题讨论】:

  • 在某些时候,只有通过添加更多硬件才能进行扩展。您无法在用于 1000 个用户的同一台机器上为数十亿用户提供服务。

标签: .net scalability


【解决方案1】:

在某些时候,您会受到 CPU、RAM 或 OS/NIC 连接等限制的限制。这个问题非常模糊,但是一般情况下需要考虑的事情

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

但也许比什么都重要:

  • 设计系统,以便您可以通过添加另一个应用服务器进行横向扩展

抱歉,即使您不想这样做 - 它也是您拥有的最佳工具。尝试在单个节点上执行此操作会遇到很多问题(尤其是正常运行时间) - 例如,它会希望在某个时候运行垃圾收集;如果您的所有流量都流向单个节点,则可能会导致积压的涟漪大到足以伤害

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 2013-05-14
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    相关资源
    最近更新 更多