Советы по веб-службе с высоким трафиком, C# asp.net sql2000

StackOverflow https://stackoverflow.com/questions/71201

  •  09-06-2019
  •  | 
  •  

Вопрос

Я разрабатываю веб-службу, методы которой будут вызываться из «динамического баннера», который будет отображать своего рода очередь сообщений, считанных из таблицы сервера sql.

Баннер будет оказывать сильное давление на домашних страницах сайтов с высокой посещаемостью;каждый раз, когда баннер загружается, он вызывает мой веб-сервис, чтобы получить новую очередь сообщений.

Сейчас:Я не хочу, чтобы весь этот трафик отправлял запросы к базе данных каждый раз, когда загружается баннер, поэтому я думаю использовать кеш asp.net (т.е.HttpRuntime.Cache[cacheKey]) для ограничения доступа к базе данных;Я постараюсь обновлять кеш каждую минуту или около того.

Разумеется, я постараюсь, чтобы сообщений было как можно меньше, чтобы ограничить трафик.

Но, возможно, есть другие способы справиться с таким сценарием;например, я мог бы записать последнюю версию очереди в файловой системе и предоставить веб-сервису доступ к этому файлу;или что-то, сочетающее два подхода...

Решением является веб-сервис С#, asp.net 3.5, sql server 2000.

Есть какой-нибудь намек?Другие подходы?

Спасибо

Андреа

Это было полезно?

Решение

Это зависит от многих вещей:

  • Если в данных мало изменений (например, серверная часть с кнопкой «опубликовать» или ежедневные пакеты), то я бы определенно использовал статические файлы (обновляемые посредством отправки из серверной части).Мы использовали это решение на нескольких крупных сайтах, и оно работало очень хорошо.
  • Если данные достаточно малы, кэширование в памяти (т.Http Cache) жизнеспособен, но остерегайтесь проблем с блокировкой, а также помните, что Http Cache не будет хорошо работают при большой нагрузке на память, поскольку срок действия элементов может истечь раньше, если платформе требуется память.Меня уже это укусило!С учетом вышеизложенных предостережений Http Cache работает вполне хорошо.

Другие советы

Я считаю, что кэширование — это разумный подход, и вы можете пойти дальше и добавить к нему зависимость от SQL.

Кэширование ASP.NET:Зависимость кэша SQL от SQL Server 2000

Если вы пойдете по файловому пути, имейте это в виду.

http://petesbloggerama.blogspot.com/2008/02/aspnet-writing-files-vs-application.html

ИМХО, лучшим решением является запись файла - он обслуживается кодом ядра IIS, без огромных накладных расходов asp.net, и вы можете позже скопировать файл в CDN.

Кэширование зависимостей AFAIK не очень эффективно для SQL Server 2000.

Кроме того, один из способов обойти ограничение памяти, упомянутое Skliwz, заключается в том, что если вы используете этот сервис вне обычного приложения, вы можете изолировать его в собственном пуле приложений.Я видел, как это делалось раньше, и это тоже помогает.

Всем спасибо, так как данные небольшие по размеру, но базовые таблицы изменятся, думаю, что пойду по пути HttpCache:На самом деле мне нужен способ уменьшить доступ к базе данных, даже если данные меняются (вот причина не использовать прямую зависимость Sql, как предлагает @Bloodhound).

Я думаю, что перед тем, как обнародовать информацию, я проведу стресс-тест.

Еще раз всем спасибо.

Конечно, вы также можете (должны) использовать функции кэширования в Библиотека SixPack .

  • Прямой (обычный) кеш, основанный на HttpCache, который работает путем помещения атрибутов в ваш класс.Самый простой в использовании, но в некоторых случаях вам придется подождать, пока контент действительно будет извлечен из базы данных.
  • Предварительная выборка кэша с нуля, которая после первого вызова начнет незаметно обновлять кэш, и в некоторых случаях вы гарантированно получите контент без ожидания.

Дополнительная информация о Домашняя страница библиотеки SixPack.Обратите внимание, что код (особенно прямой кеш) тестируется под нагрузкой.

Вот пример простого кэширования:

    [Cached]
    public class MyTime : ContextBoundObject
    {
            [CachedMethod(1)]
            public DateTime Get()
            {
                    Console.WriteLine("Get invoked.");
                    return DateTime.Now;
            }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top