Apache Traffic Server — уникальный кеширующий прокси-сервер для CDN

image

Однажды возникла идея запустить русско-язычную версию популярного американского сайта. После недолгих размышлений было решено реализовать полностью интерактивную схему вида examplesite.com — > examplesite-ru.com и заставить машину делать как можно больше работы.

Некоторое изучение и эксперименты с различными прокси-серверами привели к интересному продукту — Apache Traffic Server, о котором я и хочу рассказать.

Traffic Server был изначально создан Inktomi Corporation, которая была куплена компанией Yahoo! в 2002 году. Долгое время продукт активно коммерчески использовался как внутри Yahoo!, так и на некоторых очень больших сайтах. С 2009 года проект открыл исходные коды и передал их в инкубатор Апача, а уже в апреле 2010 года появился Apache Traffic Server.

Подробно о сравнении ATS с другими кеширующим и балансирующими серверами можно почитать тут.

Коротко скажу лишь, что архитектура ATS превосходит по масштабируемости такие заслуженные аналоги, как Ngnix, HAproxy и Squid при том что каждый из перечисленных продуктов специализирован, в то время как ATS может больше (кроме пожалуй Squid, который умеет еще больше, но на порядок медленнее). Серьезная заявка? Нужно попробовать!

Установка ATS
В силу своей новизны документация проекта оставляет желать лучшего. Обилие конфигурационных директив, ужасающая куча файлов в etc/, недоделанная wiki и отсутствие пошагового мануала сначала напугали. Но затем я нашел замечательную презентацию Тома Мелендеза из Yahoo! и всё встало на свои места.

Дальнейшие настройки проводились на Centos 5.5 x64.

Шаг 1. Скачиваем дистрибутив ATS.
[root@Srv1 ~]# wget www.sai.msu.su/apache//trafficserver/trafficserver-2.1.5-unstable.tar.bz2

Шаг 2. Проверяем наличие необходимых библиотек
[root@Srv1 ~]# yum list autoconf automake libtool gcc-c++ glibc-devel openssl-devel tcl-devel expat-devel db4-devel pcre-devel

Шаг 3. Скорее всего придется поставить некоторые пакеты, в моем случае потребовались tcl-devel и pcre-devel. Без этого шага компиляция будет завершаться с ошибкой. Для пользователей Debian-based дистрибутивов набор компонентов слегка отличается и он описан в файле README.

Шаг 4. Распаковываем архив и переходи в директорию
[root@Srv1 ~]# tar -xjf trafficserver-2.1.5-unstable.tar.bz2
[root@Srv1 ~]# cd trafficserver-2.1.5-unstable


Шаг 5. Компилируем.
По умолчанию prefix=="/usr/local" чего достаточно для тестов
[root@Srv1 trafficserver-2.1.5-unstable]# ./configure [--prefix=PREFIX]
[root@Srv1 trafficserver-2.1.5-unstable]# make install


Настройка ATS
Напомню главную заповедь Тома Мелендеза: «Я РЕАЛЬНО ЛЕНИВЫЙ!»
Теперь опишу настройки для выполнения нашей задачи.

Шаг 1. Открываем /usr/local/etc/trafficserver/records.config
CONFIG proxy.config.proxy_name STRING examplesite-ru.com
CONFIG proxy.config.http.server_port INT 80
CONFIG proxy.config.reverse_proxy.enabled INT 1


Шаг 2. /usr/local/etc/trafficserver/remap.config
map examplesite-ru.com/ examplesite.com/
reverse_map examplesite.com/ examplesite-ru.com/


Шаг 3. Из чистого любопытства посмотрим /usr/local/etc/trafficserver/storage.config
И видим что ленивый Том добавил маленький кусочек диска в 256 Мбайт достаточный для тестов: var/trafficserver 256M

Запуск ATS
Запускается сервис командой
[root@Srv1 ~]# /usr/local/bin/trafficserver

Конфигурация обновляется командой
[root@Srv1 ~]# /usr/local/bin/traffic_line -x

Бинго!
Как видим для запуска действительно нужно минимум усилий.

Мой тестовый сервер сделан из самого маленького компьютера на базе Intel Atom 525, который подключен в интернет каналом со скоростью 1 мбит в секунду. Мой тестовый сайт имеет главную страницу размером примерно 85 Кбайт. Он при каждом обращении генерит уникальный Session ID (это всегда вводит в ступор качалки сайтов типа TeleportPro и разнообразные прокси).

Нетрудно посчитать, что обычный некеширующий реверс-прокси потратит только примерно 0,7 секунд на скачиваение страницы, потом 0,7 секунд на ее отдачу, а так же время на «проксификацию» содержимого.

В случае ATS дополнительная задержка при полной загрузке страницы составляет на круг значительно менее 1 секунды, а загрузка процессора попросту незаметна. Попеременно запуская загрузку сайта напрямую и через ATS я обратил внимание что довольно часто прокси отдает страницу быстрее оригинала! Как видим 8 лет эксплуатации на серверах Yahoo в роли CDN не пропали даром.

Вернемся к началу
Идея создания зеркала сайта никого не удивит, но в моих планах она должна быть дополнена системой автоматизированного перевода на русский язык текстов и графики с помощью… (в этом месте пока только вопросы). Такая система может быть подключена при помощи
плагина трансформации HTTP.
Поделиться публикацией
Комментарии 14
  • НЛО прилетело и опубликовало эту надпись здесь
      +2
      а чем оно всё-таки лучше скажем связки haproxy+squid?
        +2
        Напрашивается такой же вопрос про nginx с включенным кешированием…
          0
          Задача удаленного зеркалирования сайта решается путем полного реверс-прокси, при котором страница удаленного сайта подвергается проксификации, т.е. все внутрение линки examplesite.com заменяются на examplesite-ru.com

          Насколько я понял из документации по nginx он работает по схеме бакенд- фронтэнд при которой оба имеют одинаковое имя examplesite.com, т.е. он попросту не может выполнить поставленную задачу.
            0
            mod http_sub вполне может произвести замену.
            Далее. Заголовок host при пробросе тоже можно перопределить…
              0
              И CDN можно легко организовать…
              И loadbalancing.
                0
                И ESI он может, и кеш на raw девайсах и малтидридинг на 8 ядрах?

                The threads support in nginx is currently broken and this patch does not
                fix it.

                --
                Igor Sysoev
                sysoev.ru/en/


                Давайте в заметке про ATS обсуждать его фичи.
                  0
                  Вопрос в другом.
                  Нужно ли ему уметь если он выполняет основную функцию лучше чем ATS…
                  Как показывает практика — не нужно.
                    0
                    Я поставил Ngnix он работает, вы были првы в оценке его возможностей.

                    Забавно что в ATS и Ngnix обнаружил одинаковый баг, растущий видимо из библитеки PCRE.

                    По возможностям кеширования он все же хуже ATS, зато может отлично выполнять роль http сервера, что в моем случае плюс.
                0
                http_sub может произвести только одну замену

                Задача решается при помощи

                HttpSubsModule
                0
                Если я правильно понял, то подменяются href внутри страницы?
                Если только обычная замена Host в запросах, то это легко решается одним правилом в Nginx.
                Для ковыряния страниц в общем тоже есть средства.

                nginx тоже работает как реверс-прокси.
                Слово «проксификация» из другой оперы, тут проксирование.
                  0
                  В нашем случае именно проксирование при обработке запроса от клиента и проксификация при ответе фронтенда.

                  Термин я взял из известного скрипта анонимайзера:
                  www.jmarshall.com/tools/cgiproxy/

                  Вобще правильнее наверно взять и попробовать.

                  Я пробовал apache + mod_proxy_html — оно работает некорректно.

                  Пробовал apache + cgiproxy + mod_perl — оно работает сносно но очень медленно

                  ATS проксирут и работает чрезвычайно быстро.
                    0
                    Вы бы еще IIS для этого дела прикрутили…

                    Об этом термине можете почитать здесь.
                    forum.vingrad.ru/forum/topic-215245/0.html
                    А здесь проксирование, обычное проксирование.

                    Изучите для начала вопрос, попробуйте аналоги.
                    А то ваши заявления выглядят совсем не серьезно.
                    Что-то типа:
                    «Я попробовал велосипед и он лучше самоката, потому Феррари и Бентли ему в подметки не годятся.»
            • НЛО прилетело и опубликовало эту надпись здесь

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое