使用无状态WCF休息Web服务并执行具有3个独立任务的操作。每个人都可以独立运作。每个任务都包含对外部API和Web服务的Web服务调用。跟进本地数据库读取操作,花费不到0.25秒。
首先想到的是我应该生成3个单独的线程然后加入并返回结果。使用线程池可能不是一个好主意,因为它最多限制为250次
性能受到关注,但不以牺牲可扩展性为代价。
我应该担心开始和开销的开销吗?为每个Web服务调用加入3个单独的线程?
答案 0 :(得分:0)
将对外部服务的调用包装到异步任务方法中,然后从WCF方法调用。它将使用线程池,并且如果线程拉动已经用尽,将很好地排队您的Web服务调用。
答案 1 :(得分:0)
您可以使用async IO来执行Web服务调用。 Async IO在运行时根本不占用任何线程。您可以为数据库调用执行相同的操作。这可以减轻您可能遇到的任何线程问题。
或者,您可以依赖线程池。您可以增加限制。您可以计算所需的线程数:如果每秒有100个请求到达,每个请求需要2秒才能完成,您需要200个线程。假设您配置了适当的限制,这可以通过内置线程池轻松实现。
如果外部服务停机并需要30秒才能超时,这个数字现在最多可以射出3000个我认为不安全的线程。因此,您需要低超时,断路器或异步IO。
因此,为了确定您需要预测负载和延迟。
我将链接到有关使用异步IO的原因和时间的讨论:
https://stackoverflow.com/a/25087273/122718为什么EF 6教程使用异步调用? https://stackoverflow.com/a/12796711/122718我们应该切换到默认使用异步I / O吗?