一个Web应用程序如何处理数千个请求?

我去了几个网站,并注意到他们都使用AJAX技术进行诸如聊天,消息等许多任务。 他们显然使用了很多的httprequests。 我的问题是,如果您使用AJAX创build一个简单的网站,并且您希望每小时只有几个人,然后开始每小时logging1000个成员 – 如果您只升级到速度更快的服务器,单个Web应用程序每小时可以处理更多请求还是你必须重写代码? 到底如何“扩展”Web应用程序?

这是一个非常非常非常复杂的问题,很多聪明人花费大量时间思考。

也就是说,有几个可以实现的机制可以引入,这将有助于提高可伸缩性。 但是,最终归结于您的应用程序,以及如何特别缩放。 例如,您可以按比例缩放Oracle,而不是按比例缩放Apache。

首先,不要太担心可能发生的事情。 太多的开发者担心“也许”而不是担心“现在”。 绝大多数的应用程序和网站不需要任何不寻常的东西。

除了这个免责声明之外,在devise和编码高度可扩展的应用程序时,通常还有一些应该遵循的原则。 想到“无所事事”的概念。 关注点分离。 好的开发人员认识到这一点,并可以从第一天开始。

常用技术列表:

  1. caching。 实现前端图层以保持图像和数据查询不会触及后端。 也是通过像memcached这样的对象层。 我们的目标是尽量减less工作量并尽可能地回复客户。

  2. 数据存储分片。 这样可以使数据层横向扩展,从而在达到容量时可以添加额外的数据库系统和服务器。 通常有一个“分片键”或sorting,指定哪一个数据库服务器上有一个给定的数据。 这并不止于RDBMS层。 文件存储和不应该被考虑。

  3. 负载均衡。 允许我们添加更多的前端客户端(Web服务器)来处理请求负载。 这就是整个“无共享”方法的地方。这些networking服务器应该是无状态的,这样失败并不重要。 然后可以通过添加更多的机器进行水平缩放。 由于我们的数据分布在后端层,他们只是放下并处理请求。 平衡algorithm被用来挑选不繁忙的服务器。 可以说,传播负载。

  4. CDN。 这种build立在#1,但依靠CDN提供商。 我们再次build立在尽可能远的地方回答请求的概念上。 甚至有一个完整的“边缘包括”语言来pipe理这个东西。

  5. 数据复制。 例如,将一个写节点复制到一对读节点。 由于大多数Web应用程序都是快速读取的,因此我们可以将读取操作引导至读取节点,同时通过写入节点进行写入操作。 MySQL,Postgres,Oracle,MSSQL都支持这个,像MongoDB这样的最终一致的NoSQL选项。 #2这不一定是相互排斥的。

我确信我忘记了一切,因为我把所有这些都忘掉了,但是你明白了。 核心,应用程序需要被devise为可扩展的。 如果有这样的话,可以通过部署一个智能体系结构来传播负载和无限增长。