Сколько серверной емкости нужно зарегистрировать тысячам пользователей для сайта социальной сети?

Я участвую во всемирном запуске сайта социальной сети. На какую мощность сервера мы должны планировать? Каковы средние показатели на тысячу зарегистрированных пользователей? Какие предположения используются? Примечание: сайт основан на MVC PHP/MySQL с Yii Framework.

РЕДАКТИРОВАТЬ: Я ищу реальные примеры / отраслевые стандарты сайтов социальных сетей с десятками / сотнями тысяч зарегистрированных пользователей. Предполагая, что код написан "хорошо", MySQL денормализован, а запросы SQL сведены к минимуму.

3 ответа

Решение

Напишите код, чтобы содержимое не зависело от файлов на диске, за исключением самого сайта и баз данных.
Запишите это так, чтобы как можно больше было статичным и определялось по URL.
Запишите его так, чтобы база данных, в которую он читает и записывал, не была жестко закодирована (возвращена функцией) и не обязательно была той же самой базой данных.
Запишите его так, чтобы он использовал ключи автоинкремента MySQL, а не сгенерированные кодом.
Подумайте обо всем этом, прежде чем писать.

Если вы делаете все вышеперечисленное, запустите его на одном сервере. Затем, если он становится тяжелым, вы можете переместить базу данных на другой сервер. Все еще тяжелый? Реплицируйте базу данных на другой сервер. Затем добавьте loadbalancer для ваших веб-серверов. Посмотрите, как вы можете масштабировать впоследствии, если вы хорошо написали код?

Приблизительно, количество серверов, которое вам нужно, будет зависеть от того, насколько вы хороши в кодере, и насколько объем сайта может быть кэширован. Если он действительно большой, вы, вероятно, в конечном итоге получите: User->Internet->Firewall (с аварийным переключением)->Varnish server->Load Balancer (возможно, Squid) с аварийным переключением-> Серверы с дублированным содержимым, взаимодействующие с реплицированными базами данных.

Общий ответ:

  • Мировой запуск звучит как гипербола. Достаточно одного сервера.
  • Проведите некоторое нагрузочное тестирование сервера (ab/jmeter), чтобы увидеть, сколько запросов / сек обрабатывает ваш сайт.
  • Запросов / сек * 24 * 60 * 60 сек / 250 (?) = Количество пользователей
  • xdebug и kcachegrind
  • денормализовать базу данных

Зависит от того, сколько устойчивости вам нужно... какой уровень простоя допустим? Как минимум, я бы рекомендовал, по крайней мере, два веб-сервера и два сервера баз данных, использующих репликацию MySQL для обеспечения отработки отказа... хотя это могут быть одни и те же две физические машины. Если вы используете memcache, другой сервер для этого.

Оцените вашу инфраструктуру для любой единственной точки отказа и оцените риски или устраните это как SPOF.

Затем (как сказал Марио) проведите стресс-тестирование, чтобы увидеть, какое время отклика вы получаете при разных уровнях запросов / сек. Тестируйте как с правами на чтение, так и с запросами на чтение / запись.

Мониторинг как веб-серверов, так и серверов баз данных.

Другие вопросы по тегам