Будь ласка, використовуйте цей ідентифікатор, щоб цитувати або посилатися на цей матеріал:
https://er.chdtu.edu.ua/handle/ChSTU/8669| Назва: | Аналіз та оптимізація алгоритмів планування задач у розподілених системах |
| Автори: | БАБЕНКО, Віра ОСТАПЕНКО, Артур |
| Дата публікації: | 2023 |
| Короткий огляд (реферат): | Усе більше організацій та компаній сьогодні розповсюджують інформацію та спілкуються зі своїми клієнтами, співробітниками та партнерами через електронні сервіси, наприклад електронну пошту. Відправка email листів великій кількості отримувачів може бути завданням часовитратним та трудомістким. Тому розробка системи для автоматизованої масової комунікації через email є актуальною та важливою. Метою випускної роботи магістра є аналіз та оптимізація алгоритмів планування задач у розподілених системах з метою підвищення продуктивності та ефективності використання обчислювальних ресурсів, а також зменшення часу виконання завдань. Основною задачею є розробка системи для відправки email листів. Система призначена для автоматизованої масової комунікації та розповсюдження інформації через email. Однією з ключових особливостей цієї системи є можливість завантаження інформації з файлів у форматі CSV, що дозволяє зручно та ефективно вказувати адреси електронної пошти отримувачів, теми листа, текст повідомлення та інші додаткові дані, необхідні для відправки email листів. Об’єкт дослідження - система для автоматизованої масової комунікації та розповсюдження інформації через email. Предмет дослідження - алгоритми функціонування системи для відправки email листів, зокрема, особливості завантаження та обробки інформації з файлів у форматі CSV для автоматизованої комунікації та розповсюдження інформації через email. Наукова новизна одержаних результатів полягає у розробці нової системи для автоматизованої масової комунікації з використанням файлів у форматі CSV, що має практичне значення та може полегшити роботу різних організацій у сфері комунікації через email. Практична цінність результатів полягає в можливості ефективної та зручної масової комунікації через email за допомогою розробленої системи, що може зекономити час та сприяти ефективній комунікації для підприємств та організацій. У першому розділі розглянуто ключові аспекти високонавантажених систем, масштабування, розподілені системи, планування задач і алгоритми черги. Ці концепції важливі для розвитку сучасних технологій та покращення продуктивності та надійності системи; У другому розділі здійснений огляд існуючих технологій для системи планування задач у розподілених системах, досліджувались різні мови програмування, бази даних та інші технології для використання в розробці. Також обрано конкретні технології, для розробки системи масової розсилки листів; У третьому розділі описується архітектура системи масової розсилки листів, заходи безпеки, конкретні технічні вимоги та оцінки її продуктивності. Висновки включають в себе основні результати роботи. У додатках наведено специфікацію, текст програми та інструкцію користувача. Загальний обсяг роботи становить 105 сторінок. У кваліфікаційній роботі магістра 23 рисунка, 1 таблиця, 3 додатки. Для виконання роботи використано 24 літературних джерела. |
| URI (Уніфікований ідентифікатор ресурсу): | https://er.chdtu.edu.ua/handle/ChSTU/8669 |
| Розташовується у зібраннях: | 123 Комп’ютерна інженерія (Комп'ютерні системи та мережі) |
Файли цього матеріалу:
| Файл | Опис | Розмір | Формат | |
|---|---|---|---|---|
| 1_ТИТУЛКА_Остапенко-merged.pdf Restricted Access | 2.4 MB | Adobe PDF | Переглянути/Відкрити Запит копії |
Усі матеріали в архіві електронних ресурсів захищено авторським правом, усі права збережено.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА ІНФОРМАЦІЙНОЇ БЕЗПЕКИ ТА КОМП’ЮТЕРНОЇ
ІНЖЕНЕРІЇ
Пояснювальна записка
до кваліфікаційної роботи магістра
на тему: «Аналіз та оптимізація алгоритмів
планування задач у розподілених системах»
ЧДТУ.232285.010 ПЗ
Виконав: студент 2 курсу, групи МКМ-2205
спеціальності 123 – Комп’ютерна інженерія
за освітньою програмою – Комп’ютерні системи
та мережі
Артур ОСТАПЕНКО
Керівник
д.т.н., проф. Віра БАБЕНКО
Н. контроль
Світлана ГРЕСЬКО
Рецензент
старший викладач кафедри інформаційних
технологій, ЧНУ ім. Б. Хмельницького
к.т.н. Тетяна СТАБЕЦЬКА
«ЗАХИСТ ДОЗВОЛЯЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор ___________ Віра БАБЕНКО
Черкаси 2023 року
Черкаський державний технологічний університет
Факультет інформаційних технологій і систем
Кафедра інформаційної безпеки та комп‘ютерної інженерії
Освітньо-кваліфікаційний рівень Магістр
Спеціальність 123 – Комп’ютерна інженерія
Освітня програма Комп’ютерні системи та мережі
«ЗАТВЕРДЖУЮ»
Завідувач кафедри _____ Володимир РУДНИЦЬКИЙ
«10» жовтня 2023 року
ЗАВДАННЯ
на кваліфікаційну роботу магістра студенту
ОСТАПЕНКУ Артуру Геннадійовичу
(прізвище, ім‘я, по батькові)
1. Тема роботи Аналіз та оптимізація алгоритмів планування задач у
розподілених системах
Керівник роботи д.т.н., професор Бабенко Віра Григорівна
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом університету від «06» жовтня 2023 р. № 267/04
2. Строк подання студентом роботи
3. Вихідні дані до роботи:
Високонавантажені системи, PHP, MySQL, SSL/TLS сертифікати, CSV , e-mail,
Shared Hosting, Apache Kafka, розподілені системи.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ
Розділ 1 Аналіз предметної області та постановка задачі дослідження
Розділ 2 Вибір технології та інструментальних засобів розробки системи
Розділ 3 Аналіз та оптимізація алгоритмів планування задач у розподілених системах
Висновки
Перелік скорочень та умовних позначень
Список використаних джерел
Додатки
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів):
Додаток А Специфікація
Додаток Б Текст програм
Додаток В Інструкція користувача
6. Консультанти розділів роботи
Підпис, дата
Розділ Прізвище, ініціали та
посада завдання видав завдання прийняв
консультанта
7. Дата видачі завдання 10 жовтня 2023 року
КАЛЕНДАРНИЙ ПЛАН
№ з/п Назва етапів кваліфікаційної роботи магістра Строк виконання
етапів роботи Примітка
1 Збір матеріалу 21.10 – 28.10 виконано
2 Обробка матеріалу 29.10 – 06.11 виконано
3 Обґрунтування актуальності виконання виконано
досліджень 12.11 – 15.11
4 Оцінка стану проблеми, виокремлення виконано
дослідницьких задач, постановка задачі 16.11 – 18.11
дослідження
5 Викладення сутності і результатів дослідження 20.11– 25.11 виконано
6 Практичне застосування результатів
дослідження 26.11 – 27.11 виконано
7 Оформлення результатів в пояснювальну записку 27.11 – 30.11 виконано
8 Подання роботи на відгук та рецензування 01.12.23 виконано
Студент-магістрант ____________________________ Артур ОСТАПЕНКО
(підпис)
Керівник роботи _____________________________ Віра БАБЕНКО
(підпис)
АНОТАЦІЯ
Усе більше організацій та компаній сьогодні розповсюджують
інформацію та спілкуються зі своїми клієнтами, співробітниками та
партнерами через електронні сервіси, наприклад електронну пошту.
Відправка email листів великій кількості отримувачів може бути завданням
часовитратним та трудомістким. Тому розробка системи для автоматизованої
масової комунікації через email є актуальною та важливою.
Метою випускної роботи магістра є аналіз та оптимізація алгоритмів
планування задач у розподілених системах з метою підвищення
продуктивності та ефективності використання обчислювальних ресурсів, а
також зменшення часу виконання завдань.
Основною задачею є розробка системи для відправки email листів.
Система призначена для автоматизованої масової комунікації та
розповсюдження інформації через email. Однією з ключових особливостей
цієї системи є можливість завантаження інформації з файлів у форматі CSV,
що дозволяє зручно та ефективно вказувати адреси електронної пошти
отримувачів, теми листа, текст повідомлення та інші додаткові дані,
необхідні для відправки email листів.
Об’єкт дослідження - система для автоматизованої масової
комунікації та розповсюдження інформації через email.
Предмет дослідження - алгоритми функціонування системи для
відправки email листів, зокрема, особливості завантаження та обробки
інформації з файлів у форматі CSV для автоматизованої комунікації та
розповсюдження інформації через email.
Наукова новизна одержаних результатів полягає у розробці нової
системи для автоматизованої масової комунікації з використанням файлів у
форматі CSV, що має практичне значення та може полегшити роботу різних
організацій у сфері комунікації через email.
Практична цінність результатів полягає в можливості ефективної та
зручної масової комунікації через email за допомогою розробленої системи,
що може зекономити час та сприяти ефективній комунікації для підприємств
та організацій.
У першому розділі розглянуто ключові аспекти високонавантажених
систем, масштабування, розподілені системи, планування задач і алгоритми
черги. Ці концепції важливі для розвитку сучасних технологій та покращення
продуктивності та надійності системи;
У другому розділі здійснений огляд існуючих технологій для системи
планування задач у розподілених системах, досліджувались різні мови
програмування, бази даних та інші технології для використання в розробці.
Також обрано конкретні технології, для розробки системи масової розсилки
листів;
У третьому розділі описується архітектура системи масової розсилки
листів, заходи безпеки, конкретні технічні вимоги та оцінки її
продуктивності.
Висновки включають в себе основні результати роботи. У додатках
наведено специфікацію, текст програми та інструкцію користувача.
Загальний обсяг роботи становить 105 сторінок. У кваліфікаційній роботі
магістра 23 рисунка, 1 таблиця, 3 додатки. Для виконання роботи
використано 24 літературних джерела.
ANOTATION
More and more organizations and companies today distribute information
and communicate with their customers, employees and partners through e-mail.
Sending emails to a large number of recipients can be a time-consuming and
laborious task. Therefore, the development of a system for automated mass
communication via email is relevant and important.
The purpose of this qualification work is to develop a system for sending
emails. The system is designed for automated mass communication and
distribution of information via email. One of the key features of this system is the
ability to download information from files in CSV format, which allows you to
conveniently and efficiently specify the email addresses of recipients, the subject
of the letter, the text of the message and other additional data necessary for sending
emails.
The object of research is a system for automated mass communication and
information distribution via email.
The subject of the study is the development and operation of a system for
sending emails, in particular, the features of downloading and processing
information from files in CSV format for automated communication and
distribution of information via email.
The scientific novelty of the obtained results lies in the development of a
new system for automated mass communication using files in CSV format, which
is of practical importance and can facilitate the work of various organizations in
the field of email communication.
The practical value of the results lies in the possibility of effective and
convenient mass communication via email using the developed system, which can
save time and promote effective communication for enterprises and organizations.
The first chapter covers key aspects of high-load systems, scaling,
distributed systems, task scheduling, and queuing algorithms. These concepts are
important for the development of modern technologies and the improvement of
system performance and reliability;
The second chapter was an overview of existing technologies for a task
scheduling system in distributed systems, exploring different programming
languages, databases, and other technologies for use in development. Specific
technologies were also selected for the development of the system;
The third section describes the system architecture, security measures,
specific technical requirements and performance evaluations.
The conclusions include the main results of the work. Appendices include
specification, program text, and user manual. The total volume of work is 105
pages. There are 23 figures, 1 table, 3 appendices in the master's qualification
work. 24 literary sources were used to perform the work.
3
ВСТУП………………………………………………………………………. 4
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ…………………………………………………... 7
1.1 Аналіз предметної області……………………………………...…. 7
1.2 Вибір напряму дослідження………………………………………. 19
1.3 Постановка задачі…………………………………………………. 29
1.4 Висновки до розділу 1…………………………………………….. 31
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ…………………………………………………….. 33
2.1 Огляд існуючих технологій……………………………………… 33
2.2 Вибір технологій ………………………………………………… 46
2.3 Висновки до розділу 2…………………………………………… 55
РОЗДІЛ 3 ОПТИМІЗАЦІЯ АЛГОРИТМІВ ПЛАНУВАННЯ ЗАДАЧ У
РОЗПОДІЛЕНИХ СИСТЕМАХ……………………………………………. 57
3.1 Структура системи………………………………………………... 57
3.2 Опис функцій системи……………………………………………. 66
3.3 Забезпечення захисту інформації при роботі зі створеною
системою ……………………………………………………………… 71
3.4 Технічні вимоги для роботи з системою………………………... 76
3.5 Оцінка ефективності застосування алгоритмів планування задач
у розподілених системах…………………………………………….. 79
3.6 Висновки до розділу 3……………………………………………. 81
ВИСНОВКИ…………………………………………………………………. 82
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ…………………... 84
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ…………………………………… 85
ДОДАТКИ:
А – 482.ЧДТУ.32285-01 Аналіз та оптимізація алгоритмів
планування задач у розподілених системах
5
ВСТУП
Актуальність теми дослідження виявляється в зростанні обсягів
комунікації через email у сучасному світі. Бізнеси, організації та особисті
користувачі все більше використовують email для спілкування, маркетингу,
реклами та інших цілей. За таких умов важливо мати інструменти, які
дозволяють ефективно та автоматизовано відправляти повідомлення. Крім
того, використання файлів у форматі CSV дозволяє спростити та прискорити
процес вказування адрес отримувачів та іншої інформації, що особливо
важливо в умовах великого обсягу листів. Таким чином, розробка системи
для автоматизованої масової комунікації через email є актуальною та
важливою для задоволення потреб сучасного суспільства у ефективній та
зручній комунікації.
Метою випускної роботи магістра є аналіз та оптимізація алгоритмів
планування задач у розподілених системах з метою підвищення
продуктивності та ефективності використання обчислювальних ресурсів, а
також зменшення часу виконання завдань.
Для досягнення сформульованої мети необхідно вирішити такі задачі:
1. Проведений докладний аналіз існуючих алгоритмів планування задач у
розподілених системах, включаючи їх класифікацію та оцінку переваг і
недоліків;
2. Зібрана та проаналізована статистика щодо виконання завдань у
розподіленій системі з метою вивчення інтенсивності навантаження та
залежностей між завданнями;
3. Розроблені нові алгоритми планування задач або оптимізовані існуючі,
враховуючи отримані дані та вимоги до системи;
4. Проведені експерименти з новими алгоритмами в рамках створеної
моделі розподіленої системи та оцінена їх продуктивність та
надійність;
6
5. На основі отриманих результатів сформульовані висновки щодо
ефективності нових алгоритмів та визначені можливі напрямки
подальших досліджень та застосувань результатів у реальних
розподілених системах.
На тему аналізу та оптимізації алгоритмів планування задач у
розподілених системах існує багато книг та джерел, які можуть бути
корисними для дослідження цієї теми. Наприклад книга "Distributed Systems:
Principles and Paradigms" авторів Andrew S. Tanenbaum і Maarten Van Steen
розглядає різні аспекти розподілених систем, включаючи алгоритми
планування та розподілу завдань. У ній надано огляд основних понять та
методів у цій галузі. Також книга "Scheduling in Distributed Computing
Systems: Analysis, Design, and Models" авторів Tevfik Kosar і Thomas Fahringer
спеціалізується на плануванні задач у розподілених обчислювальних
системах. Уній розглядаються різні алгоритми та моделі для оптимізації
роботи таких систем.
Об’єкт дослідження - система для автоматизованої масової
комунікації та розповсюдження інформації через email.
Предмет дослідження - розробка та функціонування системи для
відправки email листів, зокрема, особливості завантаження та обробки
інформації з файлів у форматі CSV для автоматизованої комунікації та
розповсюдження інформації через email.
Наукова новизна одержаних результатів полягає у розробці нової
системи для автоматизованої масової комунікації з використанням файлів у
форматі CSV, що має практичне значення та може полегшити роботу різних
організацій у сфері комунікації через email.
Практична цінність результатів полягає в можливості ефективної та
зручної масової комунікації через email за допомогою розробленої системи,
що може зекономити час та сприяти ефективній комунікації для підприємств
та організацій.
7
Кваліфікаційна робота складається з 3-х розділів, у яких подається
інформація про:
1. У першому розділі розглянуто ключові аспекти високонавантажених
систем, масштабування, розподілені системи, планування задач і
алгоритми черги. Ці концепції важливі для розвитку сучасних
технологій та покращення продуктивності та надійності системи;
2. У другому розділі був огляду існуючих технологій для системи
планування задач у розподілених системах, досліджувались різні мови
програмування, бази даних та інші технології для використання в
розробці. Також обрано конкретні технології, для розробки системи;
3. У третьому розділі описується архітектура системи, заходи безпеки,
конкретні технічних вимог та оцінки її продуктивності.
Використана література, під час написання кваліфікаційної роботи,
досить добре розкриває тему та відображає потреби для аналізу.
Загальний обсяг роботи становить 105 сторінок. У кваліфікаційній
роботі магістра 23 рисунка, 1 таблиця, 3 додатки. Для виконання роботи
використано 24 літературних джерела.
8
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ
1.1 Аналіз предметної області
Високонавантажені системи (high-load systems) - це інформаційні або
обчислювальні системи, які розроблені та налаштовані для обробки великої
кількості даних та запитів в режимі реального часу з високою
продуктивністю та надійністю. Ці системи використовуються у великих веб-
сервісах, великих обчислювальних центрах, хмарних обчисленнях та інших
сферах, де великий потік даних та запитів вимагає спеціальних рішень для їх
обробки.
Серед зазвичай високонавантажених проектів можна виділити
соціальні мережі, високонавантажені API, платіжні системи, системи
обробки великих обсягів даних (Big Data), розподілені системи, реального
часу API та інші.
Вони здатні обробляти значні обсяги даних чи запитів в реальному
часі, без помітного зниження швидкості. Легко масштабуються для
вирішення зростаючих потреб у ресурсах і обсягу даних. Такі системи
повинні бути доступні для користувачів без перерви або відключень, інакше
можуть виникати серйозні наслідки. Використовують оптимізовані
алгоритми та ресурси для максимізації продуктивності. Їхню продуктивність
постійно моніторять та керують, щоб виявляти та усувати проблеми.
Ці системи використовуються у різних галузях, включаючи хмарні
обчислення, мережі соціальних медіа, фінансові установи, електронну
комерцію та інші, де вимагається висока продуктивність та масштабованість
для успішної роботи.
Високонавантажені системи є критичними для багатьох організацій і
галузей, оскільки вони дозволяють оптимізувати роботу та забезпечити
9
швидку та надійну обробку даних та запитів. Важливі аспекти
високонавантажених систем:
1. Дизайн високонавантаженої системи включає в себе розподілений
обчислювальний підхід, який дозволяє розділити завдання на багато
менших компонентів та серверів. Це дозволяє рівномірно розподілити
навантаження та підвищити продуктивність;
2. Системи моніторингу дозволяють виявляти будь-які аномалії або
проблеми в роботі системи. Аналітика допомагає зрозуміти, як система
функціонує та де можна зробити покращення.
3. Високонавантажені системи часто використовують хмарні рішення або
великі центри обробки даних для забезпечення необхідної
обчислювальної потужності та доступності;
4. Забезпечення безпеки високонавантажених систем є критичним
завданням, оскільки помилки чи порушення можуть мати серйозні
наслідки. Це включає в себе контроль доступу, шифрування та захист
від атак;
5. Додаткова оптимізація досягається шляхом розділення додатка на різні
шари, такі як веб-сервер, додатковий рівень додатка та база даних. Це
полегшує масштабування та підтримку;
6. Високонавантажені системи використовують автоматизацію для
автоматичного виявлення та розв'язання проблем, а також для
автоматичного масштабування ресурсів залежно від потреби;
7. Використання кешування дозволяє зберігати часто використовувані
дані в швидкодіючій пам'яті, що поліпшує відповідь системи на запити;
8. Важливим аспектом високонавантажених систем є їх відмовостійкість.
Вони повинні бути здатні продовжувати працювати навіть після
виникнення помилок чи збоїв в окремих компонентах.
Високонавантажені системи стають все більш важливими в сучасному
світі, де обсяги даних і вимоги до продуктивності швидко зростають. Вони
дозволяють організаціям ефективно впоратися з великим обсягом роботи та
10
залишити конкурентів позаду.
Масштабуванням високонавантажених систем розуміється
можливість збільшення обсягу ресурсів (процесорів, пам'яті, сховища,
мережевих ресурсів тощо) для забезпечення потреб системи в робочому
навантаженні. Це робиться з метою підтримки високої продуктивності,
доступності та швидкості реакції системи при збільшенні обсягу даних чи
запитів.
Існують два основних види масштабування:
1. Вертикальне масштабування (Vertical Scaling)- цей підхід передбачає
збільшення ресурсів (наприклад, обсягу оперативної пам'яті чи кількості
процесорів) на окремих серверах. Передбачає покращення можливостей
одного сервера чи вузла шляхом додавання більше обчислювальних ресурсів,
таких як процесор, RAM та простір на диску, для обробки більшої робочої
навантаження без зміни існуючого коду. Цей підхід дозволяє зберегти
поточну інфраструктуру, покращивши характеристики сервера. Це спосіб
посилити сервер, щоб відповідати зростаючим вимогам без значних змін в
коді [1]. Вертикальне масштабування особливо корисне, коли є чітко
визначений сервер і бажання підвищити його продуктивність, щоб впоратися
з ростучою кількістю запитів. Вертикальне масштабування підходить для
систем, які можуть працювати на одному сервері, але вимагають більшої
потужності, зображено на рисунку 1.1.
Рисунок 1.1 - Вертикальне масштабування (Vertical Scaling)
11
Вертикальне масштабування дає можливість збільшити поточну
ємність апаратного чи програмного забезпечення, але важливо пам'ятати, що
збільшувати її лише до меж сервера. Збільшуючи масштаб, збільшується
ємність однієї машини.
Вертикальне масштабування дозволяє даним розміщуватися на одному
вузлі, а масштабування розподіляє навантаження через ресурси CPU та RAM
для машин. Проте система має обмеження апаратного забезпечення, які
можна розширювати, такі як CPU та RAM. Також це може бути дуже
дорогим, коли досягає максимальної ємності.
2. Горизонтальне масштабування (Horizontal Scaling) - цей підхід
передбачає додавання нових серверів або вузлів до існуючої інфраструктури.
Горизонтальне масштабування, означає розподіл навантаження між
різними серверами. Горизонтальне масштабування просто додає більше
екземплярів машин без зміни існуючих характеристик. Масштабування в
розподіленій системі (scaling out) дозволяє розділити обчислювальну
потужність і баланс навантаження між різними машинами.
Горизонтальне масштабування передбачає додавання більше машин до
загального резерву ресурсів, замість простого додавання ресурсів шляхом
вертикального масштабування. Вертикальне масштабування дає можливість
збільшувати кількість серверів в мережі, але також потребує збільшення
обчислювальної потужності, CPU та RAM в існуючій інфраструктурі [2].
Горизонтальне масштабування використовується для розподілу
навантаження між багатьма серверами, щоб забезпечити більшу
продуктивність і надійність, зображено на рисунку 1.2.
12
Рисунок 1.2 - Горизонтальне масштабування (Horizontal Scaling)
Для ефективного масштабування високонавантажених систем важливо
враховувати ряд аспектів:
1. Потрібно ретельно розподіляти навантаження між серверами, щоб
уникнути перевантаження деяких та недообслуговування інших;
2. Процес масштабування повинен бути автоматизованим, щоб легко
додавати нові ресурси або сервери за необхідності;
3. Додатки повинні бути спроектовані з урахуванням можливості
горизонтального масштабування, що передбачає їхню розбивку на
менші фрагменти для обробки на окремих серверах;
4. Важливо стежити за працездатністю системи та результатами
масштабування, щоб вчасно виявляти проблеми.
Масштабування високонавантажених систем дозволяє забезпечити
високу доступність, надійність та продуктивність навіть при зростаючому
обсязі робочого навантаження.
Розподілені системи (Distributed Systems) - це комп'ютерні системи,
які складаються з численних компонентів, розташованих на різних фізичних
серверах чи вузлах, які співпрацюють для досягнення спільної мети. Основна
ідея розподілених систем полягає в тому, щоб розділити завдання та обробку
даних між різними серверами для покращення продуктивності, доступності
та надійності.
13
Приклади розподілених систем включають:
1. Системи хмарного обчислення. Сервіси хмарного обчислення, такі як
Amazon Web Services (AWS), Microsoft Azure, Google Cloud, надають
доступ до розподілених ресурсів для обчислення, зберігання даних та
інших послуг;
2. Соціальні мережі. Соціальні мережі, як Facebook, Twitter, обробляють
та зберігають великі обсяги користувацької інформації на різних
серверах та вузлах;
3. Банківські системи. Банківські інформаційні системи розподілені,
оскільки вони обробляють фінансові транзакції через численні сервери
та мережі для забезпечення безпеки та доступності;
4. Електронна комерція. Онлайн-магазини, такі як Amazon та eBay,
використовують розподілені системи для обробки замовлень,
зберігання товарів та взаємодії з клієнтами;
5. Пошукові системи. Google та Bing використовують розподілені
системи для індексації та пошуку великих обсягів веб-сторінок та
інших даних;
6. Наукові дослідження. Великі наукові проекти, такі як Large Hadron
Collider (LHC) в CERN, використовують розподілені системи для
обробки та аналізу великих обсягів даних.
Розподілені системи дозволяють об'єднувати обчислювальні та
зберігаючі ресурси для вирішення складних завдань, такі як обробка великих
обсягів даних, забезпечення високої доступності та надійності, а також
розподілена обробка.
Переваги розподілених систем:
1. Розподілені системи легко масштабуються, тобто нові вимоги до
інформаційної системи у разі розширення підприємства можуть бути
легко реалізованими;
2. Наявні рішення інтегруються, тобто такі системи можуть
14
використовуватися системними компонентами, що приєдналися, без
розробки по-новому системи з новою функціональністю;
3. Поступове системне розширення мінімізує ризик перевантаження
окремих системних компонентів;
4. Організаційне керування потужністю розподіленої системи зумовлює
ефективну, з погляду вартості, реалізацію, при цьому система гнучка й
легко адаптується;
5. Власник ресурсу має можливість самостійно керувати цим
компонентом та вільно втручатися й реконфігурувати систему в своїх
інтересах;
6. Окремі складові частини розподіленої системи повністю автономні,
тобто у разі помилки або навіть випадання одного з компонентів
системи інші елементи можуть, не перериваючись, продовжувати
роботу й, за потреби, розв’язувати проблеми, що виникають;
7. Розподілені системи дають можливість спільно використовувати дані
та пристрої, одночасно утворюючи ілюзію безпосереднього
під’єднання цих ресурсів до комп’ютера кожного користувача, тобто
гнучко розподілити роботи в усій системі;
8. Розподілені системи забезпечують користувачам оперативний доступ
до великої кількості корпоративної інформації незалежно від місця їх
перебування.
Не дивлячись на те, що всі розподілені системи містять по декілька
процесорів, існують різні способи їх організації в систему. Особливо це
відноситься до варіантів їх з'єднання і організації взаємного обміну. За
минулі роки було запропоновано безліч різних схем класифікації
комп'ютерних систем з декількома процесорами, але жодна з них не стала
дійсно популярною і широко поширеною [3]. Системи, в яких комп'ютери
використовують пам'ять спільно, зазвичай називаються мультипроцесорами
(multiprocessors), а що працюють кожен з своєю пам'яттю —
мульткомп'ютерами (multicomputer). Основна різниця між ними полягає в
15
тому, що мультипроцесори мають єдиний адресний простір, спільно
використовуваний всіма процесорами.
Апаратура важлива для розподілених систем, проте від програмного
забезпечення значно сильніше залежить, як така система виглядатиме
насправді. Розподілені системи дуже схожі на традиційні операційні системи.
Перш за все, вони працюють як менеджери ресурсів (resource managers)
існуючого апаратного забезпечення, які допомагають безлічі користувачів і
додатків спільно використовувати такі ресурси, як процесори, пам'ять,
периферійні пристрої, мережу і дані всіх видів. По-друге, що, ймовірно,
більш важливо, розподілена система приховує складність і гетерогенну
природу апаратного забезпечення, на базі якого вона побудована, надаючи
віртуальну машину для виконання додатків.
BitTorrent - це протокол розподіленого обміну файлами, який дозволяє
користувачам завантажувати та завантажувати файли з інших користувачів.
Кожен користувач, який завантажує файл, стає одночасно вузлом, який
роздає цей файл іншим користувачам, що дозволяє ефективно розподіляти
обсяги даних та знижувати навантаження на сервери.
На рисунку 1.3 BitTorrent дозволяє швидке завантаження файлів між
групою комп'ютерів, зменшуючи навантаження на один сервер.
Рисунок 1.3 - Завантаження файлів між групою комп'ютерів
16
Apache Hadoop - це фреймворк для обробки та зберігання великих
обсягів даних в розподілених системах. Він використовує концепцію
MapReduce для обчислення даних на кластері серверів, що дозволяє
обробляти великі набори даних швидко та ефективно. Основною перевагою
Hadoop є масштабованість. Він може перейти з роботи на одному вузлі до
роботи на тисячах вузлів без будь-яких проблем у безперервний спосіб,
рисунок 1.4 зображує цей процес.
Рисунок 1.4 - Apache Hadoop
Kubernetes - це система для автоматизації розгортання, масштабування
та керування контейнеризованими додатками. Вона дозволяє керувати
додатками, розгортати їх на різних серверах та забезпечувати високу
доступність. Архітектура зображена на рисунку 1.5.
Apache Zookeeper - це система керування конфігурацією та координації
для розподілених додатків. Вона допомагає управляти ресурсами та
забезпечує синхронізацію між різними частинами розподіленої системи.
Архітектура зображена на рисунку 1.6.
Ethereum - це розподілена платформа для створення смарт-контрактів
та децентралізованих додатків. Вона використовує блокчейн для збереження
та виконання коду, що дозволяє створювати додатки з вбудованим
розподіленим обчисленням [4].
17
Рисунок 1.5 - Архітектура Kubernetes
Рисунок 1.6 - Архітектура Apache Zookeeper
Середовище EVM дозволяє розробникам будувати децентралізовані
додатки на його основі, від соціальних мереж до ігор до банківських послуг,
схоже на магазин додатків, який не контролюється Apple чи Google
18
зовнішній вигляд середовища зображено на рисунку 1.7.
Рисунок 1.7 - Головне вікно платформи Ethereum
Napster був однією з перших розподілених систем для обміну
музичними файлами. Користувачі могли завантажувати та обмінюватися
музикою безпосередньо між собою, обходячи централізовані сервери.
Інтерфейс сервісу зображено на рисунку 1.8.
Ці приклади демонструють різноманітність розподілених систем та їх
застосування в різних областях, включаючи обмін файлами, обробку даних,
керування контейнерами та децентралізовані додатки.
Планування задач (Task Scheduling) - це процес призначення
виконання завдань (завдань) обчислювальним ресурсам з урахуванням різних
обмежень та вимог. Це важливий аспект в управлінні ресурсами та
оптимізації продуктивності в розподілених системах, обчислювальних
хмарах та мережах.
Планування завдань в операційних системах. Операційні системи
розподіляють обчислювальні ресурси між різними процесами та завданнями,
які виконуються на комп'ютері. Наприклад, планування процесів визначає,
який процес має отримувати доступ до процесора в який момент часу.
19
Рисунок 1.8 - Сервіс Napster
Планування задач в обчислювальних хмарах. Постачальники хмарних
послуг розподіляють завдання та ресурси між різними клієнтами у великих
обчислювальних хмарах. Це включає в себе планування віртуальних машин,
мережевих ресурсів та зберігання даних [5].
Планування задач у виробничих процесах. У виробничих системах
завдання можуть включати планування виробничих ліній, розподілу ресурсів,
планування поставок та інше. Це допомагає оптимізувати виробничий процес
та виробляти товари або послуги більш ефективно.
Планування задач у мережах передачі даних. Постачальники послуг
передачі даних планують маршрутизацію даних та баланс навантаження
мережі для забезпечення ефективної передачі даних.
Планування задач допомагає досягнути кращої ефективності в
управлінні ресурсами та використанні обчислювальних ресурсів, а також
20
забезпечити високу доступність та продуктивність в різних сферах, де
використовуються обчислювальні системи.
Планування задач є важливою складовою управління ресурсами та
оптимізації в різних областях.
Планування задач у великих обчисленнях та наукових дослідженнях.В
областях, які потребують обробки великих обсягів даних, таких як наукові
дослідження, фізичне моделювання та обчислення великого обсягу даних,
планування задач грає ключову роль у розподілі завдань між різними
обчислювальними вузлами та кластерами.
Планування задач у мережевих послугах. Постачальники мережевих
послуг повинні ефективно керувати ресурсами для забезпечення надійності
та якості обслуговування. Це включає в себе планування маршрутизації,
керування трафіком та баланс навантаження серверів.
Планування задач у логістиці та транспорті. У галузях логістики та
транспорту планування задач допомагає в оптимізації маршрутів доставки,
розподілу ресурсів та керуванні рухом транспортних засобів.
Планування задач у фінансах. У фінансовому секторі планування задач
використовується для оптимізації портфелів інвестицій, управління ризиками
та аналізу фінансових даних.
Планування задач в різних галузях і сферах допомагає підвищити
продуктивність, знизити витрати та забезпечити ефективне використання
обчислювальних та ресурсів мережі.
1.2 Вибір напряму дослідження
Масштабування високонавантажених систем є критично важливим
аспектом в проектуванні та управлінні такими системами. Важливість
масштабування високонавантажених систем дозволяє розділити
навантаження між багатьма серверами чи вузлами. Якщо один сервер вийде з
21
ладу, інші можуть продовжувати працювати, забезпечуючи безперервну
доступність для користувачів.
Масштабування дозволяє розподіляти завдання та обчислювальні
ресурси між багатьма серверами, що дозволяє обробляти великі обсяги даних
та високу кількість запитів швидко та ефективно.
Допомагає уникнути ситуацій, коли один сервер або компонент стає
"помилковим бутляком" (bottleneck), що обмежує продуктивність системи.
Розподілення завдань та навантаження зменшує ризик виникнення таких
вузьких місць.
Масштабування дозволяє системі зростати разом із збільшенням обсягу
роботи та обчислювальних потреб. Це означає, що система може легко
адаптуватися до змін у вимогах без значного перепроектування чи
переоснащення. Також дозволяє ефективніше використовувати
обчислювальні ресурси, оскільки ресурси можуть спільно використовуватися
та розподілятися залежно від потреби. Це дозволяє заощадити витрати на
апаратне забезпечення та електроенергію.
Загалом, масштабування високонавантажених систем допомагає
забезпечити їхню надійність, продуктивність та здатність адаптуватися до
змін, що робить його важливим аспектом у сучасному інформаційному
середовищі.
Алгоритми планування черги - це важлива складова операційних
систем і систем керування ресурсами, яка визначає послідовність виконання
завдань, які очікують на виконання в черзі. Ці алгоритми використовуються
для ефективного розподілу ресурсів та керування завданнями, які
конкурують за доступ до обчислювального часу, процесорного часу або
інших системних ресурсів.
Метою алгоритмів планування є максимізація використання системних
ресурсів, забезпечення найкращої продуктивності та зниження простою
ресурсів. Планувальники мають забезпечити справедливий доступ до
22
ресурсів для всіх завдань і користувачів, щоб уникнути недоброзичливого
конкуренції і забезпечити рівний доступ до обчислювального часу.
Алгоритми планування повинні допомогти зменшити час, який
завдання проводять в черзі до виконання, щоб забезпечити більш швидку
реакцію на запити користувачів.
First-Come First-Served (FCFS) - цей алгоритм виконує завдання в
тому порядку, в якому вони надійшли до черги. Він простий в реалізації, але
може призводити до "ефекту блокування" (блокування більш швидких
завдань через повільні) [6]. Алгоритм зображений на рисунку 1.9.
Рисунок 1.9 - Алгоритм First-Come First-Served (FCFS)
Shortest Job Next (SJN) - цей алгоритм вибирає завдання з
найкоротшим часом виконання, сподіваючись зменшити час очікування. Він
ефективний, але потребує прогнозу тривалості завдань. Алгоритм
зображений на рисунку 1.10.
Round Robin (RR) - цей алгоритм надає кожному завданню фіксований
квант часу для виконання, після чого вони повертаються до черги. Це
забезпечує справедливість та дозволяє уникнути блокування. Алгоритм
зображений на рисунку 1.11.
23
Рисунок 1.10 - Алгоритм Shortest Job Next (SJN)
Рисунок 1.11 - Алгоритм Round Robin (RR)
24
Priority Scheduling - завданням надаються пріоритети, і виконуються
спочатку завдання з вищим пріоритетом. Цей підхід допомагає враховувати
важливість завдань. Алгоритм зображений на рисунку 1.12.
Рисунок 1.12 - Алгоритм Priority Scheduling
Multilevel Queue - в цьому алгоритмі черги розділяються на кілька
рівнів, кожен із яких має свої власні правила планування та пріоритети.
Кожен рівень черги може бути призначений для конкретного типу завдань
або процесів. Алгоритм зображений на рисунку 1.13.
Рисунок 1.13 - Алгоритм Multilevel Queue
Машинне навчання (Machine Learning, ML) - це галузь штучного
інтелекту, яка зосереджена на створенні комп'ютерних систем, здатних
навчатися і вдосконалювати свою продуктивність на основі даних, без явного
25
програмування. Основна ідея машинного навчання полягає в тому, щоб
навчити комп'ютери розпізнавати патерни в даних і вирішувати завдання на
основі цих паттернів.
Машинне навчання використовує велику кількість даних для навчання
моделей. Ці дані можуть бути структурованими (наприклад, таблиці даних)
або неструктурованими (тексти, зображення, аудіо тощо) [7].
Моделі - це математичні алгоритми, які навчаються на основі даних.
Вони використовуються для розпізнавання паттернів і прийняття рішень.
Навчання моделі включає в себе процес підгонки параметрів моделі до
даних. Це може включати в себе навчання з учителем (навчання на основі
міток), навчання без вчителя (кластеризація, зменшення розмірності) та
підсилена навчання.
Важливо оцінювати якість моделі та визначати її здатність до
узагальнення на нові дані. Це включає в себе валідацію на тестових даних.
Машинне навчання використовується в багатьох галузях, включаючи
комп'ютерне бачення, обробку природних мов, медицину, фінанси,
маркетинг, автономні автомобілі та багато інших.. За типом задач машинне
навчання поділяють навчання з вчителем, навчання без вчителя, навчання з
частковим залученням вчителя, навчання з підкріпленням, загальна схема
зображена на рисунку 1.14.
До прикладів задач, які можуть бути вирішені за допомогою
машинного навчання, включаються розпізнавання образів, класифікація
текстів, передбачення цін на акції, аналіз медичних зображень та багато
інших. Машинне навчання продовжує розвиватися і знаходити нові
застосування, що робить його однією з ключових галузей інформаційних
технологій.
26
Рисунок 1.14 - Класифікація методів машинного навчання
Штучний інтелект (Artificial Intelligence, AI) - це галузь
інформатики, яка зосереджена на розробці комп'ютерних систем та програм,
що можуть відтворювати розумові функції, які зазвичай вважаються
характерними для людей [8]. Головною метою штучного інтелекту є
створення систем, здатних аналізувати інформацію, приймати рішення та
вирішувати завдання, які вимагають інтелектуального мислення.
Машинне навчання є однією з ключових складових штучного
інтелекту. Воно використовується для навчання комп'ютерів аналізувати дані
та вирішувати завдання без явного програмування. Ця галузь досліджує
розробку систем, які можуть розпізнавати об'єкти та патерни на зображеннях
і відео.
Штучний інтелект включає в себе розробку систем, які можуть
розуміти та генерувати мовлення людей. Роботи зі штучним інтелектом
можуть виконувати фізичні завдання та взаємодіяти з навколишнім
середовищем.
Це програми та системи, які допомагають людям та організаціям
приймати складні рішення на основі аналізу даних.
27
Штучний інтелігент застосовується в багатьох галузях, включаючи
медицину, фінанси, автономні автомобілі, виробництво та інші. Він
допомагає автоматизувати процеси, робити прогнози та забезпечувати
інтелектуальний аналіз даних. Штучний інтелігент є однією з ключових
технологій майбутнього та продовжує розвиватися і вдосконалюватися для
рішення складних завдань.
Штучний інтелігент (AI) включає в себе різноманітні підгалузі та види.
Слабкий штучний інтелект (Weak AI) - цей вид AI розглядається як
"обмежений" інтелект, оскільки система здатна виконувати конкретні
завдання або розв'язувати обмежені проблеми. Прикладом можуть бути
віртуальні асистенти, які взаємодіють з користувачами на основі певних
правил.
Сильний штучний інтелект (Strong AI) - це рівень AI, на якому система
має загальний інтелект та здатність розв'язувати будь-які завдання, які може
вирішити людський розум. Сильний AI ще не був створений і є предметом
активних досліджень.
Машинне навчання (Machine Learning, ML) - це підгалузь AI, в якій
система навчається на основі даних і може вирішувати завдання на основі
цього навчання. Вона включає в себе навчання на основі міток (навчання з
учителем), навчання без вчителя та підсилене навчання.
Глибоке навчання (Deep Learning) - це підгалузь машинного навчання,
яка використовує нейронні мережі з багатьма шарами для аналізу та
розпізнавання складних патернів у даних. Вона широко використовується в
обробці зображень, розпізнаванні мови та інших завданнях [9].
Комп'ютерне бачення (Computer Vision) - ця галузь AI досліджує
розробку систем, які можуть розпізнавати та розуміти зображення та відео.
Вона використовується в робототехніці, автономних автомобілях та багатьох
інших застосуваннях.
Обробка природних мов (Natural Language Processing, NLP) - досліджує
взаємодію між комп'ютерами та людьми за допомогою природних мов, таких
28
як мовлення та текст. Вона використовується для розробки систем
розпізнавання мови, перекладачів та інших мовленнєвих застосувань.
Робототехніка (Robotics) - штучний інтелект включає в себе
робототехніку, яка розробляє фізичних роботів, які можуть виконувати різні
завдання та взаємодіяти з навколишнім середовищем.
Системи підтримки прийняття рішень (Decision Support Systems) - ці
системи використовують штучний інтелект для аналізу даних та
допомагають приймати рішення в різних галузях, включаючи бізнес,
медицину та фінанси.
Самонавчання (Self-learning) - деякі системи AI можуть навчатися та
вдосконалювати свої навички самостійно, без зовнішнього втручання.
Ці різноманітні види і підгалузі AI використовуються для вирішення
різних завдань та мають широкий спектр застосувань у різних галузях.
Паралельне обчислення - це метод обчислення, в якому
обчислювальні завдання розподіляються між багатьма обчислювальними
ресурсами (такими як процесори, сервери або вузли обчислювального
кластера) з метою збільшення продуктивності та скорочення часу виконання.
Основними характеристиками паралельного обчислення є розділення завдань
на підзавдання, які виконуються паралельно на різних обчислювальних
ресурсах.
Паралельне обчислення передбачає розділення великого завдання на
менші підзавдання, які можуть бути обчислені паралельно. Це дозволяє
використовувати ефективно обчислювальні ресурси та зменшувати час
виконання.
Під час паралельного обчислення важливо правильно синхронізувати
підзавдання, щоб уникнути конфліктів та забезпечити правильний порядок
виконання. Синхронізація допомагає уникнути гонок за ресурсами та інших
проблем, які можуть виникнути при одночасному виконанні завдань.
Багато паралельних обчислень використовують розподілені системи, де
обчислювальні ресурси розташовані на різних вузлах мережі. Це дозволяє
29
ефективно використовувати обчислювальну потужність та забезпечувати
надійність системи [10].
Існують різні моделі та підходи до паралельного обчислення,
включаючи модель "поділу та володіння" (divide and conquer), модель
"послідовних задач" (task parallelism), модель потоків (threading) та багато
інших.
Паралельне обчислення використовується в багатьох галузях, включаючи
великі обчислення, наукові дослідження, обробку даних, графіку та ігри,
машинне навчання та інші. Воно дозволяє розв'язувати завдання, які були б
надзвичайно часомісткими при послідовному обчисленні.
Паралельне обчислення стало важливою складовою сучасних
обчислювальних систем і дозволяє прискорювати обчислення та обробку
даних. Воно застосовується для вирішення складних завдань та
вдосконалюється з роками завдяки розвитку обладнання та програмного
забезпечення.
Обробка великих обсягів даних, також відома як "Big Data
Processing," є важливою галуззю в сучасному світі, оскільки кількість та
різноманітність даних продовжують зростати експоненційно. Ця область
займається збором, зберіганням, обробкою та аналізом великих масивів
даних, які можуть бути структурованими або неструктурованими.
В останні десятиліття спостерігається експоненційний ріст обсягів
даних завдяки сучасним технологіям, таким як Інтернет, соціальні мережі,
сенсори, мобільні пристрої та інші джерела. Великі обсяги даних можуть
бути від декількох терабайт до петабайт та більше.
Для зберігання великих обсягів даних використовуються різні
технології та платформи, включаючи реляційні та нереляційні бази даних,
розподілені системи зберігання даних та хмарні сховища.
Обробка великих обсягів даних включає в себе процеси збору та
інтеграції даних, їхню очистку, трансформацію та завантаження (ETL), а
30
також агрегацію та індексацію [11]. Ці операції допомагають підготувати
дані для подальшого аналізу.
Великі дані надають можливість витягати цінну інформацію та
патерни. Аналіз даних може включати в себе візуалізацію, статистичний
аналіз, машинне навчання та інші методи для виявлення залежностей та
відкриття нових знань.
Обробка великих обсягів даних має застосування в різних галузях,
включаючи маркетинг та рекламу, фінанси, медицину, транспорт, науку,
логістику, соціальні мережі, Інтернет речей (IoT) та інші. Вона допомагає
вирішувати проблеми, виявляти тренди та приймати обгрунтовані рішення.
Для обробки великих обсягів даних використовуються різноманітні
інструменти та технології, такі як Apache Hadoop, Apache Spark, NoSQL бази
даних, мови програмування для обробки даних (наприклад, Python та R) та
багато інших.
Обробка великих обсягів даних дозволяє підприємствам та
організаціям використовувати великі дані для покращення свого бізнесу,
розробляти нові продукти та послуги, виявляти проблеми та вдосконалювати
приймання рішень. Вона є ключовою складовою в сучасному світі і надає
нові можливості для інновацій та розвитку.
1.3 Постановка задачі
У сучасному інформаційному суспільстві зростає запит на
обчислювальні ресурси та розподілені системи для обробки великих обсягів
даних та виконання складних обчислень. Розподілені системи є важливим
елементом інфраструктури для обслуговування великої кількості
користувачів та додатків. Ефективне планування задач у розподілених
системах визначає їх продуктивність та ефективність використання ресурсів.
Незважаючи на існуючі алгоритми планування, існують проблеми та
виклики, пов'язані з розподіленими системами, такі як зменшення часу
31
виконання завдань, оптимізація використання ресурсів та забезпечення
надійності виконання завдань.
У рамках даної класифікаційної роботи, метою якої є аналіз та
оптимізація алгоритмів планування задач у розподілених системах з метою
підвищення продуктивності та ефективності використання обчислювальних
ресурсів, а також зменшення часу виконання завдань, будуть виконані такі
завдання:
1. Проведений докладний аналіз існуючих алгоритмів планування задач у
розподілених системах, включаючи їх класифікацію та оцінку переваг і
недоліків;
2. Зібрана та проаналізована статистика щодо виконання завдань у
розподіленій системі з метою вивчення інтенсивності навантаження та
залежностей між завданнями;
3. Розроблені нові алгоритми планування задач або оптимізовані існуючі,
враховуючи отримані дані та вимоги до системи;
4. Проведені експерименти з новими алгоритмами в рамках створеної
моделі розподіленої системи та оцінена їх продуктивність та
надійність;
5. На основі отриманих результатів сформульовані висновки щодо
ефективності нових алгоритмів та визначені можливі напрямки
подальших досліджень та застосувань результатів у реальних
розподілених система.
Для перевірки ефективності розроблених алгоритмів планування задач
у розподілених системах потрібно розробити експериментальну систему, яка
дозволить провести об'єктивну оцінку їхньої продуктивності та
функціональності. Ця експериментальна система може бути створена
наступним чином:
1. Вибір платформи для експериментів;
2. Розробка імітаційної моделі;
3. Розробка тестових завдань;
32
4. Інтеграція розроблених алгоритмів;
5. Проведення експериментів;
6. Аналіз результатів.
Ця експериментальна система дозволить об'єктивно оцінити
ефективність розроблених алгоритмів планування задач у розподілених
системах та підтвердити їх придатність для використання у реальних
сценаріях.
Розроблена система для планування задач у розподілених системах має
потенціал стати цінним рішенням для покращення ефективності та
продуктивності роботи розподілених систем у компаніях та організаціях.
Розроблені алгоритми планування дозволять оптимізувати розподіл
завдань у розподілених системах, що призведе до підвищення
продуктивності та зменшення часу виконання завдань. Це особливо важливо
для компаній, які залежать від швидкого та ефективного оброблення даних.
Оптимальне планування задач допоможе зменшити споживання
ресурсів та зменшити операційні витрати компанії. Це може призвести до
значних економічних вигод.
Розроблена система може бути використана в різних компаніях та
проектах, незалежно від їхнього розміру та потреб. Це дозволяє компаніям
зростати та розширюватися, не обмежуючи себе обмеженнями щодо розмірів
розподілених систем.
У разі успішного впровадження та використання цієї системи в
реальних системах компаній, вони можуть очікувати покращення
продуктивності та зниження витрат, що сприятиме їхній конкурентній
перевазі на ринку.
1.4 Висновки до розділу 1
У цьому розділі розглянуто важливі аспекти і концепції, пов'язані з
високонавантаженими системами, масштабуванням, розподіленими
33
системами, плануванням задач, а також розглянули важливі аспекти
масштабування високонавантажених систем і алгоритми планування черги.
Здійснили постановку завдання та спланували задачі до кваліфікаційної
роботи магістра.
Високонавантажені системи є важливими в сучасному світі, оскільки
дозволяють обробляти великі обсяги даних та виконувати велику кількість
операцій одночасно. Масштабування високонавантажених систем стає
ключовим елементом для забезпечення продуктивності та надійності
системи. Розподілені системи дозволяють об'єднувати ресурси на різних
вузлах мережі та робити обчислення ефективними та надійними.
Планування задач і алгоритми планування черги важливі для
ефективного управління обчисленнями та ресурсами в системі. Вони
дозволяють встановлювати пріоритети завдань, розділяти ресурси між
процесами та забезпечувати справедливий доступ до ресурсів.
Машинне навчання та штучний інтелект відкривають нові можливості
для аналізу даних та прийняття рішень. Вони допомагають автоматизувати
процеси, виявляти патерни та розвивати інтелектуальні системи.
Паралельне обчислення та обробка великих обсягів даних стали
ключовими технологіями для розв'язання сучасних завдань обчислень та
аналізу даних. Вони дозволяють ефективно використовувати ресурси та
розвивати нові застосування в різних галузях.
Всі ці концепції та аспекти важливі для сучасного інформаційного
суспільства та розвитку нових технологій. Вони сприяють покращенню
продуктивності, надійності та здатності до аналізу та прийняття
обґрунтованих рішень.
34
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ
2.1 Огляд існуючих технологій
Java - це високорівнева, об'єктно-орієнтована мова програмування, яка
була розроблена в Sun Microsystems (зараз частина Oracle Corporation) у
1990-х роках. Java стала популярною завдяки своїй платформо незалежності
та можливості використовувати її на різних операційних системах, що робить
її досить універсальною для розробки програмного забезпечення [12].
Java базується на концепціях об'єктно-орієнтованого програмування
(ООП), що сприяє покращенню структури програм та полегшує їх розробку
та обслуговування.
Програми, написані на Java, можуть запускатися на будь-якій
платформі, яка має відповідну віртуальну машину Java (JVM). Це дозволяє
створювати крос-платформенні програми, які працюють на різних
операційних системах.
Java використовує систему збору сміття для автоматичного
вивільнення непотрібної пам'яті, що сприяє уникненню багатьох типічних
помилок, пов'язаних із витоками пам'яті. Постачається з обширною
стандартною бібліотекою класів, яка включає в себе інструменти для роботи
з мережами, базами даних, графікою, а також багатьма іншими завданнями.
Має вбудовані механізми безпеки, які дозволяють створювати безпечні
програми, обмежуючи доступ до ресурсів та виконання небезпечних
операцій.
Java - це розподілена мова програмування, що означає, що її можна
виконувати на різних комп'ютерних мережах, зображено на рисунку 2.1.
35
Рисунок 2.1 - Виконання Java на різних комп'ютерних мережах
Java використовується для розробки різних типів програм, включаючи
мобільні додатки, веб-додатки, серверні програми, наукові дослідження та
ігри. Вона залишається однією з найпопулярніших мов програмування
завдяки своїм перевагам у сфері крос-платформеності та безпеки.
Python - це високорівнева мова програмування, яка славиться своєю
простотою та читабельністю коду. Вона широко використовується для різних
завдань, включаючи веб-розробку, наукові дослідження, штучний інтелект,
обробку даних та багато інших сфер.
Python відомий своєю лаконічністю та зрозумілістю синтаксису, що
полегшує розробку програм та їх обслуговування. Підтримується на багатьох
операційних системах, що дозволяє створювати крос-платформені програми.
Має активну та велику спільноту користувачів, що розробляють
різноманітні бібліотеки та фреймворки для різних галузей [13].
Python постачається з різноманітними стандартними модулями, які
допомагають вирішувати різні завдання без необхідності писати код "з нуля".
Використовується для веб-розробки (зокрема, за допомогою
фреймворку Django), обробки даних (за допомогою бібліотеки pandas),
штучного інтелекту (за допомогою бібліотеки TensorFlow) та багатьох інших
сфер, приклади яких зображено на рисунку 2.2.
36
Рисунок 2.2 - Використання мови Python
Python вважається однією з найпопулярніших мов програмування
завдяки своїм перевагам у сфері простоти та широкому застосуванню.
JavaScript (JS) - це високорівнева, інтерпретована мова
програмування, яка використовується для розробки веб-додатків та
динамічного веб-контенту. Використовується для створення динамічного та
інтерактивного контенту на веб-сторінках. Він дозволяє змінювати вміст
сторінок, взаємодіяти з користувачем, валідувати форми та багато іншого.
JavaScript базується на стандарті ECMAScript, який визначає основний
синтаксис та функціональність мови [14]. Цей стандарт оновлюється
регулярно, щоб додавати нові функції та покращувати мову.
Може використовуватися як на клієнтській стороні (у браузерах) так і
на серверній стороні (за допомогою платформи Node.js). Це дозволяє
розробникам створювати повноцінні веб-додатки та сервери. Також для
створення веб-сайтів, веб-додатків, ігор, мобільних додатків, розширень для
браузерів, віджетів, взаємодії з API та багатьох інших завдань.
Існує безліч фреймворків та бібліотек для JavaScript, які полегшують
розробку. Наприклад, React, Angular, Vue.js для фронтенда та Express.js,
Nest.js для серверної сторони.
JavaScript підтримує асинхронне програмування, що дозволяє
виконувати фонові завдання без блокування головного потоку виконання.
37
Використовує динамічну типізацію, що означає, що типи даних можуть
змінюватися під час виконання програми [15]. Схематична ілюстрація, що
показує процес виконання коду JavaScript зображена на рисунку 2.3.
Рисунок 2.3 - Процес виконання коду JavaScript
JavaScript є важливою мовою для веб-розробки та розширюється на
багато інших галузей, що робить її однією з найпопулярніших мов
програмування у світі .
PHP (Hypertext Preprocessor) - це мова сценаріїв загального
призначення, яка використовується для розробки веб-додатків та
динамічного контенту веб-сайтів. PHP зазвичай використовується на
серверній стороні для створення динамічних веб-сторінок, що дозволяє
генерувати вміст в реальному часі перед його надсиланням користувачам,
принцип роботи зображено на рисунку 2.4.
38
Рисунок 2.4 - Принцип роботи PHP
Використовується для розробки різноманітних веб-додатків, таких як
системи керування вмістом (CMS), електронні комерційні платформи,
соціальні мережі, а також інші складні веб-додатки.
PHP є легкою для вивчення мовою, що дозволяє початківцям швидко
оволодіти основами програмування та розробки веб-додатків.
Має велику спільноту розробників, що призводить до широкої
документації, багатьох корисних бібліотек та фреймворків, які полегшують
розробку та підтримку проектів. Легко інтегрується з різноманітними
системами управління базами даних, такими як MySQL, що дозволяє
зберігати та обробляти дані, необхідні для веб-додатків [16].
Існуючий код PHP можна легко змінювати та модифікувати, що
полегшує підтримку та оновлення веб-додатків з часом. Має вбудовані
функції для забезпечення безпеки, такі як фільтрація даних та захист від атак
типу внесення SQL-запитів.
PHP є однією з найпопулярніших мов програмування для веб-розробки,
завдяки своїй простоті, широким можливостям та великій спільноті
розробників.
PostgreSQL - це потужна та відкрита система керування базами даних
(СКБД). PostgreSQL є вільним та відкритим програмним забезпеченням з
вільною ліцензією, що означає, що можливо використовувати, змінювати та
39
розповсюджувати його безкоштовно. Архітектура PostgreSQL зображено на
рисунку 2.5.
Рисунок 2.5 - Архітектура PostgreSQL
Відомий своєю надійністю та стабільністю. Він надає механізми
резервного копіювання та відновлення, а також можливість використовувати
велику кількість реплікаційних методів для забезпечення високої доступності
та відновлення в разі відмов.
PostgreSQL підтримує багато різних типів даних та має широкий набір
вбудованих функцій та операторів. Він також підтримує складні операції
SQL, індекси, тригери та зберігані процедури. Дозволяє створювати власні
розширення та вбудовувати власний код SQL, що розширює можливості
системи за потреби [17]. Має підтримку геопросторових даних, що дозволяє
працювати з геоданими та географічними інформаційними системами.
40
PostgreSQL підтримує роботу з документ-орієнтованими даними та
JSON, що дозволяє зберігати та опрацьовувати структуровані документи.
Використовується в різних сферах, включаючи веб-розробку, наукові
дослідження, бізнес-застосунки та багато інших галузей.
PostgreSQL - це потужна та розширювана система для зберігання та
управління даними, яка відмінно підходить для проектів різних розмірів і
складності.
MongoDB - це документ-орієнтована система керування базами даних
(СКБД), яка відома своєю гнучкістю та швидкістю. MongoDB використовує
документи у форматі BSON (Binary JSON) для зберігання даних. Кожен
документ - це набір пар ключ-значення, і вони можуть мати різну структуру,
що робить MongoDB відмінним від класичних реляційних баз даних.
Архітектура MongoDB зображено на рисунку 2.6.
Рисунок 2.6 - Архітектура MongoDB
Не вимагає строго заданої схеми даних, що дозволяє додавати та
змінювати поля документів без обов'язкової модифікації всіх інших
документів в колекції.
41
MongoDB розроблена для швидкого доступу до даних, що особливо
корисно для великих обсягів даних. Вона також підтримує горизонтальне
масштабування, дозволяючи легко додавати нові сервери для розподілу
навантаження.
Підтримує різноманітні запити, включаючи стандартні запити SQL-
подібного мову запитів, а також текстовий пошук та геопросторові запити.
MongoDB надає засоби для реплікації даних для забезпечення надійності та
доступності. Відновлення даних також підтримується для відновлення в разі
відмов.
Використовується в різних галузях, включаючи веб-розробку,
аналітику, геоінформаційні системи, мобільні додатки та багато інших
галузей.
MongoDB - це потужний інструмент для зберігання та опрацювання
даних, який відмінно підходить для проектів, де потрібна гнучкість та
швидкість доступу до даних.
MySQL - це відкрита система керування базами даних (СКБД), яка
відома своєю надійністю, високою продуктивністю та простотою
використання. MySQL базується на реляційній моделі даних, де дані
організовані у вигляді таблиць з рядками та стовпцями. Це дозволяє
використовувати структурований підхід до зберігання даних. З чого
складається база даних, зображена на рисунку 2.7
Рисунок 2.7 - Використання MySQL
42
Використовує мову запитів SQL (Structured Query Language) для
взаємодії з даними. SQL дозволяє виконувати різноманітні операції, такі як
додавання, оновлення, видалення та запити до даних.
MySQL має велику та активну спільноту користувачів та розробників,
яка надає підтримку, допомогу та розвиток продукту.
Підтримує можливість масштабування, що дозволяє розширювати базу
даних з ростом обсягу даних та навантаження. Відома своєю надійністю та
можливістю відновлення даних в разі відмови. Вона також підтримує різні
засоби безпеки, включаючи автентифікацію, авторизацію та шифрування.
MySQL використовується в різних галузях, включаючи веб-розробку,
бізнес-застосування, електронну комерцію, аналітику даних та багато інших
галузей. Підтримується на багатьох операційних системах, включаючи
Windows, Linux та macOS [18].
MySQL - це одна з найпопулярніших та надійних СКБД, яка знаходить
застосування у багатьох проектах та додатках. Вона допомагає
організовувати та зберігати дані в структурованому форматі та надає
інструменти для ефективного управління даними.
Apache Hadoop — це вільна програмна платформа та каркас для
організації розподіленого зберігання та обробки великих обсягів даних. Він
використовує модель програмування MapReduce, яка дозволяє розбивати
завдання на дрібні фрагменти, обробляти їх паралельно на окремих вузлах
кластера, та автоматично враховувати відмови апаратного забезпечення.
Основні компоненти Apache Hadoop включають:
1. Hadoop Common - модуль містить бібліотеки та утиліти, необхідні для
роботи інших компонентів Hadoop;
2. Hadoop Distributed File System (HDFS) - це розподілена файлова
система, яка забезпечує зберігання даних на звичайних комп'ютерах у
кластері. Вона має високу пропускну здатність та надійність;
3. Hadoop YARN - компонент відповідає за керування ресурсами в
кластері та їх розподіл між користувацькими завданнями;
43
4. Hadoop MapReduce - надає засоби для обробки великих обсягів даних,
використовуючи модель "map" і "reduce."
Apache Hadoop був створений на основі публікацій Google щодо
MapReduce та Google File System. Він може працювати з різними мовами
програмування завдяки "Hadoop Streaming."
Apache Hadoop також має широку екосистему проектів, таких як
Apache Hive, Apache Pig, Apache HBase, Apache Spark, і багато інших, які
розширюють його можливості та допомагають розв'язувати різноманітні
завдання обробки даних.
Цей фреймворк є важливим інструментом для роботи з великими
обсягами даних та розподіленою обробкою, і він використовується в багатьох
компаніях для зберігання, аналізу та отримання цінних інсайтів з великих
обсягів даних.
Apache Spark - високопродуктивний інструмент для обробки даних,
які зберігаються в кластері Hadoop. У порівнянні з механізмом MapReduce,
який надається в Hadoop, Spark вражає своєю продуктивністю: він може
обробляти дані у пам'яті в 100 разів швидше, а при роботі з даними на дисках
- в 10 разів швидше.
Spark може працювати як на вузлах кластера Hadoop з використанням
Hadoop YARN, так і в відокремленому режимі. Він підтримує обробку даних
з таких сховищ, як HDFS, HBase, Cassandra, Hive, і може працювати з будь-
яким форматом введення Hadoop.
Цей інструмент може використовуватися для різних сценаріїв обробки
даних, включаючи MapReduce, потокову обробку, роботу з SQL-запитами,
аналітичні завдання, а також задачі машинного навчання та обробки графів.
Програми для обробки даних можуть бути написані на мовах Scala, Java,
Python та R.
Застосунок Spark складається з двох основних частин: драйвера і
виконавців. Драйвер зберігає інформацію про стан програми, відповідає на
44
запити користувацьких програм, і розподіляє завдання між виконавцями.
Виконавці виконують завдання та повідомляють про свій стан драйверу.
Spark може працювати як у режимі псевдо-розподіленого локального
кластера, коли всі його компоненти запускаються на одному комп'ютері, так і
в реальному розподіленому кластері на багатьох машинах.
Для розгортання кластера Spark потрібен менеджер кластера, який
контролює фізичні машини і розподіляє ресурси. Spark може працювати з
різними менеджерами кластера, включаючи свій власний, YARN та Apache
Mesos. Для зберігання даних Spark може взаємодіяти з різними системами,
включаючи Hadoop Distributed File System, MapR File System, Cassandra,
Amazon S3, і багато інших [19].
Kubernetes - це відкрита система автоматичного розгортання,
масштабування та управління застосунками в контейнерах. Ця система була
розроблена компанією Google та підтримує різні інструменти для управління
контейнерами, включаючи Docker.
Kubernetes визначає набір "примітивів", які спільно надають механізми
для розгортання, підтримки та масштабування застосунків в контейнерах. Ця
система є слабко зв'язаною і розширюваною, щоб відповідати різним
потребам та робочим навантаженням. Розширюваність Kubernetes
забезпечується API, яке використовується внутрішніми компонентами, а
також можливістю додавати розширення та контейнери, які працюють на
платформі Kubernetes.
Apache Mesos - це програмна платформа, яка об'єднує функції системи
для спільного доступу до ресурсів кластера, оркестрації контейнерів і
розподіленого ядра для організації виконання завдань на групі вузлів. Перші
етапи розробки Mesos проводилися компанією Twitter, але згодом проект
перейшов під опіку Apache Software Foundation.
Кластери, побудовані на основі Mesos, використовуються в таких
відомих компаніях, як Netflix, Samsung, Twitter, IBM, PayPal і Yelp.
45
Основні переваги Mesos включають в себе можливість сприймати
кластер як єдиний набір ресурсів, абстрагуючи процесори, GPU, пам'ять,
системи зберігання та інші обчислювальні ресурси на фізичних серверах і
віртуальних машинах. При виконанні розподілених застосунків і
фреймворків, Mesos бере на себе роботу з динамічного розподілу та ізоляції
наявних ресурсів. Він підтримує роботу з різними фреймворками,
включаючи Hadoop, MPI, Hypertable і Spark, а також застосунки, які
працюють в умовах динамічного розподілу потужності доступних вузлів
кластера.
Mesos надає практично лінійну масштабованість, дозволяючи
охоплювати тисячі вузлів. Він також забезпечує можливість створення
відмовостійких конфігурацій за допомогою Zookeeper. Інші характеристики
Mesos включають можливість оновлення без зупинки, підтримку контейнерів
у форматах Docker і AppC, ізоляцію ресурсів, підтримку різних типів
застосунків, можливість підключення розширень через HTTP API та
наявність веб-інтерфейсу для управління і моніторингу. Важливо відзначити,
що Mesos є незалежним від конкретних хмарних сервісів.
RabbitMQ - це відомий сервіс посередника повідомлень (Message
Broker), який використовується для організації комунікації між різними
програмами або компонентами системи. Він реалізує стандартний протокол
передачі повідомлень AMQP (Advanced Message Queuing Protocol) і надає
розподілену систему для обміну повідомленнями [20].
RabbitMQ дозволяє відправляти повідомлення від одного додатку до
іншого через проміжний сервер (брокера). Це полегшує взаємодію між
різними компонентами системи.
Дозволяє створювати черги для зберігання повідомлень. Це дозволяє
регулювати швидкість обробки повідомлень і забезпечувати можливість
обробки їх в порядку черги. RabbitMQ підтримує різні мови програмування,
що дозволяє розробникам використовувати його в різних екосистемах.
46
Має багато налаштовуваних параметрів, які дозволяють налаштувати
його для ваших конкретних потреб. Підтримує механізми відновлення після
відмови, які забезпечують безпеку та надійність в обміні повідомленнями.
Може використовуватися в різних режимах, включаючи точку-точку,
"видавця-підписника" і багато інших.
RabbitMQ використовується в багатьох системах, де потрібна надійна і
ефективна обробка повідомлень, таких як системи моніторингу, веб-
застосунки, системи обробки замовлень та інші.
Apache Kafka - це проміжне програмне забезпечення, спроєктоване
для обробки повідомлень та створення розподіленої платформи для їх
багатопотокового оброблення. Цей проєкт розробляється Apache Software
Foundation та підтримується LinkedIn. Kafka призначений для зберігання і
обробки потоків даних в реальному часі. Він надає ефективну платформу для
обміну повідомленнями між різними додатками.
Дані в Kafka зберігаються у форматі ключ-значення. Це дозволяє
клієнтам визначати ключі для повідомлень і обробляти їх за допомогою цих
ключів. Розділяє дані на теми (topics) і розділи (partitions). Теми дозволяють
групувати повідомлення за певними категоріями, а розділи розподіляють дані
між різними брокерами. Забезпечує відмовостійкий обмін повідомленнями
шляхом реплікації розділів на кількох брокерах.
Kafka побудований з урахуванням мінімізації затримок, що дозволяє
обробляти дані в реальному часі з низькою латентністю. Може обслуговувати
багато додатків, що взаємодіють з ним одночасно. Це робить його
популярним рішенням для розподіленої обробки потоків даних.
Apache Kafka знаходить своє використання в різних сценаріях, таких як
управління потоками даних, аналітика в реальному часі, обробка подій та
багато інших застосувань, де необхідно надійно та ефективно обмінюватися
повідомленнями між додатками.
47
2.2 Вибір технологій
Обґрунтування вибору технологій для розробки системи планування
задач у розподілених системах є важливою задачею для забезпечення
успішної реалізації та подальшого використання системи в реальних умовах.
Вибір технологій повинен ґрунтуватися на кількох ключових факторах.
Перший крок - це ретельний розгляд функціональних вимог системи.
Які завдання повинні бути виконані, які операції та функції потрібні для
планування задач та моніторингу роботи розподіленої системи. Вибір
технологій повинен відповідати цим вимогам.
Важливо врахувати специфікації галузі або індустрії, в якій планується
впровадження. Деякі галузі мають стандарти та регулятивні вимоги, які
можуть вплинути на вибір технологій.
Рівень досвіду команди розробників, яка буде працювати над
розробкою додатку також має значення. Важливо вибрати технології, з якими
команда вже має досвід або зможе швидко оволодіти.
З урахуванням цих факторів обґрунтований вибір технологій допоможе
створити систему, яка буде відповідати потребам компанії та готова для
успішного впровадження у реальні системи.
Визначення мови програмування є важливим кроком при розробці
будь-якого програмного продукту і може суттєво вплинути на успішність та
ефективність проекту. Різні мови програмування мають свої особливості та
можливості. Вибір мови, яка найкраще підходить для ваших функціональних
вимог, допоможе забезпечити, що програмний продукт буде виконувати
необхідні завдання.
Деякі мови програмування можуть бути більш продуктивними для
певних завдань. Вибір правильної мови може допомогти зменшити час
розробки та покращити продуктивність розробників.
48
Вибір мови програмування також впливає на масштабованість проекту.
Деякі мови дозволяють легше масштабувати систему, що важливо для
великих проектів або систем зі зростаючим обсягом даних та користувачів.
Мова програмування - це формальна система для написання
комп'ютерних програм, яка складається з набору правил та символів, які
визначають синтаксис та семантику мови. Мови програмування
використовуються для створення програм, які вказують комп'ютеру, як
виконувати конкретні завдання.
Мови програмування можуть бути використані для розробки різних
видів програм, включаючи веб-додатки, мобільні додатки, операційні
системи, наукові обчислення, штучний інтелект та інші. Кожна мова має свої
властивості та застосування, і вибір конкретної мови залежить від завдань та
вимог проекту.
Вибір мови програмування, такої як PHP, може бути обґрунтованим в
залежності від конкретних вимог та завдань проекту. PHP була спеціально
розроблена для веб-розробки. Вона надає можливість легко вбудовувати
PHP-код безпосередньо в HTML-сторінки, що спрощує створення
динамічних веб-сторінок та обробку HTTP-запитів.
PHP має велику та активну спільноту розробників, і це означає, що
можна знайти безліч бібліотек, фреймворків, документації та готових рішень
для різних завдань у сфері веб-розробки.
PHP має гарну підтримку для роботи з реляційними СКБД, такими як
MySQL та PostgreSQL [21]. У розробника є можливість легко створювати та
керувати базами даних для вашого веб-додатку.
PHP підтримується більшістю популярних веб-серверів, включаючи
Apache, Nginx, та інші, що дає можливість вибирати середовище, яке
найкраще підходить для проекту.
PHP використовується для розробки веб-сайтів різного рівня
складності, від невеликих особистих блогів до великих корпоративних
порталів. Вона може масштабуватися відповідно до потреб проекту.
49
Загалом, PHP є популярним та добре підтримуваним вибором для веб-
розробки, і якщо проект орієнтований на створення веб-додатків або веб-
сайтів, ця мова може бути гарним варіантом.
Вибір правильної бази даних для розробки нового проекту - це
критичний етап розробки, який може суттєво вплинути на продуктивність,
масштабованість та безпеку вашого додатку.
База даних (БД) - це структурована колекція даних, яка зберігається та
організується таким чином, щоб дозволити ефективний доступ, пошук та
обробку інформації. Бази даних використовуються для зберігання та
управління великими обсягами даних для різних цілей, включаючи
зберігання даних користувачів, обліку транзакцій, аналізу даних, створення
звітів та багато інших завдань.
Для роботи з даними використовується спеціальна програмна система,
яка відома як СУБД. Серед відомих СУБД входять MySQL, PostgreSQL,
Microsoft SQL Server, Oracle, MongoDB та інші.
СУБД (Система Управління Базами Даних) - це програмне
забезпечення, яке дозволяє створювати, зберігати, оновлювати, видаляти та
керувати даними в базі даних. СУБД надає інтерфейс для взаємодії з базою
даних та забезпечує безпечний та ефективний доступ до інформації. Вона
дозволяє розробникам та користувачам працювати з даними, не вдаючись до
роботи з рівнем фізичного збереження даних.
Деякі популярні СУБД включають MySQL, PostgreSQL, Oracle,
Microsoft SQL Server, MongoDB та багато інших.
Вибір СУБД (Системи Управління Базами Даних) є важливим
рішенням, яке залежить від конкретних вимог та характеристик вашого
проекту. MySQL - це популярна СУБД, яка має свої особливості та переваги,
які можуть зробити її підходящою для певних типів проектів [22].
MySQL є відкритим програмним забезпеченням, що означає, що
розробник можете використовувати її безкоштовно та з відкритим вихідним
50
кодом. Це робить її вартісно-ефективним вибором для проектів з
обмеженими бюджетами.
MySQL має широку та детальну документацію, яка спрощує розробку
та адміністрування бази даних. MySQL володіє доброю швидкодією для
багатьох типів завдань, зокрема для операцій зчитування даних. База даних
також надає підтримку транзакцій, що гарантує цілісність даних та
консистентність в системі.
Однак важливо враховувати, що MySQL має свої обмеження, зокрема
щодо масштабованості при великих обсягах даних та обробки великих
навантажень на запис. Якщо проект передбачає велику кількість одночасних
записів або обсяги даних, які зростають дуже швидко, можливо, знадобиться
розглянути інші СУБД або комбінувати MySQL з іншими технологіями.
Для використання MySQL в PHP потрібен драйвер (розширення), яке
дозволить взаємодіяти з базою даних MySQL з PHP-кодом.
mysqli (MySQL Improved Extension): mysqli є оновленою версією
старого mysql розширення та надає об'єктно-орієнтоване та процедурне API
для взаємодії з MySQL. Воно підтримує підготовлені запити, транзакції та
інші функції, що роблять роботу з базою даних більш безпечною та
потужною.
PDO (PHP Data Objects): PDO - це універсальний рішення для роботи з
різними базами даних, включаючи MySQL. Він надає спільний інтерфейс для
роботи з різними СУБД та підтримує параметризовані запити, що підвищує
безпеку вашого коду.
MySQLi та PDO: Обидва розширення (mysqli та PDO) є добрими
виборами, і вибір між ними залежить від вашого досвіду та вимог вашого
проекту. PDO є більш універсальним та підтримує різні СУБД, тоді як mysqli
спеціалізується на MySQL і може надати більше функцій для роботи з цією
конкретною СУБД.
При виборі драйвера для MySQL в PHP важливо враховувати потреби
майбутнього проекту, рівень досвіду розробника та особливості проекту.
51
Забезпечення безпеки та захисту від SQL-ін'єкцій, а також оптимальний
робочий процес для розробників - важливі аспекти при виборі правильного
драйвера.
Загалом, PDO є потужним та безпечним інструментом для роботи з
MySQL у PHP, і вибір цього драйвера може спростити розробку та
забезпечити високу якість вашого додатку.
Вибір між Apache та Nginx для запуску сервера PHP залежить від
конкретних вимог проекту та рівня досвіду розробника у роботі з веб-
серверами.
Nginx зазвичай відомий своєю вищою продуктивністю та здатністю
обслуговувати більше запитів на одному сервері порівняно з Apache,
особливо в ситуаціях з великим навантаженням. Якщо потрібен високий
рівень продуктивності, Nginx може бути кращим вибором.
Apache має багато модулів, які розширюють його функціональність.
Вибір Apache може бути вигідним, якщо потрібні конкретні модулі або
розширення для вашого проекту.
Якщо потрібно використовувати Apache або Nginx як проксі-сервер для
PHP (наприклад, для роботи з PHP-FPM), обидва веб-сервери можуть це
зробити. Проте Nginx часто відомий своєю здатністю ефективно обробляти
запити до PHP.
Nginx відомий своєю високою швидкістю та ефективністю при обробці
SSL-та TLS-запитів, тож він може бути кращим вибором для веб-сайтів, які
вимагають безпеки та шифрування.
SSL (Secure Sockets Layer) сертифікати, та що їхнє розширення TLS
(Transport Layer Security), є критичними елементами безпеки в інтернеті.
Основна функція SSL/TLS - це забезпечення шифрування даних, що
передаються між веб-сервером та браузером користувача. Це захищає дані
від перехоплення та читання сторонніми особами, забезпечуючи
конфіденційність.
52
SSL/TLS сертифікати дозволяють ідентифікувати власника веб-сайту та
підтвердити його справедливість. Це допомагає користувачам впізнавати
легітимні веб-сайти та захищати їх від фішингових атак.
Використання SSL/TLS сертифікатів допомагає підвищити довіру
користувачів до вашого веб-сайту. Користувачі більш схильні відвідувати та
взаємодіяти з веб-сайтами, які використовують шифрування та мають дійсні
сертифікати.
Сучасні браузери позначають веб-сайти без SSL/TLS як "Не
зашифровані", що може вплинути на імідж вашого бренду та довіру
користувачів.
Усі ці фактори роблять SSL/TLS сертифікати критичним елементом для
забезпечення безпеки та довіри у веб-середовищі. Вони стали стандартом для
захисту веб-сайтів та взаємодії з користувачами в Інтернеті.
Планування задач в розподілених системах - це процес розподілу
роботи та ресурсів між вузлами системи з метою досягнення поставлених
цілей. Цей процес включає в себе розподіл завдань, моніторинг виконання,
управління відмовами та балансування навантаження.
Спочатку потрібно чітко визначити, які задачі потрібно виконати. Це
можуть бути різні операції обробки даних, аналізу, зберігання та інші
операції. Планування задач включає в себе розподіл завдань між вузлами
системи. Це може бути рівномірним розподілом або з урахуванням
навантаження на кожному вузлі.
Після того як завдання розподілені, потрібно встановити систему
моніторингу, яка відстежує виконання завдань. Це допомагає виявляти
проблеми та недоліки в роботі системи.
Розподілені системи можуть стикатися з відмовами апаратного
забезпечення або програмних збоїв. Планування задач повинно включати в
себе механізми відновлення та перерозподілу завдань в разі виникнення
відмов.
53
Відмова апаратного або програмного забезпечення - це стан, коли
апаратна чи програмна частина системи не працює належним чином і не
виконує очікувану функцію. Відмова може бути спричинена різними
факторами, такими як помилки в програмному коді, дефекти апаратного
обладнання, перевищення навантаження, атаки зловмисників, аномалії в
роботі, інші небажані обставини або відмінності від специфікацій.
Відмови можуть мати серйозні наслідки для системи, включаючи
втрату даних, втрату продуктивності, падіння сервісу та порушення безпеки.
Для виявлення, управління та відновлення від відмов існують різні методи та
стратегії, такі як:
1. Моніторинг та журналювання;
2. Автоматичне відновлення;
3. Захист від відмов;
4. Планування підвищення надійності.
Системи моніторингу відстежують стан апаратного та програмного
забезпечення, реєструючи події та відмови. Журнали дозволяють аналізувати
відмови після їхнього виникнення для подальшої діагностики та виправлення
проблем.
Деякі системи мають механізми автоматичного відновлення, які
намагаються відновити працездатність після виникнення відмови. Це може
включати в себе перезавантаження, переміщення робочих навантажень на
інші вузли або інші заходи.
Для запобігання або зменшення впливу відмов в системи можуть бути
введені заходи безпеки, такі як резервне копіювання даних, використання
резервних серверів, обмеження доступу до критичних ресурсів тощо.
Підвищення надійності системи може включати в себе дублювання
апаратного забезпечення, впровадження механізмів терпимості до відмов
(fault tolerance), створення резервних копій та інші стратегії.
54
Важливо розуміти, що відмови можуть виникати в будь-якій системі, і
реакція на них є важливою частиною проектування та управління
розподіленими системами.
При виборі системи для планування задач важливо враховувати обсяги
даних, потужність та вимоги щодо швидкодії, доступність і безпеку даних, а
також рівень досвіду вашої команди у роботі з певними технологіями.
Apache Kafka - це потужна та широко використовувана система
обробки та потокового аналізу даних в розподілених системах. Вибір Kafka
для системи планування задач у розподілених системах може бути
виправданим з декількох причин.
Kafka була спеціально розроблена для обробки великого обсягу
потокових даних та володіє високою пропускною здатністю. Це робить її
ідеальним вибором для систем, які потребують обробки великої кількості
завдань.
Kafka легко масштабується горизонтально, дозволяючи додавати нові
вузли та ресурси для обробки додаткових завдань. Це важливо для систем зі
зростаючими потребами.
Також дана платформа надає гарантовану доставку повідомлень, що
важливо для систем, де важливо не втратити жодне завдання. Kafka зберігає
дані на певний час, що може бути корисним для аналізу та відновлення
завдань в разі відмови.
Kafka підтримує багато споживачів (клієнти), які можуть обробляти
дані з різних джерел та виробників (постачальники), які можуть надсилати
дані в систему. Це робить її гнучкою для різних сценаріїв використання.
Загалом, Apache Kafka є потужним інструментом для обробки та
розподілення даних, і вона може бути корисною для систем планування задач
у розподілених середовищах, де обробка потокових даних та забезпечення
надійності є важливими факторами.
Використання Apache Kafka у PHP може бути досяжним завдяки
спеціалізованим клієнтам або бібліотекам, які надають інтерфейс для
55
взаємодії з Kafka з PHP-додатками. Для роботи з Apache Kafka у PHP
проектах існують різні пакети та бібліотеки. Один з популярних пакетів для
цієї мети - це "php-rdkafka" (або "librdkafka PHP extension"). Цей пакет надає
PHP-реалізацію клієнта для Kafka, який є високопродуктивним і має багатий
набір функцій для роботи з Kafka.
"Php-rdkafka" базується на бібліотеці librdkafka, яка є надзвичайно
продуктивною і оптимізованою для роботи з Kafka [23]. Це дозволяє
оптимально використовувати ресурси та обробляти великий потік
повідомлень.
Цей пакет надає розширений набір функцій для виробників
(постачальників) і споживачів (клієнтів) Kafka. Розробник можете
відправляти повідомлення до Kafka, споживати повідомлення з тем Kafka,
керувати розподіленням повідомлень тощо.
Однак при виборі пакету для роботи з Kafka важливо також
враховувати конкретні потреби та вимоги проекту. Існують інші
альтернативи, такі як "phpkafka" та інші бібліотеки, які можуть бути придатні
для певних сценаріїв використання.
Вибір технологій для розробки клієнтського інтерфейсу важливий для
створення зручних та ефективних веб-та мобільних додатків. Обгрунтування
вибору HTML для розробки клієнтського веб-додатку може включати ряд
факторів та переваг, які роблять HTML однією з ключових технологій для
розробки веб-інтерфейсу.
HTML (HyperText Markup Language) - це основна мова, яку
використовують для створення веб-сторінок. Вона є стандартом для веб-
розробки і загальнодоступною технологією, яку розуміє більшість
розробників. Вибір HTML дозволяє створювати веб-додатки, які можуть бути
доступні широкій аудиторії.
HTML дозволяє створювати статичну та динамічну структуру сторінки,
а браузер відповідає за рендеринг і відображення. Це дозволяє швидко
відтворювати вміст на різних пристроях та платформах.
56
HTML є універсальною мовою, яку підтримують всі сучасні веб-
браузери, такі як Chrome, Firefox, Safari, Edge та інші. Це забезпечує
спрощену розробку і підтримку в різних середовищах. Зазначені аргументи
свідчать про переваги використання HTML для створення клієнтського веб-
додатку.
Можливість запуску системи на shared hosting - це важливий аспект для
багатьох проектів, особливо якщо плануєттся розгортати веб-додаток або
веб-сайт. Shared Hosting є популярним вибором для невеликих і середніх
проектів через свою відносну доступність та простоту використання.
Shared Hosting зазвичай коштує менше, ніж власний сервер або
віртуальний приватний сервер (VPS). Це робить його привабливим вибором
для невеликих підприємств, стартапів і особистих проектів, де бюджет є
обмеженим.
Даний тих хостингу зазвичай поставляється з готовими рішеннями для
розгортання веб-додатків, такими як панелі керування, автоматичні
інсталятори, підтримка баз даних і інші зручні інструменти. Це робить
розгортання системи на shared hosting відносно простим завданням.
Багато shared hosting-постачальників надають базовий рівень безпеки
та обслуговування сервера. Вони можуть надавати патчі для оновлення
серверного програмного забезпечення та вести моніторинг безпеки.
Загалом, вибір shared hosting може бути важливим для невеликих
проектів та тих, хто шукає бюджетне рішення. Важливо аналізувати ваші
потреби, обмеження та можливості shared hosting, щоб визначити, чи це
відповідає вашим вимогам.
2.3 Висновки до розділу 2
У процесі огляду існуючих технологій для розробки системи
планування задач у розподілених системах були розглянуті різні мови
програмування, бази даних та інші технології, які можуть бути використані
57
для різних аспектів розробки та експлуатації таких систем. Було охоплено
мови програмування, такі як Java, Python, JavaScript та PHP, які
використовуються для написання програмного коду різних компонентів
системи. Бази даних, такі як PostgreSQL, MongoDB та MySQL, які служать
для збереження та обробки даних в системі. Технології обробки даних та
аналізу, зокрема Apache Hadoop і Apache Spark, які можуть допомогти в
роботі з великими обсягами даних та виконанні складних обчислень.
Системи оркестрації контейнерів, такі як Kubernetes і Apache Mesos, для
ефективного управління ресурсами та масштабування системи. Системи
обміну повідомленнями, які допомагають взаємодіяти між компонентами
системи, такі як RabbitMQ і Apache Kafka.
Обираючи конкретні технології для розробки системи планування
задач у розподілених системах, важливо було враховувати конкретні потреби
та вимоги поставленого завдання.
58
РОЗДІЛ 3 АНАЛІЗ ТА ОПТИМІЗАЦІЯ АЛГОРИТМІВ ПЛАНУВАННЯ
ЗАДАЧ У РОЗПОДІЛЕНИХ СИСТЕМАХ
3.1 Структура системи
Тема даної кваліфікаційної роботи є дуже важливою в сучасному
інформаційному світі, оскільки вона впливає на ефективність та надійність
роботи розподілених систем, які використовуються в різних галузях,
включаючи обчислення в хмарному середовищі, мережі передачі даних,
банківські системи, медичні інформаційні системи та багато інших.
У розподілених системах задачі можуть бути розділені між багатьма
обчислювальними ресурсами, і оптимальне планування цих задач може
суттєво підвищити швидкість виконання і знизити витрати ресурсів.
Планування задач також впливає на надійність розподілених систем.
Якщо задачі розподілені неоптимально, це може спричинити перевантаження
деяких ресурсів і збільшити ризик збоїв та відмов.
Аналіз і оптимізація алгоритмів планування дозволяють забезпечити
максимальне використання доступних ресурсів. Це особливо важливо в
умовах зростаючої комплексності розподілених систем та обмежених
обчислювальних ресурсів.
Вивчення та оптимізація алгоритмів планування допомагає знизити
витрати на обчислення та ресурси, оскільки вони дозволяють вибрати більш
ефективні стратегії розподілу завдань.
Розподілені системи повинні бути готові адаптуватися до змінних умов
та вимог. Вивчення алгоритмів планування дозволяє розробити адаптивні
стратегії, які можуть автоматично переключатися між ресурсами та задачами
в залежності від ситуації.
В цілому, оптимізація алгоритмів планування задач важлива для
підвищення продуктивності, надійності та витрат ефективності таких систем.
59
Вона відіграє ключову роль в розвитку та вдосконаленні сучасних технологій
і вирішенні складних завдань у багатьох галузях.
У рамках даної кваліфікаційної роботи була розроблена система для
відправки email листів. Система призначена для автоматизованої масової
комунікації та розповсюдження інформації через email. Однією з ключових
особливостей цієї системи є можливість завантаження інформації з файлів у
форматі CSV, що дозволяє зручно та ефективно вказувати адреси
електронної пошти отримувачів, теми листа, текст повідомлення та інші
додаткові дані, необхідні для відправки email листів.
Система також надає можливість управління інформацією про листи,
включаючи створення, збереження та редагування даних про листи.
Важливою функцією є автоматична відправка email листів за вказаними
адресами зі списку та іншими параметрами, такими як тема листа, текст
повідомлення та вкладення.
Розроблена система використовує алгоритм планування задач у
розподілених системах, і це досягається завдяки використанню Apache Kafka.
Kafka - це потужна система обробки потокових даних, яка може бути
використана для розподіленого обробки завдань та подій в реальному часі.
Використання Kafka дозволяє досягти ефективного розподілення та
планування завдань в контексті розподілених систем.
Алгоритм планування задач використовує Kafka для створення черги
завдань та подій, які повинні бути оброблені системою. Коли завдання
надходить до черги, система може автоматично визначити, яким інстансам
або працівникам в системі слід обробити це завдання, забезпечуючи
розпаралелення та оптимальний розподіл навантаження.
Кожен інстанс системи, який підписаний на споживання подій з Kafka,
може взяти завдання з черги та обробити його. Це дозволяє розподіленому
обчисленню обробляти багато завдань одночасно, забезпечуючи швидку та
ефективну роботу системи.
60
З використанням Kafka для планування завдань у розподілених
системах можливе відстеження прогресу завдань, моніторинг їх стану та
виконання, а також автоматизація обробки помилок та відновлення завдань у
разі збоїв.
У цілому, використання алгоритму планування задач з використанням
Apache Kafka дозволяє забезпечити ефективну та масштабовану роботу
системи в розподіленому середовищі, зменшуючи навантаження на окремі
компоненти та забезпечуючи оптимальне використання ресурсів. Структура
розробленого програмного забезпечення зображена на рисунку 3.1.
Рисунок 3.1. - Структура розробленого програмного забезпечення
Розроблене програмне забезпечення побудоване на базі мікросервісної
архітектури, що є сучасним підходом до створення розподілених систем.
Мікросервісна архітектура полягає в розбитті програмного застосування на
невеликі незалежні компоненти, які називаються мікросервісами. Кожен
мікросервіс відповідає за виконання певної функціональності або послуги та
може працювати незалежно від інших мікросервісів.
61
Використання мікросервісної архітектури дозволяє створювати гнучкі
та скальовані системи, які можуть ефективно вирішувати різноманітні
завдання та забезпечувати високу доступність та продуктивність.
Кожен мікросервіс розробленої системи має в собі програмні модулі,
які виконують різні дії та функціональні завдання. Перший мікросервіс
розробленої системи включає в себе кілька ключових модулів, які
відповідають за різні аспекти обробки даних та завдань. Нижче подано
список цих модулей:
1. Модуль отримання та парсингу CSV файлу. Цей модуль відповідає за
отримання CSV файлу з вказаного джерела, будь то локальний файл
або вхідні дані через мережу. Він також включає в себе логіку парсингу
цього файлу для виділення важливих даних, таких як адреси
електронної пошти отримувачів, теми листів, текст повідомлення та
інші важливі поля;
2. Модуль збереження завдань в базу даних. Після парсингу CSV файлу,
цей модуль відповідає за збереження отриманих завдань в базу даних.
Це може включати в себе створення таблиць або колекцій для
зберігання даних про листи та інформації про них;
3. Модуль створення завдань. Цей модуль відповідає за створення
конкретних завдань для відправки email листів. Він може
використовувати інформацію, отриману під час парсингу CSV файлу та
збережену в базі даних, для формування окремих завдань для кожного
листа. Ці завдання можуть включати в себе інформацію про
отримувача, тему листа, текст повідомлення та інші додаткові дані,
необхідні для відправки.
У результаті взаємодії цих модулів перший мікросервіс відповідає за
імпорт, обробку та підготовку даних для подальшої відправки email листів.
Отримані завдання зберігаються в базі даних та готуються для подальшої
обробки в інших частинах системи.
62
Другий мікросервіс розробленої системи включає в себе ряд важливих
модулів, які відповідають за різні аспекти обробки завдань та роботу з email
листами. Нижче надано інформацію про модулі даного мікросервіса:
1. Модуль отримання завдання. Цей модуль відповідає за отримання
завдань з черги, які були створені першим мікросервісом. Він він
використовує Kafka-клієнт для отримання нових завдань;
2. Модуль відправки email повідомлення. Один із ключових модулів
цього мікросервісу, який відповідає за відправку email листів. Він
використовує отримані завдання для створення та відправки листів на
вказані адреси з вказаною темою та текстом повідомлення;
3. Модуль аналітики. Цей модуль може включати в себе інструменти для
моніторингу та аналізу відправлених листів. Він збирає інформацію
про відправку, стан листів, доставку та інші метрики, що дозволяють
виконати аналіз результатів та відслідкувати продуктивність системи.
Взаємодія цих модулів у другому мікросервісі дозволяє системі
ефективно відправляти email листи на вказані адреси та надавати звіти та
аналітику про результати відправки. Цей мікросервіс відповідає за фактичну
відправку листів та слідкування за ними, а також за збір та обробку важливих
даних для подальшого аналізу та звітування.
Важливо ретельно розглянути всі модулі системи, оскільки кожен з них
відіграє важливу роль у функціонуванні та продуктивності системи в цілому.
Детальний огляд модулів допомагає виявити потенційні проблеми,
оптимізувати роботу системи та забезпечити її ефективність.
Модуль отримання та парсингу CSV файлів є важливою частиною
першого мікросервісу в розробленій системі. Цей модуль відповідає за
взаємодію з користувачем та обробку CSV файлів, які містять інформацію
про email листи та інші деталі.
CSV (Comma-Separated Values) - це текстовий формат для зберігання та
обміну даними у вигляді табличного спрощеного тексту. У CSV дані
представлені у вигляді таблиці, де кожен рядок представляє один запис, а
63
кожен стовпець містить певний тип інформації. Значення в межах кожного
рядка розділені роздільниками, зазвичай це кома (,), але можуть
використовуватися інші роздільники, такі як крапка з комою (;), табуляція
(\t), пробіл та інші [24].
Модуль надає користувачам зручний інтерфейс для взаємодії з
системою. Інтерфейс є клієнтською веб-сторінкою, яка дозволяє
завантажувати CSV файли з комп'ютера чи з інших джерел.
Після того як користувач завантажив CSV файл, модуль відповідає за
обробку цього файлу. Він перевіряє файл на наявність необхідних полів,
таких як адреси електронної пошти отримувачів, теми листа, тексту
повідомлення та інших додаткових даних.
Модуль виконує парсинг CSV файлу, розбираючи його на окремі рядки
та стовпці. Він виділяє інформацію з кожного рядка та зберігає її у
відповідних форматах, що можуть бути використані для створення завдань
для відправки листів.
Цей модуль грає важливу роль в створенні завдань для відправки email
листів, оскільки він дозволяє користувачам зручно завантажувати та
обробляти дані для масової розсилки листів через систему. Така
функціональність дозволяє впроваджувати розподілену роботу з даними та
виконувати завдання масової комунікації в ефективний та зручний спосіб.
Модуль збереження завдань в базу даних MySQL є ключовою
частиною першого мікросервісу системи, яка відповідає за імпорт, обробку
та збереження даних, отриманих з CSV файлів.
Спочатку модуль встановлює з'єднання з базою даних MySQL. Це
включає в себе визначення параметрів підключення, таких як адреса сервера,
ім'я користувача, пароль та ім'я бази даних.
Далі, модуль зберігає отримані завдання в базі даних MySQL,
вставляючи їх у відповідну таблицю. Це включає в себе валідацію та
перевірку даних перед збереженням.
64
Збереження даних повинно бути реалізовано з використанням
транзакцій, які гарантують цілісність даних та відмовостійкість операцій. У
разі помилок або виникнення виключень, транзакції можуть бути відкриті
або скасовані для уникнення дублювання або втрати даних.
Даний модуль є важливою частиною системи, оскільки забезпечує
збереження даних, необхідних для створення завдань для відправки email
листів. Інформація, яку він зберігає, слугує як основа для подальших дій
другого мікросервісу, який відповідає за фактичну відправку листів.
Модуль створення завдань і їхньої публікації в Apache Kafka є
важливою частиною першого мікросервісу системи, яка відповідає за імпорт,
обробку та підготовку даних для подальшої відправки email листів.
Даний модуль використовує інформацію, отриману з CSV файлів та
збережену в базі даних, для формування конкретних завдань для відправки
email листів. Кожне завдання включає інформацію про отримувача, тему
листа, текст повідомлення та інші додаткові дані, які необхідні для відправки.
Після створення завдань, модуль готує їх для публікації в Apache
Kafka. Це включає в себе форматування даних в спеціальному форматі, який
дозволяє їхню відправку через Kafka. Кожне завдання може бути
представлене у вигляді повідомлення з ключем і значенням.
Модуль використовує Kafka Producer API для публікації підготовлених
завдань у відповідну тему або чергу Apache Kafka. Це дозволяє
розпаралелити відправку завдань та обробку даних між різними інстансами
системи та забезпечити горизонтальне масштабування.
Модуль створення завдань та їхньої публікації в Apache Kafka відіграє
ключову роль в системі, оскільки він дозволяє розподілено публікувати
завдання для відправки email листів та ефективно керувати процесом
обробки даних. Використання Apache Kafka допомагає забезпечити надійну
та масштабовану роботу системи.
65
Модуль отримання завдань - це важлива складова другого мікросервісу
системи, яка відповідає за приймання завдань для відправки email листів і їх
подальшу обробку.
Модуль встановлює з'єднання з Apache Kafka, споживаючи
повідомлення із відповідної теми або черги. З'єднання з Apache Kafka
дозволяє модулю слідкувати за новими завданнями, які були опубліковані
першим мікросервісом.
Далі модуль отримує завдання з Apache Kafka і розпочинає їх обробку.
Кожне завдання може бути представлене у вигляді повідомлення, що містить
інформацію про адресу електронної пошти отримувача, тему листа, текст
повідомлення та інші додаткові дані.
Модуль отримання завдань відіграє ключову роль в системі, оскільки
він відповідає за фактичну обробку завдань та відправку email листів.
Використання Apache Kafka допомагає забезпечити надійну та масштабовану
роботу системи, дозволяючи розпаралелити обробку завдань та зберігати
стан процесу.
Після отримання повідомлення про завдання, модуль відправки email
повідомлень починає свою роботу. Модуль відправки email повідомлень є
ключовою частиною другого мікросервісу системи і відповідає за відправку
створених завдань у формі email листів. Даний модуль використовує сервіс
Mailgun для забезпечення надійної та ефективної доставки листів.
Mailgun - це сервіс, який надає інфраструктуру та інструменти для
відправки та прийому email повідомлень через програмний інтерфейс (API).
Mailgun дозволяє розробникам легко і надійно інтегрувати функціональність
відправки та отримання email-повідомлень у свої програми та системи.
Модуль встановлює з'єднання з сервісом Mailgun, використовуючи
API-ключі та налаштування, необхідні для відправки email листів. Це
включає в себе налаштування параметрів, таких як домен, використовуваний
для відправки, та інші налаштування безпеки.
66
Далі, модуль бере дані з отриманих завдань та генерує відповідні email
листи, включаючи адресу отримувача, тему листа, текст повідомлення та
інші необхідні деталі. Після генерації листа, модуль відправляє його через
API сервісу Mailgun для надійної доставки.
Також, модуль включає в себе логіку для обробки відповідей від
сервісу Mailgun та відстеження стану доставки. Він обробляє інформацію про
успішну або невдалим відправку, а також обробляє помилки, які виникають
під час доставки.
Модуль відправки email повідомлень з інтеграцією з сервісом Mailgun
відіграє критичну роль в системі, оскільки забезпечує надійну і швидку
доставку листів отримувачам. Інтеграція з такими сервісами допомагає
забезпечити високий рівень доставки та контроль над відправленими
повідомленнями.
Модуль аналітики - це важлива складова системи, яка відповідає за збір
та аналіз інформації про відправку email листів та взаємодію з отримувачами.
Ваша система використовує сервіс Mixpanel для збереження та аналізу даних.
Mixpanel - це аналітична платформа, призначена для відстеження та
аналізу користувацької взаємодії з веб-сайтами та мобільними додатками.
Вона надає інструменти для збору та аналізу даних, які дозволяють
підприємствам та розробникам зрозуміти, як користувачі взаємодіють з
їхніми продуктами, визначити, як поліпшити користувацький досвід та
оптимізувати бізнес-процеси.
Модуль аналітики здійснює збір різноманітних даних про відправку
email листів і реакцію отримувачів на них. Це включає в себе інформацію про
час відправки, адреси отримувачів, теми листів, кількість відкритих листів,
кількість натиснень на посилання та інші метрики.
Система інтегрована з сервісом Mixpanel, який надає потужний
інструментарій для збереження та аналізу даних. Дані, зібрані модулем
аналітики, передаються в Mixpanel для подальшого аналізу та візуалізації.
67
Модуль аналітики є важливою складовою системи, оскільки допомагає
отримувати цінну інформацію про результати відправки листів та взаємодію
з отримувачами. Використання сервісу Mixpanel дозволяє ефективно
аналізувати та вдосконалювати комунікацію з вашою аудиторією.
Розроблена архітектура робить систему ефективною та
масштабованою, дозволяючи обробляти великий обсяг завдань та надсилати
email листи з високою надійністю та з можливістю відстеження результатів
відправки.
3.2 Опис функцій системи
Розроблена система дозволяє автоматизувати процес відправки email
листів, що значно економить час компаній та ресурси. Вона може обробляти
великі обсяги листів та завдань, які було б важко відправити вручну.
Система допомагає уникнути помилок, які можуть виникнути при
ручній відправці листів. Вона забезпечує надійну та послідовну доставку
листів до отримувачів.
Розроблене програмне забезпечення використовує Apache Kafka для
розподілення завдань між інстансами, що дозволяє ефективно
використовувати ресурси та розподіляти навантаження.
Загалом, створення такої системи допомагає підприємствам та
організаціям здійснювати ефективну комунікацію з клієнтами та
користувачами через email, забезпечуючи високу надійність та ефективність
процесу відправки листів.
Розробка масштабованої системи була важливою завдяки кільком
причинам. По-перше, обсяги даних та завдань, пов'язаних з відправкою email
листів, можуть значно зростати, і масштабування дозволяє ефективно
керувати збільшеними навантаженнями. По-друге, це забезпечує гнучкість та
адаптивність системи, дозволяючи реагувати на зміни потреб та обсягу
роботи. Третій аспект - надійність та доступність. Масштабована система
68
може бути побудована з урахуванням резервних можливостей та
горизонтального масштабування, що забезпечує високу надійність та
доступність сервісу. Додатково, така система підтримує зростаючу аудиторію
та оптимізує використання ресурсів.
Для отримання файлу з даними від адміністратора була розроблена веб-
сторінка, яка слугує інтерфейсом між користувачем і системою. Ця веб-
сторінка надає користувачам зручний та інтуїтивно зрозумілий спосіб
взаємодії з системою для отримання необхідних даних, інтерфейс
розробленої системи зображений на рисунку 3.2.
Рисунок 3.2. - Інтерфейс розробленої системи
Розроблена система має дуже простий та обмежений інтерфейс,
складається лише з одної веб-сторінки. На цій сторінці користувач може
виконувати лише одну операцію - завантажити файл. Інші функції та
можливості обмежені або відсутні.
Ця мінімалістична веб-сторінка спрощує взаємодію користувача з
системою, забезпечуючи швидкий та простий спосіб отримання файлу з
69
даними. Користувачу не потрібно займатися складними налаштуваннями або
вибором опцій, оскільки є лише один можливий варіант - завантажити файл.
Ця простота може бути корисною в ситуаціях, коли користувачам потрібен
швидкий та безпечний доступ до конкретних даних без зайвих операцій чи
складних налаштувань.
Система, отримавши CSV файл з даними, ініціює процес відправки
email листів клієнтам, які зазначені у цьому файлі. Першим кроком є
завантаження CSV файлу на веб-сторінці або через інтерфейс системи.
Система аналізує структуру CSV файлу та витягує необхідні дані, такі
як адреси електронної пошти отримувачів, теми листів, текст повідомлення
та інші важливі деталі.
Обираючи формат CSV (Comma-Separated Values) для імпорту та
обробки даних у системі, було враховано декілька важливих плюсів цього
формату. CSV - це дуже простий текстовий формат, де дані розділяються
комами чи іншими символами. Цей формат є загальноприйнятим і
підтримується багатьма програмами та мовами програмування, що дозволяє
легко імпортувати та обробляти дані.
CSV файли можуть бути створені та редаговані в текстових редакторах
або програмах для електронних таблиць, які зручно використовувати
користувачам для підготовки та редагування даних.
Перш ніж відправити листи, система виконує валідацію даних, щоб
переконатися, що вони відповідають необхідним критеріям (наприклад,
правильний формат адреси електронної пошти).
Система генерує email повідомлення для кожного отримувача на основі
даних з CSV файлу. Вона додає тему листа, текст повідомлення та інші
додаткові дані. Після підготовки система відправляє листи на вказані адреси
електронної пошти.
Цей процес дозволяє ефективно та автоматично відправляти email
листи без необхідності вручної обробки кожного листа окремо. Він може
бути корисним для маркетингових кампаній, сповіщень користувачів та
70
інших випадків, коли потрібно взаємодіяти з великою кількістю клієнтів чи
отримувачів через email.
У файлі з даними для кожного email вказано не лише адресу
отримувача, але й дату відправки. Ця дата визначає, коли повинен бути
відправлений лист. Для забезпечення відправки листів в потрібний час
система використовує cron (Cron Job) - програму для планування запуску
завдань на UNIX-подібних операційних системах.
Cron - це стандартна утиліта у багатьох операційних системах, зокрема
в UNIX-подібних системах, яка використовується для планування та
автоматизації виконання завдань у певний час або інтервал часу. Назва "cron"
походить від грецького слова "chronos," що означає "час," і відображає
основну функцію цієї утиліти - виконання завдань у визначений часовий
момент або з певною періодичністю.
Cron дозволяє користувачам створювати розклад виконання завдань,
вказуючи дату та час, коли ці завдання повинні бути виконані. Наприклад,
можна налаштувати завдання на виконання щогодини, кожного дня, або в
певний день тижня тощо.
Cron дуже корисний для автоматизації різних рутинних завдань,
планування резервного копіювання даних, відправки сповіщень, системних
обслуговувань і багатьох інших сценаріїв.
Після того, як настав визначений час відправки email листа, система
створює задачу і додає її до черги Apache Kafka. Ця черга служить для
збереження та розподілу завдань між різними компонентами системи. Після
додавання завдання до черги, вільний інстанс (екземпляр) системи, який
призначений для виконання цього типу завдань, починає обробку цієї події.
Такий підхід дозволяє досягти паралельності в обробці завдань та
розподілити навантаження між різними інстансами системи. Кожен інстанс
може відстежувати чергу Kafka і виконувати завдання відповідно до їхнього
розкладу та часу відправки. Це робить процес відправки email листів більш
71
ефективним та швидким, а також забезпечує більшу паралельність та
масштабованість системи.
Після отримання події та задачі з черги Apache Kafka, система ініціює
процес відправки email листа через сервіс, такий як Mailgun. Mailgun - це
зовнішній сервіс для відправки email повідомлень, який дозволяє легко та
надійно відправляти листи через програмні інтерфейси.
Процес відправки email може виглядати наступним чином:
1. Система підготовлює email лист, включаючи адресу отримувача, тему
листа, текст повідомлення та, можливо, додаткові дані чи
прикріплення;
2. Система використовує API сервісу Mailgun для відправки листа. Вона
передає всі необхідні дані, такі як адресу отримувача та вміст листа,
через цей API;
3. Після відправки листа, система може отримати відповідь від Mailgun,
яка містить інформацію про статус відправки (успішно чи невдача). Ця
інформація може бути використана для відстеження статусу кожного
листа та ведення журналу відправок;
4. В залежності від результату відправки, система може генерувати
повідомлення для користувачів або адміністраторів. Наприклад,
повідомлення про успішну відправку або сповіщення про невдачу.
Цей процес дозволяє системі надійно та ефективно відправляти email
листи за допомогою зовнішнього сервісу, забезпечуючи швидкість та
надійність відправки.
Уся інформація про статус відправки email листів, включаючи дані про
успішну або невдачу відправки, зберігається та відстежується в системі
аналітики Mixpanel. Mixpanel - це аналітична платформа, яка дозволяє
стежити за різними діями та подіями у програмі або системі, а також
аналізувати ці дані для прийняття рішень та вдосконалення
функціональності.
72
3.3 Забезпечення захисту інформації при роботі з створеною
системою
Термін "інформаційна безпека" вказує на заходи, процедури і стратегії,
спрямовані на забезпечення конфіденційності, цілісності і доступності
інформації. Інформаційна безпека включає в себе захист від
несанкціонованого доступу, розповсюдження та зміни інформації, а також
заходи з протидії загрозам, таким як хакерські атаки, віруси, шпигунське
програмне забезпечення та інші форми кіберзлочинності. Інформаційна
безпека є важливою в сучасному цифровому світі, де інформація вважається
однією з найцінніших активів для багатьох організацій і особистостей.
Існує кілька стратегій та підходів до забезпечення безпеки інформації,
які можуть бути використані організаціями та особами.
Політики і процедури - це розроблення і впровадження політик і
процедур для збереження інформаційної безпеки. Це включає в себе
визначення правил доступу до інформації, процедур аутентифікації та
авторизації, регулярну оцінку ризиків і інші підходи до управління безпекою.
Фізичний захист - це захист фізичного доступу до інформації шляхом
обмеження доступу до серверних приміщень, дата-центрів та інших фізичних
активів, які зберігають інформацію.
Криптографічний захист - це використання шифрування для захисту
конфіденційності даних під час зберігання і передачі. Шифрування
допомагає унеможливити несанкціонованим особам отримати доступ до
читання чи редагування інформації.
Захист мережі - використання заходів безпеки мережі, таких як
брандмауери, інтрузійна детекція та інші технології, для виявлення та
запобігання кіберзлочинності та несанкціонованому доступу до мережі.
Захист даних - регулярне створення резервних копій даних і
забезпечення їх безпеки від несанкціонованого доступу і втрати. Це включає
в себе засоби для відновлення даних після інцидентів.
73
Освіта та навчання - навчання персоналу та користувачів щодо правил
інформаційної безпеки, відсіювання соціальної інженерії та інших атак на
людину.
Моніторинг і виявлення загроз - це постійний моніторинг систем і
мережі для виявлення можливих загроз і вчасного реагування на них.
Управління ризиками - це оцінка ризиків та розробка планів для
зменшення ризиків інформаційної безпеки. Це включає в себе стратегії для
управління кіберзагрозами та іншими потенційними небезпеками.
Вищенаведені стратегії можуть бути використані окремо або в
поєднанні для забезпечення ефективного захисту інформації в організаціях та
особистих системах.
Basic Authentication - це простий метод автентифікації в системі, який
передбачає введення ідентифікатора користувача (логіну) та паролю для
доступу до системи або ресурсів. Цей метод базується на передачі інформації
в заголовку запиту HTTP через кодування Base64. Використовуючи Basic
Authentication, користувач має представити свій логін та пароль для
отримання доступу до ресурсу або системи.
Base64 - це спосіб кодування бінарних даних в текстовий формат, який
використовується для збереження та передачі даних через текстові
протоколи, такі як HTTP, електронну пошту та інші. Base64 перетворює
послідовності байтів у послідовності ASCII-символів, що дозволяє їм бути
безпечно включеними в текстові дані.
Basic Authentication досить простий у реалізації, але він має певні
обмеження та потенційні недоліки. Наприклад, дані, які передаються у
Base64, не шифруються, тобто вони можуть бути відновлені з легкістю, якщо
хтось отримає доступ до заголовків HTTP або трафіку мережі. Тому для
безпечного використання Basic Authentication рекомендується
використовувати HTTPS, щоб захистити дані під час передачі.
74
Також важливо враховувати, що при використанні Basic Authentication,
логін і пароль передаються з кожним запитом, тому необхідно бути особливо
обережним щодо зберігання та передачі цих даних.
Basic Authentication може бути використаний для забезпечення доступу
до різних ресурсів в розробленій системі, і важливо враховувати всі безпекові
аспекти та рекомендації при його використанні.
Для забезпечення безпеки передачі файлу від клієнта до сервера часто
використовується комбінація протоколів HTTPS і SSL (Secure Sockets Layer).
HTTPS - це безпечний протокол передачі даних через Інтернет. Він
використовується для захищеної комунікації між клієнтом (наприклад, веб-
браузером) і сервером. Основна мета HTTPS - захистити конфіденційні дані,
які передаються між цими двома точками, від несанкціонованого доступу та
перехоплення.
SSL є протоколом шифрування, який допомагає забезпечити
конфіденційність та цілісність даних під час їх передачі між клієнтом і
сервером. SSL включає в себе використання криптографічних алгоритмів для
шифрування даних, що передаються між клієнтом і сервером, та для
перевірки подій даних під час передачі.
Для забезпечення передачі файлу від клієнта до сервера за допомогою
HTTPS та SSL, клієнт та сервер встановлюють зашифроване з'єднання.
Клієнт ініціює з'єднання з сервером і отримує його публічний ключ SSL-
сертифіката. Після цього клієнт шифрує файл, який він відправляє, за
допомогою публічного ключа сервера, і відправляє його на сервер.
Сервер використовує свій приватний ключ (який він зберігає в секреті)
для розшифрування файлу, який отримує, та зберігає його на стороні сервера.
Таким чином, навіть якщо дані були перехоплені під час передачі, вони
залишаються незрозумілими для зловмисників, оскільки вони були
зашифровані з використанням публічного ключа сервера та можуть бути
розшифровані лише з його приватним ключем.
75
Отже, комбінація HTTPS та SSL забезпечує надійний та безпечний
механізм передачі файлів від клієнта до сервера, гарантуючи
конфіденційність та безпеку даних під час їх переміщення через мережу.
Забезпечення безпеки серверу, на якому працює PHP, є важливою
задачею, оскільки помилки у налаштуванні та програмуванні можуть
призвести до серйозних безпекових загроз.
Потрібно підтримувати версію PHP та серверного ПЗ (наприклад,
Apache, Nginx) в актуальному стані, встановлюючи останні патчі та
оновлення. Старі версії можуть мати вразливості, які вже відомі
зловмисникам.
Також треба вимикати будь-які PHP-модулі та функції, які не
використовуються у додатку, оскільки вони можуть представляти потенційні
ризики безпеки.
Рекомендується використовувати налаштування сервера та
файли .htaccess (для Apache) для визначення, які користувачі та IP-адреси
мають доступ до розробленого сайту.
Потрібно перевіряти та валідувати всі дані, які надходять від
користувачів, перед тим як вони потрапляють у програму. Це допоможе
уникнути атак на введення даних, такі як SQL-ін'єкція і кросс-сайтовий
скриптінг.
SQL-ін'єкція (SQL Injection) - це тип атаки на веб-додатки та бази
даних, коли зловмисник використовує некоректно оброблені або невалідні
дані в запитах до бази даних, щоб вплинути на їхню роботу. Під час SQL-
ін'єкції зловмисник може виконувати небезпечні SQL-запити на базу даних,
які можуть призвести до розголошення, втрати або зміни конфіденційних
даних в базі даних.
Основна ідея SQL-ін'єкції полягає в тому, щоб вставити спеціально
сформовані рядки або символи у введення, яке потрапляє в SQL-запит. Якщо
веб-додаток не належним чином обробляє ці дані перед їх виконанням, то
76
зловмисник може вставити SQL-код в запит та змусити базу даних виконати
його.
"Кросс-сайтінг" (Cross-Site Scripting або XSS) - це тип безпекової атаки
на веб-додатки, під час якої зловмисник впроваджує в шкідливий скрипт
(зазвичай JavaScript) в веб-сторінку, яка впливає на користувачів, які
переглядають цю сторінку. Ця атака використовується для виконання
шкідливих дій на боці користувача або для крадіжки конфіденційної
інформації з їх браузера.
Щоб захистити ваші веб-додатки від атак XSS, важливо слідувати
кращим практикам безпеки, включаючи валідацію та відфільтровування
введених даних, відсилання cookie з атрибутом HttpOnly, використання
заголовків безпеки, таких як Content Security Policy (CSP), і обмеження
використання JavaScript у додатках. Також важливо регулярно тестувати на
наявність XSS-вразливостей і виправляти їх.
Mailgun - це сервіс для надсилання і отримання електронної пошти
через API, і важливо забезпечити захист інформації при відправці пошти
через нього. Ось деякі кроки та рекомендації для забезпечення безпеки при
використанні Mailgun:
1. Під час взаємодії з API Mailgun, завжди потрібно використовувати
HTTPS для шифрування даних, які передаються між додатком і
серверами Mailgun. Це допоможе уникнути перехоплення та читання
надісланих даних;
2. Необхідно використовувати доступні засоби автентифікації, такі як
API-ключі, для забезпечення безпеки вашого облікового запису на
Mailgun;
3. Також потрібно встановити обмеження доступу до API Mailgun лише
для необхідних дій та користувачів. Потрібно переконатися, щоб лише
авторизовані користувачі мали доступ до відправки пошти через ваш
обліковий запис Mailgun;
77
4. Регулярно потрібно оновлювати ваші API-ключі та зберігайте їх в
безпеці. В разі втрати або підозрілої активності, потрібно негайно
змінювати ключі.
Ці заходи допоможуть забезпечити безпеку при використанні Mailgun
для відправки пошти та уникнути можливих загроз інформації.
3.4 Технічні вимоги для роботи з системою
Системні вимоги - це характеристики та обмеження, які визначають
мінімальні технічні характеристики, необхідні для правильної та ефективної
роботи системи або програмного продукту. Вони вказують на обсяг ресурсів,
необхідних для виконання функцій та завдань системи. Системні вимоги
можуть включати наступні аспекти:
1. Апаратне забезпечення:
a. Процесор (тип, тактова частота, кількість ядер);
b. Оперативна пам'ять (RAM);
c. Обсяг вільного місця на диску (для зберігання даних та файлів);
d. Відеокарта (якщо програма вимагає відображення графіки);
e. Мережева карта (якщо система вимагає мережевого з'єднання).
2. Операційна система:
a. Сумісність з конкретними версіями операційних систем
(наприклад, Windows, macOS, Linux).
3. Версії залежних компонентів:
a. Наявність та версії необхідних залежностей, таких як СУБД, веб-
сервери, бібліотеки та інше програмне забезпечення.
4. Мережеві вимоги:
a. Мережеві параметри, які можуть включати необхідність
мережевого з'єднання, швидкість передачі даних, типи
протоколів тощо.
5. Системні налаштування:
78
a. Наявність певних системних налаштувань або параметрів,
необхідних для коректної роботи системи.
6. Браузери та платформи:
a. Підтримка конкретних веб-браузерів або мобільних платформ
для веб-додатків.
7. Доступ до інтернету:
a. Наявність з'єднання з Інтернетом для систем, які вимагають
онлайн-сервіси або оновлення.
8. Параметри безпеки:
a. Вимоги до антивірусного програмного забезпечення, заходи
безпеки та дозволи доступу до файлів і ресурсів.
Системні вимоги можуть бути виражені в мінімальних та
рекомендованих апаратних характеристиках. Мінімальні вимоги вказують на
найнижчий припустимий рівень апаратних ресурсів для запуску системи, в
той час як рекомендації показують оптимальні характеристики для кращої
продуктивності.
Системні вимоги важливі для користувачів і розробників, оскільки
вони дозволяють визначити, чи можуть їхні комп'ютери чи пристрої
виконувати програму чи систему без перебоїв. Вони також допомагають
розробникам оптимізувати програмне забезпечення для роботи на різних
конфігураціях апаратного забезпечення.
Мінімальні системні вимоги для розробленої системи є наступними:
1. Апаратне забезпечення:
a. Процесор: Двоядерний процесор з тактовою частотою 2.0 ГГц
або еквівалентний;
b. Оперативна пам'ять: 4 ГБ RAM;
c. Доступ до інтернету для оновлень та завантажень.
2. Операційна система:
79
a. Одна з наступних операційних систем: Windows 7 або новіша,
macOS 10.12 або новіша, або будь-яка популярна дистрибуція
Linux.
3. Завдання сервера:
a. Можливість встановлення та налаштування веб-сервера
(наприклад, Apache або Nginx) для розгортання веб-інтерфейсу.
4. База даних:
a. СУБД MySQL.
5. PHP:
a. Мова програмування PHP 7.0 або новіша з встановленими
необхідними розширеннями (наприклад, PDO для роботи з базою
даних).
6. Мінімальний обсяг вільного місця на диску:
a. 1 ГБ вільного місця на диску для системних файлів та даних.
7. Мережеві вимоги:
a. Інтернет-з'єднання для отримання оновлень та доступу до
онлайн-ресурсів.
Ці мінімальні системні вимоги розраховані на запуск та роботу системи
з базовим функціоналом. Важливо враховувати, що для більш інтенсивних
завдань та оптимізації можуть знадобитися більш потужні апаратні ресурси.
Мінімальні системні вимоги, які були визначені для розробленої
системи, відображають досить низькі технічні бар'єри для її розгортання і
запуску. Це означає, що систему можна запускати на майже будь-якому
хостингу, який надає базовий набір апаратних ресурсів та підтримує
відповідні технології.
80
3.5 Оцінка ефективності застосування алгоритмів планування
задач у розподілених системах
Головною метою розробленої системи є досягнення масової відправки
електронних листів (email повідомлень) в мінімальну кількість часу. Ця мета
може бути досягнута за допомогою ефективних алгоритмів планування та
оптимізації задач у розподіленій системі.
Першим і найважливішим критерієм ефективності є час, необхідний
для відправки масової кількості email повідомлень. Якщо система дозволяє
відправляти повідомлення швидше, ніж попередні рішення, це може
вважатися позитивним показником.
Ефективність системи також визначається її здатністю
масштабуватися. Чи може система обробляти великі обсяги повідомлень без
значного збільшення часу відправки.
Важливим аспектом є можливість системи оптимально працювати в
умовах відмов апаратного чи програмного забезпечення. Як вона реагує на
ситуації, коли один з компонентів відмовляє.
Оцінка цих критеріїв допоможе визначити, наскільки ефективно
система вирішує свою головну задачу. Результати такої оцінки можуть бути
використані для подальшого вдосконалення системи та оптимізації процесу
масової відправки email повідомлень.
Для оцінки ефективності була використана та ж сама система, однак в
цьому випадку вона була налаштована і протестована без використання
Apache Kafka. Отже, порівнюючи обидві версії системи, можна визначити, як
впливає наявність або відсутність Kafka на її ефективність та продуктивність,
в таблиці 3.1 порівняно розроблену систему з аналогічною.
Розроблена система з використанням алгоритмів на базі Apache Kafka
демонструє вражаючу різницю в продуктивності в порівнянні з аналогічною
системою без використання оптимізованих алгоритмів.
81
Таблиця 3.1. - Порівняння розробленої системи з аналогічною
З використанням Без використання
обраного алгоритму з оптимізованого
використанням Kafka алгоритму
Кількість відправлених 172 55
Email за хвилину часу
Відмовостійкість Присутня Відсутня
Використання ядер 3 1
процесору
У конкретному випадку, система, яка використовує Kafka, здатна
відправляти 172 email повідомлення, тоді як аналогічна система без
оптимізованих алгоритмів здатна відправити лише 55 повідомлень. Це
числове порівняння демонструє велику перевагу розробленої системи та
підтверджує її ефективність.
Отже, на основі цього порівняння можна зробити висновок, що
використання алгоритмів на базі Kafka значно покращує продуктивність та
ефективність системи для відправки email повідомлень. В результаті,
користувачі системи можуть бути впевнені в її здатності відправляти більше
повідомлень в мінімальний час, що важливо для багатьох сценаріїв
використання, де швидкість відправки важлива.
Також, розроблена система демонструє різницю в продуктивності, при
цьому важливим перевагою є те, що для досягнення цієї значущої
покращення продуктивності не потрібно змінювати апаратне забезпечення
або серверні ресурси. Це свідчить про високу ефективність оптимізованих
алгоритмів та їх здатність працювати на існуючому апаратному забезпеченні
без необхідності значних інвестицій у розширення серверної інфраструктури.
Це важливий показник, оскільки дозволяє зберігати витрати на
інфраструктуру на мінімальному рівні і при цьому отримувати вражаючий
приріст продуктивності. Для багатьох організацій це означає економію часу і
коштів, а також можливість швидко реагувати на збільшення обсягів завдань
82
без необхідності перегляду апаратного забезпечення. Така система може бути
особливо корисною для організацій, які володіють обмеженими бюджетами
та ресурсами, але водночас потребують високої продуктивності та швидкості
відправки email повідомлень.
3.6 Висновки до розділу 3
У результаті розгляду структури системи для планування задач у
розподілених системах та опису її функцій стало очевидним, що система має
комплексну архітектуру, що включає різноманітні компоненти, які
взаємодіють між собою для досягнення мети системи.
У зв'язку з важливістю захисту інформації, робота з системою
передбачає впровадження ефективних заходів безпеки. Це включає в себе
засоби автентифікації, авторизації, шифрування та контролю доступу до
даних та функцій системи. Забезпечення конфіденційності, цілісності та
доступності даних є найважливішим завданням при розробці системи.
Технічні вимоги для роботи з системою включають в себе необхідність
використання певних мов програмування, баз даних та інших технологій, які
були описані в попередніх розділах. Також, важливо мати апаратне
забезпечення та мережеві ресурси, які відповідають потребам системи.
Оцінка ефективності застосування системи вимагає визначення
ключових показників продуктивності та якості обслуговування, які
вимірюються в реальному часі.
Загалом, система планування задач у розподілених системах вимагає
докладного вивчення, проектування та реалізації, з урахуванням усіх
аспектів, включаючи безпеку, технічні вимоги та ефективність. Оцінка всіх
цих складових грає важливу роль у розробці та подальшому використанні
системи.
83
ВИСНОВКИ
З метою розробки системи для відправки email листів було вивчено та
проаналізовано різні аспекти високонавантажених систем, масштабування,
розподілених систем, планування задач та алгоритми планування черги.
Вивчення цих концепцій дало можливість зрозуміти важливість та вплив цих
факторів на сучасне інформаційне суспільство та розвиток нових технологій.
У результаті огляду існуючих технологій було визначено, які конкретні
мови програмування, бази даних та інші технології можуть бути використані
для розробки системи планування задач у розподілених системах. Було
вибрано оптимальні технологічні рішення для забезпечення найвищої
ефективності та безпеки системи.
Результати цієї роботи підкреслюють важливість масштабування
високонавантажених систем для забезпечення їх продуктивності та
надійності. Також виявлено, що використання паралельного обчислення та
обробки великих обсягів даних є ключовим для вирішення сучасних завдань
обчислень та аналізу даних.
Завдяки проведеному дослідженню, було встановлено, що машинне
навчання та штучний інтелект відкривають нові можливості для аналізу
даних та прийняття обґрунтованих рішень, але вимагають внесення
додаткових зусиль у впровадження та ефективне використання цих
технологій.
У зв'язку з важливістю захисту інформації, було визначено, що
розробка системи передбачає впровадження ефективних заходів безпеки,
таких як автентифікація, авторизація та шифрування, для забезпечення
конфіденційності, цілісності та доступності даних.
Враховуючи усі аспекти та вимоги, описані у роботі, було розроблено
комплексну систему для відправки email листів, яка дозволяє автоматизовано
84
взаємодіяти з великою кількістю отримувачів і впроваджує ефективні методи
комунікації та розповсюдження інформації через email.
У першому розділі розглянуто ключові аспекти високонавантажених
систем, масштабування, розподілені системи, планування задач і алгоритми
черги. Ці концепції важливі для розвитку сучасних технологій та покращення
продуктивності та надійності системи;
У другому розділі здійснений огляд існуючих технологій для системи
планування задач у розподілених системах, досліджувались різні мови
програмування, бази даних та інші технології для використання в розробці.
Також обрано конкретні технології, для розробки системи масової розсилки
листів;
У третьому розділі описується архітектура системи масової розсилки
листів, заходи безпеки, конкретні технічні вимоги та оцінки її
продуктивності.
Практична цінність результатів роботи полягає в можливості
ефективної та зручної масової комунікації через email за допомогою
розробленої системи, що може зекономити час та сприяти ефективній
комунікації для підприємств та організацій.
У разі успішного впровадження та використання цієї системи в
реальних системах компаній, вони можуть очікувати покращення
продуктивності та зниження витрат, що сприятиме їхній конкурентній
перевазі на ринку.
85
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
CSV – Comma-Separated Values (текстовий формат для збереження та
обміну табличними даними, де значення розділяються комами).
Email – Електронна пошта (система електронної комунікації).
Автоматизація – Використання програмних засобів для виконання завдань
без вмішування користувача.
Масова комунікація – Відправлення повідомлень одночасно багатьом
отримувачам.
Клієнт – Особа або організація, яка отримує email листи.
CSV-файл – Файл, який містить дані у форматі CSV.
Оптимізація – Збільшення продуктивності та ефективності системи
шляхом вдосконалення процесів.
Адреса електронної пошти – Унікальний ідентифікатор для отримувача
email листа.
HighLoad – високонавантажених система.
HTML – Hyper Text Markup Language – мова гіпертекстової розмітки.
БД – база даних.
СУБД – система управління базами даних.
ІС – інформаційна система.
SQL – Structured Query Language.
SSL/TLS сертифікат – Захист від атак та шифрування даних.
86
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. M. Kleppmann “Designing Data-Intensive Applications: The Big Ideas
Behind Reliable, Scalable, and Maintainable Systems 1st Edition”: Sebastopol
O'Reilly Media, Inc., 2017.
2. Jonathan LeBlanc "Identity and Data Security for Web Development":
O'Reilly Media, 2016. 201 p.
3. Rajkumar Buyya "Cloud Computing: Principles and Paradigms" / James
Broberg, Andrzej Goscinski. Wiley, 2011. 576 p.
4. Joseph Weinman "Grid Computing: The Savvy Manager's Guide": CRC
Press, 2012. 208 p.
5. Nathan Marz "Big Data: Principles and best practices of scalable realtime data
systems" /James Warren. Manning Publications, 2015. 328 p.
6. Tevfik Kosar "Scheduling in Distributed Computing Systems: Analysis,
Design, and Models" / Thomas Fahringer. CRC Press, 2012. 236 p.
7. Dave Rubel "Email Marketing: An Hour a Day". Wiley, 2008. 312 p.
8. Michael Devlin "Email Marketing 2019: The Ultimate Guide to Boosting
Your Email Open Rates". Independently published, 2019. 165 p.
9. Gary Vaynerchuk "Email Persuasion: Captivate and Engage Your Audience,
Build Authority and Generate More Sales With Email Marketing". Leaky
Bathtub Media, 2013. 182 p.
10.John Leide "Email Marketing: List Building and Campaigns". Wiley, 2011.
268 p.
11.Richard Lindner "Email Marketing Demystified: Build a Massive Mailing
List, Write Copy that Converts and Generate More Sales". Amazon Digital
Services, 2014. 251 p.
12.Robert Schultz "HTML and XHTML: The Definitive Guide" / James
Whitehead. O'Reilly Media, 2006. 670 p.
87
13.David Mercer "E-mail Marketing for Dummies" / Martin Smith. Wiley, 2011.
408 p.
14.Jean-Paul Ann "E-Mail Marketing: Using Email to Reach Your Target
Audience and Build Customer Relationships". Que Publishing, 2015. 312 p.
15.David L. Atkinson"Permission-Based E-mail Marketing That Works!".
Cengage Learning, 2012. 368 p.
16.Peter Coffee "Email Marketing: An Hour a Day" / Chuck Meyers. Wiley,
2008. 336 p.
17.Rajkumar Buyya "Mastering Cloud Computing: Foundations and
Applications Programming." / Christian Vecchiola, and S. Thamarai Selvi.
Morgan Kaufmann, 2013. 544 p.
18.Dror G. "Job Scheduling Strategies for Parallel Processing." / Feitelson.
Springer, 2005. 390 p.
19.Eitan Frachtenberg and Uwe Schwiegelshohn. "Job Scheduling Strategies for
High-Performance Computing." Springer, 2005. 336 p.
20.John J. Dongarra "Sourcebook of Parallel Computing." / Ian Foster, Geoffrey
C. Fox, William Gropp, Ken Kennedy, Linda Torczon, and Andy White.
Morgan Kaufmann, 2003. 950 p.
21.Paul Kinlan "Email Marketing, Mobile Accessibility, and User Experience." /
Pete LePage, Jon Avila, and Maciej Stachowiak. A Book Apart, 2021. 132 p.
22.Philip Storey. "How to Get Your First 10,000 Email Subscribers: Email
Marketing Blueprint." Leanpub, 2016. 103 p.
23.Jason Suen. "Email Marketing: The Ultimate Guide to Building an Email List
Fast." Amazon, 2016. 98 p.
24.Andrea Green, et al. "Email Marketing Demystified: Build a Massive Mailing
List, Write Copy that Converts and Generate More Sales." Amazon, 2015.
216 p.
ДОДАТОК А
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор Віра БАБЕНКО
__________________
“___” _____________ 2023р.
Аналіз та оптимізація алгоритмів планування задач у розподілених
системах
Специфікація
482.ЧДТУ.32285-01
Листів 2
Розробник _______________ Артур ОСТАПЕНКО
Керівник _______________ Віра БАБЕНКО
Черкаси 2023
2
482.ЧДТУ.32285-01
Позначення Найменування Примітка
Документація
482.ЧДТУ.32285-01 12 01 Текст програми
482.ЧДТУ.32285-01 34 01 Інструкція користувача
ДОДАТОК Б
Аналіз та оптимізація алгоритмів планування задач у розподілених
системах
Текс програми
482.ЧДТУ.32285-01 12 01
Листів 13
Розробник _______________ Артур ОСТАПЕНКО
Черкаси 2023
2
482.ЧДТУ.32285-01 12 01
<?php
namespace App\Service;
use App\Dto\Input;
use App\Entity\Email;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\OptimisticLockException;
use Symfony\Component\HttpKernel\Exception\ConflictHttpException;
class EmailService
{
protected $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @param Input\EmailDto $dto
*
* @return Email
*/
public function createEmail(Input\EmailDto $dto): Email
{
try {
$email = $this->getEmailEntity($dto);
$this->saveEmailEntity($email);
return $email;
} catch (ORMException $exception) {
throw new ConflictHttpException($exception->getMessage());
}
}
/**
* @param Input\EmailDto $dto
* @param Email $email
3
482.ЧДТУ.32285-01 12 01
*
* @return Email
*/
public function updateEmail(Input\EmailDto $dto, Email $email): Email
{
try {
$email = $this->getEmailEntity($dto, $email);
$this->saveEmailEntity($email);
return $email;
} catch (ORMException $exception) {
throw new ConflictHttpException($exception->getMessage());
}
}
/**
* @param Email $email
*
* @return Email
*/
public function deleteEmail(Email $email): Email
{
try {
$this->deleteEmailEntity($email);
return $email;
} catch (ORMException $exception) {
throw new ConflictHttpException($exception->getMessage());
}
}
/**
* @param Input\EmailDto $dto
* @param Email|null $email
*
* @return Email
*/
private function getEmailEntity(Input\EmailDto $dto, Email $email = null):
Email
{
if (!$email) {
$email = new Email();
$email->setPassword($dto->getPassword());
}
4
482.ЧДТУ.32285-01 12 01
return $this->mergeEntities($dto, $email);
}
/**
* @param Input\EmailDto $dto
* @param Email|null $email
*
* @return Email
*/
private function mergeEntities(Input\EmailDto $dto, Email $email = null):
Email
{
$email->setId($dto->getId());
$email->setName($dto->getName());
$email->setAddress($dto->getAddress());
$email->setToken($dto->getToken());
return $email;
}
/**
* @param Email $email
*
* @throws ORMException
* @throws OptimisticLockException
*/
private function saveEmailEntity(Email $email)
{
$this->entityManager->persist($email);
$this->entityManager->flush();
}
/**
* @param Email $email
*
* @throws ORMException
* @throws OptimisticLockException
*/
private function deleteEmailEntity(Email $email)
{
$this->entityManager->remove($email);
5
482.ЧДТУ.32285-01 12 01
$this->entityManager->flush();
}
}
<?php
namespace App\Repository;
use App\Entity\Email;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;
/**
* @method Email|null find($id, $lockMode = null, $lockVersion = null)
* @method Email|null findOneBy(array $criteria, array $orderBy = null)
* @method Email[] findAll()
* @method Email[] findBy(array $criteria, array $orderBy = null, $limit = null,
$offset = null)
*/
class EmailRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Email::class);
}
}
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity(repositoryClass="App\Repository\EmailRepository")
* @ORM\Table(indexes={@ORM\Index(name="email_id", columns={"id",
"mailgunId"})})
*/
6
482.ЧДТУ.32285-01 12 01
class Email
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=8, nullable=true)
*/
private $mailgunId;
/**
* @ORM\Column(type="string", length=100)
*/
private $name;
/**
* @ORM\Column(type="string", length=13, nullable=true)
*/
private $email;
/**
* @ORM\Column(type="string", length=50, nullable=true)
*/
private $token;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Request",
mappedBy="emails")
*/
private $requests;
public function __construct()
{
$this->requests = new ArrayCollection();
}
public function getId()
{
7
482.ЧДТУ.32285-01 12 01
return $this->id;
}
public function getRfid(): ?string
{
return $this->mailgunId;
}
public function setRfid(?string $mailgunId): self
{
$this->mailgunId = $mailgunId;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(?string $email): self
{
$this->email = $email;
return $this;
}
public function getToken(): ?string
{
return $this->token;
8
482.ЧДТУ.32285-01 12 01
}
public function setToken(?string $token): self
{
$this->token = $token;
return $this;
}
/**
* @return Collection|Request[]
*/
public function getRequests(): Collection
{
return $this->requests;
}
public function addRequest(Request $request): self
{
if (!$this->requests->contains($request)) {
$this->requests[] = $request;
$request->addEmail($this);
}
return $this;
}
public function removeRequest(Request $request): self
{
if ($this->requests->contains($request)) {
$this->requests->removeElement($request);
$request->removeEmail($this);
}
return $this;
}
}
<?php
namespace App\Service;
9
482.ЧДТУ.32285-01 12 01
class NotificationService
{
protected $settings;
public function __construct(array $settings)
{
$this->settings = $settings;
}
/**
* @param string $message
* @param array $tokens
* @param string $requestToken
* @param int $priority
*/
public function createNotification(string $message, array $tokens, string
$requestToken, int $priority = 0)
{
if (count($tokens) > 0) {
$request = $this->createHttpQuery($message, implode(',',
$tokens), $requestToken, $priority);
$context = $this->createContext($request);
$this->sendNotification($context);
}
}
/**
* @param $context
*/
private function sendNotification($context)
{
file_get_contents(
$this->settings['path'],
$this->settings['include'],
$context
);
}
/**
* @param string $query
*
10
482.ЧДТУ.32285-01 12 01
* @return array
*/
private function createContext(string $query)
{
$options = [
'header' => 'Content-Type: application/x-www-form-
urlencoded',
'method' => 'POST',
'content' => $query
];
return stream_context_create([
'http' => $options
]);
}
/**
* @param string $message
* @param string $token
* @param string $requestToken
* @param int $priority
*
* @return string
*/
private function createHttpQuery(string $message, string $token, string
$requestToken, int $priority)
{
$options = [
'token' => $requestToken,
'message' => $message,
'user' => $this->settings['user'],
'priority' => $priority,
'sound' => $priority == 1 ? '3' : '2',
'request' => $token
];
return http_build_query($options);
}
}
<?php
11
482.ЧДТУ.32285-01 12 01
namespace App\Command;
use Exception;
use App\Events;
use App\Entity\Action;
use App\Entity\Request;
use App\Enum\ActionEnum;
use App\Service\ActionService;
use App\Service\RequestService;
use Doctrine\ORM\ORMException;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\EventDispatcher\GenericEvent;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class OnlineCommand extends Command
{
protected $actionService;
protected $requestService;
protected $eventDispatcher;
protected static $defaultName = 'app:online';
public function __construct(
?string $name = null,
ActionService $actionService,
RequestService $requestService,
EventDispatcherInterface $eventDispatcher
) {
parent::__construct( $name );
$this->actionService = $actionService;
$this->requestService = $requestService;
$this->eventDispatcher = $eventDispatcher;
}
/**
* @param InputInterface $input
12
482.ЧДТУ.32285-01 12 01
* @param OutputInterface $output
*
* @return int|null|void
* @throws Exception
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$requests = $this->requestService->getRequestsByStatus(false);
$currentDateTime = new \DateTime();
$currentDateTime->modify('-1 minutes');
foreach ($requests as $request) {
if ($request->getUpdatedTimeStamp() >
$currentDateTime->getTimestamp()) {
$action = $this->createAction($request);
$this->toggleActionEvent($action);
$this->updateRequestStatus($request);
}
}
}
/**
* @param Request $request
*
* @return Action
* @throws Exception
*/
private function createAction(Request $request): Action
{
$action = new Action();
$action->setType(ActionEnum::EMAIL_SENT);
$action->setRequest($request);
$action->setCreated(new \DateTime());
try {
$this->actionService->saveActionEntity($action);
return $action;
} catch (ORMException $exception) {
throw new Exception('Cannot save request action');
}
}
13
482.ЧДТУ.32285-01 12 01
/**
* @param Request $request
*
* @return Request
* @throws Exception
*/
private function updateRequestStatus(Request $request): Request
{
try {
$request->setStatus(true);
$this->requestService->saveRequestEntity($request);
return $request;
} catch (ORMException $exception) {
throw new Exception('Cannot update request status');
}
}
/**
* @param Action $action
*/
private function toggleActionEvent(Action $action)
{
$this->eventDispatcher->dispatch(Events::ACTION_CREATED, new
GenericEvent($action));
}
}
ДОДАТОК В
Аналіз та оптимізація алгоритмів планування задач у розподілених
системах
Інструкція користувача
482.ЧДТУ.32285-01 34 01
Листів 4
Розробник _______________ Артур ОСТАПЕНКО
Черкаси 2023
2
482.ЧДТУ.32285-01 34 01
Інструкція користувачу системи
Інструкція користувача системи є важливим документом, оскільки вона
виконує важливі функції. Вона допомагає користувачам орієнтуватися в
системі, засвоювати принципи її роботи, та зменшує ймовірність виникнення
помилок при використанні системи.
Настройка системи для використання розробленої системи має важливе
значення з кількох причин. Перш за все, це дозволяє забезпечити оптимальну
працездатність та функціональність системи. Відповідно налаштована
система забезпечує найкращу продуктивність і ефективність роботи, що
дозволяє користувачам досягти поставлених цілей швидше і ефективніше.
Крім того, правильне налаштування системи сприяє її безпеці та
захисту. Вона дозволяє встановити необхідні заходи захисту, щоб убезпечити
систему від потенційних загроз та атак. Без цього налагодження система
може бути вразливою для різних видів кіберзлочинності.
Налаштована система забезпечує зручність користувачів. Вона
допомагає користувачам швидше та легше освоїти роботу з системою, що
впливає на їхню задоволеність та продуктивність. Правильне налаштування
також дозволяє інтегрувати систему з іншими інструментами та програмами,
що робить робочий процес більш зручним і ефективним.
Отже, налаштування системи для використання розробленої системи є
важливим кроком, який впливає на її працездатність, безпеку та зручність
користувачів.
Перш ніж почати використовувати це серверне програмне
забезпечення, потрібно переконатися, що сервер відповідає наступним
вимогам:
1. Встановлений PHP версії 7.2 або вище;
2. Встановлений веб-сервер, такий як Apache чи Nginx;
3. Встановлений Composer для управління залежностями PHP;
3
482.ЧДТУ.32285-01 34 01
4. Встановлений MySQL або інша база даних, яку ви плануєте
використовувати;
5. Встановлений Symfony Framework. Ви можете встановити його,
використовуючи Composer за допомогою команди: composer create-
project symfony/skeleton назва_проекту.
Потім потрібно завантажити програмне забезпечення на сервер. Це
може бути розпакуване архівом з кодом, який розроблений, або може бути
склоновано з Git-репозиторію.
Налаштування файлу оточення, для цього:
1. Скопіювати файл .env.dist у .env і налаштувати його параметри,
включаючи підключення до бази даних та інші параметри конфігурації;
2. Виконати міграції для створення необхідних таблиць бази даних,
використовуючи команду Symfony: php bin/console
doctrine:migrations:migrate;
3. Запустити веб-сервер, який слухатиме на порту, який було
налаштовано у .env.
Відкрити веб-браузер і перейти за адресою, де розгорнуто серверне
програмне забезпечення. Як з'явитися головна сторінка програмного
забезпечення, тоді можна буде взаємодіяти з ним відповідно до
функціональності, яку було розроблено.
Якщо з'являється помилка, потрібно перевірити журнали програмного
забезпечення та журнали сервера для отримання більш детальної інформації
про помилки. Можна включити режим відладки у Symfony для отримання
докладних повідомлень про помилки.
Забезпечте необхідні заходи захисту серверного програмного
забезпечення, включаючи обмеження доступу, аутентифікацію та
авторизацію користувачів, а також перевірку введених даних.
4
482.ЧДТУ.32285-01 34 01
Регулярно оновлюйте програмне забезпечення та всі його залежності,
щоб забезпечити безпеку та стабільність.
Виконавши всі необхідні дії, описані в інструкціях та налаштувавши
систему з урахуванням всіх рекомендацій, розроблена система готова до
ефективної та надійної роботи. Правильно налаштована система забезпечить
оптимальну працездатність, безпеку та зручність користувачів, дозволяючи
їм досягати поставлених цілей та завдань швидше та ефективніше.
Завершивши всі кроки налаштування, користувачі можуть впевнено
використовувати систему та реалізовувати її потенціал, що сприяє
досягненню бажаних результатів та успішному впровадженню системи в
робочому середовищі.