На веб-сервере, когда стоит выполнять асинхронный ввод-вывод? - PullRequest
0 голосов
/ 02 октября 2011

Я работаю над веб-сайтом, который, как ожидается, привлечет большое количество пользователей в течение короткого времени, и мы хотим минимизировать количество серверов, необходимых в ферме.Обработка запросов может включать локальный ввод-вывод, запросы сервера sql к одному серверу базы данных и запросы http на внешний веб-сайт.Моей первой мыслью было, что нам определенно необходимо реализовать все операции ввода-вывода в асинхронном режиме, но после еще немного чтения Я не уверен в этом.просто переместите узкое место на сервер БД.Так как наши запросы к БД должны быть быстрыми, в любом случае, лучше поддерживать их синхронными, чтобы запросы помещались в очередь на нескольких веб-серверах, а не на одном сервере БД.Это также может быть правдой (просто переместив узкое место еще ниже в ОС.) Есть ли веская причина для асинхронного выполнения локального файлового ввода / вывода для чтения / записи одного или двух файлов размером 25–150 КБ на веб-запрос?

Доступ к внешним веб-сайтам - это тот случай, когда асинхронные запросы могут иметь смысл.Внешняя служба, скорее всего, не станет узким местом (она гораздо более масштабируема, чем должен быть наш сайт), и будет вызывать более длительные задержки (по сравнению с БД и локальными файлами), поскольку соединение осуществляется через Интернет.Это также должно быть относительно редкой ситуацией, может быть, 5 процентов от всех запросов.

У меня недостаточно опыта, чтобы иметь хорошее "внутреннее чувство" по этим вопросам, и хотя нам потребуется некоторая производительностьтестируя, у нас нет времени всесторонне протестировать все возможные реализации.

Вероятно, это не имеет значения, но программный стек в этом случае - ASP.Net MVC 3 и Sql Server.

Чтобы понять сферу охвата, мы должны быть готовы к примерно 10 миллионам пользователей в течение двух недель, вероятно, с ранним всплеском.Сайт включает в себя загрузку и возврат файлов размером около 150 КБ и ведение нескольких простых записей в БД.Мы размещаем его за CDN, но меня больше всего беспокоит файловый ввод-вывод и вызовы на внешний веб-сайт.

Есть какие-нибудь мысли о том, где асинхронные вызовы действительно могут помочь в этом приложении?

1 Ответ

1 голос
/ 02 октября 2011

Async помогает, если вы долго ждете.Например, вы запускаете запрос через http или сокет к службе и ждете ответа 15 секунд.В этом случае нет смысла блокировать поток для ожидания, так как требуется больше потоков, что стоит переключений контекста и много памяти.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...