IO 和 CPU 在四层应用程序中使用 Async APIController 绑定调用
IO and CPU Bound calls with Async APIController in a Four layers application
我有一个四层应用程序:
- HTMLUI层对UI服务进行AJAX调用(网络API控制器) .
- UI 服务 这是一个 Web API 控制器。 UI 服务调用应用服务。
- App Service 层,它具有通过 EF 直接调用数据库以及调用其他域服务(Web APIs)的方法。
- 域服务 也是 Web API。
第一层、第二层和第三层托管在一台机器上。域服务托管在不同的机器上。 SQL 服务器托管在另一台服务器上。
我的问题是:
如何区分 CPU 绑定和 IO 绑定 调用? UI 服务对应用程序服务的调用,CPU 绑定 是因为它们存在于同一个应用程序域中吗?
从应用服务到领域服务的调用是否IO Bound因为调用通过网络?从应用服务到数据库的调用也是这样吗?
我是否应该将所有方法都设为基于 async/await 的任务以利用可扩展性?我所说的可伸缩性是指 IIS HTML UI 层,UI 服务和应用程序服务 已托管可以处理更多请求吗?
如果我没有async APIController,在网站流量大的情况下会发生什么?有些用户会因为 IIS 无法处理很多请求而得到 404 吗?
如果我有一个异步 APIController,在网站流量大的情况下会发生什么?尽管 IIS 可以处理所有请求但它们都在排队,但所有用户都会看到 UI 吗?
- 通过网络进行的调用是与调用方绑定的 IO。被调用方存在何种边界取决于实现。
- 是的。
- "can process more requests" 如果您同时处理的请求数(在同一时间点)超过 100,您 可能 开始看到异步的好处。在那之前吞吐量收益是负的(更多的 CU 负载)并且生产力成本是不小的。
- 请求排队,产生越来越多的线程。这可能导致死亡。您遇到此问题的情况是有限的。您可能没有 100 个并发请求,因为这可能会使您的服务器超载 10 倍。服务器上异步的主要情况是缓慢的后端服务(如 Web 服务或 Azure 的东西)。
- 只有当应用程序能够处理负载时,所有响应才会到达。这是很合逻辑的。如果线程池(如果配置正确)无法处理所有未完成的工作,异步只会让您获得更多吞吐量。几乎从来没有这种情况。
讨论什么时候使用异步比较好我以前的帖子: Does async calling of web service make sense on server?
我有一个四层应用程序:
- HTMLUI层对UI服务进行AJAX调用(网络API控制器) .
- UI 服务 这是一个 Web API 控制器。 UI 服务调用应用服务。
- App Service 层,它具有通过 EF 直接调用数据库以及调用其他域服务(Web APIs)的方法。
- 域服务 也是 Web API。
第一层、第二层和第三层托管在一台机器上。域服务托管在不同的机器上。 SQL 服务器托管在另一台服务器上。
我的问题是:
如何区分 CPU 绑定和 IO 绑定 调用? UI 服务对应用程序服务的调用,CPU 绑定 是因为它们存在于同一个应用程序域中吗?
从应用服务到领域服务的调用是否IO Bound因为调用通过网络?从应用服务到数据库的调用也是这样吗?
我是否应该将所有方法都设为基于 async/await 的任务以利用可扩展性?我所说的可伸缩性是指 IIS HTML UI 层,UI 服务和应用程序服务 已托管可以处理更多请求吗?
如果我没有async APIController,在网站流量大的情况下会发生什么?有些用户会因为 IIS 无法处理很多请求而得到 404 吗?
如果我有一个异步 APIController,在网站流量大的情况下会发生什么?尽管 IIS 可以处理所有请求但它们都在排队,但所有用户都会看到 UI 吗?
- 通过网络进行的调用是与调用方绑定的 IO。被调用方存在何种边界取决于实现。
- 是的。
- "can process more requests" 如果您同时处理的请求数(在同一时间点)超过 100,您 可能 开始看到异步的好处。在那之前吞吐量收益是负的(更多的 CU 负载)并且生产力成本是不小的。
- 请求排队,产生越来越多的线程。这可能导致死亡。您遇到此问题的情况是有限的。您可能没有 100 个并发请求,因为这可能会使您的服务器超载 10 倍。服务器上异步的主要情况是缓慢的后端服务(如 Web 服务或 Azure 的东西)。
- 只有当应用程序能够处理负载时,所有响应才会到达。这是很合逻辑的。如果线程池(如果配置正确)无法处理所有未完成的工作,异步只会让您获得更多吞吐量。几乎从来没有这种情况。
讨论什么时候使用异步比较好我以前的帖子: Does async calling of web service make sense on server?