ДонНТУ 


Магистр ДонНТУ Малёваный Егор Фёдорович Малёваный Егор Фёдорович

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

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

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

Разработка высоконагруженных Интернет-сервисов

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

Содержание

Введение

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

2. Цель и задачи исследования, планируемые результаты

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

4. Высоконагруженный Интернет-сервис

5. Разработка веб-сервиса «Спортивный дневник»

6. Разработка приложения для социальной сети

Выводы

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


Введение

В наше время Интернетом пользуется практически любой человек. Каждый может найти в нем всю интересующую его информацию. Поскольку многие сайты набирают колоссальную популярность, необходимо разрабатывать или же модифицировать их таким образом, чтобы они выдерживали высокую нагрузку [1].

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


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

На данный момент разработка высоконагруженных веб-сервисов ведется многими компаниями. Число пользователей Интернетом постоянно растет, и любой востребованный сайт за определенный промежуток времени набирает высокую посещаемость. Таким образом, на сегодняшний день стоит задача разработки оптимального программного кода, организации баз данных, усовершенствования аппаратных ресурсов.

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


2. Цель и задачи исследования, планируемые результаты

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

Основные задачи исследования:

1. Анализ современных технологий разработки сайтов с высокой посещаемостью.

2. Оценка характеристик архитектуры наиболее известных высоконагруженных систем.

3. Объединение различных методов разработки высоконагруженных Интернет-сервисов в один и его практическая реализация.

4. Исследование особенностей восприятия сигналов человеком и определение временных критериев разрабатываемого веб-приложения.

5. Разработка альтернативных методов создания высоконагруженных веб-сервисов.

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

1. Модификация известных методов разработки высоконагруженных Интернет-сервисов и оценка их применения к приложениям для социальных сетей.

2. Оценка возможности применения распараллеливания для ускорения работы приложений.

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


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

Наиболее серьезные разработки в данной области ведут такие крупные компании, как Google, Facebook, Youtube и другие. Как правило, это закрытые проекты, код которых открывается через несколько лет после внедрения.

Платформа Google в конечном итоге сводится к набору сетевых сервисов и библиотек для доступа к ним из различных языков программирования (в основном используются C/C++, Java, Python и Perl). Каждый продукт, разрабатываемый Google, в большинстве случаев использует эти библиотеки для осуществления доступа к данным, выполнения комплексных вычислений и других задач, вместо стандартных механизмов, предоставляемых операционной системой, языком программирования или opensource-библиотеками.

Несколько примеров из публично доступных проектов Google:

- GWT для реализации пользовательских интерфейсов на Java;

- Closure — набор инструментов для работы с JavaScript;

- Protocol Buffers — не зависящий от языка программирования и платформы формат бинарной сериализации структурированных данных, используется при взаимодействии большинства компонентов системы внутри Google;

- LevelDB — высокопроизводительная встраиваемая СУБД;

- Snappy — быстрая компрессия данных, используется при хранении данных в GFS [2].


Технологии, используемые Youtube:

- Linux — операционная система;

- Apache — основной HTTP-сервер;

- lighttpd — отдача видео из YouTube CDN;

- Zookeeper — распределенные блокировки, хранение конфигураций;

- Python:

1) wiseguy — FastCGI-прослойка между Apache и Python;

2) pycurl — лучшая доступная реализация HTTP-клиента, но в итоге ее все равно заменили на собственное низкоуровневое решение, выиграв 8% в потреблении вычислительных ресурсов;

3) spitfire — высокопроизводительный шаблонизатор на основе абстрактного синтаксического дерева с регулируемым уровнем оптимизации (как в gcc);

4) bson в качестве формата сериализации.

- BigTable — хранение изображений;

- MySQL — используется просто как хранилище данных, версия 5.1.52 с InnoDB;

- Vitess — система для масштабирования MySQL-кластера [3].


Технологии, используемые Facebook:

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

В Facebook работают тысячи Memcached серверов с десятками терабайт кешированных данных в любой момент времени.

- HipHop для PHP. PHP, поскольку он является скриптовым языком, достаточно медлителен, если сравнивать его с родным кодом процессора, исполняемым на сервере. HipHop конвертирует скрипты на PHP в исходные коды на C++, которые затем компилируются для обеспечения хорошей производительности. Это позволяет Facebook получать большую отдачу от меньшего количества серверов, поскольку PHP в Facebook используется практически повсеместно.

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

Haystack должен не просто уметь хранить фото, но и отдавать их очень быстро. Facebook отдает более 1,2 миллиона фотографий в секунду. Это количество не включает в себя фотографии, которые отдаются системой доставки контента Facebook и постоянно растет.

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

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

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

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

- Hadoop и Hive — реализация алгоритма map-reduce с открытым исходным кодом, позволяющая производить вычисления на огромных объемах данных. В Facebook его используют для анализа данных. Hive был разработан в Facebook и позволяет использовать SQL запросы для получения информации от Hadoop, что облегчает работу непрограммистов.

И Hadoop, и Hive имеют открытые исходные коды и развиваются под эгидой Apache Foundation. Их использует большое количество других проектов. Например, Yahoo и Twitter.

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

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

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

GateKeeper также позволяет Facebook выполнять неявную активацию новых функций для выполнения, например, нагрузочного тестирования и выявления медленно работающих компонентов системы. Неявная активация включает некоторую функцию или возможность, но не показывает ее в интерфейсе пользователя. Обычно неявная активация выполняется за две недели до того, как новая возможность предоставляется пользователям.

- Тест производительности системы. Facebook производит тщательный мониторинг производительности системы и, что интересно, производится мониторинг производительности исполнения каждой PHP функции системы. Это обеспечивается использованием XHProf.

- Частичное отключение функций. Если проект начинает работать медленно, отключаются некоторые возможности (из достаточно большого количества) для того, чтобы поднять производительность ключевых компонентов системы [4].


Существуют общие рекомендации от Yahoo для создания высокопроизводительных сайтов:

1. Уменьшение количества HTTP-запросов к серверу.

2. Использование сети доставки контента (Content Delivery Network).

3. Добавление http-заголовка Expires.

4. Включение gzip-сжатия для компонентов сайта.

5. Размещение файлов стилей в начале документа.

6. Размещение всех скриптов внизу страницы.

7. Не использовать выражения внутри CSS-файлов.

8. Делать JavaScript и CSS внешними файлами.

9. Уменьшение количества DNS-запросов.

10. Минифицировать JavaScript.

11. Стараться не использовать редирект.

12. Удаление дублирующих скриптов.

13. Сконфигурировать Etags.

14. Сделать свой Ajax-код кэшируемым [5].


В рамках данной магистерской работы планируется оценка применения распараллеливания для разработки высоконагруженных веб-сервисов.

River Trail

Компания Intel представила новый открытый проект River Trail, в рамках которого разработано расширение для языка программирования JavaScript, позволяющее задействовать технику параллельного программирования для создания высокопроизводительных web-приложений. Ключевой особенностью нового проекта является обеспечение возможности значительного повышения производительности приложений без ухода от стандартных web-технологий, используя только специальный набор расширений к JavaScript. Процесс разработки с использованием River Trail мало чем отличается от создания обычных JavaScript-приложений.

По мнению разработчиков проекта, River Trail позволит приблизить к нативным программам возможности работающих внутри браузера web-приложений, которые станет реальным использовать в таких требующих интенсивных вычислений областях, как обработка фотографий, редактирование видео, симуляция физических процессов и создание современных 3D-игр. Из альтернативных проектов, нацеленных на создание высокопроизводительных приложений, работающих внутри браузера, можно отметить WebCL – JavaScript-интерфейс к стандарту OpenCL (Open Computing Language), определяющему расширения для параллельного программирования, и развиваемый компанией Google проект Native Client, позволяющий выполнять в окне web-браузера написанные на C и С++ приложения, ограниченные в специальном изолированном окружении [6].


4. Высоконагруженный Интернет-сервис

Формальной границей для высоконагруженного Интернет-сервиса по оценкам компании Яндекс является тысяча запросов/транзакций в секунду [7].

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

В большинстве случаев проект начинает чувствовать влияние нагрузки, когда изначальная (тривиальная) реализация функционала перестает справляться и команде разработчиков приходится прибегать к новым, менее очевидным, техническим решениям для поддержания работоспособности проекта при продолжающемся росте аудитории [8].


5. Разработка веб-сервиса «Спортивный дневник»

Для освоения ряда технологий разработки высоконагруженных Интернет-сервисов был создан онлайн-ресурс «Спортивный дневник» (электронный адрес www.sportdiary.net).

На рисунке 1 изображена общая схема взаимодействия веб-сервиса с пользователем. На рисунке 2 изображена главная страница сайта.

Обобщенная схема взаимодействия веб-сервиса с пользователем

Рисунок 1 – Обобщенная схема взаимодействия веб-сервиса с пользователем (Анимация: 5 кадров, задержка между кадрами 5 с, количество циклов воспроизведения не ограничено, размер 450*198, 56.4 кБ)

Главная страница разработанного веб-приложения sportdiary.net

Рисунок 2 – Главная страница разработанного веб-приложения sportdiary.net

Для данного проекта используется связка nginx и php-fpm. Выигрыш в производительности, по сравнению с Apache и его mod_php достигается за счет того, что php-fpm создает n php-процессов, которые в последствии "висят" в системе и обрабатывают скрипты, переданные от веб-сервера.

Следующим способом повышения производительности является установка php-акселератора. Суть его работы заключается в кешировании бинарного кода скрипта.

Для поиска неоптимальных участков кода в проект были добавлены таймеры, отсчитывающие время выполнения php и время выполнения sql-запросов. После их выявления необходимо переделать проблемные запросы, а также добавить индексы в необходимые места. Очень полезной для решения этой проблемы является команда EXPLAIN.

Еще одним полезным инструментом для повышения качества ресурса является тюнинг sysctl. На больших нагрузках стандартная конфигурация не является максимально эффективной. По возможности php-fpm, memcached и MySQL переносятся на unix-socket. В итоге, в пиковые моменты нагрузки сервер отдает содержимое так же быстро, как и без нагрузок.

В дальнейшем планируется повышение популярности разработанного веб-сервиса и тестирование его быстродействия.


6. Разработка приложения для социальной сети

Социальное программное обеспечение — это широкий диапазон программных систем, позволяющих пользователям взаимодействовать и обмениваться данными. Этот способ компьютерно-опосредованного взаимодействия стал популярным с появлением таких социальных сайтов, как MySpace, Facebook, Одноклассники.ru, медиасайтов Flickr и YouTube, коммерческих сайтов eBay.

Многие из этих приложений имеют такие общие характеристики как: открытые API, сервис-ориентированный дизайн, возможность удаленного размещения данных и медиафайлов [9].

В рамках данной магистерской работы было разработано приложение «Милашка недели» и внедрено в социальную сеть Mamba.ru.

Интерфейс приложения изображен на рисунке 3.

Интерфейс разработанного приложения для социальной сети

Рисунок 3 – Интерфейс разработанного приложения для социальной сети

В приложении используются следующие технологии:

- система управления базами данных MySQL;

- веб-сервер nginx;

- библиотека jQuery, AJAX.

На данный момент нагрузка на сервер составляет 14 запросов в секунду.

В дальнейшем планируется оценка возможности применения распараллеливания.

SQL Server распараллеливает запросы, выполняя горизонтальное секционирование входных данных, и число приблизительно равных секций устанавливается равным числу доступных процессоров, после чего для каждой секции выполняется одна и та же операция (например, агрегация, соединение и т.п.) [10].

Также необходимо оценить возможность применения вышеуказанной технологии River Trail.


Выводы

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

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


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

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

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

[2]. Архитектура Google 2011 [Электронный ресурс].

Режим доступа: http://www.insight-it.ru/masshtabiruemost/arkhitektura-google-2011/

[3]. Архитектура YouTube 2012 [Электронный ресурс].

Режим доступа: http://www.insight-it.ru/masshtabiruemost/arkhitektura-youtube-2012/

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

Режим доступа: http://tokarchuk.ru/2010/07/архитектура-больших-проектов-facebook/

[5]. Правила для высокопроизводительных сайтов от Yahoo [Электронный ресурс].

Режим доступа: http://webarticles.neomoon.ru/content/view/57/39/

[6]. River Trail, расширение к JavaScript для параллельного программирования [Электронный ресурс].

Режим доступа: http://www.opennet.ru/opennews/art.shtml?num=31789

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

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

[8]. Высоконагруженные Интернет-проекты [Электронный ресурс].

Режим доступа: http://www.insight-it.ru/highload/voprosy-i-otvety/

[9]. Социальная сеть [Электронный ресурс].

Режим доступа: http://ru.wikipedia.org/wiki/Социальная_сеть

[10]. Введение в распараллеливание выполнения запроса [Электронный ресурс].

Режим доступа: http://www.sql.ru/articles/...