Лучшие методики масштабирования для веб-приложения с высокой посещаемостью? - PullRequest
3 голосов
/ 25 июня 2009

У нас есть новый проект для веб-приложения, которое будет показывать рекламные баннеры на веб-сайтах (в виде сети), и мы рассчитываем, что он будет обрабатывать от 20 до 40 миллиардов показов в месяц.

Наш текущий язык в ASP ... но переходит на PHP. Есть ли у PHP 5 ограничение по масштабированию веб-приложения? Или мне нужно, чтобы наша команда инвестировала в приобретение JSP?

Или дело в сервере приложений и / или БД? Мы планируем использовать Oracle 10g в качестве базы данных.

Ответы [ 5 ]

8 голосов
/ 25 июня 2009

Без обид, но я сильно подозреваю, что вы сильно переоцениваете сколько показов вы будете обслуживать.

Это говорит:

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

Масштабирование состояния / хранилища данных усложняется.

Для вашего приложения у вас есть три основных задания:

  1. какое объявление мы показываем?
  2. обслуживает добавку
  3. регистрация впечатлений

Каждый из них потребует обдумывания и, вероятно, различных инструментов.

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

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

Последнее в конечном итоге будет самым сложным: как масштабировать записи. Общий подход заключается в том, чтобы по-прежнему использовать базы данных, но принять стратегию масштабного масштабирования. Более экзотическими вариантами может быть использование хранилища ключей / значений, поддерживающего инструкции счетчика, такого как Redis , или масштабируемой базы данных OLAP, такой как Vertica .

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

6 голосов
/ 25 июня 2009

Вы понимаете, что 40 миллиардов в месяц - это примерно 15 500 в секунду , верно?

Масштабирование не будет вашей проблемой - инфраструктура период будет вашей проблемой. Независимо от того, какой технологический стек вы выберете, вам понадобится огромное количество аппаратного обеспечения - как говорили другие в форме фермы или облака.

2 голосов
/ 25 июня 2009

Этот вопрос (и весь предмет) немного субъективен. Вы можете написать медленную программу на любом языке и разместить ее на чем угодно.

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

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

Удачи!

1 голос
/ 25 июня 2009

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

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

1 голос
/ 25 июня 2009

Я думаю, что это не вопрос языка, но это может зависеть от скорости работы базы данных и скорости процессора. Вы рассматривали веб-ферму? Таким образом, вы можете иметь более одной машины, обслуживающей ваше приложение. Есть несколько способов реализовать это решение. Вы можете начать с двух серверов и добавить больше серверов, так как приложение запрашивает больший объем обработки.

С другой стороны, Oracle 10g - очень хороший сервер баз данных, по моему скромному мнению, вам нужен только отдельный сервер Oracle для фиксации объема запроса. Помните, что сервер SQL работает быстрее, поскольку люди каждый раз запрашивают более или менее одни и те же вещи, и это происходит в веб-приложении, если вы тщательно планируете схему своей базы данных.

Вы также должны проверить все приложения Ad Server, и есть очень хорошие, попробуйте Google с «Open Source AD ​​server».

...