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

时间:2014-08-25 04:27:29

标签: iis azure webrole

我有一个基于Azure Cloud Service的HTTP API,它目前正在从Azure SQL数据库中提供数据。我们在WebRole方面也有一个角色缓存。

通常这个模型对我们来说很好,但有时发生的事情是我们在短时间内获得了大量相同资源的请求,如果该资源不在缓存中,那么所有请求都去了直接到我们的DB这对我们来说是一个问题,因为很多时候DB不能承担那么多的负载。

通过查看问题的性质,似乎应该是大多数人构建API所面临的一个非常常见的问题。我想在某种程度上,我只能向DB发送第一个请求,并保留所有剩余的,直到第一个完成时,控制负载进入DB,但我确实做得很好。在Azure / IIS中是否有任何标准/推荐的方法?

1 个答案:

答案 0 :(得分:0)

我们处理这种情况的方式是在锁定语句中调用DB。这样只有一个来电者会打到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;
        }