Я собираюсь выпустить сайт через неделю или около того, и сначала я загружу его на общедоступный сервер. У меня вопрос: если у меня будет много пользователей, как мне добавить на сайт больше серверов (возможно, выделенных)? А также, когда я должен начать думать о добавлении дополнительных серверов, как я узнаю, что серверы больше не могут обрабатывать трафик?
Хорошо, чтобы ответить на ваш первый вопрос, в зависимости от платформы, на которой работает ваш сайт, и типа сайта вы можете либо разделить задачи на разные серверы, либо создать дублирующие серверы, которые находятся за балансировщиком нагрузки.
Например, простой статический сайт можно расширить, просто скопировав контент на дополнительные серверы, а затем установив свой URL так, чтобы он указывал на меньший сервер балансировки нагрузки, который просто передает входящие соединения на каждый из ваших серверов в циклическом режиме, таким образом, каждый server добавляет возможность обрабатывать дополнительное количество пользователей, равное тому, которое ваш первый сервер может обрабатывать на нем (при условии, что они все одинаковы).
_________________
| |
| load balancer |
|_______________|
/ | \
/ | \
/ | \
__________ __________ \ __________
| | | | | |
| web | | web | | web | etc...
| server | | server | | server |
|________| |________| |________|
Теперь, если это более динамичный сайт, который включает чтение и запись в базу данных и взаимодействие пользователей друг с другом, это немного сложнее. По сути, вы должны разделить все задачи одного сервера на несколько серверов, чтобы распределить нагрузку. Например, у вас будет один (или несколько - с использованием репликации) серверов баз данных, которые будут снабжать ваши интерфейсные веб-серверы контентом. Тогда у вас может быть несколько веб-серверов, которые обслуживают фактический html / php / что угодно, но получают свой контент с серверов базы данных. По-прежнему используется балансировщик нагрузки для разделения трафика между несколькими веб-серверами, поэтому даже на динамическом сайте все будут видеть одно и то же, потому что все веб-серверы будут получать свои данные из одной среды базы данных. Теперь, в частности, для масштабирования серверов баз данных, в основном у вас есть один «главный» сервер, на котором происходят все ваши записи, а затем он реплицирует свои изменения до группы «подчиненных» серверов, на которых вы выполняете все свои чтения. Как правило, любой сайт выполняет гораздо больше операций чтения базы данных, чем записи, поэтому это работает и позволяет распределять эти операции чтения по такому количеству подчиненных серверов, сколько вам нужно.
_________________
| |
| load balancer |
|_______________|
/ | \
/ | \
/ | \
__________ __________ \ __________
| | | | | |
| web | | web | | web | etc...
| server | | server | | server |
|________| |________| |________|
^ ^ ^
each web server writes to the master and reads from the slaves
_________________
| Master |
| (for writes) |
|_______________|
/ | \
/ | \
/ | \
__________ __________ \ __________
| slave | | slave | | slave |
|(for | |(for | |(for | etc...
| reads) | | reads) | | reads) |
|________| |________| |________|
Теперь, чтобы ответить на ваш второй вопрос, довольно просто увидеть, когда вам нужно перейти на большее количество серверов. Есть несколько разных вещей, которые могут быть истощены на сервере: доступные циклы ЦП, пространство памяти, дисковое пространство / пропускная способность и пропускная способность сети. Для каждого из них есть инструменты. Предполагая, что это ОС на базе Unix, вы можете использовать «top» для мониторинга использования ЦП и памяти, «df -h» для просмотра использования диска и «iftop» для мониторинга использования сети. Если какой-либо из них постоянно работает с верхним краем того, что у вас есть, и вы замечаете замедление использования вашего веб-сайта, пришло время получить другой сервер (ы). И, исходя из того, что вы видите, что у вас заканчивается, вы будете знать, как настроить свои новые серверы, чтобы лучше справляться с этими нагрузками.
Надеюсь, это поможет!