ДонНТУ 


Магистр ДонНТУ Плотников Денис Юрьевич Плотников Денис Юрьевич

Факультет компьютерных наук и технологий

Кафедра компьютерной инженерии

Специальность «Системное программирование»

Методы и средства повышения эффективности Интернет-приложений

Научный руководитель: к.т.н., проф. Аноприенко Александр Яковлевич
Реферат по теме выпускной работы

Содержание

Введение

1. Актуальность темы работы

2. Предполагаемая научная новизна

3. Планируемые практические результаты

4. Практическая ценность работы

5. Обзор исследований и разработок по теме

6. Текущие результаты

Выводы

Список источников


Введение

С каждым днём все большее количество людей начинает пользоваться интернетом. Путь развития всех стран мира в информационном плане заключается в двух факторах. Первый – каждый человек должен иметь дома быстрый доступ в интернет. Второй – необходимо разместить в интернете как можно больше сервисов, которые бы стали заменой сегодняшним и уже устаревшим услугам. Убедиться в этом легко – зайдите в обычный магазин. Там, скорее всего, вы увидите терминалы оплаты. Работают эти терминалы через интернет и позволяют оплачивать то, что люди раньше платили в кассах, выстаивая огромные многочасовые очереди. Теперь же все это можно сделать за несколько минут. Второй пример – социальные сети. Практический каждый из нас заменил половину или более своего реального общения на виртуальное и это стало частью нашей жизни.


1. Актуальность темы

Чем популярнее сайт – тем больше нагрузка на него. Давно уже прошли те времена, когда скорость работы сайта зависела в первую очередь от скорости домашнего интернета. Сейчас мы рассматриваем любые сайты кроме торент –трекеров и архивов файлов [5].

Время, которое пройдет от того, как пользователь введет адрес сайта и нажмет «enter» до полной загрузки страницы играет важнейшую роль в жизни сайта и состоит из 2х компонент: Время генерации файла и время загрузки этого файла. Время отображения файла браузером мы не учитываем, так как это зависит только от мощности конкретного компьютера пользователя.

При скорости от 1 мбит/с временем загрузки страницы тоже можно пренебречь. Так делается потому, что в среднем размер любой страницы в пределах 100-200 кб и скорость скачивания такого объема данных будет примерно равен 0,1-0,2 секунды, а при скорости 10 мбит/с это время уменьшится до 0,01 – 0,02 секунд. Для человека 0,1 секунда и 0,01 секунда это один миг, время которое он не может измерить. Исходя из данного предположения, мы пренебрегаем временем скачивания страницы [1].

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


2. Предполагаемая научная новизна

Выше было сказано, главный параметр для популярного сайта – время генерации страницы. Научная новизна работы заключается:


1) Разработка правил создания проектов с высокой нагрузкой
2) Внедрение полученных правил в текущие популярные проекты и создание новых, уже с использованием полученных данных


3. Планируемые практические результаты

В результате исследования мы планируем создать набор методов и средств, с помощью которых можно было бы создавать проекты, которые бы выдержали большую нагрузку. Под большой нагрузкой подразумевается сайты, к которым поступает от 5 запросов в секунду.

Результаты будут опробованы на собственных проектах. Полученный набор алгоритмов будет не только подтвержден теоретическими расчетами, но и полученными практическими результатами.


4. Практическая ценность работы

Ценность работы заключается в применении полученных результатов для усовершенствования текущих проектов и создании новых. Рассмотрим более подробно эти два пункта.

Первый – усовершенствование текущих проектов. Сейчас создается много сайтов с интересными идеями, создатели тратят большое количество времени и усилий на написание кода, средств на рекламу, содержание программистов и т.д. В 99,9 % случаев никто не обладает собственными дата-центрами, в которых были бы сверхпроизводительные компьютеры. Часто проекты располагаются на виртуальном хостинге, реже – на выделенных серверах. Когда проект уже написан, начинается его реклама. Если всё будет успешно, то пользователи начинают посещать ресурс всё активнее и активнее и рост количества пользователей можно приблизительно оценить как рост геометрической прогрессии.

Сразу же начинают у большинства пользователей появляться проблемы такого рода:
1) Страница загружается долго
2) Появляется 503 ошибка сервера
3) Загружаются не все элементы страницы и отображение страницы некорректно
4) Работают не все части приложения
После появления таких проблем часть пользователей сразу же покинет приложение или сайт и дальнейший рост популярности просто невозможен [8].
Наш полученный опыт можно будет внедрить в эти проекты, и они станут стабильно работать, наращивая популярность еще более быстрыми темпами.
Второй – создание новых проектов с использование полученных методов. В этом случае сразу проект создается по новым правилам и темпы его роста будут зависеть только от идеи, но никак не от нагрузки на сервер, потому что приложение сможет справляться с любой нагрузкой.


5. Обзор исследований и разработок по теме

Исследования производятся каждой конкретной фирмой для себя и полученными результатами стараются не делиться потому, что компания исследует для себя и хочет стать лидером в и сделать свой продукт максимально быстрым. Ведущими фирмами в подобном исследовании являются Facebook и Google.

Рассмотрим наиболее популярные технологии, которые они используют:

Memcached
Memcached — один из самых широко известных проектов в Интернете. Его распределенная система кеширования информации используется как кеширующий слой между веб-серверами и MySQL (поскольку доступ к базам данных относительно медленен). Прошли годы и Facebook произвел огромное количество модификаций кода Memcached и сопутствующего ПО (например, оптимизацию сетевой подсистемы). В Facebook работают тысячи Memcached серверов с десятками терабайт кэшированных данных в любой момент времени. Наверное, это самый большой в мире массив Memcached серверов. На рисунке 1 изображен принцип работы memcached сервера

Принцип работы memcached сервера
Рисунок 1 – Принцип работы memcached сервера (Анимация: 4 кадра, задержка между кадрами 5 с, количество циклов воспроизведения не ограничено, размер 500*250, 29.92 кБ)


HipHop для PHP
PHP, поскольку он является скриптовым языком, достаточно медлителен, если сравнивать его с родным кодом процессора, исполняемым на сервере. HipHop конвертирует скрипты на PHP в исходные коды на C++, которые затем компилируются для обеспечения хорошей производительности. Это позволяет Facebook получать большую отдачу от меньшего количества серверов, поскольку PHP в Facebook используется практически повсеместно. Небольшая группа инженеров (в начале их было только трое) разработала HipHop за 18 месяцев и теперь он работает на серверах проекта [7].

Haystack
Haystack — это высокопроизводительная система хранения / получения фотографий (строго говоря, Haystack — хранилище объектов, поэтому он может хранить любые данные, а не только фотографии). На долю этой системы выпадает огромное количество работы. На Facebook загружено более 20 миллиардов фотографий и каждая сохраняется в четырех различных разрешениях, что в итоге дает нам более 80 миллиардов единиц фотографий. Haystack должен не просто уметь хранить фото, но и отдавать их очень быстро. Как мы упоминали ранее, Facebook отдает более 1,2 миллиона фотографий в секунду. Это количество не включает в себя фотографии, которые отдаются системой доставки контента Facebook и постоянно растет [9].

BigPipe
BigPipe — система динамической доставки веб-страниц, разработанная в Facebook. Она используется для доставки каждой веб-страницы секциями (которые называются pagelets) для оптимизации производительности. Например, окно чата, лента новостей и другие части страницы запрашиваются отдельно. Их можно получать параллельно, что увеличивает производительность и позволяет пользователям использовать вебсайт даже в том случае, если какая-то его часть отключена или неисправна.

Cassandra
Cassandra — распределенное отказоустойчивое хранилище данных. Это одна из систем, которую всегда упоминают, говоря о NoSQL. Cassandra стала проектом с открытым исходным кодом и даже стала дочерним проектом Apache Foundation. На Facebook мы используем ее для поиска по папке Входящие. В принципе, ее используют многие проекты. Например, Digg. Планируется ее использование в проекте Pingdom.

Scribe
Scribe — удобная система протоколирования, которая используется сразу для нескольких вещей одновременно. Она была разработана для обеспечения ведения протоколов в масштабе всего Facebook и поддерживает добавление новых категорий событий, как только они появляются (на Facebook их сотни).

Hadoop и Hive
Hadoop — реализация алгоритма map-reduce с открытым исходным кодом, позволяющая производить вычисления на огромных объемах данных. В Facebook мы используем его для анализа данных (как вы понимаете, в Facebook их достаточно). Hive был разработан в Facebook и позволяет использовать SQL запросы для получения информации от Hadoop, что облегчает работу непрограммистов. И Hadoop и Hive имеют открытые исходные коды и развиваются под эгидой Apache Foundation. Их использует большое количество других проектов. Например, Yahoo и Twitter.

Thrift
Facebook использует различные языки программирования в различных компонентах системы. PHP используется как фронт-энд, Erlang для чата, Ява и C++ тоже не остались без дела. Thrift — кросс-языковой фреймворк, который связывает все части системы в единое целое, позволяя им общаться друг с другом. Thrift разрабатывается, как проект с открытым исходным кодом и в него уже добавлена поддержка некоторых других языков программирования.

Varnish
Varnish — HTTP акселератор, который может служить в качестве балансировщика нагрузки и кеша содержимого, которое затем может доставляться с большой скоростью. Facebook использует Varnish для доставки фотографий и картинок профилей, выдерживая нагрузку в миллиарды запросов в день. Как и все, что используется Facebook Varnish — программное обеспечение с открытым исходным кодом [2].



6. Текущие результаты

На текущий момент было создано 4 веб-приложения. 3 приложения работают в социальных сетях и одно самостоятельное. Были получены некоторые практические результаты и сейчас мы рассмотрим их на примере веб-приложения «Спортивный дневник» Для создания веб-страниц, ориентированных на большое количество посещений, необходимо решать проблему высокой загрузки ресурсов. В общем случае существует два способа решения этой проблемы. Первый – оптимизировать исходный код с использованием оптимальных технологий. Второй – использовать мощные аппаратные средства. В рамках данного доклада используется первый способ. Для проектов с высокой нагрузкой целесообразно использовать php в режиме fast-cgi. Существуют несколько схем реализации такого режима. Для данных проектов используется связка nginx и php-fpm. Выигрыш в производительности, по сравнению с Apache и его mod_php достигается за счет того, что php-fpm создает n php-процессов, которые впоследствии висят в системе и обрабатывают скрипты, переданные от веб-сервера. При такой схеме экономится время и ресурсы системы на вызов php-интерпретатора. Использование данного режима позволило сократить нагрузку на сервер примерно в 5 раз. Следующим способом повышения производительности является установка php-акселератора. Суть его работы заключается в кешировании бинарного кода скрипта. В действительности, затраты процессорного времени на перевод скрипта в бинарный код при каждом обращении являются бессмысленными. Таких обращений к одному и тому же скрипту может быть до 100 раз в секунду, поэтому использование eAccelerator является целесообразным. После его установки производительность системы возрастает, и нагрузка спадает в несколько раз, время генерации страниц резко уменьшается. Для поиска неоптимальных участков кода в проект были добавлены таймеры, отсчитывающие время выполнения php и время выполнения sql-запросов. После их выявления необходимо переделать проблемные запросы, а также добавить индекса в необходимые места. Очень полезной для решения этой проблемы является команда EXPLAIN. В итоге время выполнения sql-запросов местами сократилось до 10-20 раз. Однако это не единственная возможность сократить sql-запросы. Memcached – простейший и в то же время высокопроизводительный кеширующий сервер, разработанный в свое время для livejournal.com. Использовать memcache в полной мере не представляется возможным, т.к. работа не ограничивается этим ресурсом, но тем не менее он приносит большую пользу. В рамках данного проекта memcached используется для кеширования результатов sql-запросов, либо хранения уже готовых отрендерных блоков. На многих страницах сайта время их генерации сократилось до 0.007 сек. Еще одним полезным инструментом для повышения качества ресурса является тюнинг sysctl. На больших нагрузках стандартная конфигурация не является максимально эффективной. По возможности php-fpm, memcached и MySQL переносятся на unix-socket. В итоге, в пиковые моменты нагрузки сервер отдает содержимое так же быстро, как и без нагрузок [6]. Тестирование ресурса на сайте loadimpact.com приведено на рисунках 2 и 3 [10].

Тестирование загрузки веб-приложения
Рисунок 2 — Тестирование загрузки веб-приложения

Тестирование производительности некоторых сегментов сайта
Рисунок 3 — Тестирование производительности некоторых сегментов сайта

Очень полезными средством в разработке высоконагруженного веб-приложения являются базы данных MySQL. В рамках данного были исследованы актуальные на сегодняшний день возможности MySQL:

• Сегментирование — возможность разбить одну большую таблицу на несколько частей, размещенных в разных файловых системах, основываясь на определенной пользователем функции. При определенных условиях это может дать серьёзное увеличение производительности и, кроме того, облегчает масштабирование таблиц.
• Изменено поведение ряда операторов, для обеспечения большей совместимости со стандартом SQL2003.
• Построчная репликация (англ. row-based replication), при которой в бинарный лог будет записываться только информация о реально измененных строках таблицы вместо оригинального (и, возможно, медленного) текста запроса. Построчную репликацию можно использовать только для определенных типов sql-запросов, в терминах MySQL — смешанная репликация (англ. mixed replication).
• Встроенный планировщик периодически запускаемых работ. По синтаксису добавление задачи похоже на добавление триггера к таблице, по идеологии — на crontab.
• Дополнительный набор функций для обработки XML, реализация поддержки XPath.
• Новые средства диагностики проблем и утилиты для анализа производительности. Расширены возможности по управлению содержимым лог-файлов, логи теперь могут быть сохранены и в таблицах general_log и slow_log. Утилита mysqlslap позволяет провести нагрузочное тестирование БД с записью времени реакции на каждый запрос.
• Для упрощения операции обновления подготовлена утилита mysql_upgrade, которая выполнит проверку всех существующих таблиц на предмет совместимости с новой версией, и при необходимости выполнит надлежащие корректировки.
• MySQL Cluster отныне выпущен как отдельный продукт, базирующийся на MySQL 5.1 и хранилище NDBCLUSTER.
• Значительные изменения в работе MySQL Cluster, такие, как, например, возможность хранения табличных данных на диске.
• Возврат к использованию встроенной библиотеки libmysqld, отсутствовавшей в MySQL 5.0.
• API для плагинов, которое позволяет загружать сторонние модули, расширяющие функциональность (например, полнотекстовый поиск), без перезапуска сервера.
• Реализация парсера полнотекстового поиска в виде plug-in.
• Новый тип таблиц Maria (устойчивый к сбоям клон MyISAM) [4].

Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц.
С использованием этих технологий и хостинга на серверах nginx и apache было создано приложения «Спортивный дневник». Располагается оно по адресу http://sportdiary.net/ . На рисунке 4 изображена главная страница сайта.

Главная страница разработанного веб-приложения
Рисунок 4 — Главная страница разработанного веб-приложения

Идея спортивного дневника заключается в том, что пользователь регистрируется на сайте, заполнив специальную форму. Далее он вводит свои упражнения в специальное окно. Все упражнения пользователя добавляются в список. Нажав на упражнение, пользователь может вводить данные за любой день и видеть их в виде графика. На рисунке 5 изображен график выполнения упражнения «Отжимания». Все пользователи могут просматривать статистику друг друга. Для тестирования высокой нагрузки была размещена реклама на таких порталах как Яндекс, Вконтакте и Мамба. На сервере имеется модуль AWStats который по логам сервера собирает данные и предоставляет их в виде графиков и таблиц. Некоторые из данных представлены на рисунке 6 [3].


Просмотр упражнения
Рисунок 5 — Просмотр упражнения

Статистика посещения разработанного веб-ресурса
Рисунок 6 — Статистика посещения разработанного веб-ресурса


Выводы

Предполагается, что полученные результаты помогут создателям популярных веб-приложений избежать проблемы с нагрузкой на сервер. В настоящее время проект находится на стадии доработки. При написании данного реферата магистерская работа еще не завершена. Окончательное завершение: декабрь 2012 года. Полный текст работы и материалы по теме могут быть получены у автора или его руководителя после указанной даты.


Список источников

[1]. Яндекс. Стажировки в департаменте разработки [Электронный ресурс].

Режим доступа: http://company.yandex.ru/job/vacancies/form.xml

[2]. Архитектура больших проектов: Facebook [Электронный ресурс].

Режим доступа: http://habrahabr.ru/post/100020/

[3]. AWStats official web site [Электронный ресурс].

Режим доступа: http://awstats.sourceforge.net/

[4]. Разработка высоконагруженного веб-приложения. Плотников Д.Ю., Малёваный Е.Ф., Аноприенко А.Я.

Источник: Информационные управляющие системы и компьютерный мониторинг (ИУС и КМ 2012)— Донецк, ДонНТУ — 2011, с. 431-435

[5]. Будущее информационных технологий [Электронный ресурс].

Режим доступа: http://www.ua3000.info/articles/9/2010-08-29095.html

[6]. What is memcahed [Электронный ресурс].

Режим доступа: http://code.google.com/p/memcached/wiki/NewOverview

[7]. Hip-Hop for php by facebook [Электронный ресурс].

Режим доступа: https://github.com/facebook/hiphop-php

[8]. Анализ загрузки веб-страницы [Электронный ресурс].

Режим доступа: http://webo.in/articles/habrahabr/16-optimization-page-load-time/

[9]. About Haystack [Электронный ресурс].

Режим доступа: http://django-haystack.readthedocs.org/en/latest/

[10]. LoadImact documents [Электронный ресурс].

Режим доступа: http://loadimpact.com/learning-center/faq