Я немного смущен тем, как устроены реальные веб-приложения, и был бы рад получить некоторые разъяснения. Я знаю, что существует множество методов и разных подходов, но примера с хорошо известного сайта, такого как Facebook / Amazon / Youtube, будет достаточно. Допустим, я обслуживаю веб-контент. Я предполагаю, что у меня будет кластер веб-серверов и кластер баз данных, балансировщик нагрузки перед ними.
Мои вопросы:
Как вы храните http-код? хранится ли он локально на каждой машине или в общем хранилище? Если локально, как мне обновить код, если веб-сайт изменяется
То же самое касается статического контента, я предполагаю, что он находится в общем хранилище
Если я использую CDN, он просто кэширует все статические данные, к которым осуществляется доступ? и как долго?
LB - могу ли я получить кластер LB? если да, то как это работает?
Какую БД вы бы выбрали для YouTube / стримингового сайта? и почему
Я знаю, что вопросов много, но я был бы признателен, если бы получил ответы на все. Спасибо!
Как вы храните http-код? хранится ли он локально на каждой машине или в общем хранилище? Если локально, как мне обновить код, если веб-сайт изменяется
Есть несколько способов сохранить код в общем хранилище, таком как монтирование NFS / S3, что значительно упрощает централизованное обновление, очевидно, вы затем вводите единую точку отказа, чтобы у людей часто было две копии код в другом хранилище, поэтому они могут потерять только половину своих узлов - и вы также можете использовать это для синего / зеленого тестирования / развертывания. Другой вариант - сохранить его в распределенной файловой системе, такой как Ceph или аналогичной, очевидно, что те же самые предостережения.
То же самое и со статическим контентом, я предполагаю, что он находится в общем хранилище.
Как правило, это правда, многие люди используют облачное хранилище для статического контента, поскольку с точки зрения сети оно часто «близко» к их CDN, и в наши дни редко можно увидеть контент, хранящийся непосредственно на веб-серверах.
Если я использую CDN, он просто кэширует все статические данные, к которым осуществляется доступ? и как долго?
Это, безусловно, базовая функциональность, они обычно могут намного больше, а TTL почти всегда настраивается для отдельного объекта / файла.
LBs - Как узнать, перегружена ли машина (средняя загрузка), если вообще?
Множество разных способов, открытые соединения, время отклика, статистика использования общих ресурсов - LB могут быть очень «настраиваемыми», я очень уважаю хороших менеджеров LB.
LB - могу ли я получить кластер LB? если да, то как это работает?
Да, буквально по уровням и так, как вам нравится - в качестве примера мы используем Global LB'ing для отправки трафика в конкретный центр обработки данных на основе ряда факторов, а затем, когда он попадает на этот сайт, он разделяется на разные группы служб (зеленый / синий, например), а затем к фактическим сервисным LB.
Какую БД вы бы выбрали для YouTube / стримингового сайта? и почему
Нет ни одной лучшей в своем классе БД, извините - слишком много факторов, и стоимость является основным (мое слово MSSQL и Oracle могут стать очень затратными в наши дни!), Но главное, что нужно учитывать, это то, если ваша БД ПОТРЕБНОСТИ ссылочная целостность, как если бы она была, тогда вам нужна база данных на основе SQL (хотя есть и бесплатные, MySQL и PostGRES очень популярны), но если вы можете спроектировать свои данные прямо, вы можете уйти с базами данных NoSQL, такими как Couchbase / Mongo / Cassandra, и они абсолютно Летать, намного быстрее, чем SQL для базовых запросов, но, очевидно, они менее многофункциональны. Другое дело, что теперь вы можете полностью выполнять свою работу с БД в облаке - AWS, в частности, имеет сильный портфель типов БД, а Azure, очевидно, имеет MSSQL как часть своего портфеля.