Я очень запутался в методах масштабирования серверов
Скажем, у вас есть один сервер с высоким трафиком, работающий на одном компьютере с одним 12-ядерным процессором, и один сервер для базы данных.
Какое-то время это будет работать, но что делать, если количество одновременных пользователей станет очень большим? Как это масштабировать? Есть только то, что вы можете усилить на одном сервере, чтобы он мог обрабатывать.
Я искал в Интернете какое-то время, но не смог найти ответ, который описывал бы, как это сделать. Например, как facebook справляется с таким количеством пользователей? Если у кого-то есть ответы или можно указать мне какие-либо ресурсы, я буду очень признателен
Вы правы, что на сервере столько памяти и столько процессоров. Не говоря уже о том, что если у вас есть только один сервер, на котором работает ваше приложение, у вас все яйца в одной корзине. Что делать, если ваш единственный сервер выйдет из строя?
Поэтому мы выполняем горизонтальное масштабирование, добавляем несколько серверов, на которых выполняется одно и то же приложение, чтобы добавить масштабируемость и высокую доступность, а также балансировку нагрузки.
Мы можем масштабировать как уровень приложения, так и уровень базы данных.
Другой способ, который вы можете использовать, - это разгрузка. Например, вы можете ввести в свой дизайн сеть доставки контента (CDN). С помощью CDN мы можем кэшировать контент на граничном узле по всему миру. Таким образом, пользователи нашего приложения могут получить доступ к контенту локально, вместо того, чтобы подключаться к набору серверов, которые могут находиться за сотни тысяч миль от вашего приложения. Следствием этого является то, что вам нужно меньше серверов, потому что большинство запросов на контент будет обслуживаться CDN, что означает меньшую нагрузку на сами серверы.
Другой способ разгрузки - добавить шину кэширования между серверами приложений и сервером базы данных. Используя REDIS или MEMCACHED в кэшах памяти, часто запрашиваемые запросы можно кэшировать в кластере REDIS / MEMCACHED вместо того, чтобы получать их с серверов баз данных. это ускоряет доступ к базе данных и опять же приводит к тому, что нам потребуется все меньше и меньше серверов баз данных.
Google, Facebook и все крупные интернет-приложения используют методы и многое другое.
CDN https://en.wikipedia.org/wiki/Content_delivery_network
В кэшировании памяти https://docs.jivesoftware.com/jive/6.0/community_admin/index.jsp?topic=/com.jivesoftware.help.sbs.online_6.0/admin/CachingOverview.html
Изящное масштабирование http://philip.greenspun.com/seia/scaling
Надеюсь это поможет,
Майк.