Статьи

Я знаю, что использует Facebook — Часть 1

Вступление

Если ваш сайт ориентирован на сообщество, социальные сети или вы надеетесь иметь чрезвычайно успешное веб-приложение, скорее всего, вы когда-нибудь захотите создать базу пользователей размером с Facebook. Хотя это достойно восхищения, представление ваших серверов экспоненциально увеличивающемуся количеству пользователей и одновременным соединениям, безусловно, представит вам те проблемы, которые вы захотите иметь. Потребуются высокопроизводительные приложения, а также высокооптимизированные серверы, чтобы в достаточной степени справиться с этим возросшим числом пользователей. Помня об этой цели, я внимательно посмотрел на некоторые технологии, которые использует Facebook, и на то, как они могут помочь вам в оптимизации и масштабировании ваших собственных инфраструктур приложений. Я называю эту серию статей «Я знаю, что использует Facebook», и в конце концов вы тоже. Позволять’С чего начать!

Часть 1 — Facebook использует лак

Вы когда-нибудь задумывались над тем, как Facebook обладает возможностями сервера отображать столько фотографий профиля и фотоальбомов, сколько и быстрее? Согласно Facebook, есть очень хороший шанс, что приложение под названием Varnishвпутан. Varnish — это высокопроизводительный HTTP-ускоритель, предназначенный для повышения производительности веб-приложений, имеющих несколько взаимосвязанных частей или аналогов. Varnish использует язык конфигурации VCL, который позволяет вам контролировать, как ваше веб-приложение реагирует на запросы и работает с кешем. Varnish поддерживает Edge Side Includes, язык разметки на основе XML, который дает нам возможность разбивать разделы веб-страницы и кэшировать каждый из них независимо. Varnish также имеет возможность распределять нагрузку между несколькими узлами и опрашивать внутренние узлы через систему проверки работоспособности.

Установка лака

Varnish поддерживается в ряде основных дистрибутивов Unix / Linux. Вы также можете получить приложение из исходного кода, хотя необходимо выполнить несколько предварительных условий:

  • Последняя версия  GCC (3.3.x или новее должно быть в порядке, рекомендуется 4.2.1 или новее)
  • POSIX-совместимая программа
  • Последние версии автоинструментов GNU (  automake ,  autoconf ,  libtool и  ncurses )
  • При сборке исходного кода, извлеченного из репозитория (в отличие от исходного кода из архива выпуска), вам также потребуется  xsltproc из  libxslt .

Ознакомьтесь с документацией по настройке и сборке Varnish из исходного кода на своем веб-сервере / сервере приложений.

Лак для бега

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

При настройке вашей установки Varnish первым элементом бизнеса является изменение порта прослушивания на вашем HTTP-сервере — во многих примерах конфигурации их HTTP-порты прослушивания отображаются на 8080. Теперь запустите Varnish с помощью следующей команды:

varnishd -a :80 -b localhost:8080 -T localhost:6082

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

Использование языка конфигурации Varnish

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

Вот несколько примеров для нас. Давайте проверим простую конфигурацию для создания серверного объекта с именем:

backend www {
.host = "www.myexampleapp.com";
.port = "http";
}

Добавив параметр, вы можете ограничить количество соединений, которые Varnish будет отправлять на сервер, следующим образом:

backend www {
.host = "www.myexampleapp.com";
.port = "http";
.max_connections = 300;
}

Наконец, вот отличный пример конфигурации для остановки этих надоедливых горячих ссылок на все классные изображения с вашего сайта. Используя Varnish, ваше веб-приложение выдаст ошибку 403 для тех, кто непосредственно ссылается на изображения на вашем сайте:

sub vcl_recv {
if (req.http.host == "www.myexampleapp.com" &&
req.url ~ "^/images/" &&
(req.http.referer && req.http.referer !~ "^http://www.myexampleapp.com/")) {
error 403 "No hotlinking please";
}
}

Как вы видите, Varnish предлагает вам несколько вариантов конфигурации для использования с вашей веб-инфраструктурой. Возьмите страницу из плейбука Facebook и посмотрите, как вы можете использовать этот инструмент для повышения общей производительности ваших веб-приложений.