Facebook приоткрыл завесу к своим технологиям
Очевидный факт, что распределенные вычислительные системы особо больших масштабов требуют особых, индивидуальных правил и систем регуляции. Простое масштабирование технологий для малых систем тут не работает. Одно из таких различий состоит в необходимости использования веб-кеширования. Как же инженеры Facebook справляются с детищем Цукенберга? Давайте рассмотрим чуть более детально принципы кеширования, используемые сетевым гигантом Facebook.Известное дело, кеширование сводится к тому, что наиболее часто запрашиваемая пользователями информация перемещается из места своего постоянного хранения в промежуточный буфер, позволяющий осуществлять операции ввода-вывода намного быстрее. Традиционно используемая концепция «кеша» встречается во многих сферах нашей жизни, и роль ее чрезвычайно важна. Конкретно в сетевой ИТ индустрии, с помощью кеширования данных снимают нагрузку с серверов, на которых хранится массив высоко востребованной пользователями информации. Результатом реализации такого подхода для обычного посетителя социальной сети становится моментальная загрузка любой, даже самой популярной в этот момент, веб-странички. Для нормального функционирования популярных сетевых ресурсов эта технология давно уже перешла из разряда «желательных» в «необходимые». И, конечно же, Facebook тут не единственный в своём роде. Кеширование имеет ключевое значение и для иных схожих интернет проектов: Twitter, Instagram, Reddit и другие.
Инженеры-наладчики сетевой инфраструктуры Facebook для управления процессами кеширования создали специальное средство, дав ему название «Mcrouter». В начале этого месяца произошло очень важное событие для дальнейшего существования и развития «Mcrouter». На сезонной конференции, которая состоялась в Сан-Франциско, представители компании Facebook открыли системный код своего детища. По сути, это маршрутизатор на базе протокола memcached, который управляет всем трафиком между тысячами серверов, отведённых под кеширование, а также десятками кластеров, размещенных по корпоративным дата центрам. Таким образом, технология memcached вполне способна работать в масштабах такого проекта, как Facebook.
Memcached — это система кеширования данных на серверах, которые являются частью распределенной инфраструктуры. Впервые этот программный продукт был применен для LiveJournal ещё в 2003 году, а в наше время он уже стал неотъемлемой частью множества интернет-компаний, таких как Wikipedia, Twitter, Google.
Instagram начал использовать mcrouter еще когда работал на серверной инфраструктуре от Amazon Web Services (AWS), до того как переехал в дата-центр Facebook. Сотрудники Reddit, который, к слову, также разместился на AWS, уже завершили тестирование mcrouter для своего проекта, и в самое ближайшее время планируют полностью перевести на его использование весь свой ресурс.
Формализация открытого кодаFacebook для управления своими дата-центрами, создает и использует множество программных продуктов с открытым кодом. Таков их принцип. На той же недавно проведенной конференции в Сан-Франциско представители компании много упоминали о важности максимальной «открытости» используемого программного обеспечения. Их инициатива далее работать в этом направлении была поддержана в том числе и такими ИТ гигантами, как Google, Twitter, Box & Github. При некоторых рисках открытости, преимущества, которые получает для своего развития программное обеспечение, вполне очевидны. Что ж, нам лишь остается ждать, какие реальные действия последуют за объявленной инициативой, а ждать себя они долго не заставят.Компании — участники форума, что поддержали инициативу «открытости» ПО, огласили о создании организации TODO (аббревиатура от «Обговариваем Открыто, Создаем Открыто»), которая возьмет на себя роль координационного центра в этом процессе. Пока конкретных планов деятельности озвучено не было, но в целом, очевидно, организация будет способствовать разработке новых продуктов и продвигать уже существующие. Также члены сообщества обязуются адаптировать и унифицировать их собственные программные разработки.
Там, где обитают «лайки» Mcrouter стал незаменимым для дальнейшего развития Facebook, в особенности для реализации на сайте некоторых интересных функций. По словам Раджеша Ништала, одного из программистов компании, одной из таких функций стал «социальный граф» — приложение, которое отслеживает связи между людьми, их вкусы и действия которые они делают во время пребывания на Facebook.Социальный граф содержит имена людей и их связи, а также объекты: фотографии, посты, лайки, комментарии и данные геолокации. «И это лишь одна из задач, для которых применяется кеширование», — отметил Ништала.
При каждой загрузке странички социальной сети происходит обращение к кешу. В свою очередь, кеш способен обработать более 4 миллиардов таких операций за секунду во многом благодаря mcrouter. Именно этот инструмент успешно справляется с целой инфраструктурой.
От балансирования нагрузки до защиты от перегрузок Mcrouter является промежуточным звеном между клиентом и кеш-сервером, фактически пользователь работает именно через него. Именно он принимает запросы пользователей и передаёт ответы кеш-серверов. Кроме всего упомянутого, Ништала также описал три главных задачи этой системы: объединение подключений к кешу, распределение рабочей нагрузки по самому хранилищу и автоматическая защита от перегрузки конкретного сервера в сети.Объединение подключений к кешу помогает поддерживать высокую продуктивность сайта. Если каждый пользователь начнет соединятся непосредственно с кеш-сервером напрямую, это может легко привести к его перегрузке. Mcrouter работает по принципу proxy и балансировщика, который дает клиентам доступ к серверу до тех пор, пока нагрузка на него не станет критической.
В то время, когда множество процессов конкурируют между собой в кеш памяти, тем самым создавая на нее нагрузку, система распределяет эти процессы по группам, и уже эти группы раскидывает между существующей сетью серверов.
Если кеш-сервер выходит из строя, mcrouter автоматически подключает другой, с резервной копией. Как только это происходит, система начинает отслеживать, не вернулся ли упавший сервер в строй.
Также система обладает возможностью создавать целые уровни объединяемых групп серверов. При недоступности одного объединения кеш-серверов, mcrouter автоматически перемещает нагрузку в другую их доступную группу.
Reddit также делает ставку на mcrouter Raddit уже успел протестировать работу mcrouter на одном из предоставленных им AWS кластеров. Системный администратор Reddit Рикки Рамирез по этому поводу сказал: «Использование серверов сайтом изменялось непрерывно на протяжении многих дней, количество используемых серверов составляло от 170 до 300 штук. Также у нас имелось около 70 нод бекэнд кеша с суммарной памятью в 1ТВ. По результатам можно сказать, что в общем система себя оправдала. Слабое место, с которым должен помочь mcrouter, — невозможность переключаться на новые типы машин, которые постоянно выдумывает Amazon. Это довольно большая проблема, которая забирает множество времени у инженера-оператора».После удачного теста, запущенного на одной из групп объединённых серверов, которая производила 4200 операций за секунду, команда планирует использовать mcrouter на куда более тяжелых нагрузках. Следующая группа поддастся проверке на работоспособность уже при нагрузке в более чем 200 000 операций в секунду.
Далее инженеры планируют использовать mcrouter для получения доступа к новым облачным виртуальным машинам и замещать ими текущие мощности без простоя интернет ресурса. Разгрузка уже задействованных мощностей будет сопряжена с некими сложностями управления инфраструктурой, но Рамирез уверен, что в результате все эти усилия принесут впечатляющий прирост продуктивности этого оборудования.