18

FT & HA Rails приложений приложений — это просто

  • Upload
    -

  • View
    261

  • Download
    0

Embed Size (px)

Citation preview

Page 1: FT & HA Rails приложений приложений — это просто
Page 2: FT & HA Rails приложений приложений — это просто

FT & HA Rails приложений —

это просто

Ричард Шевел

Look At Me Engineering

Page 3: FT & HA Rails приложений приложений — это просто

Увеличение отдачи от существующих ресурсовОбъединение общих ресурсов инфраструктуры в пулы и уход от устаревшей модели «один сервер

- одно приложение» с помощью консолидации серверов.

Повышения коэффициента использования серверов60-80% (по сравнению с 5-15% с невиртуализированными серверами).

Повышение отказоустойчивости

Масштабирование инфраструктурыВозможность плавного обновления и наращивания аппаратной платформы, удобный перенос

сервисов.

Распределение ресурсов

Каждая машина получает столько ресурсов, сколько ей необходимо.

Гибкое распределения ресурсов между службами

Изоляция службВеб-сервер отдельно, База данных отдельно и тд.

Отличное решение для создание 3х компонентного ландшафтаПродуктивная среда, среда контроля качества, среда разработки.

Виртуализация VS все…

Page 4: FT & HA Rails приложений приложений — это просто

Продуктивная

средаСреда

разработки

РепозитарийРазработчики Пользователи

Администраторы

1 2

Распространенное решение :

2x компонентный Ландшафт

— Организация продуктивной среды

— Организация среды разработки

Page 5: FT & HA Rails приложений приложений — это просто

Продуктивная

среда

Среда контроля качества

Среда разработки

Репозитарий

Система

тестирования,

избранные

пользователи

Разработчики Пользователи

Администраторы

1 2 3

3х компонентный Ландшафт

— Организация продуктивной среды

— Организация среды контроля качества

— Организация среды разработки

Page 6: FT & HA Rails приложений приложений — это просто

NginX

FrontEnd +

Reverse Proxy

Apache + mod_rail

BackEnd

Users

MemCached

NginX

FrontEnd

Apache + mod_rail

BackEnd

MemCached

NginX

BackEnd

Varnishd

FrontEnd

MySQL

Server 1 Server 2Server 3

Минусы

— Множество зависимых сервисов на одном сервере

— Низкая масштабируемость

— Не оптимальное использование ресурсов

— Плохая отказоустойчивость

— Ограничения на количество соединений

Невиртуализированная архитектура

Page 7: FT & HA Rails приложений приложений — это просто

VM APP

NginX + passenger+

memcached

Users

VM DB

MySQL

Server 1

Server 2

Server 3

Плюсы

— Изолированные сервисы

— Гибкое разграничение прав

— Высокая масштабируемость

— Оптимальное использование ресурсов

— Высокая отказоустойчивость

VM LB

Load Balance

VM LB

Load Balance

VM APP

NginX + passenger+

memcached

VM APP

NginX + passenger+

memcached

VM STATIC

Varnish + nginx

VM QC

NginX + passenger+

memcached

VM STATIC

Varnish + nginx

VM DB

MySQL

VM DEV

NginX + passenger+

memcached

Виртуализированная архитектура

Page 8: FT & HA Rails приложений приложений — это просто

Front End

Engine XUsers

Back End

(httpd, thin,

mod_rails, etc)

Back End

(httpd, thin,

mod_rails, etc)

Необходимо стороннее решение по

резервированию

Малое количество алгоритмов

планировщика нагрузки

Единая точка входа и

выхода

Ограниченное число портов на

сервере для осуществления

проксирования

Балансировка нагрузки

Reverse – Proxy (Nginx, Apache mod proxy, etc)http://sysoev.ru/nginx/

http://httpd.apache.org/

Распространенное решение :

Вариант исполнения

Page 9: FT & HA Rails приложений приложений — это просто

LVS Active

RouterUsers

Back End

(httpd, thin,

mod_rails, etc)

Back End

(httpd, thin,

mod_rails, etc)

LVS

Backup

RouterЕдиная точка

входа

Резервирование

в комплекте

Множественные точки выхода

heartbeat

IP Тунель

Балансировка нагрузки

LVS (Piranha Configuration Tool — Часть RHEL/CentOS)http://www.linuxvirtualserver.org/

http://www.redhat.com/support/wpapers/piranha/

Вариант исполнения

Наиболее оптимальное решение:

Page 10: FT & HA Rails приложений приложений — это просто

NginxApache +

mod_rails

Запрос

Nginx Thin

Запрос

Server

Server

Слишком много надо

ресурсов для

поддержания 2х HTTP

серверов.

Необходимо дополнительно

настраивать мониторинг на

утечки памяти и т.д.

Apache +

mod_rails

Server

Запрос

Слишком много

ресурсов для Apache.

При большой

нагрузке.

Нет контроля за количеством

работающих воркеров

Back End

Распространенное решение :

Page 11: FT & HA Rails приложений приложений — это просто

Nginx +

passenger

Запрос

VM

Rewrite rules

Файловый upload, модуль nginx_upload_module http://www.grid.net.ru/nginx/upload.ru.html

— Загрузка файла — медленные запрос и его необходимо уводить в сторону

— Снижение или экономия потребления памяти

—Высвобождение процессов обработчика

Алгоритм работы:

1) Nginx обрабатывает загрузку

2) процессы обработчика свободны, а значит могут обрабатывать быстрые запросы

3) Nginx обработал загрузку

4) в приложение передается локальный путь к файлу и приложению нужно провести только

манипуляцию с файлом

Тест : 10 файлов по 100MB

Без nginx_upload_module расход памяти на загрузку +200MB

С nginx_upload_module расход памяти на загрузку +5MB

Тюнинг GC (passenger_ruby)

export RUBY_HEAP_MIN_SLOTS=100000

export RUBY_HEAP_SLOTS_INCREMENT=50000

export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1

export RUBY_GC_MALLOC_LIMIT=30000000

export RUBY_HEAP_FREE_MIN=20000

http://www.rubyenterpriseedition.com/documentation.html#_garba

ge_collector_and_object_space

Проброс на среду контроля качества по куке.

if ($cookie_qc = "1")

{

proxy_pass http://192.168.1.15;

break;

}

Back End

Page 12: FT & HA Rails приложений приложений — это просто

Основные проблемы при большой нагрузке:

I. Контента не бывает мало и он лежит обычно на HDD

II. Большие HDD по определению медленные, много маленьких в

сервер не вставишь

III. Хорошие дисковые полки – дорогое удовольствие

IV. Возможно использовать SSD диски, под отдачу контента, но

технология еще не обкатана, и SSD предельно дороги

Что можно сделать:

1. Закэшировать часто запрашиваемый статический контент в

оперативной памяти (использование varnishd)

http://www.varnish-cache.org/

1. Распределить контент по разным серверам, использовать

распределенные файловые системы такие как pohmelfs

http://www.ioremap.net/projects/pohmelfs/, mogilefs

http://www.danga.com/mogilefs/ для быстрого доступа к ним.

2. Создание большого количества Виртуальных Машин с кэшем для

равномерного распределения отдачи контента

Отдача статического контента

Page 13: FT & HA Rails приложений приложений — это просто

NGINX

Front EndHDD

Запрос

Распространенное решение :

Количество файлов ~ 10 Миллионов

Количество папок ~ 1,5 Миллионов

Уровень вложенности ~ 6-7Упираемся в скорость

дисков

Растет wait

производительность

падает

NGINX

Front EndHDD

Server 1

Server 1

NGINX

Front EndHDD

Server 2

Запрос

Load

Balance

Упираемся в скорость

дисков

Отдача статического контента

Page 14: FT & HA Rails приложений приложений — это просто

Content-Type: image/jpeg

Last-Modified: Tue, 26 Apr 2011 19:36:38 GMT

Expires: Thu, 26 May 2011 19:39:21 GMT

Cache-Control: max-age=2592000

82+11:01:23

Hitrate avg: 0.9773 0.9792 0.9292

VARNISHD

Front End

NGINX

Back End

HDDRAM

Заголовок

Статистика кэша

Запрос

Virtual Machine

VARNISHD

Front End

RAM

NGINX

Back End

HDD

NGINX

Back End

HDD

VARNISHD

Front End

RAM

VARNISHD

Front End

RAM

Load Balance

VM 1 VM 2 VM 3

VM 4 VM 5

Запрос

Реплика

Количество файлов ~ 10 Миллионов

Количество папок ~ 1,5 Миллионов

Уровень вложенности ~ 6-7

Отдача статического контента

Page 15: FT & HA Rails приложений приложений — это просто

Для чего нужен и как помогает :

1. Слежение за доступностью и работоспособностью проекта.

2. Выявление тонких мест в технической реализации ландшафта.

3. Возможность увидеть Boost приложений.

4. Возможность увидеть проблемы в кодовой базе.

5. Возможность увидеть динамику нагрузки на сайт.

6. Повышение шансов вовремя распознать атаку типа ДДоС.

3 вида мониторинга : Внешний, Внутренний, Приложения

Nginx + HttpStubStatusModule

Active — Количество всех открытых соединений включая соединения типа proxy_pass

Read — Количество запросов на чтение

Write — Количество чтений тела запроса , запись ответа клиенту

Wait — Количество соединений типа keep-alive connections

Мониторинг по логам :

log_format upstream_response '"$uri" $status $request_time $upstream_response_time';

$request_time — это время обработки запроса. Считается от получения первых

данных от клиента до оправления последних данных для клиента в ядро.

$upstream_response_time - это время, которое прошло с того момента, как nginx

отправил бэкенду запрос и до того момента, когда бэкенд ему полностью ответил.

Мониторинг

Page 16: FT & HA Rails приложений приложений — это просто

Мониторинг (на примере одной из нод)

Page 17: FT & HA Rails приложений приложений — это просто

До изменений

Время отработки бэкенда 350мс (±50мс)

Полное время загрузки страницы с выключенным кэшом (30+)сек

Полное время загрузки страницы с включенным кэшом (15+)сек

Нагрузка дисковой подсистемы на сервер статики (93%)

Коэффициента использования серверов - 15 %

Не масштабируемая архитектура

Низкая отказоустойчивость

Отсутствия как класс continuous deployment

После изменений

Время отработки бэкенда 200мс (±20мс)

Полное время загрузки страницы с выключенным кэшом (4-6)сек

Полное время загрузки страницы с включенным кэшом (4-6)сек

Нагрузка дисковой подсистемы на ноде сервера статики (20%)

Коэффициента использования серверов - 70 %

Высоко масштабируемая архитектура

Высокая отказоустойчивость

На текущий момент внедрен mini-continuous deployment

Итоги (на примере Look At Me)

Page 18: FT & HA Rails приложений приложений — это просто

Вопросы?