2011 Масштабирование и отказоустойчивость с Nginx Специально для TulaDev.net.

Презентация:



Advertisements
Похожие презентации
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Advertisements

Школьная форма Презентация для родительского собрания.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
1. Определить последовательность проезда перекрестка
Типовые расчёты Растворы
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Michael Jackson
Развивающая викторина для детей "Самый-самый " Муниципальное общеобразовательное учреждение средняя общеобразовательная школа 7 ст. Беломечётской.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от
Рисуем параллелепипед Известно, что параллельная проекция тетраэдра, без учета пунктирных линий, однозначно определяется заданием проекций его вершин (рис.
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
1 Тестирование производительности веб–приложений: Как перестать беспокоиться и начать делать ЭТО Тимур Хайруллин Организатор.
1 Знаток математики Тренажер Таблица умножения 3 класс Школа России Масько Любовь Георгиевна Муниципальное общеобразовательное учреждение средняя общеобразовательная.
Напряжения и деформации в сварных швах ТЕМА УРОКА 1.
Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Разгони свой сайт Лекция 9: Практическое приложение Мациевский Николай 1 / 27 webo.in.
Интернет Университет Суперкомпьютерных технологий Лекция 3 Методы построения параллельных программ (продолжение) Учебный курс Введение в параллельные алгоритмы.
Двоичная система счисления АЛФАВИТ: 1, 10, 11, 100, 101, 110, 111, 1 000, 1 001, 1010, , 1 100, 1 101, 1 110, 1 111, ,

Транксрипт:

2011 Масштабирование и отказоустойчивость с Nginx Специально для TulaDev.net

For TulaDev.net \ 2011 О чем доклад? Доклад об Nginx. Nginx – это маленький, но удаленький HTTP-сервер. Что он умеет: обслуживание статических запросов; акселерированное проксирование с кэшированием; простое распределение нагрузки и отказоустойчивость; Может работать на: FreeBSD 3-7 (i386, amd64); Linux (i386); Linux 2.6 (amd64); Solaris 9 (i386, sun4u); Solaris 10 (i386, amd64, sun4v); MacOS X (ppc, i386); Windows XP, Windows Server В общем работает на всем, что движется где есть процессор. На моем WiFi-маршрутизаторе дома, например, работать будет

For TulaDev.net \ 2011 О чем доклад? Разработчик: Игорь Сысоев, в настоящий момент работает в Rambler. 12 апреля 2011 года выпустил версию 1.0 Насколько популярен (данные netcraft.com, май 2011): Насколько популярен (данные w3techs.com, май 2011): «Nginx is used by 7.1% of all the websites whose web server we know». Для.ru доменов %. DeveloperMay 2011PercentChange Apache203,609, %1.58 Microsoft59,646, %-0.46 nginx23,850, %-0.16

For TulaDev.net \ 2011 ОМГ, а где же Microsoft? В докладе я постараюсь показать, что масштабировать любые web- приложения (даже на Microsoft-платформе) при помощи Nginx – это: Дешево Просто Эффективно Надежно Nginx IIS 1IIS 2IIS 3…

For TulaDev.net \ 2011 Давайте определим понятия Масштабирование – это механизм, позволяющий пропорционально увеличивать производительность системы за счет добавления нового оборудования. Отказоустойчивость – это механизм, позволяющий не терять работоспособности системы при выходе из строя единицы оборудования. Можно рассматривать эти термины в контексте программ, компьютеров или компьютерных комплексов (кластеров).

For TulaDev.net \ 2011 Зачем это нужно? Для того, чтобы понять, зачем я затеял этот доклад, давайте сделаем эксперимент. Давайте посчитаем, сколько запросов к среднестатистическому сайту делает среднестатистический пользователь. Возьмем первый попавшийся сайт, например,

For TulaDev.net \ 2011 Зачем это нужно? Протокол обращений к серверу: ЗапросКод ответа 1http://tuladev.net/200 2http://tuladev.net/Scripts/MicrosoftAjax.js200 3http://tuladev.net/Scripts/MicrosoftMVCValidation.js200 4https://ajax.aspnetcdn.com/ajax/jquery/jquery min.js200 5http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.7/jquery-ui.js200 6http://tuladev.net/Scripts/UploadFile.js404 7http://tuladev.net/Scripts/plugins/jquery.imgareaselect.js200 8http://tuladev.net/Scripts/plugins/jquery.metadata.js200 9http://tuladev.net/Scripts/plugins/fileuploader.js200 10http://tuladev.net/Scripts/plugins/FileUploader2.js200 11http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js200 12http://jquery-ui.googlecode.com/svn/.../jquery.bgiframe js200 13http://ajax.googleapis.com/ajax/libs/.../jquery-ui-i18n.min.js200 14http://yandex.st/jquery-ui/1.7.2/i18n/ui.datepicker-ru.js200 15http://connect.facebook.net/en_US/all.js#xfbml= http://userapi.com/js/api/openapi.js? http://ajax.googleapis.com/ajax/libs/jqueryui/.../jquery-ui.css200 18http://ajax.microsoft.com/ajax/jquery.ui/1.8.7/.../jquery-ui.css200 19http://tuladev.net/Content/css/imgareaselect-default.css200 20http://tuladev.net/Content/Site.css?v= http://api-maps.yandex.ru/.../index.xml?key=AGXKrk0BAAAAz3owU http://mc.yandex.ru/metrika/watch.js200 23http://vkontakte.ru/js/api/xd_connection.js? http://tuladev.net/Scripts/UploadFile.js404 25http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.7/jquery-ui.js200 26http://tuladev.net/Content/Images/Gerb.png200 27http://tuladev.net/Content/Images/Ineta.png200 28http://tuladev.net/Content/images/LogOnControllerImg.png200 29http://tuladev.net/Content/images/MenuBackGround.png200 30http://api-maps.yandex.ru/1.1.19/_YMaps.css200 31http://api-maps.yandex.ru/1.1.19/_YMaps.js200 32http://api-maps.yandex.ru/1.1.19/xml/data.xml?v= http://tuladev.net/Home/Show?userID= http://tuladev.net/Content/Images/Codemasters.png200 35http://cdn.userecho.com/js/widget-1.4.gz.js200 36http://mc.yandex.ru/.../ ?&cnt-class=0&rn=286126% http://tuladev.net/Content/images/FooterBackGround.png200 38http://tuladev.net/Content/images/GoldSponsors.png200 39http://tuladev.net/Content/images/SilverSponsors.png200 40http://tuladev.net/Content/images/BronzeSponsors.png200 41http://tuladev.net/Content/images/Title.png200 42http://ajax.microsoft.com/ajax/.../ui-bg_flat_75_ffffff_40x100.png200 43http://ajax.microsoft.com/.../ui-bg_highlight-soft_15_cc0000_1x http://ajax.microsoft.com/ajax/.../ui-icons_ffffff_256x240.png200 45http://cdn.userecho.com/.../0J7RgdGC0LDQstC40YLRjCDQvtGC0LfRi9Cy200 Запрос Код ответа 1http://tuladev.net/200 2http://tuladev.net/Scripts/MicrosoftAjax.js200 3http://tuladev.net/Scripts/MicrosoftMVCValidation.js200 4https://ajax.aspnetcdn.com/ajax/jquery/jquery min.js200 5http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.7/jquery-ui.js200 6http://tuladev.net/Scripts/UploadFile.js404 7http://tuladev.net/Scripts/plugins/jquery.imgareaselect.js200 8http://tuladev.net/Scripts/plugins/jquery.metadata.js200 9http://tuladev.net/Scripts/plugins/fileuploader.js200 10http://tuladev.net/Scripts/plugins/FileUploader2.js ui.min.js200 12http://jquery-ui.googlecode.com/svn/.../jquery.bgiframe js200 ………

For TulaDev.net \ 2011 Зачем это нужно? Давайте немного детальнее разберем, что это за запросы: 45 запросов при загрузке одной страницы! 22 запроса к домену tuladev.net 21 запрос к статическим файлам 2 несуществующих файла (404 ответ) 1 запрос к ASP странице 95% запросов для обработки не требуют никакой сложной логики. С обработкой таких запросов вполне мог бы справиться один из первых HTTP-серверов в истории человечества.

For TulaDev.net \ 2011 Зачем это нужно? Оперируя понятиями.NET, C#, ASP мы с вами сможем оптимизировать лишь 5% всех запросов, обрабатываемых сервером для того, чтобы отобразить пользователю главную страницу этого среднестатистического сайта. Чтобы оптимизировать остальные 95% нам нужно разбираться уже не столько в.NET, сколько в настройках и производительности web-сервера. Этот вопрос лежит скорее в области системного администрирования, но я думаю, что мы с вами разберемся.

For TulaDev.net \ 2011 А есть ли проблема? Так может быть нет ничего страшного в этих запросах к статическим файлам? Может быть это всего лишь «песок» и он не оказывает существенного влияния на скорость загрузки страницы. Чтобы ответить на этот вопрос давайте вспомним, что быстрее скопировать: 1 файл в 1 Mb или 1000 в 1 Kb? Мелкие файлы всегда медленнее передавать из-за наличия накладных расходов.

For TulaDev.net \ 2011 Тестовое окружение Oracle VM VirtualBox 3 виртуальные машины, соединенные сетью 1 Gbps: Windows Server 2003 (1Gb) – работает IIS :80 – IIS Debian Linux (nginx) (256 Mb) – работает Nginx :80 – Apache :80 – Nginx :80 – Nginx Debian Linux (benchmark) (256 Mb) для запуска ab IP не важен

For TulaDev.net \ 2011 Давайте посмотрим Проведем 1-й эксперимент: Маленький HTML файл, ~150 байт. Посмотрим, с какой скоростью его будет отдавать: Apache IIS Nginx В качестве тестирующего приложения буду использовать утилиту ApacheBench

For TulaDev.net \ 2011 Давайте посмотрим Проведем 2-й эксперимент: Большой EXE файл, ~1 Mбайт. Посмотрим, с какой скоростью его будет отдавать: Apache IIS Nginx В качестве тестирующего приложения буду использовать утилиту ApacheBench

For TulaDev.net \ 2011 Откуда такая разница? Коренная причина в особенностях web-серверов. IIS – это вообще-то Application server. Nginx – это HTTP-сервер. Он изначально создавался именно для целей быстрой обработки запросов. Игорь Сысоев называет причиной такой разницы то, что nginx использует вызов sendfile (для не Linux платформ используются другие механизмы). Читаем, что такое sendfile: «системный вызов, который выполняет передачу файла за одно обращение», при этом «не происходит переключение контекста между пользовательским режимом и режимом ядра, а это весьма "дорогостоящая" операция».

For TulaDev.net \ 2011 Что позволяет Nginx Масштабирование Nginx позволяет скрывать за собой сотни серверов, которые будут иметь единую точку входа. Распределять между ними запросы практически по достаточно широкому набору возможных правил. Отключение любого из серверов бэкэнда не повлияет на работоспособности системы (естественно пропорционально просядет производительность) Но отключение сервера с Nginx роняет всю систему. Как быть?

For TulaDev.net \ 2011 Что позволяет Nginx Отказоустойчивость Nginx сам является единой точкой отказа. Чтобы обеспечить близкую к 100% отказоустойчивость нужно воспользоваться дополнительным механизмом. CARP позволяет сделать так, что несколько машин могут обслуживать запросы к одному IP. Выход из строя любой из них не нарушает работоспособности системы. На практике 2-х машин хватит, чтобы обеспечить очень близкую к 100% отказоустойчивость.

For TulaDev.net \ 2011 И снова, а где Microsoft? Nginx – это не панацея. Он не умеет выполнять приложения.NET (хотя умеет, например, perl) Это всего лишь маленький легкий HTTP-сервер, который умеет здорово отдавать статические файлы. Но кроме этого его можно использовать для проксирования других Web-серверов. Вот тут и вступает в игру IIS. Связка Nginx+IIS гораздо мощнее отдельного IIS или отдельного Nginx.

For TulaDev.net \ 2011 Как смасштабировать IIS Известные мне способы DNS round robin Nginx proxy_pass Common Address Redundancy Protocol (CARP) Microsoft Azure (неявная реализация) Microsoft Network Load Balancing (NLB) Microsoft Application Request Routing (ARR)

For TulaDev.net \ 2011 Где Nginx не поможет Для обработки 1-го запроса не хватает мощности 1-го сервера. (Если нужно склеить несколько разных блоков, то Nginx умеет SSI ). Поток входящих запросов не могут обработать все доступные бэкенды. (Здравствуй, 504 Gateway time out). Поток входящих запросов таков, что не справляется Nginx. Тут нужно применять DNS round robin. По каким-то причинам нет возможности использовать Unix-систему. (Несмотря на то, что Nginx работает в Windows, производительность и надежность там будет не та).

На этом все Почитать об Nginx: Задать мне вопрос: