Что входит в создание веб-сайта, который должен масштабироваться? - PullRequest
23 голосов
/ 01 июня 2010

Я планирую создать приложение, которое будет получать большой объем трафика. (Пожалуйста, не говорите, что я не получу трафик, это для внутренней сети, поэтому трафик будет там. Просто пытайтесь избежать «Вы не получите столько трафика, не беспокойтесь об этом».)

Что касается ожидаемого типа трафика, пользователи будут просматривать различные динамически создаваемые (на основе данных учетной записи пользователя). На этих сайтах пользователь может отправлять текстовые сообщения. Как загрузка страниц, так и обработка пользовательского ввода попадут в базу данных. Загрузки, очевидно, будут считываться, но для обработки ввода потребуется как чтение, так и запись. Входы могут также влиять на представления других пользователей. Если это произойдет, мне нужно будет уведомить других пользователей, чтобы обновить страницу.

Какие вещи мне нужно сделать, чтобы они просто не зависали под нагрузкой большого количества пользователей?

Что становится ограничивающим фактором? База данных вещи? Ввод / вывод с интерфейсом?

Я никогда прежде не разрабатывал серьезное веб-приложение, и мне нужна помощь.

РЕДАКТИРОВАТЬ: Я рассматривал возможность использования Erlang для бэкэнда, так как я использовал его немного и действительно, как все параллелизма. Будет ли это жизнеспособным выбором или я должен попробовать что-то более традиционное?

Ответы [ 5 ]

17 голосов
/ 01 июня 2010

Это очень большая тема, и вы, вероятно, захотите провести столько исследований, сколько позволит время. Есть несколько важных тем для рассмотрения.

  1. Хранение состояния сеанса. Очевидно, что сессия хранения занимает память или дисковое пространство. У вас должна быть стратегия, позволяющая правильно хранить информацию о сеансе и использовать ее в веб-ферме.

  2. Кэширование. Надежная стратегия кэширования может значительно снизить нагрузку. Проведите много исследований относительно того, когда, что и где вы должны кэшировать.

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

  4. Оптимизация базы данных. Убедитесь, что вы понимаете, как правильно оптимизировать вашу базу данных для тысяч (миллионов?) Операций в минуту. Если ваше приложение требует много записи, вам, возможно, придется взглянуть на хранилище старых данных, которые больше не нужно включать в индексы, чтобы ускорить ваши операции записи.

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

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

1 голос
/ 01 июня 2010

Внутреннее хранилище, обработка базы данных, интерфейсный динамический контент и кэширование - это одно. Другое соображение вашего провайдера услуг хоста и доступной пропускной способности сети.

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

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

Кроме того, если вы действительно владеете и строите сервер, убедитесь, что ОС, программный стек и аппаратное обеспечение обновлены только до стабильных версий программного и микропрограммного обеспечения, способны справляться с нагрузкой и контролируются для бесперебойной работы вообще. раз.

Edit # 2: я знаю, что вы спрашивали, как конкретно ваше приложение может справиться с нагрузкой, и я могу просто разглагольствовать здесь, но вы также должны подумать, справитесь ли вы и ваши товарищи по команде с нагрузкой. Пропускная способность рабочей силы также важна, и разочарование от рабочей нагрузки приводит к тому, что подобные проекты терпят неудачу. Пиво - лучший друг программиста, особенно когда он решает сложные и творческие задачи программирования, но это может привести к серьезным проблемам с алкоголем, если рабочая сила не управляется должным образом или не хватает человеческих ресурсов. Кто ответит на это уведомление о сбое в 3 часа утра? Кто будет отвечать на ненавистническую почту от религиозных фундаменталистов или троллей, или ползать по закону и патентам, чтобы проверить, является ли это извещение ложным? Если это не концерт, который может оплатить счета, вероятно, большинство людей не могут посвятить много времени и энергии. Я вовсе не хочу вас обескураживать, и, надеюсь, вы уже это охватили.

1 голос
/ 01 июня 2010

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

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

1 голос
/ 01 июня 2010

В дополнение ко всему, что упоминается здесь, вы должны следить за временем вашего трафика. Это относительно постоянно с течением времени? Или это происходит в виде очередей, когда вы получите гораздо больший объем трафика за короткий промежуток времени?

В общем, вы захотите спроектировать систему, которая изящно справится с пиковыми нагрузками (хотя и не обязательно на идеальном уровне производительности). Если ваш трафик очень бурный, вам придется больше усилий уделять его масштабированию, чем если бы вы постепенно получали тот же объем трафика.

0 голосов
/ 01 июня 2010

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

...