ДонНТУ 


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

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

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

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

Розробка високонавантажених Інтернет-сервісів

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

Зміст

Вступ

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/...