Как работает крупный сайт

У них миллионы посетителей в день. Какие технологии используют крупные площадки?

Мы сравним инфраструктуру некоторых крупных сайтов, таких как Tumblr (10 млн посещений в день), Facebook (250 млн) и еще нескольких, чтобы показать возможные варианты выбора.

Orchestre d'ordinateurs, les grands sites web

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

Файловая система

Google

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

Другие

Они используют аналогичные системы, доступные на рынке, такие как IBM GPFS, параллельная кластерная система, тоже выбранная многими компаниями. Или HDFS, Hadoop Distributed File System, которая является частью набора ПО, созданного фондом Apache для обработки данных в кластерах. Adobe, AOL, Facebook, EBay, Hulu, Linkedln и даже IBM используют Hadoop или часть его инструментов.

База данных

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

Тумблр

Сайт во многом зависит от MySQL, операции которого ускоряются с помощью Memcache, HAProxy и shardling, который является одной из форм разбиения баз данных.
Но также интенсивно использует Redis - хранилище в виде ключ-значение с функциями быстрого доступа, которое используется для уведомлений на панели управления пользователей. Они имеют ограниченный срок хранения, что подходит для Redis, который также используется для других эфемерных функций и даже для буфера в качестве замены Memcache (в качестве ключа-значения можно хранить пару URL/page).
Tumblr использует HBase для ярлыка URL, для истории, статистики и для обмена сообщениями.

Facebook

Несмотря на то, что Cassandra была создана компанией Facebook, которая передала проект фонду Apache, компания больше не входит в список пользователей. Facebook заменил его на HBase.
HBase используется для почтовой системы, но большая часть хранилища делается с помощью MySQL, дополненного Memcache для ускорения операций. Программистов, работающих на HBase, больше, чем на MySQL, хотя его использование более ограничено, что говорит о том, что реализовать его сложнее.
Haystack - специализированная система хранения фотографий. Он является промежуточным между SGDB и файловой системой, с индексом в памяти, который оптимизирует запись и чтение.

Google

Использует BigTable, который частично вдохновил Кассандру и HBase, в основном на хранение. На самом деле BigTable предлагают даже пользователям в App Engine. BigTable работает в кластерах из тысяч машин и не имеет проблем с производительностью больших объемов данных.

Другие

Многие сайты, использующие Hadoop, используют HBase для хранения больших массивов данных. Это SGDB, аналогичный BigTable от Google. Он лучше подходит для массового хранения данных с периодическим обновлением, а Кассандра лучше подходит для транзакций с непрерывным обновлением. Он также нереляционален, в отличие от Кассандры, которая является NoSQL.

Языки программирования

Для этих крупных сайтов наиболее используемые языки - Scala (разработан так, как следует из названия для расширения, «scale» на английском языке) и PHP. Java совместима со Scala, которая может использовать свои API.
Google также использует Python, но имеет тенденцию заменять его Go, функции конкуренции которого делают его подходящим местом для веб-сайтов. Пара JavaScript и Node находится в разработке .

Dailymotion и Facebook

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

Тумблр

Как и многие другие, сайт перешел в Скала. Он начинался на PHP, другой - на Ruby, но когда дело доходит до обработки миллионов запросов в секунду, виртуальная машина Java более эффективна.
На самом деле она была сбалансирована с JavaScript на Node. Но на момент выбора не слишком было известно, чего стоил Node для сайта такого значения, библиотеки недавно и мало стабильны. В то время как у Scala есть Finagle и другие инструменты, разработанные для крупных сайтов. Для запускаемого проекта проще выбрать JavaScript, одновременно развиваются API и сайт.

Другие инструменты

Finagle - инструмент RPC (Remote Procedure Call), поэтому для клиента это способ запуска запросов к серверу, который подходит для большого количества пользователей. Написанный на Scala, он работает на JVM с любым протоколом связи.
Он был создан Twitter и также используется Tumblr среди других.

Kafka - открытая распределенная внутренняя почтовая система, созданная Linkedln. Он используется Tumblr для хранения сообщений.

Thrift - дирижёр по микшированию услуг, написанных на разных языках программирования, и проект Apache. Его используют, в частности, Facebook, Tumblr и, вероятно, многие другие.

Scribe - система управления пользователями, созданная компанией Facebook. Он был использован Tumblr, который быстро бросил его, потому что он не выдержал нагрузки.

Пример Facebook

Facebook работает с набором ПО, которое позволяет обрабатывать миллиарды страниц в день, оставаясь при этом отзывчивым. За исключением Haystack и BigPipe, разрабатываемых внутри компании, все эти программы открыты для использования на любом сервере.

Язык страниц: В системе, в частности в приложениях, использовался язык, производный от HTML и названный FBML, который в настоящее время устарел и заменен HTML + JavaScript.

Базы данных: MySQL для повседневных операций и создал Cassandra, ставший проектом Apache для замены MySQL для данных различных размеров, более эффективным для очень важных сетей. Но Кассандра сейчас кажется мало или не используется Facebook .
Дополняет это Memcached - менеджер буферов между приложениями и базой данных, избегающий повторения частых запросов.>
Аполлон - система noSQL, аналогичная HBase для системы с низкой задержкой.
GraphQL - язык базы данных, используемый мобильными приложениями. Его особенность в том, что запрос, выраженный в JSON, имеет ту же форму, что и ответ: запрос содержит имена полей, ответ добавляет данные, содержащиеся в этих полях.

Языки программирования: PHP с февраля 2010 года компилируется с компилятором Hip Hop только для Facebook, но с открытым исходным кодом. Таким образом, программное обеспечение находится в двоичном коде, но затем фирма обратилась к виртуальной машине и даже разработала собственную версию PHP, Hack, которая имеет статически типизированные переменные.
Но Facebook использует наряду с PHP многие языки: Java, C++, Haskell, Ocaml и даже D. Чтобы взаимодействовать между собой программы, написанные на разных языках, Thrift генерирует соответствующий код, для веб-сервисов.

Хранение. Помимо MySQL для данных, Haystack является высокопроизводительной системой хранения и доступа к фотографиям. Он управляет 80 миллиардами фотографий, хранящихся пользователями (по состоянию на июнь 2010 года).

Page Server: BigPipe параллельно управляет загрузкой страниц (стена, поток, чат и т. д.). Его сделал Facebook .

Управление пользователями: Scribe управляет доступом к сайту для пользователей .

Анализ данных: Hadoop - еще один проект Apache для массовых расчетов данных. Hive является дополнением к Hadoop, позволяет использовать его вычисления с запросами, аналогичными SQL .

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

Open Graph заменила Facebook connect, способ использовать сервисы Facebook на сайте, на что конкуренты и Google ответили Xauth.
Открытый граф предполагает сделать веб-сайты узлами единой социальной сети, центром которой был бы Facebook. Профили участников, их отношения с другими, становятся доступными с веб-сайтов и используются ими.

Open Graph, несомненно, интересна корпоративным счетам (это не ее цель), но обеспокоена уважением к конфиденциальности.
Было много негативной реакции и отключения аккаунта личностей из Сети после объявления Open Graph.

Заключение

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

См. также...

Базы данных веб-сайтов.