在Azure/IIS webole中处理大量相同的请求



我有一个基于HTTP API的Azure云服务,它目前从Azure SQL数据库中提供数据。我们在WebRole端也有一个角色缓存。

一般来说,这个模型对我们来说工作得很好,但有时发生的情况是,我们在很短的时间内得到大量对同一资源的请求,如果该资源不在缓存中,所有的请求都直接转到我们的DB,这对我们来说是一个问题,因为很多时候DB无法承受那么多的负载。

从问题的本质来看,这似乎应该是大多数构建API的人都会面临的一个相当普遍的问题。我在想,如果以某种方式,我可以只发送第一个请求到DB,并保持所有剩余的时间,直到第一个完成,以控制负载到DB,但我确实得到了任何好处。在Azure/IIS中有什么标准/推荐的方法吗?

我们处理这种情况的方法是将对DB的调用放在锁语句中。这样只有一个调用者会访问数据库。下面是您可以尝试的伪代码:

        var cachedItem = ReadFromCache();
        if (cachedItem != null)
        {
            return cachedItem;
        }
        lock(object)
        {
            cachedItem = ReadFromCache();
            if (cachedItem != null)
            {
                return cachedItem;
            }
            var itemsFromDB = ReadFromDB();
            putItemsInCache(itemsFromDB);
            reurn itemsFromDB;
        }

相关内容

  • 没有找到相关文章

最新更新