使基于REST的Web服务(POST)异步是一次处理数千个请求的最佳方法(请记住,我只有单个服务器实例为请求提供服务)?
编辑: 泽西岛被错误标记。 例如:我有一个基于休息的Web服务,应该在很短的时间内(约60秒)由10万个客户端使用。我知道如果我被允许部署多个服务器实例,那么我可以使用负载均衡器来处理我的所有传入请求并相应地委托它们。但我被限制只使用单个实例。我可以在此限制范围内选择哪种设计? 我可以考虑使请求异步(它不会立即响应客户端),以便能够让服务器摆脱这种负载并按照自己的节奏处理请求。 现在我们可以忽略内存限制。 如果这澄清了您的疑问,请告诉我?
答案 0 :(得分:1)
术语异步在不同的地方可能有不同的含义。对于Web应用程序代码,它可以引用Nonblocking I / O服务器,例如Node或Netty / Akka,这是HTTP请求在同一工作线程上进行时间复用的一种方式。如果您正在编写回调或使用异步或未来构造,它可能是非阻塞I / O,人们有时将其称为异步。
但是,我可以在Node上运行REST API来实现非阻塞I / O,但API或整体架构仍然是完全同步的。例如,假设我有一个API端点POST /照片,它接收照片,创建图像缩略图,将照片的URL存储在SQL Db中,然后将图像存储在S3中。 REST API仍然可以阻止从初始POST直到处理和存储图像之后。
第二种方式是服务器将照片处理作为作业接受并立即返回。然后,服务器可以将照片存储在内存或基于网络的队列中,稍后由其他一些工作线程处理。事实上,我甚至可以使用阻塞服务器来实现这种异步架构,就像一些老旧的Java 7和Jetty一样。