ДонНТУ 


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

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

Кафедра комп'ютерної інженерії

Спеціальність "Системне програмування"

Методи та засоби підвищення ефективності Інтернет-додатків

Науковий керівник: к.т.н., проф. Анопрієнко Олександр Якович
Реферат за темою випускної роботи

Зміст

Введення

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