Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/8672
Title: Дослідження методів і алгоритмів контейнеризації сучасних серверних додатків на базі рішень AWS
Authors: БАБЕНКО, Віра
ТКАЧЕНКО, Ярослав
Issue Date: 2023
Abstract: Сучасна інформаційна та технологічна індустрія розвивається зі швидкістю світла, і хмарні обчислення спільно з контейнеризацією стають ключовими факторами цього розвитку. Хмарні послуги, такі як Amazon Web Services (AWS), надають унікальні можливості для розгортання та управління серверними додатками, проте для досягнення оптимальної ефективності та безпеки потрібно глибоко досліджувати методи та алгоритми контейнеризації в цьому контексті. Кваліфікаційна робота спрямована на розкриття сутності контейнеризації та її важливості в сучасному хмарному середовищі, а також на визначення оптимальних методів та алгоритмів для її реалізації на платформі AWS. Для дослідження методів і алгоритмів контейнеризації було розроблено серверне програмне забезпечення для парсингу контенту WEB-сайтів. Створення власного серверного програмного забезпечення дає можливість проводити експерименти та тести з різними методами контейнеризації. Це дозволяє краще розуміти, як ці методи взаємодіють з конкретними додатками та середовищем розгортання. Метою даної кваліфікаційної роботи магістра є вивчення, аналіз та оптимізація процесів контейнеризації серверних додатків на платформі Amazon Web Services (AWS). Об’єкт дослідження - процеси контейнеризації сучасних серверних додатків і їхнє розгортання на інфраструктурі AWS. Предмет дослідження є самі методи та алгоритми контейнеризації, які можуть бути використані для розгортання та управління серверними додатками на платформі AWS. Досліджується їхнє застосування, ефективність та безпека в контексті роботи з хмарними рішеннями. Наукова новизна полягає у розробці та інтеграції новаторських алгоритмів та методів контейнеризації, які належать специфічно до AWS- середовища, спрямовані на максимізацію ефективного використання ресурсів та підвищення продуктивності. Для цього в роботі здійснено: ̶ Дослідження та впровадження передових стратегій щодо забезпечення безпеки та надійності контейнеризованих додатків у хмарному середовищі AWS. ̶ Аналіз та вдосконалення оптимальних підходів до масштабування та автоматизації управління контейнерами на інфраструктурі AWS. ̶ Впровадження нових наборів інструментів та облаштування сервісів AWS для забезпечення підтримки контейнеризації та автоматизації процесів розгортання додатків. Практична цінність результатів роботи полягає в їхній застосовності для оптимізації серверних додатків, розширенні можливостей контейнеризації, а також в покращенні розуміння принципів хмарних обчислень та роботи з хмарними платформами, зокрема AWS. Структура роботи. Кваліфікаційна робота складається із трьох основних розділів. У першому розділі розглядається сутність контейнеризації та постановку задачі дослідження. У другому розділі оцінюються доступні технології та обираються підходи для розробки. У третьому розділі розробляється система, включаючи захист її та ефективність. Висновки включають в себе основні результати роботи. У додатках наведено специфікацію, текст програми та інструкцію користувача. Загальний обсяг роботи становить 100 сторінок. У кваліфікаційній роботі магістра 13 рисунків, 1 таблиця, 3 додатки. Для виконання роботи використано 23 літературних джерела.
URI: https://er.chdtu.edu.ua/handle/ChSTU/8672
Appears in Collections:123 Комп’ютерна інженерія (Системне програмування)

Files in This Item:
File Description SizeFormat 
1_ТИТУЛКА_Ткаченко-merged.pdf
  Restricted Access
2.2 MBAdobe PDFView/Open Request a copy


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА ІНФОРМАЦІЙНОЇ БЕЗПЕКИ ТА КОМП’ЮТЕРНОЇ
ІНЖЕНЕРІЇ
Пояснювальна записка
до кваліфікаційної роботи магістра
на тему: «Дослідження методів і алгоритмів
контейнеризації сучасних серверних додатків на базі
рішень AWS»
ЧДТУ.232278.006 ПЗ
Виконав: студент 2 курсу, групи МСП-2206
спеціальності 123 – Комп’ютерна інженерія
за освітньою програмою – Системне
програмування
Ярослав ТКАЧЕНКО
Керівник
д.т.н., проф. Віра БАБЕНКО
Н. контроль
Світлана ГРЕСЬКО
Рецензент
старший викладач кафедри інформаційних
технологій, ЧНУ ім. Б. Хмельницького
к.т.н. Тетяна СТАБЕЦЬКА
«ЗАХИСТ ДОЗВОЛЯЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор ___________ Віра БАБЕНКО
Черкаси 2023 року
Черкаський державний технологічний університет
Факультет інформаційних технологій і систем
Кафедра інформаційної безпеки та комп‘ютерної інженерії
Освітньо-кваліфікаційний рівень Магістр
Спеціальність 123 – Комп’ютерна інженерія
Освітня програма Системне програмування
«ЗАТВЕРДЖУЮ»
Завідувач кафедри _____ Володимир РУДНИЦЬКИЙ
«10» жовтня 2023 року
ЗАВДАННЯ
на кваліфікаційну роботу магістра студенту
ТКАЧЕНКУ Ярославу Володимировичу
(прізвище, ім‘я, по батькові)
1. Тема роботи Дослідження методів і алгоритмів контейнеризації сучасних
серверних додатків на базі рішень AWS
Керівник роботи д.т.н., проф. Віра БАБЕНКО
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом університету від «06» жовтня 2023 р. № 267/04
2. Строк подання студентом роботи
3. Вихідні дані до роботи:
Сервіси AWS, AWS, контейнеризація, Docker, AWS EC2, WS Lambda,
серверне програмне забезпечення, серверний додаток, віртуальні та виділені сервери.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ
Розділ 1 Аналіз предметної області та постановка задачі дослідження
Розділ 2 Вибір технології та інструментальних засобів розробки системи
Розділ 3 Оптимізація методів і алгоритмів контейнеризації
сучасних серверних додатків на базі рішень AWS
Висновки
Перелік скорочень та умовних позначень
Список використаних джерел
Додатки
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 Подання роботи на відгук та рецензування 28.11.23 виконано
Студент-магістрант ____________________________ Ярослав ТКАЧЕНКО
(підпис)
Керівник роботи _____________________________ Віра БАБЕНКО
(підпис)
АНОТАЦІЯ
Сучасна інформаційна та технологічна індустрія розвивається зі
швидкістю світла, і хмарні обчислення спільно з контейнеризацією стають
ключовими факторами цього розвитку. Хмарні послуги, такі як Amazon Web
Services (AWS), надають унікальні можливості для розгортання та
управління серверними додатками, проте для досягнення оптимальної
ефективності та безпеки потрібно глибоко досліджувати методи та алгоритми
контейнеризації в цьому контексті.
Кваліфікаційна робота спрямована на розкриття сутності
контейнеризації та її важливості в сучасному хмарному середовищі, а також
на визначення оптимальних методів та алгоритмів для її реалізації на
платформі AWS.
Для дослідження методів і алгоритмів контейнеризації було розроблено
серверне програмне забезпечення для парсингу контенту WEB-сайтів.
Створення власного серверного програмного забезпечення дає можливість
проводити експерименти та тести з різними методами контейнеризації. Це
дозволяє краще розуміти, як ці методи взаємодіють з конкретними додатками
та середовищем розгортання.
Метою даної кваліфікаційної роботи магістра є вивчення, аналіз та
оптимізація процесів контейнеризації серверних додатків на платформі
Amazon Web Services (AWS).
Об’єкт дослідження - процеси контейнеризації сучасних серверних
додатків і їхнє розгортання на інфраструктурі AWS.
Предмет дослідження є самі методи та алгоритми контейнеризації, які
можуть бути використані для розгортання та управління серверними
додатками на платформі AWS. Досліджується їхнє застосування,
ефективність та безпека в контексті роботи з хмарними рішеннями.
Наукова новизна полягає у розробці та інтеграції новаторських
алгоритмів та методів контейнеризації, які належать специфічно до AWS-
середовища, спрямовані на максимізацію ефективного використання ресурсів
та підвищення продуктивності. Для цього в роботі здійснено:
̶ Дослідження та впровадження передових стратегій щодо
забезпечення безпеки та надійності контейнеризованих додатків у хмарному
середовищі AWS.
̶ Аналіз та вдосконалення оптимальних підходів до масштабування
та автоматизації управління контейнерами на інфраструктурі AWS.
̶ Впровадження нових наборів інструментів та облаштування
сервісів AWS для забезпечення підтримки контейнеризації та автоматизації
процесів розгортання додатків.
Практична цінність результатів роботи полягає в їхній застосовності
для оптимізації серверних додатків, розширенні можливостей
контейнеризації, а також в покращенні розуміння принципів хмарних
обчислень та роботи з хмарними платформами, зокрема AWS.
Структура роботи. Кваліфікаційна робота складається із трьох
основних розділів. У першому розділі розглядається сутність контейнеризації
та постановку задачі дослідження. У другому розділі оцінюються доступні
технології та обираються підходи для розробки. У третьому розділі
розробляється система, включаючи захист її та ефективність.
Висновки включають в себе основні результати роботи. У додатках
наведено специфікацію, текст програми та інструкцію користувача.
Загальний обсяг роботи становить 100 сторінок. У кваліфікаційній роботі
магістра 13 рисунків, 1 таблиця, 3 додатки. Для виконання роботи
використано 23 літературних джерела.
ANOTATION
The modern information and technology industry is developing at the speed of
light, and cloud computing together with containerization are becoming key factors
in this development. Cloud services such as Amazon Web Services (AWS) provide
unique opportunities for deploying and managing server-side applications, but
containerization techniques and algorithms in this context need to be explored
deeply to achieve optimal performance and security.
Qualification work is aimed at revealing the essence of containerization and its
importance in the modern cloud environment, as well as at determining the optimal
methods and algorithms for its implementation on the AWS platform.
Server software for parsing the content of WEB sites was developed for the
study of containerization methods and algorithms. Creating your own server
software makes it possible to conduct experiments and tests with different methods
of containerization. This allows for a better understanding of how these methods
interact with specific applications and deployment environments.
The purpose of this Master's thesis is to study, analyze and optimize the
containerization processes of server applications on the Amazon Web Services
(AWS) platform.
The object of research is the processes of containerization of modern server
applications and their deployment on the AWS infrastructure.
The subject of research is the very methods and algorithms of containerization
that can be used to deploy and manage server applications on the AWS platform.
Their application, efficiency and security in the context of working with cloud
solutions are studied.
Scientific novelty is the development and integration of innovative algorithms
and containerization methods that belong specifically to the AWS environment,
aimed at maximizing the efficient use of resources and increasing productivity.
Research and implementation of advanced strategies to ensure the security and
reliability of containerized applications in the AWS cloud environment. Analysis
and improvement of optimal approaches to scale and automate container
management on AWS infrastructure. Implementation of new toolsets and
configuration of AWS services to support containerization and automation of
application deployment processes.
The practical value of the work results lies in their applicability to the
optimization of server applications, the expansion of containerization capabilities,
as well as in improving the understanding of the principles of cloud computing and
working with cloud platforms, in particular AWS.
Structure of work. The qualification work consists of three main sections. The
first chapter examines the essence of containerization and the statement of the
research problem. The second section evaluates available technologies and selects
development approaches. The third section develops the system, including its
protection and efficiency.
The conclusions include the main results of the work. Appendices include
specification, program text, and user manual. The total volume of work is 100
pages. There are 13 figures, 1 table, 3 appendices in the master's qualification
work. 23 literary sources were used to perform the work.
3
ВСТУП………………………………………………………………………. 4
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ…………………………………………………... 8
1.1 Аналіз предметної області……………………………………...…. 8
1.2 Вибір напряму дослідження………………………………………. 16
1.3 Постановка задачі…………………………………………………. 27
1.4 Висновки до розділу 1…………………………………………….. 30
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ…………………………………………………….. 31
2.1 Огляд існуючих технологій……………………………………… 31
2.2 Вибір технологій ………………………………………………… 42
2.3 Висновки до розділу 2…………………………………………… 50
РОЗДІЛ 3 ОПТИМІЗАЦІЯ МЕТОДІВ І АЛГОРИТМІВ
КОНТЕЙНЕРИЗАЦІЇ СУЧАСНИХ СЕРВЕРНИХ ДОДАТКІВ НА БАЗІ
РІШЕНЬ AWS………………………………………………………………... 51
3.1 Структура системи………………………………………………... 51
3.2 Опис функцій системи……………………………………………. 60
3.3 Забезпечення захисту інформації при роботі зі створеною
системою ……………………………………………………………… 65
3.4 Технічні вимоги для роботи з системою……………………….... 69
3.5 Оцінка ефективності застосування методів і алгоритмів
контейнеризації сучасних серверних додатків на базі рішень AWS 72
3.6 Висновки до розділу 3……………………………………………. 74
ВИСНОВКИ………………………………………………………………….. 75
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ…………………... 77
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ…………………………………… 79
ДОДАТКИ:
А – 482.ЧДТУ.32278-01 Дослідження методів і алгоритмів
5
ВСТУП
Актуальність теми дослідження. Актуальність дослідження методів
та стратегій контейнеризації для сучасних серверних застосунків на основі
AWS відображає загальну тенденцію сучасного інформаційного та
технологічного ландшафту. Ця тема об'єднує два ключові напрямки розвитку
в сфері IT-технологій: контейнеризацію та обчислення у хмарі, зокрема на
платформі Amazon Web Services (AWS).
Контейнери, такі як Docker, стали важливим інструментом для
розгортання та управління додатками. Вони дозволяють ізолювати додатки
та їх залежності, що спрощує розгортання та масштабування додатків. AWS -
один із провідних провайдерів хмарних послуг, і багато компаній переходять
до використання його інфраструктури для розгортання своїх додатків.
Сучасні серверні додатки часто мають складну структуру та потребують
ефективного управління ресурсами. Використання контейнерів та
інфраструктури AWS може сприяти покращенню ефективності та безпеки
таких додатків. Оптимізація витрат та ефективне використання ресурсів є
важливим завданням для компаній, які використовують хмарні рішення.
Дослідження методів контейнеризації на AWS може сприяти цій меті.
Загалом, аналіз можливостей контейнеризації на інфраструктурі AWS
вказує на значний потенціал для збільшення продуктивності, підвищення
безпеки та ефективного управління ресурсами у процесі створення та
розгортання серверних застосунків.
Мета кваліфікаційної роботи полягає у розкритті сутності та
важливості контейнеризації в сучасному хмарному середовищі на платформі
AWS. Крім того, робота спрямована на визначення оптимальних методів та
алгоритмів для реалізації контейнеризації.
Для досягнення цієї мети нами розроблено серверне програмне
забезпечення, яке може використовуватися для парсингу контенту веб-сайтів.
6
Це дозволить вивчити вплив різних методів контейнеризації на серверне
програмне забезпечення та з'ясувати, як ці методи впливають на роботу
додатків у хмарному середовищі AWS.
Основні завдання та цілі роботи включають:
1. Дослідження та аналіз сутності контейнеризації та її переваг в
хмарному середовищі, зокрема на платформі AWS.
2. Вивчення та вибір оптимальних методів та алгоритмів для реалізації
контейнеризації на AWS.
3. Розробка серверного програмного забезпечення для парсингу
контенту веб-сайтів як інструменту для експериментів і тестів.
4. Порівняння різних методів контейнеризації на однаковому наборі
додатків та вимог для об'єктивної оцінки їх переваг та обмежень.
5. Представлення результатів дослідження та аналізу, а також розробка
рекомендацій щодо використання контейнеризації на платформі AWS для
оптимізації серверних додатків та підвищення їх продуктивності.
Мета цієї роботи полягає в розширенні знань про контейнеризацію, її
практичному застосуванні на платформі AWS та в розробці інструменту для
порівняння різних методів контейнеризації з метою оптимізації хмарних
серверних додатків.
На цей час існує не багато джерел інформації, в яких автори описують
дослідження методів і алгоритмів контейнеризації на базі рішень AWS. Але в
книзі "AWS Big Data Analytics" автор Max Emelianov досліджує можливості
AWS для аналізу великих обсягів даних, включаючи реальний час. Також
автор Paul D. Bauer у своїй книзі “AWS for Developers For Dummies”
розглядає різні аспекти AWS, що може бути корисною для розуміння
інфраструктури для передачі даних в режимі реального часу.
Об'єкт дослідження – процеси контейнеризації сучасних серверних
додатків та їх розгортання на інфраструктурі Amazon Web Services (AWS).
Також досліджуються методи та алгоритми, які можуть бути використані для
оптимізації цих процесів та забезпечення їх безпеки та ефективності.
7
Предмет дослідження – самі методи та алгоритми контейнеризації, які
можуть бути використані для розгортання та управління серверними
додатками на платформі Amazon Web Services (AWS). Досліджується їхнє
застосування, ефективність та безпека в контексті роботи з хмарними
рішеннями AWS.
Наукова новизна роботи полягає у розробці та інтеграції новаторських
алгоритмів та методів контейнеризації, які належать специфічно до AWS-
середовища, спрямовані на максимізацію ефективного використання ресурсів
та підвищення продуктивності. Дослідження та впровадження передових
стратегій щодо забезпечення безпеки та надійності контейнеризованих
додатків у хмарному середовищі AWS. Аналіз та вдосконалення
оптимальних підходів до масштабування та автоматизації управління
контейнерами на інфраструктурі AWS. Впровадження нових наборів
інструментів та облаштування сервісів AWS для забезпечення підтримки
контейнеризації та автоматизації процесів розгортання додатків. Глибокий
аналіз впливу вибору конкретних стратегій контейнеризації та налаштувань
конфігурації на ефективність та фінансові витрати для інфраструктури AWS.
Кваліфікаційна робота має вагоме практичне значення, оскільки у ній
досліджується сутність контейнеризації та методи її оптимального
впровадження на платформі AWS. Це допомагає оптимізувати ресурси,
підвищити продуктивність та забезпечити стабільність серверних додатків у
хмарному середовищі, що веде до зменшення витрат та поліпшення
обслуговування.
Кваліфікаційна робота складається з 3-х розділів, в яких подається
інформація про:
1. У першому розділі розглядається сутність контейнеризації та
постановку задачі дослідження.
2. У другому розділі оцінюються доступні технології та обираються
підходи для розробки.
8
3. У третьому розділі розробляється система, включаючи захист її
та ефективність.
Використана література, під час написання кваліфікаційної роботи,
досить добре розкриває тему та відображає потреби для здійснення аналізу.
9
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ
1.1 Аналіз предметної області
Програмне забезпечення ПК - це набір програм, додатків і системних
файлів, призначених для виконання різноманітних завдань та функцій на
персональних комп'ютерах. Воно є важливою складовою комп'ютерної
системи та дозволяє користувачам виконувати різні завдання, від обробки
текстових документів до ігор та веб-перегляду. Програмне забезпечення ПК
може бути розділене на кілька категорій.
Це прикладне програмне забезпечення, яке призначене для виконання
конкретних завдань користувача. Воно включає в себе текстові редактори,
архіватори, програми для створення презентацій, антивірусні програми,
графічні редактори, програми обробки звуку і багато інших. Приклади:
Microsoft Office, Adobe Photoshop, VLC Media Player.
Розробницьке програмне забезпечення, призначене для розробки та
тестування інших програм. Воно включає в себе інтегровані середовища
розробки (IDE), компілятори, віртуальні машини та інструменти для
створення веб-додатків та мобільних додатків. Приклади: Visual Studio,
Android Studio, Xcode.
Ігрове програмне забезпечення створене для розваг та ігор. Воно
включає в себе велику кількість ігор, від класичних до сучасних відеоігор, і
може вимагати високої продуктивності обладнання. Приклади: Minecraft,
Grand Theft Auto V, Fortnite.
Спеціалізоване програмне забезпечення, розроблене для конкретних
сфер та завдань, таких як графіка, медицина, бухгалтерія, автоматизація
виробництва тощо. Воно може бути призначеним для вузькоспеціалізованих
10
областей та бізнес-процесів. Ще є серверне програмне забезпечення, яке
розглянемо більш детально.
Серверне програмне забезпечення виконує роль програм, які
функціонують на серверах. Це програмне забезпечення призначене для
обробки запитів, передачі даних та забезпечення доступу до ресурсів та
послуг іншим комп'ютерам (клієнтам) через мережу, зазвичай через Інтернет.
Воно є набором різноманітних компонентів, сервісів та додатків, які
розробляються для вирішення різних завдань та функцій.
Серверне програмне забезпечення спроєктований для оприлюднення,
обробки та відповіді на запити, які надходять від клієнтів [1]. Ці запити
можуть стосуватися доступу до даних, веб-сторінок, послуг чи інших
ресурсів.
Також програми можуть ефективно керувати різними ресурсами
сервера, такими як обчислювальна потужність, пам'ять, мережа та зберігання,
з метою досягнення оптимальної продуктивності та надійності.
Програмне забезпечення може надавати широкий спектр послуг, таких
як веб-сервери, поштові сервери, бази даних, сервери для зберігання та
обміну файлами, сервери для спільної роботи та інші.
Важливою функцією є вбудована система безпеки для захисту даних та
ресурсів від несанкціонованого доступу та потенційних атак.
Серверні програми можуть легко налаштовуватися для масштабування,
що дозволяє їм обробляти більше запитів та обслуговувати більше клієнтів в
залежності від зростаючого обсягу роботи. Програмне забезпечення зазвичай
підтримує різні мережеві та комунікаційні протоколи для ефективної
взаємодії з клієнтами, включаючи HTTP, FTP, SMTP та інші.
Серверне програмне забезпечення є важливою складовою
інфраструктури в сучасних комп'ютерних системах та мережах і
використовується у різних галузях, включаючи веб-розробку, хмарні
обчислення, обробку даних, мережеве адміністрування, віртуалізацію та
інше.
11
Системне програмне забезпечення є невід'ємною частиною операційної
системи та виконує ключову роль в ефективному та надійному
функціонуванні комп'ютерної системи. Ця категорія програм відповідає за
низку важливих функцій, які забезпечують сприятливі умови для роботи
апаратної частини комп'ютера та взаємодію з іншими програмами.
ОС є ядром комп'ютерної системи, вона керує роботою обладнання та
ресурсами, розподіляє завдання між процесами, контролює доступ до файлів
і забезпечує загальну стабільність роботи [2]. Різні операційні системи, такі
як Windows, macOS, Linux та інші, надають користувачам середовище для
запуску додатків і виконання завдань.
Драйвери є посередниками між ОС і апаратним обладнанням, таким як
графічні карти, принтери, клавіатури та інші пристрої. Вони перетворюють
команди, відправлені ОС, на інструкції, зрозумілі пристроям, що дозволяє їм
правильно функціонувати.
Ця категорія програм допомагає в підтримці та оптимізації роботи
комп'ютера. До них входять антивіруси, програми для дефрагментації диска,
моніторингу ресурсів системи, утиліти для автоматичного завантаження та
інші інструменти, що забезпечують стабільну та безпечну роботу ОС.
Ці бібліотеки містять набір функцій та процедур, які програми
використовують для взаємодії з операційною системою. Вони надають
доступ до операцій вводу/виводу, роботи з мережею, роботи з файлами та
іншими операціями, що забезпечують коректну роботу програм.
Системні налаштування дозволяють користувачам і адміністраторам
налаштовувати параметри ОС та комп'ютера. Це включає налаштування
мережі, енергоспоживання, безпеки та інших параметрів, які дозволяють
налаштовувати комп'ютер для відповідності потребам користувача.
Запуск серверного програмного забезпечення на сервері в Unix-
системах вимагає певного розуміння командного рядка та навичок
адміністрування серверів.
12
Unix-система - це родина операційних систем, які базуються на
оригінальній операційній системі Unix, розробленій у 1960-х роках в
лабораторії AT&T Bell Labs [3]. Unix відомий своєю стабільністю,
надійністю та можливістю працювати на різних типах апаратного
обладнання. Системи Unix і Unix-подібні (як Linux) є популярними у сфері
серверного програмного забезпечення та розробки через їхню гнучкість та
силу.
Unix підтримує виконання багатьох процесів (задач) одночасно. Кожен
процес має свій власний ізольований обсяг пам'яті. Файлова система Unix
організована в ієрархічну структуру, де кожен файл та каталог розташовані в
ієрархічній послідовності. Все в Unix є файлами. Базується на текстовому
командному рядку, де користувачі можуть взаємодіяти з системою, вводячи
команди. Unix має скриптовану оболонку, таку як Bash (Bourne Again Shell),
яка дозволяє автоматизувати багато рутинних завдань за допомогою
сценаріїв команд. Також мають потужні можливості мережевої взаємодії, що
робить їх популярними для серверів та мережевого програмного
забезпечення. Використовує систему прав доступу та дозволів, щоб
контролювати доступ користувачів до файлів та ресурсів. Багато Unix-
подібних операційних систем є портативними і можуть працювати на різних
апаратних платформах. Linux та FreeBSD розповсюджуються з відкритим
вихідним кодом, що сприяє спільнотному розвитку та інноваціям. Unix і його
відгалужені операційні системи (Linux, macOS, FreeBSD, інші) широко
використовуються у сфері веб-розробки, серверного адміністрування,
наукових досліджень, вбудованих систем та багатьох інших галузях завдяки
їхнім перевагам у стабільності, надійності та розширюваності.
Запуск серверного програмного забезпечення на сервері в Unix-
системах - це важливий етап для надання послуги або виконання певних
функцій на сервері. Цей процес може залежати від типу серверного додатка,
інфраструктури сервера та специфікацій вашого сервера. В основному, для
13
запуску серверного програмного забезпечення в Unix-системах можна
виконати такі кроки:
1. Підготовка середовища. Встановити всі необхідні залежності та
компоненти, які необхідні для серверного додатка. Це може включати
встановлення веб-сервера, бази даних, розширень програмування та інших
пакетів.
2. Перенесення файлів. Потрібно скопіювати необхідні файли
серверного додатка на сервер. Можна використати команди, такі як `scp`,
`rsync`, `ftp` або інші, для завантаження файлів на сервер.
3. Налаштування доступу до файлів. Переконатися, що права доступу
до файлів та каталогів на сервері налаштовані на відповідність.
Використовувати команду `chmod`, щоб встановити права доступу до файлів.
4. Конфігурація серверного додатка. Встановити налаштування для
серверного додатка, зазвичай це виконується шляхом редагування
конфігураційних файлів. Налаштувати параметри, такі як порт, IP-адреса,
база даних і інші параметри, які потрібні.
5. Запуск серверного додатка. Відкрити термінал на сервері та перейти
до каталогу, де знаходиться серверний додаток. Виконати команду для
запуску додатка.
6. Моніторинг. Потрібно слідкувати за журналами та виводом, що
серверний додаток працює належним чином.
7. Перехід у фоновий режим. Деякі серверні додатки можуть
працювати у фоновому режимі. Можна використовувати інструменти, такі як
`nohup` або `&`, щоб запустити додаток у фоновому режимі та звільнити
термінал.
8. Керування процесом. Для управління серверним додатком (зупинка,
перезапуск і т. д.) використовувати команди `kill`, `ps`, `pgrep` або інші
відповідні команди.
Запуск серверного програмного забезпечення на сервері в Unix-
системах вимагає обережності та знань командного рядка. Потрібно розуміти
14
вимоги серверного додатка та дотримуватися безпеки та стабільності
сервера [4].
Docker інструментарій для управління ізольованими Linux-
контейнерами. Docker доповнює інструментарій LXC більш високорівневим
API, що дозволяє керувати контейнерами на рівні ізоляції окремих процесів.
Зокрема, Docker дозволяє не переймаючись вмістом контейнера запускати
довільні процеси в режимі ізоляції та потім переносити і клонувати
сформовані для даних процесів контейнери на інші сервери, беручи на себе
всю роботу зі створення, обслуговування і підтримки контейнерів.
Початковий код Docker написаний мовою Go і поширюється під
ліцензією Apache 2.0. Інструментарій базується на застосуванні вбудованих в
ядро Linux штатних механізмів ізоляції на основі просторів імен (namespaces)
і груп управління (cgroups). Для створення контейнерів використовуються
скрипти lxc. Для формування контейнера досить завантажити базовий образ
оточення (команда docker pull base), після чого можна запускати в
ізольованих оточеннях довільні програми (наприклад, для запуску bash
можна виконати docker run -i -t base/bin/bash) [5]. Docker може
використовувати декілька інтерфейсів для доступу засобів віртуалізації ядра
Linux, зображено на рисунку 1.1.
Основні можливості розміщення в ізольованому оточенні різнорідної
начинки, що включає різні комбінації виконуваних файлів, бібліотек, файлів
конфігурації, скриптів, файлів jar, gem, tar.
Підтримка роботи на будь-якому комп'ютері на базі архітектури x86_64
з системою на базі ядра Linux, починаючи від ноутбуків, закінчуючи
серверами та віртуальними машинами. Можливість роботи поверх
немодифікованих сучасних ядер Linux і в штатних оточеннях всіх великих
дистрибутивів Linux, включаючи Fedora, RHEL, Ubuntu, Debian, SUSE,
Gentoo та Arch [6].
15
Рисунок 1.1 - Застосування декількох інтерфейсів для доступу засобів
віртуалізації ядра Linux
Використання легковагих контейнерів для ізоляції процесів від інших
процесів і основної системи.
Оскільки контейнери використовують свою власну самодостатню
файлову систему, не важливо де, коли і в якому оточенні вони запускаються.
Ізоляція на рівні файлової системи, кожен процес виконується у
повністю окремій кореневій ФС. Споживання системних ресурсів, таких як
витрата пам'яті і навантаження на CPU, можуть обмежуватися окремо для
кожного контейнера з використанням cgroups. Кожен ізольований процес має
доступ тільки до пов'язаного з контейнером мережевого простору імен,
включаючи віртуальний мережевий інтерфейс і прив'язані до нього IP-
адреси. Коренева файлова система для контейнерів створюється з
використанням механізму copy-on-write (окремо зберігаються тільки змінені і
нові дані), що дозволяє прискорити розгортання, знижує витрату пам'яті та
економить дисковий простір. Всі стандартні потоки (stdout/stderr) кожного
виконуваного в контейнері процесу накопичуються і зберігаються у вигляді
логу. Змінена файлова система одного контейнера може використовуватися
як основа для формування нових базових образів і створення інших
16
контейнерів, без необхідності оформлення шаблонів або ручного
налаштування складу образів. Можливість використання інтерактивної
командної оболонки, де до стандартного вводу будь-якого контейнера може
бути прив'язаний псевдо -tty для запуску shell.
Підтримка використання різних систем зберігання, які можуть
підключатися як плаґіни. Серед підтримуваних драйверів зберігання заявлені
aufs[en], device mapper[en] (використовуються снапшоти LVM), vfs (на основі
копіювання директорій) і Btrfs. Очікується поява драйверів для ZFS, Gluster і
Ceph. Можливість створення контейнерів, що містять складні програмні
стеки, через зв'язування між собою вже існуючих контейнерів, що містять
складові частини формованого стека. Зв'язування здійснюється не через
злиття вмісту, а через забезпечення взаємодії між контейнерами (створюється
мережевий тунель).
Запуск серверних додатків через Docker. Запуск серверних додатків
через Docker - це інноваційний та досить ефективний підхід до розгортання
програмного забезпечення, який змінює ландшафт серверної розробки та
адміністрування. Docker дозволяє розробникам та інженерам збирати,
ізолювати та запускати додатки та їх залежності в контейнерах, що дозволяє
створити інкапсульоване середовище, яке можна легко переносити та
масштабувати.
Основні переваги запуску серверних додатків через Docker включають:
1. Ізоляція середовища. Контейнери Docker надають повну ізоляцію
додаткам від господарської операційної системи та одне від одного. Це
означає, що конфлікти між залежностями та версіями програм стають
мінімальними.
2. Портативність. Контейнери Docker є портативними та
стандартизованими, що дозволяє запускати додатки на будь-якому сервері
або в хмарному середовищі, де є підтримка Docker.
17
3. Ефективне використання ресурсів. Docker дозволяє ефективно
використовувати ресурси сервера, оскільки контейнери спільно
використовують ядро операційної системи та інші ресурси.
4. Швидке розгортання. Запуск контейнерів Docker можна виконати за
секунди, а не години, що спрощує процес розгортання нових версій програм
та веб-сервісів.
5. Скалабельність. Docker дозволяє легко масштабувати додатки,
додаючи або видаляючи контейнери в залежності від потреб.
6. Легкість управління. Docker надає інструменти для автоматизації
розгортання, моніторингу та керування контейнерами, що спрощує життя
адміністраторів та розробників.
Загалом, Docker став важливим компонентом для сучасної серверної
розробки та адміністрування, який дозволяє розробникам та командам
забезпечувати більш швидке та надійне розгортання додатків у будь-яких
обчислювальних середовищах.
1.2 Вибір напряму дослідження
У попередньому підрозділі 1.1 проаналізовано предмет області
дослідження. Розглянули що таке програмне забезпечення, як запускати
серверне програмне забезпечення в unix системах та дали короткий огляд що
таке Docker. Тепер розглянемо напрям дослідження, а саме більш детально,
що таке Docker його можливості та переваги. Також онлайн-платформу AWS,
яку використовуємо в даній роботі.
Docker - це передова система контейнеризації, що відкриває безмежні
можливості для запуску програмного забезпечення без необхідності
встановлення його безпосередньо в локальну операційну систему.
Docker складається з кількох ключових компонентів, які роблять цю
технологію такою потужною:
18
Образ (Image): Образ - це готовий набір програм та конфігурацій,
створений розробниками та готовий до завантаження з офіційного
репозиторію Docker. Це визначає, як контейнер повинен функціонувати та
взаємодіяти з іншими компонентами.
Контейнер (Container): Контейнер - це екземпляр образу, який
запущений на сервері. Кожен контейнер є самостійним середовищем, яке
виконує програмне забезпечення, і може бути налаштований під конкретні
потреби. Кожен контейнер базується на образі, але може мати свої власні
налаштування.
Volume: Volume - це область на диску, яку використовує контейнер для
зберігання даних. Навіть після видалення контейнера, дані в області Volume
залишаються доступними, що робить їх придатними для подальшого
використання.
Завдяки Docker, розробники та адміністратори мають можливість
створювати, розгортати та управляти програмним забезпеченням в
ізольованих та портативних контейнерах. Ця технологія спрощує життя та
прискорює розробку та розгортання ПЗ, забезпечуючи надійність та
ефективність в управлінні ресурсами.
Структура мережі цієї системи розроблена в особливий спосіб, що
дозволяє з легкістю налаштовувати порти та забезпечувати зовнішній доступ
до контейнерів. Зазвичай контейнери працюють на власній локальній IP-
адресі, але завдяки віртуальному бриджу, їх можна легко робити доступними
як для глобального мережевого оточення, так і для конкретної адреси.
Docker-Container виявляють велику корисність у процесі розробки та
розгортання програмного забезпечення. Використання одного й того ж
Docker-Container як на робочій станції розробника, так і на сервері, має
важливі переваги. Це відкидає необхідність вручну налаштовувати серверне
середовище на локальній машині розробника. Такий підхід дозволяє
розробляти та виконувати різноманітні програми на одній і тій же робочій
19
станції, навіть якщо вони вимагають несумісних налаштувань операційної
системи.
Використання Docker на платформах Windows або MacOSX зручною і
"прозорою" можливістю тестування під Linux є додатковою перевагою.
Незалежно від операційної системи розробника, Docker дозволяє забезпечити
спільну роботу над проектом та гарантує, що програма на сервері
поводитиметься так само як і на робочій станції розробника.
Важливо відзначити, що Docker застосовується головним чином для
створення та налаштування серверного програмного забезпечення на
платформі Linux (експериментально - на FreeBSD) і не застосовується для
розробки під смартфони. Щодо роботи з десктопами, Docker дозволяє
працювати з програмним забезпеченням без графічного інтерфейсу.
Однією з величезних переваг використання Docker є спрощення роботи
розробників та адміністраторів та підвищення якості результуючих
продуктів. Існує велика кількість інструментів для управління розгортанням
додатків, створених з використанням Docker. Порівняно з минулим, коли для
запуску великої кількості програм на численних серверах потрібні були
значні зусилля та досвід висококваліфікованих фахівців, Docker дозволяє
керувати мільйонами програм на тисячах серверів навіть одному розробнику.
Це забезпечує більшу гарантію ефективності та надійності роботи всього
цього інфраструктурного комплексу.
Поширена помилка полягає в тому, що розробники створюють
контейнери та передають їх адміністраторам для подальшого використання.
У правильній методології розробки це відбувається інакше:
Розробник вносить всі свої зміни у систему Continuous Integration (CI),
зазвичай через систему контролю версій, таку як Git. CI автоматично створює
Docker-образ для тестування при кожному новому коміті. Якщо тести
пройшли успішно, цей Docker-образ може бути використаний для
розгортання в production. У випадку, коли вихідний код не потрібен в
production (особливо для компільованих систем), Docker може бути
20
використаний для створення середовища для компіляції, а вже
відкомпільована програма використовується для тестування та розгортання в
production [7].
Головна ідея полягає в тому, щоб забезпечити, що тестування та запуск
на бойовому сервері відбувається на ідентичних образах, включаючи ті ж
самі файли. Розробник не повинен впливати на образ напряму, але тестове та
production середовище використовує один і той же Docker-образ.
Також ідея полягає в тому, що те, що тестується, те ж саме, що і
запускається на бойовому сервері, забезпечуючи однаковість та надійність в
умовах експлуатації. Docker відіграє ключову роль у цьому підході та надає
інфраструктуру для забезпечення консистентності середовищ. Він
використовує клієнт-серверну архітектуру та складається з клієнта – утиліти
docker, яка звертається до сервера за допомогою RESTful API, зображена на
рисунку 1.2.
Рисунок 1.2 - Структура Docker
Користувач видає команду через клієнтський інтерфейс до Docker-
демона, який запущений на Docker-хості. Наприклад, команда "docker pull"
використовується для завантаження готового образу з реєстру (сховища
Docker-образів). Взаємодія між клієнтом і демоном забезпечується за
21
допомогою REST API. Демон може використовувати як загальнодоступні
реєстри (наприклад, Docker Hub), так і приватні [8].
Виходячи з команд, наданих користувачем, демон виконує різні
операції з образами на основі інструкцій, що зазначені у файлі Dockerfile.
Наприклад, він може автоматично зібрати образ за допомогою команди
"docker build".
Робота образа в контейнері передбачає запуск docker-образу, що
виконується через команду "docker run", а також може включати видалення
контейнера за допомогою команди "docker kill". Структура архітектури
зображено на рисунку 1.3.
Рисунок 1.3 - Архітектура Docker
Docker являє собою необхідний інструмент для сучасних розробників,
який служить фундаментом апаратної віртуалізації додатків. Ця технологія
володіє широким функціоналом і можливостями для контролю над
процесами [8]. Docker дозволяє не лише розгортати контейнери, але й
швидко масштабувати їх екземпляри, працювати з багатоконтейнерними
22
додатками (Docker Compose) та об'єднувати кілька Docker-хостів у єдиний
кластер (Docker Swarm).
Docker відзначається простим синтаксисом, що робить його доступним
для вивчення як для досвідчених ІТ-спеціалістів, так і для початківців.
Програмне забезпечення сумісне з усіма версіями операційних систем Linux і
Windows, що робить область застосування Docker практично необмеженою.
Amazon Web Services представляє собою інноваційну онлайн-
платформу, яка надає користувачам доступ до віртуальних обчислювальних
ресурсів, сховища, інфраструктури та готових до використання сервісів, усе
це у хмарному середовищі.
AWS дозволяє вам орендувати віртуальні ресурси через Інтернет,
замість того, щоб купувати та обслуговувати фізичне обладнання локально.
Ця платформа надає безліч можливостей для розробки, тестування та
розгортання додатків та послуг.
AWS користуються великі корпорації, стартапи, дослідницькі установи
та інші організації, які шукають надійний та масштабований
інфраструктурний фундамент для своїх проектів. Це включає в себе розробку
мобільних додатків, створення ігор, аналіз великих обсягів даних,
забезпечення безпеки та зберігання інформації.
AWS є ключовим гравцем на ринку хмарних послуг і забезпечує
надійність та доступність для своїх користувачів. Багато відомих компаній
використовують AWS для гарантії неперервності своїх послуг та розширення
їхнього бізнесу.
За даними аналітичної компанії Canalys, у другому кварталі 2021 року
AWS володів 31% часткою ринку серед усіх хмарних платформ, що
підтверджує його лідерство у цій галузі. Microsoft Azure і Google Cloud
Platform стали другим і третім за популярністю у цьому списку відповідно.
AWS надає кілька можливостей для взаємодії та управління своєю
інфраструктурою:
23
AWS Console - це веб-інтерфейс, який дозволяє керувати ресурсами
AWS через стандартний веб-браузер. Для доступу до консолі керування
потрібно ввести дані вашого облікового запису AWS, такі як логін та пароль.
AWS SDK (Software Development Kit) - іншим способом взаємодії з
AWS є використання SDK для різних популярних мов програмування, таких
як C++, Go, Java, JavaScript, .NET, PHP, Python, Ruby. Ці SDK дозволяють
програмно взаємодіяти з AWS-послугами та ресурсами і використовувати їх
у програмному коді. Якщо мова програмування немає офіційного SDK,
можна знайти бібліотеки, які підтримуються спільнотою, або створити
власний SDK, який буде "обгорткою" для HTTP-інтерфейсу, наданого AWS.
AWS Command Line Interface (CLI) - ще одним інструментом для
взаємодії з AWS є командний рядок. AWS CLI - це утиліта командного рядка,
яку можна використовувати для автоматизації різних процесів та завдань.
Вона особливо зручна для тих, хто віддає перевагу роботі з консоллю, а не
графічним інтерфейсом [9].
Ці інструменти дозволяють користувачам AWS ефективно управляти
ресурсами та послугами, розробляти та впроваджувати програми в хмарному
середовищі, а також автоматизувати багато процесів для забезпечення
ефективності та продуктивності.
AWS пропонує безліч хмарних сервісів, які можна використовувати в
комбінаціях, що відповідають вимогам та організаційним завданням вашого
бізнес-проєкту.
Сервери та ресурси, якими не користуються, можна вимкнути.
Контейнеризація – процес урізноманітнення програмування, який
об’єднує код додатків з усіма файлами та бібліотеками, необхідними для
запуску в будь-якій інфраструктурі. Загальна схема контейнеризації
зображено на рисунку 1.4. Розробники використовують контейнеризацію для
створення та розгортання сучасних додатків через переваги.
24
Рисунок 1.4 - Загальна схема контейнеризації
Контейнери – це легкі програмні компоненти, які працюють ефективно.
Наприклад, віртуальна машина може швидше запускати контейнерну
програму, оскільки їй не потрібно завантажувати операційну систему. Тому
розробники програмного забезпечення можуть легко додати кілька
контейнерів для різних програм на одному комп'ютері. Кластер контейнерів
використовує обчислювальні ресурси однієї і тієї ж загальної операційної
системи, але один контейнер не заважає роботі інших контейнерів.
Команди розробників програмного забезпечення використовують
контейнери для створення стійких до відмови програм. Вони використовують
кілька контейнерів для запуску мікросервісів у хмарі. Оскільки контейнерні
мікросервіси працюють в ізольованих просторах користувача, один
несправний контейнер не впливає на інші контейнери. Це підвищує стійкість
та доступність програми.
Контейнерні програми працюють в ізольованих обчислювальних
середовищах. Розробники програмного забезпечення можуть усувати
неполадки та змінювати код програми без втручання в операційну систему,
25
обладнання або інші додаткові сервіси. Вони можуть скоротити цикли
випуску програмного забезпечення та швидко працювати над оновленнями з
моделлю контейнера.
Міграція в хмару, або перенесення – це програмна стратегія, яка
включає інкапсуляцію застарілих додатків у контейнери та розгортання їх у
середовищі хмарних обчислень. Організації можуть модернізувати свої
програми без переписування всього програмного коду.
Організації, які прагнуть створювати хмарні програми з
мікросервісами, потребують технології контейнеризації. Архітектура
мікросервісів – це підхід до розробки програмного забезпечення, який
використовує кілька взаємозалежних програмних компонентів для надання
функціональної програми. Кожен мікросервіс має унікальну та специфічну
функцію. Сучасна хмарна програма складається з декількох мікросервісів.
Наприклад, програма потокового відео може мати мікросервіси для обробки
даних, відстеження користувачів, виставлення рахунків та персоналізації.
Контейнеризація надає програмний інструмент для пакування мікросервісів у
вигляді програм, що розгортаються, на різних платформах.
Пристрої Інтернету речей (IoT) містять обмежені обчислювальні
ресурси, що робить оновлення програмного забезпечення вручну складним
процесом. Контейнеризація дозволяє розробникам легко розгортати та
оновлювати програми на пристроях Інтернету речей.
Контейнеризація передбачає створення самодостатніх пакетів
програмного забезпечення, які працюють стабільно, незалежно від
комп'ютерів, на яких вони працюють. Розробники програмного забезпечення
створюють та розгортають образи контейнерів, тобто файли, що містять
необхідну інформацію для запуску контейнерної програми. Розробники
використовують інструменти контейнеризації для створення образів
контейнерів на основі специфікації образів Open Container Initiative (OCI)
[110]. OCI – це група з відкритим кодом, яка надає стандартизований формат
26
для створення образів контейнерів. Образи контейнерів доступні лише для
читання та не можуть бути змінені комп'ютерною системою.
Образи контейнерів – верхній шар у контейнерній системі, що
складається з наступних шарів.
Інфраструктура – це апаратний рівень моделі контейнерів. Це
стосується фізичного комп'ютера або сервера без встановленої операційної
системи, на якому виконується контейнерна програма.
Другий рівень архітектури контейнеризації – операційна система. Linux
– найпопулярніша операційна система для контейнеризації з локальними
комп'ютерами. У хмарних обчисленнях розробники використовують хмарні
послуги, такі як AWS EC2, для запуску контейнерних додатків.
Двигун контейнерів, або середовище виконання контейнера – це
програмне забезпечення, яке створює контейнери на основі образів
контейнерів. Він виступає посередником між контейнерами і операційною
системою, надаючи ресурси, необхідні додатку, і керуючи ними. Наприклад,
контейнерні двигуни можуть керувати кількома контейнерами в одній
операційній системі, зберігаючи їхню незалежність від базової
інфраструктури та один від одного.
Найвищий рівень архітектури контейнеризації – це код програми та
інші файли, які потрібно запустити, такі як залежності бібліотек та пов'язані з
ними файли конфігурації. Цей шар може містити легку гостьову операційну
систему, яка встановлюється поверх основної. Структура AWS зображено на
рисунку 1.5.
Оркестрація контейнерів – це програмна технологія, яка дозволяє
автоматично керувати контейнерами. Це необхідно для розробки сучасних
хмарних програм, оскільки програма може містити тисячі мікросервісів у
відповідних контейнерах. Велика кількість контейнерних мікросервісів не
дозволяє розробникам програмного забезпечення керувати ними вручну.
27
Рисунок 1.5 - Структура AWS
Розробники використовують інструменти оркестрації контейнерів для
автоматичного запуску та зупинки контейнерів, а також управління ними.
Оркестратори контейнерів дозволяють розробникам точно масштабувати
хмарні програми та уникати людських помилок. Наприклад, можна
переконатися, що контейнери розгорнуті із достатніми ресурсами хост-
платформи.
Найпопулярніші технології , які розробники використовують для
контейнеризації це Docker, Linux, та Kubernetes [11].
Переваги технології дає ряд переваг при роботі з додатками та побудові
інфраструктури. Тому зараз її використовують практично у всіх сегментах ІТ.
Запуск середовищ без конфліктів. Без контейнеризації програми
довелося б запускати поверх основної ОС. Якщо в операційній системі одна
версія бібліотек та програмного забезпечення, а програмі потрібна інша,
виник конфлікт. У контейнер можна покласти всі необхідні залежності,
включаючи бібліотеки: конфліктів не виникне.
Контроль за ресурсами. Просунуті системи роботи з контейнерами
вміють розподіляти з-поміж них потужності, задавати пріоритети, запускати і
зупиняти, встановлювати зв'язку. Якщо правильно настроїти системи, можна
оптимізувати споживання потужностей. Навіть великі програми будуть
28
споживати менше пам'яті. Також, якщо на окремі додатки підвищиться
навантаження, системи управління зможуть виділити їм більше ресурсів за
рахунок інших контейнерів. Продуктивність залишиться високою.
Підтримка безпеки. Один із плюсів ізоляції — підвищення безпеки та
зниження ризику витоку. Якщо програма всередині контейнера видасть
критичну помилку, виявиться скомпрометовано або почне поводитися
шкідливо, це не порушить роботу інших програм. Небезпечний код
виявиться ізольованим від інших ділянок системи.
Створення робочої інфраструктури. Для розробки необхідне певне
середовище. Без контейнерів її довелося б налаштовувати вручну для
кожного завдання та користувача. Це займає багато часу. А якщо середовища
відрізнятимуться для різних людей, це небезпечно. Тому одне із застосувань
контейнерів – створення робочої інфраструктури, єдиної для всіх
розробників.
Оптимізація витрат. Контейнери економлять як ресурси комп'ютерів, а
й кошти.
Ізоляція програм знижує ризик непередбаченої помилки або
фатального збою, тому допомагає уникнути зайвих витрат.
Побудова архітектури. Популярна архітектура додатків –
мікросервісна. Великий додаток розглядають як набір маленьких незалежних
сервісів. І для такого архітектурного рішення ідеально підходить
контейнеризація: кожен сервіс пакується у свій контейнер. Вони передають
одна одній дані, але працюють незалежно. Керує ними зазвичай оркестратор
або програмне забезпечення для багатоконтейнерних додатків — це залежить
від розміру системи.
1.3 Постановка задачі
Сучасна індустрія інформаційних технологій постійно еволюціонує, а
контейнеризація стала ключовою технологією для розгортання та керування
29
серверними додатками в хмарних і розподілених середовищах. Рішення
Amazon Web Services (AWS) включають в себе низку інструментів для
контейнеризації, таких як Amazon Elastic Container Service (ECS) та Amazon
Elastic Kubernetes Service (EKS).
Контейнеризація є важливою практикою при розробці серверних
додатків з багатьма перевагами, які допомагають полегшити розгортання,
керування і масштабування додатками. Контейнери ізолюють додатки та їх
залежності від серверного середовища, забезпечуючи консистентність між
різними етапами розробки (розробка, тестування, стадія виробництва). Це
допомагає уникнути проблем, пов'язаних з різницею між середовищами.
Контейнери дозволяють швидко створювати і розгортати інстанції
додатків. Вони мають невеликий час запуску, що дозволяє легко
масштабувати та зменшувати навантаження в залежності від потреби.
Контейнери також легко масштабуються на великі кластери серверів,
що дозволяє забезпечувати високу доступність і високий рівень
продуктивності для додатків з великою кількістю користувачів або великим
обсягом даних. Їх можна легко переміщувати між різними середовищами,
такими як локальний комп'ютер, хмарна інфраструктура або власний центр
обробки даних. Це спрощує розгортання та роботу над додатками на різних
платформах.
Використання контейнерів дозволяє описати конфігурацію додатку
декларативно, що полегшує керування налаштуваннями та автоматизацію
процесів розгортання. Також дане рішення дозволяє ефективно розподіляти
ресурси, такі як CPU та пам'ять, між різними додатками на сервері, що
допомагає зменшити витрати на обладнання.
Загалом, контейнеризація допомагає спростити розробку, розгортання
та управління серверними додатками, забезпечуючи більшу швидкість та
ефективність розробки та експлуатації.
Дослідження контейнеризації в контексті рішень AWS допомагає
відповісти на поточні виклики в розробці серверних додатків, забезпечуючи
30
важливі знання та рекомендації для ефективного використання цих
технологій на хмарній платформі AWS.
Amazon Web Services (AWS) є однією з провідних хмарних платформ у
світі. Багато компаній та організацій використовують AWS для розгортання
своїх серверних додатків. Тому дослідження контейнеризації в контексті
AWS має велике практичне значення, оскільки дозволяє оптимізувати
розгортання та управління додатками на цій платформі.
AWS надає різні інструменти і сервіси для контейнеризації, такі як
Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service
(EKS), Amazon Fargate тощо. Дослідження цих рішень дозволяє краще
розуміти їхні можливості, переваги та обмеження, що сприяє вибору
оптимального рішення для конкретного проекту.
Проведення дослідження різних методів та алгоритмів контейнеризації
на AWS дозволяє зробити порівняльний аналіз їхньої ефективності та
застосовності. Це допомагає розробникам та інженерам вибрати найкращий
підхід для свого проекту.
Узагальнюючи, дослідження контейнеризації в контексті рішень AWS
допомагає відповісти на поточні виклики в розробці серверних додатків,
забезпечуючи важливі знання та рекомендації для ефективного використання
цих технологій на хмарній платформі AWS.
Кваліфікаційна робота спрямована на розкриття сутності
контейнеризації та її важливості в сучасному хмарному середовищі, а також
на визначення оптимальних методів та алгоритмів для її реалізації на
платформі AWS.
Для дослідження методів і алгоритмів контейнеризації буде розроблено
серверне програмне забезпечення для парсингу контенту WEB-сайтів.
Створення власного серверного програмного забезпечення дає можливість
проводити експерименти та тести з різними методами контейнеризації. Це
дозволяє краще розуміти, як ці методи взаємодіють з конкретними додатками
та середовищем розгортання.
31
Розроблене програмне забезпечення дає можливість порівнювати з
різними методами контейнеризації на однаковому наборі додатків та вимог.
Це дозволить об'єктивно оцінити переваги та обмеження кожного методу.
1.4 Висновки до розділу 1
Аналіз предметної області дозволив ретельно розглянути поняття
серверного програмного забезпечення та засоби для його ефективного
використання. Було проаналізовано процес запуску серверного програмного
забезпечення на сервері, зокрема в unix-системах, де було розглянуто важливі
аспекти та вимоги до цього процесу. Зокрема, висвітлено можливості
непрямого запуску.
Детально розглянуто контейнеризацію та Docker як один із ключових
інструментів для управління контейнерами. Висвітлено переваги
використання Docker у вирішенні завдань з розгортання серверних додатків.
Важливим аспектом була можливість запуску серверних додатків через
Docker, що спрощує розгортання, керування та масштабування додатків.
Також було розглянуто поняття Amazon Web Services (AWS) та подано
інформацію про цю платформу. AWS є однією з найпоширеніших та
потужних хмарних платформ, яка надає величезні можливості для
розгортання та управління серверним програмним забезпеченням.
На підставі отриманої інформації було поставлено задачі до
розробленої системи, які потрібно реалізувати в рамках кваліфікаційної
роботи магістра.
32
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ
2.1 Огляд існуючих технологій
Віртуальний сервер (VPS) - це обчислювальне середовище, створене
на базі фізичного сервера за допомогою віртуалізації. Він імітує
функціональність та можливості окремого фізичного сервера, але фактично є
віртуальним об'єктом в межах цього фізичного сервера. Які розділені між
користувачами послуги залежно від обраного тарифного плану.
Часто користувачі опиняються в ситуації, коли ресурси фізичного
виділеного сервера для них надмірні, ціна — занадто висока, а звичайний
shared-хостинг уже не відповідає потребам проєкту. У таких випадках VPS
стає компромісним варіантом. Таке рішення дає змогу отримати сильний та
автономний сервер, а головне — недорогий. Вартість оренди нижча саме
через те, що VPS споживає не всю потужність сервера, а тільки її частину.
Основні переваги віртуального сервера – автономність і гнучкість.
Оскільки це аналог окремого комп’ютера, то в користувача є певна свобода у
встановленні власного програмного забезпечення.
Клієнт отримує root-права, що дає змогу налаштовувати свій сервер та
перезавантажувати окремо від сусідніх, розміщених на тому ж комп’ютері
[12]. Сервери в хмарах навіть можна на деякий час відключати, наприклад, на
вихідні чи свята, коли в проєкті не відбуваються зміни.
Віртуальний сервер часто стає рішенням для проєктів, яким не вистачає
місця на звичайному shared-хостингу. До нього зазвичай додається
безлімітний інтернет-трафік, достатня для поставлених задач потужність
процесора та RAM, місткий диск.
Автономність VPS забезпечує стабільну роботу завдяки строгому
розділенню ресурсів між акаунтами клієнтів. Якщо ж VPS розгорнуто в
33
хмарі, то при проблемах в роботі одного з серверів, що живлять хмару, його
навантаження ділять між собою інші.
VPS-хостинг має ще один нюанс, сервером потрібно керувати, а для
цього необхідно мати навички адміністратора. Якщо користувач із такими
знаннями в команді відсутній, то керування замовляють у хостинг-
провайдера як окрему послугу.
Зазвичай такий сервер беруть в оренду великі інтернет-магазини,
розробники, стрімінгові сервіси, потужні портали з високою відвідуваністю.
Виділені сервери (Dedicated Servers) представляють собою фізичні
комп'ютери (сервери), які повністю належать одному користувачеві або
організації та призначені для їх виключного використання. Зазвичай
виділений сервер використовується для запуску сервісів із високим
споживанням ресурсів (наприклад, ігрового сервера) або сайтів з великою
кількістю відвідувань (великий інтернет-магазин чи інформаційний ресурс)
[13]. З метою безпеки для масштабних проектів сервер баз даних та веб-
сервер розташовують на різних машинах — у разі недоступності чи злому
одного із серверів інший сервіс не постраждає та продовжить роботу.
Перевагою є, те що ви маєте абсолютний контроль над фізичним
сервером, включаючи операційну систему, конфігурацію, безпеку та
налаштування. Це дозволяє налаштовувати сервер саме під потреби.
Виділений сервер зазвичай має значно більшу обчислювальну
потужність та ресурси порівняно з віртуальними серверами. Це робить його
ідеальним варіантом для великих і вимогливих застосунків, які вимагають
багато ресурсів.
На виділеному сервері відсутні інші користувачі, тому маєте більший
рівень ізоляції та безпеки. Сервер не ділиться ресурсами з іншими, що
зменшує ризик впливу інших користувачів на його продуктивність і безпеку.
Можливо встановлювати будь-яке програмне забезпечення на
виділений сервер, включаючи операційні системи, бази даних, веб-сервери та
інше. Це дає повний контроль над середовищем.
34
Є можливість фізично розмістити сервер, вибрати обладнання за
вимогами та навіть впливати на апаратну конфігурацію, наприклад, додавати
нове обладнання або замінювати компоненти.
В деяких випадках можливе збільшення обчислювальної потужності та
ресурсів, шляхом додавання додаткових серверів або компонентів до
існуючого виділеного сервера.
Виділені сервери можуть бути налаштовані для високої доступності та
резервного копіювання, що забезпечує надійність застосунку чи веб-сайту.
Багато постачальників хостингу надають послуги з обслуговування та
підтримки виділених серверів, що допомагає забезпечити безперебійну
роботу сервера.
Однак варто враховувати, що виділені сервери зазвичай коштують
більше, ніж віртуальні сервери, і вимагають більше технічних знань та
обслуговування. Вибір між виділеним сервером і іншими формами хостингу
залежить від ваших потреб, бюджету та рівня технічної експертизи.
Amazon Elastic Compute Cloud (Amazon EC2) - це веб-сервіс, який
пропонує обчислювальні ресурси у хмарному середовищі та входить до
інфраструктури Amazon Web Services (AWS).
Завдяки простому веб-інтерфейсу цього сервісу, користувачі можуть
легко отримувати доступ до обчислювальних потужностей та налаштовувати
ресурси, зекономивши час і зусилля. EC2 дарує повний контроль над
обчислювальними ресурсами та створює доступне середовище для роботи.
Ця служба суттєво скорочує час, потрібний для створення і запуску нового
сервера [14].
Amazon EC2 пропонує різні типи та розміри інстанції, що дозволяє
користувачам вибирати ресурси, які відповідають їхнім потребам,
включаючи об'єм процесора, обсяг оперативної пам'яті та обсяг сховища.
Також легко збільшувати або зменшувати кількість екземплярів EC2 в
залежності від потреб додатка або проекту. Це дозволяє масштабувати
ресурси вгору або вниз згідно з навантаженням.
35
AWS надає доступ до екземплярів EC2 в різних регіонах та доступних
зонах, що дозволяє розміщувати сервери ближче до аудиторії і забезпечувати
високу доступність.
Можливо вибирати операційну систему для екземплярів EC2,
включаючи Linux, Windows і інші операційні системи.
EC2 пропонує можливість використовувати сховища, такі як Amazon
Elastic Block Store (EBS), для зберігання даних, які пов'язані з вашими
екземплярами.
AWS надає різні засоби для забезпечення безпеки екземплярів EC2,
включаючи можливість налаштування відомих груп безпеки та використання
Identity and Access Management (IAM) для керування доступом.
Amazon EC2 працює на моделі оплати за використання, що дозволяє
платити тільки за фактично використані ресурси без необхідності придбання
фізичних серверів. Також легко інтегрується з іншими службами AWS,
такими як Amazon RDS (реляційна база даних), Amazon S3 (сховище
об'єктів), Amazon VPC (віртуальна приватна хмара) і багатьма іншими.
EC2 використовується для багатьох цілей, включаючи хостинг веб-
сайтів, розгортання додатків, обчислювальні задачі, тестування, аналіз даних
і багато інших. Він надає велику гнучкість і можливості для розширення
інфраструктури вашого проекту в хмарному середовищі AWS.
Ціни на Amazon EC2 можуть значно варіюватися в залежності від
декількох факторів, таких як типи і розміри інстансів, регіони, додаткові
послуги та типи контрактів [14]. AWS пропонує різні опції ціноутворення для
відповідності різним бюджетам і потребам користувачів. Ось кілька
ключових факторів, що впливають на ціни EC2.
1. Тип і розмір інстансу. AWS пропонує широкий вибір типів інстансів,
включаючи загальні, оптимізовані під обчислення, оптимізовані під пам'ять,
оптимізовані під сховище тощо. Кожен тип має власну цінову політику,
враховуючи його ресурси та властивості.
36
2. Регіон і доступна зона. Ціни на EC2 можуть варіюватися залежно від
регіону та доступної зони, в якій ви розміщуєте свій інстанс. Деякі регіони
можуть бути дорожчими через більший попит або особливості
інфраструктури.
3. Операційна система. Вартість використання EC2 також може
змінюватися в залежності від вибору операційної системи (наприклад, Linux
або Windows).
4. Час використання. Вартість обчислювальних ресурсів може бути
також залежною від того, наскільки довго ви використовуєте. AWS пропонує
різні моделі ціноутворення, включаючи плату за години, за відвідані секунди,
а також знижки для довгострокового користування.
5. Додаткові послуги. AWS пропонує багато додаткових послуг і
можливостей, таких як зберігання даних, мережеві сервіси, моніторинг,
резервне копіювання тощо. Використання цих послуг може вплинути на
загальну ціну.
Для точних цін на Amazon EC2 слід відвідати офіційний веб-сайт AWS
і використовувати калькулятор цін, де є можливість вибрати параметри, які
відповідають потребам, і розрахувати приблизні витрати на хмарні
обчислювання для проекту або бізнесу.
Amazon EC2 є одним із найпопулярніших сервісів обчислювального
хмарного обчислення, але існують інші хмарні провайдери, які пропонують
схожі послуги [15]. Порівняємо Amazon EC2 з двома іншими відомими
хмарними платформами: Microsoft Azure і Google Cloud Platform (GCP),
загальне порівняння зображено на рисунку 2.1.
Amazon EC2 (AWS). Масштабованість має великий вибір типів
інстансів, регіонів та зон доступності, що робить його дуже гнучким для
різних вимог користувачів.
37
Рисунок 2.1 - Порівняльна таблиця сервісів AWS, Microsoft Azure та
Google Cloud Platform
Екосистема має одну з найбільших екосистем хмарних послуг,
включаючи зберігання даних, бази даних, аналітику, мережеві сервіси та
інше.
Ціноутворення пропонує різні моделі ціноутворення, включаючи плату
за використання та знижки для довгострокового користування.
Microsoft Azure. Інтеграція з Microsoft-технологіями надає інтеграцію
з Microsoft-сервісами та продуктами, що робить його привабливим вибором
для організацій, які вже використовують Microsoft-рішення.
Підтримує гібридні хмарні рішення, що дозволяє легко інтегрувати
локальні і хмарні середовища.
Екосистема також має велику кількість сервісів і додаткових
можливостей, хоча вона може бути меншою за AWS.
Google Cloud Platform (GCP). Відомий своєю спрямованістю на
інновації та штучний інтелект. Він пропонує послуги машинного навчання та
аналітики даних, що привертають багато компаній.
GCP надає агресивне ціноутворення та можливість використовувати
різні опції оплати.
38
Діапазон послуг має багатий набір хмарних сервісів та додаткових
можливостей.
Рішення між цими хмарними платформами зазвичай залежить від
конкретних вимог вашого проекту або бізнесу, бюджету, інтеграції з
наявними технологіями та екосистемами, а також ваших власних уподобань.
Кожна з цих хмарних платформ має свої особливості та переваги, тому
важливо ретельно оцінити їх перед прийняттям рішення.
Більш детально розглянемо платформу від Amazon AWS Lambda - це
інноваційна безсерверна обчислювальна платформа, яка працює за
принципом функції як послуга та контролюється подіями. Ця обчислювальна
служба запускає код відповідно до подій і автоматично керує ресурсами,
необхідними для виконання цього коду. AWS Lambda була представлена у
листопаді 2014 року [16].
Порівняно з AWS EC2, головною метою AWS Lambda є спрощення
розробки невеликих додатків, які функціонують за запитом, реагуючи на
події або потоки нової інформації. AWS забезпечує миттєвий запуск функцій
Lambda відразу після спрацювання події. На момент 2018 року офіційно
підтримуються мови програмування Node.js, Python, Java, Go, Ruby та C# (з
використанням .NET Core). Наприкінці 2018 року AWS Lambda отримала
підтримку виконання коду на мовах програмування, що дозволяє
розробникам використовувати обрану мову [17].
AWS Lambda також підтримує захищений запуск вбудованих
виконуваних файлів Linux за допомогою виклику з підтримуваного
середовища виконання, такого як Node.js. Наприклад, на AWS Lambda можна
запустити код Haskell.
AWS Lambda відкриває нові можливості для реалізації різних
обчислювальних завдань та автоматизації дій без необхідності керувати
інфраструктурою серверів.
AWS Lambda був розроблений для таких випадків застосування, як
завантаження зображення або об'єкта до Amazon S3, оновлення DynamoDB
39
таблиць, реакція на клік на вебсайті або реагування на дані, що надійшли з
датчику пристрою IoT. AWS Lambda також може використовуватися для
автоматичного надання резервних послуг, викликаних користувацькими
запитами HTTP, та відключення таких служб, коли вони не
використовуються, заради економії ресурсів. Ці спеціальні запити HTTP
потрібно налаштовувати в службі AWS API Gateway, проте вони також
можуть обробляти аутентифікацію та авторизацію спільно з AWS Cognito.
На відміну від Amazon EC2, в якому перша година використання не
оплачується, AWS Lambda вимірюється з кроком 100 мілісекунд. Обсяги
нетарифікованого використання сервісу AWS Lambda не скасовуються через
12 місяців після реєстрації рахунку, на відміну від деяких служб AWS.
Загальна робота з AWS Lambda зображена на рисунку 2.2.
Рисунок 2.2 - Робота з AWS Lambda
Деякі сценарії використання, в яких послуги AWS Lambda
допомагають користувачам розв'язувати поширені проблеми.
HTTP API - за допомогою AWS Lambda можна інтегрувати або розгортати
логічні бекенди в хмарі та викликати функції, викликаючи HTTP-запити.
40
При інтеграції Amazon API Gateway з AWS Lambda не лише
знижуються витрати, але й користувачі також мінімізують зусилля щодо
експлуатації серверів та розширення послуг [18].
Якщо додаток обробляє велику кількість даних, збережених в Amazon
DynamoDB, можна спровокувати функції Lambda щоразу, коли записується,
оновлюється чи видаляються елементи у цій таблиці.
Ці події спровокують функції Lambda, які будуть обробляти,
аналізувати і можуть передавати ці дані до інших служб AWS, таких як
Amazon S3 для збереження результатів. Тобто користувачі можуть створити
повний процес обробки даних, комбінуючи різні ресурси AWS. Приклад
обробки даних за допомогою AWS Lambda зображено на рисунку 2.3.
Рисунок 2.3 - Приклад обробки даних за допомогою AWS Lambda
На зображенні видно, що дані із джерела (наприклад, Amazon
DynamoDB) надходять до AWS Lambda. Коли відбуваються події, такі як
запис, оновлення чи видалення даних, Lambda функції активуються для
обробки цих подій.
Після обробки дані можуть бути аналізовані та опрацьовані функціями
AWS Lambda, а результати можуть бути передані та збережені в інших
сервісах AWS, таких як Amazon S3. Це дозволяє створювати потужні та
гнучкі процеси обробки даних у хмарному середовищі без необхідності
керування фізичними серверами.
41
AWS Lambda потрібно платити лише за використання. Стягується
плата на основі кількості запитів на функції та тривалості їх виконання, часу
виконання коду.
Тривалість обчислюється з моменту виконання коду до завершення або
припинення виконання, округлена до найближчого 1 мс. Вартість буде
базуватися на потужності, виділеній для функції.Нижче наведено ціновий
список для Азіатсько-Тихоокеанського регіону (Сінгапур) цієї послуги
рисунку 2.4.
Рисунок 2.4 - Ціновий список для Азіатсько-Тихоокеанського регіону
Безплатний тариф використання AWS Lambda включає 1 мільйон
безкоштовних запитів і 400 000 GB-s обчисленого часу на місяць [19].
42
Для розробника економія часу на управління та експлуатацію
інфраструктури гарантує, що їх додаток може масштабуватися, і висока
доступність справді цінна. Сервіс AWS Lambda безсерверних обчислень
допомагає розробникам зосередитися на розробці своїх додатків, не
витрачаючи години на увагу до інфраструктури, на якій вони запускають свій
код.
Amazon Elastic Container Service (Amazon ECS) — це повністю
керована служба оркестровки контейнерів, яка спрощує розгортання,
керування та масштабування контейнерних програм. Описавши свою
програму та необхідні ресурси, і Amazon ECS запустить, відстежить і
масштабує програму за допомогою гнучких параметрів обчислення з
автоматичною інтеграцією до інших допоміжних служб AWS, які потрібні
вашій програмі [20]. На рисунку 2.5 зображено архітектуру Amazon Elastic
Container Service (Amazon ECS) на Amazon Web Services (AWS).
Рисунок 2.5 - Архітектура Amazon Elastic Container Service
Схема допомагає візуалізувати як компоненти Amazon ECS
співпрацюють один з одним та як вони можуть бути використані для
43
розгортання та управління контейнеризованими додатками в хмарному
середовищі AWS.
2.2 Вибір технологій
У сучасному світі інформаційних технологій швидкість розвитку та
поширення серверних додатків надзвичайно швидка. Щодня виникають нові
вимоги до розгортання, масштабування та управління додатками, і від
розробників вимагається знання та вміння використовувати найсучасніші
технології. Одним із найважливіших та актуальних напрямів є
контейнеризація, яка дозволяє ізолювати додатки та їхні залежності в
стандартизованих контейнерах для полегшення розгортання та управління.
Дана кваліфікаційна робота присвячена дослідженню методів та
алгоритмів контейнеризації сучасних серверних додатків, зокрема на базі
рішень Amazon Web Services (AWS). Вибір технологій для проведення цього
дослідження є ключовим аспектом, який визначає обрані методи,
інструменти та сервіси для досягнення мети дослідження. В цьому розділі
розглянуто процес вибору технологій та обгрунтуємо рішення, що стоять в
основі нашого дослідження.
Обґрунтований вибір технологій дозволяє створити надійну основу для
дослідження методів контейнеризації та їхньої застосовності в серверних
додатках. Під час виконання даної роботи буде розглянути різні варіанти, їх
переваги та обмеження, і буде визначено оптимальний набір інструментів для
досягнення цілей.
Вибір технологій для контейнеризації стає важливим завданням,
особливо у контексті платформи Amazon Web Services (AWS), яка є однією з
найпопулярніших хмарних платформ у світі. Актуальність вибору технологій
на платформі AWS визначається кількома ключовими чинниками.
AWS має широкий коло користувачів, включаючи стартапи,
підприємства та урядові організації. Вибір технологій контейнеризації на цій
44
платформі стає актуальним для багатьох організацій, які вже використовують
або планують використовувати AWS для розгортання своїх додатків.
AWS надає багато інструментів для контейнеризації, такі як Amazon
Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS),
Amazon Fargate та багато інших. Вибір серед цих рішень важливий для
оптимізації інфраструктури та розгортання.
Контейнеризація дозволяє досягти підвищеної продуктивності та
забезпечити безпеку в розробці та розгортанні додатків. Вибір правильних
технологій допомагає розробникам та інженерам досягти цих переваг.
З погляду дослідницької роботи, вибір технологій для контейнеризації
на AWS є ключовим для визначення ефективних методів та алгоритмів, які
відповідають сучасним вимогам у розробці серверних додатків.
Порівнюючи рішення AWS з Google Cloud і Microsoft Azure у контексті
контейнеризації, слід враховувати декілька ключових аспектів, таких як
сервіси, інструменти, підтримка спільноти та загальна стратегія.
Amazon Elastic Container Service (ECS) і Amazon Elastic Kubernetes
Service (EKS) - обидва сервіси пропонують відмінні можливості для
контейнеризації. ECS вважається більш спрощеним сервісом, підходить для
тих, хто бажає менше управління інфраструктурою, тоді як EKS забезпечує
управління Kubernetes та підтримує більшу гнучкість і розширюваність [21].
AWS має широкий спектр додаткових сервісів і інтеграцію з іншими
продуктами, які дозволяють розширити можливості розробки, моніторингу,
безпеки та інших аспектів проектів. AWS також має велику спільноту
користувачів та широкий обсяг документації. Підтримка надається AWS
Premium Support.
Google Kubernetes Engine (GKE) - це основний інструмент для
контейнеризації на Google Cloud. GKE спрощує розгортання та управління
Kubernetes-кластерами. Google також має Anthos, що дозволяє керувати
мультихмарними контейнерними додатками.
45
Google має багато інтегрованих сервісів, таких як BigQuery, TensorFlow
і Google Cloud Dataflow, що відповідають за обробку даних і штучний
інтелект. Google також має активну спільноту та добре документовані
ресурси. Google пропонує Google Cloud Support.
Azure Kubernetes Service (AKS) - це сервіс для керування Kubernetes-
кластерами на Azure. Microsoft також пропонує Azure Container Instances
(ACI) для простих контейнерів та Azure Container Service для інших сценаріїв
контейнеризації.
Azure інтегрується з іншими продуктами та сервісами, такими як Office
365, Azure DevOps, Azure SQL і багатьма іншими. Azure має розгалужену
базу користувачів та обширну документацію. Підтримка доступна через
Microsoft Azure Support [22].
Загалом, вибір між AWS, Google Cloud і Microsoft Azure залежить від
конкретних вимог та завдань вашого проекту. Кожна платформа має свої
переваги та можливості, і важливо розглянути їх з огляду на конкретні
потреби.
Цінова політика може варіюватися в залежності від конкретних послуг
і використання. AWS даже можливість користувачу контролювати витрати за
допомогою Cost Manager.
AWS Cost Manager (Менеджер витрат AWS) - це інструмент, який
надається Amazon Web Services (AWS) для керування і моніторингу витрат
на хмарні послуги. Цей інструмент допомагає користувачам зберігати
контроль над витратами, а також розуміти, як витрачаються кошти в межах
AWS-хмари.
AWS Cost Manager надає інформацію про витрати на різні послуги та
ресурси AWS. Користувачі можуть перевіряти свої поточні витрати та
використовувати цю інформацію для прийняття рішень. Сервіс також надає
можливість налаштовувати попередження про витрати. Користувачі можуть
встановлювати ліміти та отримувати сповіщення, коли витрати
наближаються до визначеного порогу.
46
Даний сервіс надає засоби аналізу витрат, включаючи графіки та звіти.
Користувачі можуть розглядати свої витрати на різних рівнях, від окремих
послуг до витрат за конкретний період.
Загалом AWS Cost Manager є корисним інструментом для підтримки
ефективного управління витратами в хмарному середовищі. Він допомагає
організаціям і розробникам зменшити ризики та збільшити ефективність
використання ресурсів AWS.
Вибір AWS є кращим завдяки широкому спектру сервісів для
контейнеризації, великій кількості інтегрованих продуктів та рішень, високій
безпеці та надійності, підтримці спільноти, а також активному екосистемі
додаткових інструментів і послуг. AWS також відомий своєю популярністю
та розповсюдженістю, що робить його сильнішим вибором для
контейнеризації серверних додатків та дослідження методів цього процесу.
Використання Docker для вивчення методів контейнеризації є
популярним підходом. Docker є одним з найпопулярніших та
найрозповсюдженіших інструментів для контейнеризації, і він має декілька
переваг.
Docker надає інтерфейс для створення, розгортання та керування
контейнерами, що робить процес контейнеризації досить простим. Існує
велика кількість інструментів та ресурсів, які підтримують Docker,
включаючи Docker Compose для оркестрації контейнерів, Docker Swarm для
кластеризації та Kubernetes для керування контейнерами.
Docker має велику активну спільноту користувачів та документацію,
яка робить навчання та розв'язання проблем більш доступними. Контейнери
Docker можуть бути легко перенесені між різними середовищами, що робить
їх ідеальними для вивчення і розробки.
Проте важливо враховувати, що контейнеризація - це більш широке
поняття, і існують інші інструменти та підходи, такі як контейнери на рівні
системи (наприклад, використовуючи rkt або Podman), або інші платформи
47
для контейнеризації. Вибір Docker як інструменту для вивчення методів
контейнеризації може бути гарним стартовим пунктом.
Вибір мови програмування для створення серверного додатка - це
ключове рішення, яке може суттєво вплинути на розвиток та продуктивність
майбутнього дослідження.
Перш за все, вибір мови повинен відповідати вимогам та цілям теми
роботи. Необхідно враховувати функціональні вимоги, масштабованість,
продуктивність, безпеку та інші аспекти, які важливі для серверного додатка.
Залежно від конкретних потреб серверного додатку, мови
програмування, такі як JavaScript/Node.js, Python, Java, Ruby, Go, а також C#
та інші, можуть бути гарними варіантами для створення серверних додатків.
Важливо ретельно проаналізувати всі фактори та зважити на потреби вашого
проекту перед прийняттям остаточного рішення.
Node.js - це вільна і відкрите середовище для виконання JavaScript поза
браузером. Воно базується на движку V8 від Google і розробляється як
серверний фреймворк для створення мережевих та серверних додатків.
Node.js надає ряд переваг та особливостей, які роблять його популярним
серед розробників.
Node.js призначений для розробки серверних додатків, таких як веб-
сервери, API, мікросервіси та інші серверні програми. Він дозволяє
виконувати JavaScript на сервері і взаємодіяти з іншими серверними
технологіями [23].
Дана мова програмування використовує асинхронну модель
програмування, що дозволяє обробляти багатозадачні операції без
блокування інших подій. Це робить її ефективним для задач, які вимагають
обробки багатьох одночасних запитів, таких як веб-сервери.
Node.js має велику та активну спільноту розробників, яка підтримує
розширення та бібліотеки. Існує безліч модулів, які полегшують розробку
різних видів додатків.
48
Дана мова програмування є відмінним вибором для розробників, які
бажають створити швидкі та ефективні серверні додатки з використанням
JavaScript. Вона дозволяє легко обробляти одночасні запити та реалізувати
різноманітні серверні сценарії.
Python - це високорівнева, інтерпретована мова програмування з
акцентом на читабельність коду і простоту використання. Вона була створена
Гвідо ван Россумом і вперше випущена в 1991 році. Python став однією з
найпопулярніших мов програмування завдяки своїй виразності та
багатофункціональності.
Python прагне мати зрозумілий і легкий для читання синтаксис. Він
використовує значущий відступ (іноді називають "Pythonic") для визначення
блоків коду, що полегшує структурування коду та зрозумілість.
Дана мова програмування є інтерпретованою мовою, що означає, що
виконання коду може бути виконане без необхідності компіляції. Це
полегшує розробку та налагодження програм.
Python має велику кількість бібліотек і модулів для різноманітних
завдань, таких як робота з базами даних, обробка даних, веб-розробка,
наукові обчислення, штучний інтелект, машинне навчання та багато інших.
Python використовується в широкому спектрі областей, від веб-
розробки і наукових досліджень до роботи з даними та аналізу, що робить
його важливим інструментом для багатьох розробників і дослідників.
Java - це високорівнева, об'єктно-орієнтована мова програмування, яка
була розроблена компанією Sun Microsystems (згодом придбаною Oracle
Corporation) і вперше випущена у 1995 році. Вона вирізняється свою
платформонезалежність, надійністю, високою продуктивністю та широкою
популярністю серед розробників.
Однією з ключових особливостей Java є її платформонезалежність.
Код, написаний на Java, може бути виконаний на будь-якій платформі, яка
має відповідну віртуальну машину Java (JVM - Java Virtual Machine). Це
49
дозволяє розробникам створювати кросплатформені програми, які працюють
на різних операційних системах.
Java - це об'єктно-орієнтована мова програмування, що дозволяє
розробникам моделювати реальні об'єкти та структурувати програмний код у
вигляді класів та об'єктів.
Дана мова програмування має велику кількість стандартних бібліотек
та фреймворків, які полегшують розробку різних видів програм. Багато
сторонніх бібліотек також доступні для різних завдань.
Java використовується в різних галузях, включаючи веб-розробку,
мобільну розробку (з використанням платформи Android), серверну
розробку, наукові дослідження та багато інших. Вона залишається однією з
найпопулярніших мов програмування завдяки своїм унікальним
характеристикам та багатофункціональності.
Вибір мови програмування Java для реалізації теми даної роботи
обґрунтовується кількома ключовими перевагами. Java надає велику
масштабованість завдяки підтримці багатопотоковості та можливості
використовувати конкурентні потоки для обробки багатьох запитів
одночасно. Це дозволяє створювати високонавантажені сервери та додатки,
які легко масштабувати при збільшенні навантаження.
Java має вбудовану оптимізацію та ефективні структури даних, що
дозволяють досягати високої продуктивності в обробці даних та виконанні
операцій. Також Java має вбудовані механізми безпеки, що роблять її
відмінним вибором для критичних додатків з великими обсягами даних.
Java відома своєю стабільністю та надійністю, що робить її популярним
вибором для критичних додатків, які не можуть собі дозволити відмову чи
недоступність.
Загалом, Java добре підходить для великих проектів та
високонавантажених додатків, завдяки своїм масштабованим можливостям,
продуктивності та стабільності.
50
Вибір операційної системи для перевірки методів контейнеризації
важливий, оскільки операційна система визначає середовище, в якому ви
будете розроблено, протестовано та буде проведено експеременти з
контейнерами.
Не всі операційні системи підтримують контейнеризацію однаково.
Наприклад, Linux має вбудовану підтримку контейнерів через технології, такі
як Docker та Kubernetes, що робить його популярним вибором для
контейнеризації. Деякі інші операційні системи, такі як Windows, також
мають підтримку контейнерів, але обмежену у порівнянні з Linux.
Якщо планується використання конкретної інфраструктури хмарних
обчислень або планується використовувати власну серверну інфраструктуру,
важливо вибрати операційну систему, яка підтримує необхідні інструменти
та сервіси для контейнеризації. Наприклад, для використання AWS ECS
(Elastic Container Service) або EKS (Elastic Kubernetes Service), Linux є
рекомендованим вибором.
Linux - це безкоштовна та відкрита операційна система, яка
розробляється спільнотою великої кількості розробників та користувачів по
всьому світу. Основу Linux становить ядро Linux, яке було розроблене
Лінусом Торвальдсом і вперше випущене в 1991 році. Однак операційна
система Linux включає не тільки ядро, але і широкий набір інших
компонентів, таких як системні утиліти, бібліотеки та інструменти розробки.
Linux широко використовується на серверах, вбудованих системах, в
області хмарних обчислень та в різних інших галузях завдяки своїй
надійності, гнучкості та відкритому вихідному коду.
Загалом, вибір операційної системи для перевірки методів
контейнеризації повинен враховувати конкретні потреби, інфраструктуру та
завдання.
Amazon Linux 2 - це операційна система, розроблена компанією
Amazon Web Services (AWS) спеціально для використання в хмарному
середовищі AWS. Вона є сучасною версією Amazon Linux і призначена для
51
ефективної роботи з інфраструктурою AWS, особливо для використання на
Amazon Elastic Compute Cloud (EC2) - хмарних віртуальних серверах AWS.
Amazon Linux 2 підтримує багато звідних функцій та інтерфейсів, які
притаманні попередній версії Amazon Linux, що полегшує міграцію та
оновлення існуючих додатків. Дана операційна система є популярним
вибором для розгортання додатків та сервісів на AWS, особливо для тих, хто
шукає операційну систему, оптимізовану для роботи у хмарному середовищі
AWS.
2.3 Висновки до розділу 2
У другому розділі було розглянуто технології та засоби, які будуть
використані для написання роботи. Були розглянуті основні поняття
віртуальних та виділених серверів, а також ключові сервіси AWS, такі як
EC2, Lambda та ECS. Цей огляд дозволив ліпше розуміти сутність та
особливості різних підходів до серверного програмного забезпечення в
хмарному середовищі.
Вибір конкретних технологій та інструментів був здійснений на основі
вимог та цілей дослідження. В результаті було обрано технології, які
найкраще відповідають завданням розробки системи для оптимізації методів
та алгоритмів контейнеризації сучасних серверних додатків на базі рішень
AWS. Обрані технології слугуватимуть основою для подальших робіт та
досліджень у цій області.
52
РОЗДІЛ 3 ОПТИМІЗАЦІЯ МЕТОДІВ І АЛГОРИТМІВ
КОНТЕЙНЕРИЗАЦІЇ СУЧАСНИХ СЕРВЕРНИХ ДОДАТКІВ НА БАЗІ
РІШЕНЬ AWS
3.1 Структура системи
У сучасному інформаційному середовищі доступ до великої кількості
інформації, розміщеної на веб-сайтах, є важливим завданням для багатьох
видів діяльності. Ця інформація може бути корисною для подальшого
аналізу, обробки та використання. В рамках даної роботи важливо було
розробити серверний додаток, який надасть можливість створити велике
навантаження на систему в невеликому відрізку часу.
Серверне програмне забезпечення - це комп'ютерна програма або набір
програм, які виконуються на сервері для надання послуг, обробки запитів і
забезпечення комунікації з клієнтами чи іншими серверами у мережі.
Для оптимізації методів і алгоритмів контейнеризації було розроблено
створено інструмент, який дозволить автоматизовано збирати інформацію з
веб-сайтів і виділяти посилання на сторонні ресурси. Причому для роботи з
даним серверним додатком потрібно тільки вказати назву сайту, далі
створений інструмент автоматично проаналізує всі сторінки ресурсу і знайде
всі сторонні посилання, які знаходилися на сторінках ресурсу.
Інструмент для пошуку сторонніх посилань на веб-сайті є важливим і
корисним зокрема з таких причин:
- Інструменти для пошуку сторонніх посилань дозволяють відстежувати,
як веб-сайт пов'язаний з іншими ресурсами в Інтернеті. Це може
допомогти в аналізі конкуренції та встановленні зв'язків з іншими
додатками або веб-сайтами, що може мати важливе значення для
бізнесу;
53
- Пошукові системи, такі як Google, враховують наявність сторонніх
посилань при оцінці ранжування веб-сайту в пошукових результатах.
Важливо відстежувати ці посилання і забезпечувати їх якість для
покращення SEO;
- Знаючи, які веб-сайти мають посилання на WEB-сайт, у користувача
зʼявляється можливість оцінити вплив та репутацію WEB-сайту в
Інтернеті;
- Виявлення сторонніх посилань може допомогти виявити можливі
загрози безпеці, такі як небажані посилання або потенційно шкідливі
джерела;
- Виявлення інтересів і потреб користувачів, які переходять на веб-сайт з
інших ресурсів, допомагає внутрішній оптимізації контенту та
зміцненню зв'язків з аудиторією.
Загалом, інструменти для пошуку сторонніх посилань можуть значно
полегшити аналіз та оптимізацію веб-сайту, а також забезпечити важливий
контекст для прийняття рішень в інтернет-просторі.
Розроблене програмне забезпечення використовує багатопотоковий
підхід для одночасного обходу та аналізу різних сторінок веб-сайту. Це
дозволяє оптимізувати час парсингу та підвищити швидкість обробки.
Багатопотоковість (або багатозадачність) - це концепція в
обчислювальній науці та програмуванні, яка дозволяє виконувати більше
одного потоку (або задачі) в одній програмі або на одному комп'ютері
одночасно. Поток - це найменша одиниця обробки в багатопотоковій системі,
і вона виконується паралельно з іншими потоками.
Багатопотоковість дозволяє виконувати декілька потоків паралельно,
що може покращити продуктивність обчислень на багатьох ядрах процесора
або комп'ютерах з багатьма процесорами.
Потоки можуть виконуватися асинхронно, тобто без суворого графіка
виконання. Вони можуть взаємодіяти між собою та з іншими частинами
програми через спільні ресурси або механізми синхронізації.
54
Потоки можуть ділити спільні ресурси, такі як пам'ять або файли, що
дозволяє більш ефективно використовувати системні ресурси.
Багатопотоковість допомагає програмістам створювати більш
швидкодіючі та ефективні програми, особливо в обчислювально-інтенсивних
завданнях та програмах, які вимагають одночасної обробки багатьох завдань,
таких як мережеві додатки, графічні ігри та серверні додатки.
Розроблений додаток має можливість налаштування параметрів
парсингу, таких як глибина пошуку, обмеження на кількість сторінок,
інтервали запитів тощо. Додаток аналізує HTML-код сторінок і виявляє
посилання на інші ресурси. Він відстежує посилення на сторонні ресурси
(ресурси, доменне імʼя яких відрізняється від заданого в параметрах системи)
та зберігає їх для подальшого аналізу.
Доменне ім'я (англ. Domain Name) - це читабельне текстове ім'я, яке
використовується для ідентифікації конкретної мережі чи ресурсу в
Інтернеті. Доменні імена використовуються замість IP-адрес, що дозволяє
людям зручно взаємодіяти з веб-сайтами та іншими ресурсами, не
обов'язково пам'ятати числові IP-адреси.
Розроблена система включає в себе розділення системи на
функціональні модулі або компоненти, які відповідають за різні аспекти
функціональності. Цей підхід до розробки дозволяє полегшити розробку,
управління та підтримку системи, розбивши її на менші, самостійні блоки.
Системне програмне забезпечення поділено на наступні функціональні
компоненти:
- Компонент інтерфейсу користувача;
- Компонент завантаження HTML документу за посиланням;
- Компонент парсингу HTML документу для знаходження посилань на
сторінці;
- Модуль генерації Excel файлу з результатами;
- Модуль відправки файлу користувачу.
55
Парсинг (від англ. parsing) - це процес аналізу текстового чи
структурованого документа з метою виділення корисної інформації або
визначення структури цього документа. Парсинг використовується в
інформаційних технологіях для обробки та розуміння даних, які зазвичай
представлені у текстовій або структурній формі, такі як HTML-сторінки,
JSON-файли, XML-документи, програмний код, лог-файли тощо.
Загальна схема роботи розробленого програмного застосунку
зображено на рисунку 3.1.
Рисунок 3.1 - Схема роботи розробленого ПЗ
Компонент інтерфейсу користувача для системи пошуку сторонніх
посилань на сторінці має мати декілька важливих характеристик та
функціональних елементів.
Користувачу дозволяє ввести URL-адресу веб-сторінки, на якій
потрібно провести пошук сторонніх посилань. Після введення URL
користувач повинен натиснути кнопку “Пошук” для початку процесу
56
пошуку. Для конфігурування параметрів пошуку є можливість налаштувати
пошук.
Компонент завантаження HTML сторінки в систему відповідає за
процес отримання HTML-коду з веб-ресурсу (веб-сайту) для подальшого
аналізу та обробки. Даний компонент використовує HTTP-протокол для
взаємодії з веб-ресурсом. Він може виконувати HTTP-запити, такі як GET
або POST, для отримання сторінки. Після відправки запиту компонент
отримує HTTP-відповідь від сервера, яка містить HTML-код сторінки. Ця
відповідь може містити заголовки, статус-код, кешовану інформацію та інші
дані.
HTTP-запит (HTTP request) - це повідомлення, яке клієнт (наприклад,
веб-браузер) відправляє на веб-сервер для запиту ресурсу чи виконання
певної дії. HTTP-запити є ключовими засобами взаємодії між клієнтом і
сервером в рамках HTTP-протоколу (Hypertext Transfer Protocol). HTTP-
запити мають різні методи, які визначають тип операції, яку клієнт хоче
виконати на сервері.
Компонент парсингу HTML документу, призначений для пошуку
сторонніх посилань на сторінці, базується на принципах аналізу HTML-коду
веб-сторінки для виділення посилань. Спочатку компонент отримує HTML-
код сторінки, яку необхідно проаналізувати. Це може бути здійснено завдяки
компоненту завантаження сторінки, як описано раніше.
Дані даний компонент аналізує HTML-код сторінки для пошуку
HTML-елементів, які містять посилання. Найпоширеніші елементи, які
містять посилання, включають теги <a> для текстових посилань та теги
<img>, <script>, <link>, <iframe>, <form> та інші для посилань на
зображення, скрипти, таблиці стилів, вбудовані фрейми та інше. Для аналізу
сторінки було використано сторонню бібліотеку Jsoup.
Jsoup - це бібліотека для мови програмування Java, призначена для
парсингу та обробки HTML-документів. Ця бібліотека робить роботу з
HTML-кодом на Java більш простою і зручною. Jsoup надає можливість
57
витягти інформацію з HTML-сторінок, модифікувати їх та використовувати
отримані дані для різних цілей, таких як веб-скрапінг, аналіз веб-сторінок,
створення вмісту для веб-сайтів та інше.
Jsoup є досить популярним інструментом серед розробників для роботи
з HTML на платформі Java і використовується для різноманітних завдань,
пов'язаних з обробкою веб-документів.
Після знаходження HTML-елементів, що містять посилання, компонент
виділяє URL-адреси, які містяться в атрибутах цих елементів. URL-адреси
можуть бути розміщені у властивостях, таких як href (для тегу <a>), src (для
<img> та <script>), href (для <link>), тощо.
Не всі URL-адреси є сторонніми посиланнями, іноді на сторінці
можуть бути та внутрішні посилання на той же сайт. Компонент системи
використовує фільтри, щоб визначити, які з посилань є сторонніми і які -
внутрішніми.
Також вищезазначений компонент зберігає знайдені сторонні
посилання для подальшого використання або обробки. Посилання
зберігається до бази даних Redis у певний ключ, де назва ключа - це доменне
імʼя сайту, по якому виконувався пошук.
Redis (Remote Dictionary Server) - це дистриб'ютована інтернет-система
управління базами даних, яка використовується для зберігання і кешування
даних у вигляді ключ-значення. Redis володіє великою швидкістю і низькою
латентністю і є дуже потужною системою для обробки даних у реальному
часі. Він широко використовується в веб-розробці та інших галузях
інформаційних технологій.
Redis широко використовується для зберігання сесійних даних,
кешування запитів до баз даних, реалізації сесій віддалених користувачів,
моніторингу ситуацій в реальному часі, логування та інших завдань, де
швидкодія та низька латентність є важливими.
У випадку знаходження компонентом посилання на поточний WEB-
сайт, розроблений елемент системи використовує рекурсію і передає
58
знайдену адресу сторінки на модуль завантаження HTML документу. Це
дасть можливість пройтися по всім сторінкам системи та знайти всі сторонні
посилання.
Рекурсія - це процес, коли компонент системи викликає самого себе в
своєму власному визові. У багатьох мовах програмування це дозволяє
функції виконувати ітеративні завдання за допомогою рекурсивних викликів.
Рекурсія часто використовується для розв'язання проблем, які можуть бути
розділені на менші аналогічні проблеми.
Після того, як всі сторінки ресурсу були оброблені, система передає
виконання запиту наступному компоненту системи, а саме компоненту
генерації Excel файлу.
Файл Excel - це файл, який створений та збережений за допомогою
програмного засобу Microsoft Excel або інших аналогічних електронних
таблиць. Excel є частиною пакету офісних програм Microsoft Office, і він
використовується для створення, редагування та аналізу електронних
таблиць.
Отримані дані по введеному ресурсу отримуються з бази даних та
відбувається генерація файлу. Створений файл знаходиться в файловій
системі та має імʼя <domain-name>.xlsx.
Файлова система (File System) - це спеціальна програмна частина
операційної системи, яка відповідає за організацію та керування файлами та
каталогами на комп'ютерному пристрої або в комп'ютерній мережі. Файлові
системи дозволяють структурувати та зберігати дані, надають доступ до
файлів і директорій, забезпечують керування правами доступу та
забезпечують низькорівневий доступ до носіїв із зберіганням даних (таких як
жорсткі диски, флеш-накопичувачі, CD-ROM і інше).
Отримавши файл система відправляє результати виконання
користувачу за допомогою відкритого HTTP запиту.
Для контейнеризації розробленої системи було використано технології
контейнеризації, а саме Docker. Docker - це платформа для контейнеризації
59
програмного забезпечення, яка дозволяє розробникам і системним
адміністраторам упаковувати, розгортати та виконувати додатки та їх
залежності в ізольованих контейнерах. Контейнери Docker надають зручний
спосіб розгортати і запускати додатки в різних середовищах, будь-то на
робочому столі в локальному сервері або в обласних хмарних обчисленнях.
Контейнери Docker ізолюються один від одного та від операційної
системи хосту. Це означає, що додаток, який працює в контейнері, не
взаємодіє з іншими контейнерами або процесами на хості. Це забезпечує
високий рівень ізоляції та безпеки.
Тако, Docker надає можливість створювати мережі для зв'язку між
контейнерами та обсяги зберігання для зберігання даних. Це дозволяє
контейнерам взаємодіяти між собою та зберігати дані, які вони обробляють.
В результаті контейнеризації за допомогою Docker система стала
портативною, ізольованою і легко масштабується, що дозволяє розробникам і
IT-фахівцям спрощувати розгортання та керування додатками в будь-якому
середовищі.
Розроблена система працює в контейнері, тому для забезпечення
високої швидкодії системи було обрано використання AWS ECS для
динамічного масштабування системи в рамках хмарних рішень AWS.
ECS дозволяє масштабувати розроблені контейнери на основі
реального навантаження. Це означає, що у системи зʼявляється можливість
додавати або видаляти контейнери автоматично, коли потрібно, щоб
впоратися зі зростанням обсягів роботи. Це особливо важливо для
високонавантажених систем, де навантаження може коливатися.
ECS легко інтегрується з іншими AWS-сервісами, такими як Elastic
Load Balancing для балансування навантаження, Amazon CloudWatch для
моніторингу та багатьма іншими.
Amazon Elastic Load Balancing (ELB) - це керований сервіс
балансування навантаження, надається Amazon Web Services (AWS), який
дозволяє розподіляти вхідний трафік між декількома серверами або
60
екземплярами Amazon EC2 (Elastic Compute Cloud). Основна мета Elastic
Load Balancing полягає в забезпеченні високої доступності та надійності
додатків, зменшенні ризику однієї точки відмови та покращенні
продуктивності.
Основні переваги використання Elastic Load Balancing включають
збільшення доступності, надійності та масштабованості додатків,
забезпечення безперебійної роботи навіть у випадку відмови деяких серверів,
та автоматичне виявлення та розподіл навантаження на сервери. ELB
допомагає спростити архітектуру додатків і забезпечити їх ефективну роботу
в хмарному середовищі AWS. Схема розробленого методу контейнеризації
системи зображено на рисунку 3.2.
Рисунок 3.2 - Схема розробленого методу контейнеризації системи
Тобто для збільшення швидкодії системи було використано рішення
AWS ECS, яке дало можливість автоматично запускати новий контейнер зі
61
створеним додатком, а також AWS Elastic Load Balancing який дозволяє
автоматично розподіляти навантаження між створеними контейнерами.
3.2 Опис функцій системи
Розроблена система пошуку посилань на сторонні ресурси - це
програмний інструмент, призначений для аналізу вмісту WEB-сторінок з
метою знаходження та збору посилань на інші ресурси. Ця система важлива
для веб-скрапінгу, індексування веб-контенту та отримання посилань на
зовнішні сторінки.
Індексування веб-контенту - це процес збору та організації інформації з
WEB-сторінок з метою створення пошукового індексу, який допомагає
користувачам знаходити відповідну інформацію при використанні
пошукових систем.
WEB-індексування допомагає користувачам легко та швидко
знаходити необхідну інформацію в глибокому та розповсюдженому світі
Інтернету. Пошукові системи, такі як Google, дозволяють відповідати на
запити мільйонів користувачів за декілька мілісекунд.
Наявність посилання на сторонні ресурси при індексації WEB ресурсу
може мати як позитивні, так і негативні наслідки. Посилання на сторонні
ресурси означають, що власник не контролює зміст або стан цих ресурсів.
Якщо сторінка, на яку посилаєтеся, змінюється або видаляється, то
посилання може втратити свою корисність.
Якщо WEB-мастер посилається на сторонні ресурси, немає ніякої
гарантії їх доступності, надійності або довгострокову стабільність. Це може
вплинути на досвід користувачів та роботу сайту.
Якщо не контролювати сторонні ресурси, то існує ризик спаму або
введення шкідливих посилань на сайті через сторонні ресурси.
62
Розроблена система для пошуку посилань на сторонні ресурси може
надати користувачу кілька важливих речей:
- Автоматизація процесу збору посилань;
- Ефективний аналіз контенту;
- Виявлення нових ресурсів;
- Покращення пошукової оптимізації (SEO).
Система допомагає автоматизувати та спростити процес збору
посилань на сторонні ресурси з веб-сайтів. Замість ручного пошуку та
внесення посилань, система може автоматично визначити та зберегти
потрібні посилання.
Розроблена система може аналізувати вміст сторінок, що містять
посилання. Це може бути корисним для вивчення та аналізу контексту, в
якому використовуються ці посилання. Також система допомагає виявити
нові ресурси, які можуть бути корисними для подальшого використання або
дослідження.
Аналіз посилань на сторонні ресурси може бути корисним для
покращення SEO вашого веб-сайту, оскільки він допомагає зрозуміти, як ваш
контент пов'язаний з іншими ресурсами в Інтернеті.
Загалом розроблена система спрощує та поліпшує процес збору та
аналізу посилань на сторонні ресурси, що може бути корисним для
досліджень, розвитку веб-сайтів, SEO та вивчення інтернет-середовища в
цілому.
Для більш простої комунікації системи з клієнтом було розроблено
користувацький інтерфейс, який дає можливість просто вказати домене імʼя
та при необхідності задати додаткові умови для пошуку. Для простоти
роботи користувацький інтерфейс працює через браузер та дає можливість
власнику даного програмного забезпечення розмістити розроблений додаток
в мережі інтернет і дати доступ до системи за допомогою URL посилання.
URL (Uniform Resource Locator) посилання - це текстові рядки, які
вказують адресу ресурсу в Інтернеті. URL визначають, де і як можна знайти
63
конкретний ресурс в мережі, включаючи веб-сторінки, зображення, відео,
файли та інше.
Розроблений клієнтський інтерфейс є кросбраузерним. Кросбраузерний
клієнтський інтерфейс сприяє тому, щоб розроблений сайт був доступним
для максимальної кількості користувачів, незалежно від їхнього вибору веб-
браузера, операційної системи чи пристрою. Він сприяє покращенню
користувацького досвіду та забезпеченню більшої досяжності вашого веб-
сайту, користувацький інтерфейс системи зображений на рисунку 3.3.
Рисунок 3.3 - Користувацький інтерфейс системи
Для отримання результату клієнту потрібно просто ввести назву
домену та натиснути пошук. Далі система виконає всі потрібні дії для того,
щоб знайти посилання на сторонні ресурси. Результатом роботи програми
64
буде файл звіту, який відобразить список всіх посилань, знайдених на
ресурсі, а також кількість знайдених посилань на сторінках ресурсу.
Файл звіту - це документ або файл, який містить інформацію, що
висвітлює результати дослідження, аналізу, подій або будь-якої іншої
діяльності. Файли звіту використовуються для представлення даних, фактів,
висновків та рекомендацій у структурованій та зрозумілій формі для
аудиторії, яка може бути зацікавлена цією інформацією. Результат роботи
системи у вигляді Excel файлу зображений на рисунку 3.4.
Рисунок 3.4 - Результат роботи системи у вигляді Excel файлу
Вибраний формат Excel добре підходить для представлення даних у
вигляді табличної структури. Він дозволяє організувати дані у вигляді рядків
і стовпців, що спрощує їх редагування та аналіз.
65
Excel дозволяє користувачам легко редагувати дані, додавати
коментарі, фільтрувати та сортувати інформацію. Він є широко
розповсюдженим і має дружній інтерфейс.
Результати роботи також зберігаються в базі даних Redis та мають
обмежений час життя. Redis підходить для багатьох сценаріїв від кешування
даних до роботи з чергами подій та зберігання сесій. Важливо враховувати,
що Redis підходить не для всіх завдань, і для складних аналітичних операцій
зазвичай використовуються реляційні бази даних. Вибір Redis є
обґрунтованим, якщо швидкість та низька латентність важливі для вашого
проекту.
Автоматичне масштабування (Auto Scaling) є важливою функцією
системи для забезпечення ефективності та надійності. В рамках системи
контейнеризації інфраструктури AWS ECS, автоматичне масштабування
відбувається за допомогою служби Amazon ECS Auto Scaling.
Для автоматичного масштабування інфраструктура AWS спостерігає за
різними параметрами, такими як навантаження CPU, пам'ять, мережа тощо.
Вибір параметрів моніторингу залежить від конкретних потреб.
Адміністратор системи встановлюєте пороги або правила для
моніторингу, які вказують системі, коли потрібно масштабувати або
зменшувати кількість контейнерів. Наприклад, можна встановити правило,
яке активує масштабування, якщо середнє навантаження CPU на всіх
контейнерах перевищує 70% протягом певного часу.
Після налаштування параметрів моніторингу і правил, ECS Auto
Scaling автоматично керує масштабуванням, запускаючи або зупиняючи
контейнери за необхідності. Система не потребує ручного втручання.
Також, автоматичне масштабування допомогло зменшити витрати на
інфраструктуру, через те, що є можливість налаштувати систему так, щоб
вона використовувала ресурси тільки за необхідності.
66
Автоматичне масштабування важливе для забезпечення ефективності
та високої доступності додатків, особливо в умовах змінного навантаження
та динамічних середовищ хмарної інфраструктури.
3.3 Забезпечення захисту інформації при роботі зі створеною
системою
Захист даних - це критичний аспект в інформаційній безпеці та
управлінні даними. Важливість захисту даних включає в себе наступні
аспекти:
- Конфіденційність;
- Цілісність;
- Доступність;
- Законодавча вимога;
- Довіра користувачів і клієнтів;
- Зменшення фінансових ризиків.
Захист даних забезпечує конфіденційність інформації. Це означає, що
лише авторизовані користувачі мають доступ до даних, інформація не
розголошується небажаним особам. Збереження конфіденційності важливо
для особистих даних, комерційної інформації, лікарських записів та багатьох
інших видів даних.
Захист даних допомагає зберегти цілісність інформації. Це означає, що
дані не були змінені без дозволу або безслідно втрачені. Цілісність особливо
важлива для даних, які використовуються для важливих рішень, таких як
фінансові транзакції або медичні записи.
Захист даних також забезпечує доступність інформації. Це означає, що
дані доступні відповідним користувачам, коли вони їх потребують.
Недоступність даних може призвести до простою системи або інших
проблем в роботі.
67
Законодавці в багатьох країнах встановлюють обов'язки щодо захисту
даних, особливо особистих даних. Невиконання цих вимог може призвести
до юридичних наслідків, включаючи штрафи та відповідальність.
Клієнти та користувачі повинні довіряти організації, яка зберігає їхні
дані. Незабезпеченість даних може поставити під сумнів довіру користувачів,
що може призвести до втрати клієнтів та репутації.
Втрата даних або порушення безпеки може призвести до фінансових
втрат внаслідок штрафів, судових позовів або втрати бізнесу. Захист даних
допомагає зменшити ці ризики.
Загалом, захист даних є критичним для забезпечення безпеки, довіри та
успіху в сучасному інформаційному світі. Безпека даних повинна бути
важливим аспектом для будь-якої організації або проекту.
Розроблена система є загальнодоступною, тобто це система, яка
доступна для користувачів або клієнтів відкритим чи загальнодоступним
способом. Це означає, що будь-яка особа або організація може отримати
доступ до цієї системи без необхідності авторизації або спеціальних дозволів.
Дані, які користувачі додатка вводять в пошук системи - є також
публічними, тому при вході на сторінку додатка користувач автоматично
погоджується з умовами надання послуг.
Умови надання послуг (Terms of Service, ToS), також відомі як угода
користувача, це юридичний документ, який визначає умови, за якими
користувач може використовувати продукт або послугу, надану якоюсь
компанією, організацією або іншим постачальником послуг. Умови надання
послуг містять важливу інформацію про права та обов'язки користувача, а
також правила та обмеження, які стосуються використання продукту чи
послуги.
Всі дані, отримані в результаті роботи системи зберігаються в базу
даних Redis та зберігаються в захищеному середовищі. Всі дані збережені в
Redis мають час дії, тобто будуть видалені автоматично через деякий час.
68
HTTPS (Hypertext Transfer Protocol Secure) - це протокол забезпеченого
обміну інформацією між веб-серверами і клієнтами. Використання HTTPS
допомагає забезпечити захист інформації, яка передається через мережу
Інтернет, і має кілька важливих переваг.
Даний протокол використовує шифрування для захисту даних під час
їх передачі між клієнтом і сервером. Це означає, що навіть якщо зловмисник
підслуховує з'єднання, він не зможе розшифрувати дані.
HTTPS використовує цифрові сертифікати для підтвердження
ідентичності веб-сайту. Це допомагає уникнути атак середньої людини (Man-
in-the-Middle) і забезпечує користувачам впевненість, що вони спілкуються з
правильним веб-сайтом. Також протокол допомагає захищати конфіденційні
дані, такі як паролі, особиста інформація та платежі. Це особливо важливо
для веб-сайтів, які обробляють чутливу інформацію.
Встановлення HTTPS на WEB-сервері зазвичай потребуєте SSL-
сертифікат, який виданий авторитетним центром сертифікації.
SSL-сертифікат (Secure Sockets Layer certificate) - це цифровий
сертифікат, який використовується для забезпечення захищеного з'єднання
між веб-сервером і клієнтом за допомогою протоколу HTTPS (Hypertext
Transfer Protocol Secure). SSL-сертифікати використовуються для
шифрування даних, пересилання даних в безпеці і підтвердження
ідентичності веб-сайту.
Однією з головних функцій SSL-сертифіката є шифрування даних, які
передаються між клієнтом і сервером. Це означає, що навіть якщо
зловмисник отримує доступ до перехоплення даних, він не може прочитати
їх, оскільки вони зашифровані.
Для отримання SSL-сертифіката власник WEB-сайту зазвичай повинен
звернутися до авторитетного центру сертифікації (Certificate Authority, CA),
який видає довірені сертифікати. Після отримання SSL-сертифіката його
можна встановити на WEB-сервері, і він буде використовуватися для захисту
з'єднань HTTPS на вашому веб-сайті.
69
Захист даних при роботі з контейнерами Docker важливий для
забезпечення безпеки вашої інфраструктури та даних. При створенні власних
контейнерів потрібно використовувати тільки офіційні базові образи, які
підтримуються та оновлюються спільнотою Docker. Це допомагає уникнути
потенційних вразливостей, які можуть бути в основі контейнера.
Потрібно регулярно оновлювати контейнери та їх компоненти, щоб
виправити виявленні вразливості. Потрібно використовувати системи
автоматичних оновлень для спрощення цього процесу.
Також треба встановлювати системи моніторингу і журналювання для
відстеження активності в контейнерах. Переглядаючи логи, можна виявити
потенційні загрози та аномальну активність.
Можна також використовувати механізми відокремлення контейнерів,
такі як Docker's built-in namespaces та cgroups, щоб уникнути можливого
впливу зловмисників на інші контейнери або господарську систему.
Захист даних при роботі з Amazon Web Services (AWS) є важливою
задачею, оскільки AWS пропонує різноманітні послуги для збереження та
обробки даних в хмарному середовищі.
Рекомендовано використовувати AWS Identity and Access Management
(IAM) для управління доступом користувачів та ролей до AWS ресурсів.
Потрібно встановлювати обмеження доступу до конкретних операцій і
ресурсів для забезпечення принципу найменших привілеїв.
Також потрібно встановлювати Multi-Factor Authentication (MFA) для
додаткового рівня аутентифікації для облікового запису користувача.
Загальний захист даних в AWS вимагає від долучення до комплексної
стратегії безпеки та впровадження кількох заходів і практик. AWS надає
інструменти і послуги для забезпечення високого рівня безпеки ваших даних,
але від вас залежить їх належна настройка і використання.
70
3.4 Технічні вимоги для роботи з системою
Технічні вимоги для роботи системи визначають необхідність та
можливості апаратних та програмних компонентів, необхідних для
успішного функціонування системи.
Технічні вимоги допомагають забезпечити сумісність системи з
апаратним та програмним середовищем, на якому вона має працювати.
Вимоги визначають мінімальну версію операційної системи, роздільну
здатність екрана, кількість доступної оперативної пам'яті, версії браузерів
тощо. Це допомагає уникнути ситуацій, коли система несправна або працює
некоректно через несумісність або недостатні ресурси.
Встановлення вимог до продуктивності системи допомагає визначити,
наскільки швидко система повинна виконувати завдання. Це важливо для
забезпечення зручності користувачів і ефективності роботи системи.
Технічні вимоги можуть містити заходи безпеки, такі як вимоги до
шифрування даних, контролю доступу, автентифікації та аудиту безпеки. Це
допомагає захистити систему та дані від несанкціонованого доступу та атак.
Вимоги до стабільності можуть визначати максимальний час
недоступності системи або час відновлення після відмови. Це важливо для
підтримання безперебійної роботи системи, особливо у сферах, де
доступність є критичною.
Якщо система має взаємодіяти з іншими системами, то технічні вимоги
також можуть визначати протоколи комунікації, формати даних та інші
аспекти, необхідні для успішної інтеграції.
Встановлення технічних вимог є важливим етапом при розробці будь-
якої системи, оскільки воно допомагає визначити параметри, за якими буде
оцінюватися її успішність та забезпечити відповідність бізнес-потребам і
вимогам користувачів.
71
Розроблена система повинна запускатися через Amazon Web Services
(AWS) Elastic Container Service (ECS), та має бути оркестрована в середовищі
контейнерів, щоб забезпечити масштабованість, керованість та доступність.
Система повинна бути упакована в контейнери за допомогою Docker.
Це означає, що кожен компонент системи (наприклад, додатки, мікросервіси,
сервери баз даних) має бути упакований в Docker-контейнер для ізоляції та
переносимості.
Також потрібно створити кластер ECS, який представлятиме собою пул
обчислювальних ресурсів, доступних для системи. Кластер може включати в
себе віртуальні машини (EC2) або може бути використано сервіс AWS
Fargate для роботи з контейнерами без необхідності управління власними
серверами.
Кластер (або комп'ютерний кластер) - це група комп'ютерів або
серверів, які об'єднуються в одну систему для спільної роботи та виконання
специфічних завдань. Кластери використовуються для підвищення
продуктивності, надійності та доступності обчислювальних ресурсів та
додатків.
Система повинна бути сконфігурована за допомогою задач та сервісів
AWS ECS. Задачі визначають, які контейнери запускаються разом, а служби
визначають, як керувати цими задачами. Адміністратор системи можете
використовувати служби для автоматичного масштабування та управління
доступністю.
Рекомендовано налаштувати мережеві політики для контейнерів, щоб
визначити, як вони можуть взаємодіяти між собою та з іншими сервісами в
AWS. Дозволяється використовувати мережі Amazon VPC для ізоляції
контейнерів та створення захищених мережевих зон.
Обов'язкового потрібно враховувати можливість автоматичного
масштабування системи відповідно до зростання навантаження. AWS ECS
дозволяє налаштовувати масштабність з урахуванням певних метрик, які
вказують на необхідність масштабування.
72
Для налаштування домену для доступу до AWS-сервісу можна
використовувати сервіс Route 53, який надається AWS і призначений для
керування доменами та DNS-записами.
Amazon Route 53 - це веб-сервіс DNS (Domain Name System), який
надається Amazon Web Services (AWS). Route 53 дозволяє керувати
доменами та DNS-записами, а також забезпечує безперервний доступ до
вашого веб-сайту та інших ресурсів через Інтернет.
Route 53 дозволяє реєструвати нові домени (які закінчуються на
розширення, такі як .com, .org, .net тощо) прямо з сервісу. У адміністратора
системи є можливість придбати нові домени та керувати наявними.
За допомогою даного сервісу адміністратор системи може створювати
та керувати DNS-записами для доменів. Це включає A-записи, CNAME-
записи, MX-записи, TXT-записи та інші, які використовуються для
налаштування напрямків трафіку та ідентифікації ресурсів.
Route 53 може служити як глобальний балансувальник навантаження
для розподілу трафіку між різними регіонами або екземплярами створеного
додатка. Він враховує регіональні фактори та доступність, спрямовуючи
трафік на найближчий сервер.
Також даний сервіс підтримує динамічні DNS-записи, які можуть
оновлюватися автоматично на основі зміни IP-адреси сервера. Це особливо
корисно для додатків, які використовують авто-масштабування.
Amazon Route 53 є потужним та надійним інструментом для керування
доменами та DNS-записами, який інтегрується з іншими сервісами AWS для
забезпечення доступності та безпеки вашого веб-сайту та додатків.
Для запуску Java-додатків в контейнері Docker потрібно враховувати
технічні вимоги та кращі практики. Додаток на Java потребує встановленого
JRE в контейнері. Адміністратор повинен вибрати версію JRE, яка відповідає
вимогам запуску проекту. Умови запуску описані в файлі README.MD.
Файл README.md - це текстовий файл у форматі Markdown, який
зазвичай включається в корінь проекту або репозиторію коду. Його
73
призначення полягає в наданні користувачам, розробникам або
співробітникам інформації про проект або репозиторій. Файл README.md
містить опис, інструкції, приклади, посилання та іншу інформацію, яка
допомагає розуміти та використовувати проект.
3.5 Оцінка ефективності застосування методів і алгоритмів
контейнеризації сучасних серверних додатків на базі рішень AWS
Ефективність системи є важливим аспектом в сучасному світі
інформаційних технологій і бізнесу. Ефективна система надає користувачам
швидкий доступ до інформації та функціональності, покращуючи їх досвід
використання. Задоволені користувачі більш схильні залишатися вірними
клієнтами та рекомендувати продукт іншим.
Ефективність допомагає зменшити витрати на обслуговування і
ресурси. Надмірне використання ресурсів, якщо система не ефективна, може
призвести до високих витрат на облаштування та утримання інфраструктури.
Ефективні системи легше масштабувати. Це важливо для бізнесів, які
ростуть і потребують більше потужностей. Швидка та ефективна система
здатна надавати оперативний відгук на події та запити, що важливо в
сучасному бізнесі та технологіях.
Усі ці фактори роблять ефективність системи важливою складовою для
будь-якого бізнесу чи організації. Покращення ефективності допомагає
досягти успіху, зменшує ризики та сприяє розвитку.
Розроблену систему можна використовувати як з методом
контейнеризації та в рамках системи AWS ECS, а також можна
використовувати як звичайний додаток, який встановлений на фізичному
сервері.
Фізичний сервер та Amazon Elastic Container Service (ECS) - це два різні
способи розгортання і управління серверними додатками, і вони мають
кілька важливих відмінностей.
74
Фізичний сервер - це фізичний комп'ютер, який зазвичай знаходиться в
дата-центрі або на місцевому серверному обладнанні. Фізичний сервер
використовується для розгортання окремих операційних систем і додатків.
AWS ECS - це сервіс для контейнеризації додатків, який використовує
технологію контейнерів (наприклад, Docker). Додатки розгортані у
віртуальних контейнерах, які можна запускати та масштабувати на
інфраструктурі AWS.
Проведемо порівняння розглянутих вище способів запуску створеного
серверного додатка по ціновій політиці. Для порівняння буде використано
ціна 10 екземплярів, де ціна одного - 10$, зображено в таблиці 1.1.
Таблиця 3.1 - Таблиця порівняння ціни
Рішення Ціна
Фізичний сервер $100.00
AWS ECS Від $10.00 до $100.00 в залежності
від навантаження
Використання контейнеризації та швидкого запуску нового віртуально
серверу за допомогою AWS ECS значно знижує витрати адміністратора
системи, тому що система ECS автоматично визначає потрібну кількість
запущених контейнерів.
Для користувача нічого не змінюється, він користується системою без
зміни. Для адміністратора - суттєва економія коштів.
Також важливо зазначити, що підтримка 10-и серверів одночасно
вимагає наявності людини, яка буде перевіряти стан кожного з них. З
використанням AWS ECS всі ці дії будуть виконані автоматично системою
AWS.
Якщо порівнювати швидкодію роботи системи з використанням
фізичного сервера і рішення на базі контейнеризації, то швидкодія буде
однакова при різній ціні підтримки такого рішення.
75
3.6 Висновки до розділу 3
У даному розділі виконано детальний аналіз структури розробленої
системи (програмного застосунку), яка призначена для оптимізації методів та
алгоритмів контейнеризації сучасних серверних додатків на платформі
Amazon Web Services (AWS).
Детально описано загальну структуру системи, включаючи всі
компоненти та їх взаємодію. Ця структура визначає, як сама система
функціонує та в який спосіб вона вирішує поставлені перед нею завдання.
Проведений аналіз функцій та завдань системи, які включають в себе
оптимізацію методів та алгоритмів контейнеризації. Це дозволяє визначити,
як саме система розв'язує конкретні завдання та в який спосіб вона сприяє
покращенню ефективності серверних додатків.
У розділі розглянуто та враховано аспекти безпеки та захисту даних під
час взаємодії з системою. Це особливо важливо для збереження
конфіденційності та цілісності інформації під час роботи з розробленою
системою.
Визначено необхідні технічні вимоги та умови, які повинні бути
виконані для правильного функціонування системи. Це включає в себе
необхідне обладнання та програмне забезпечення для успішної роботи з
системою.
В результаті проведення оцінки було визначено, що вибрані методи
контейнеризації є ефективними для оптимізації серверних додатків на
платформі AWS. Вони призводять до покращення продуктивності та
зменшення витрат, що робить їх ключовими в контексті розгортання
сучасних серверних додатків на базі AWS. Ці висновки мають велике
наукове та практичне значення у сфері оптимізації серверних додатків у
хмарному середовищі.
76
ВИСНОВКИ
Результати кваліфікаційної роботи мають значущий вплив як на
наукову спільноту, так і на практичну галузь розробки та оптимізації
серверних додатків у хмарних середовищах. Аналіз предметної області
підкреслив важливість ретельного вивчення серверного програмного
забезпечення та контейнеризації, відзначивши ключові аспекти, які
визначають їхню ефективність та відповідність сучасним вимогам.
Розроблений програмний додаток має значні переваги в контексті
налаштування параметрів парсингу, включаючи можливість встановлення
глибини пошуку, обмеження на кількість сторінок та інтервалів запитів.
Додаток аналізує HTML-код сторінок та виявляє посилання на інші ресурси,
і, що ще важливіше, він відстежує посилання на сторонні ресурси, ресурси,
доменні імена яких відрізняються від заданих параметрів системи.
Відстежені посилання зберігаються для подальшого аналізу, роблячи додаток
дієвим і універсальним інструментом для обробки веб-контенту.
Вибір Docker та AWS для розробленої системи став досить
обґрунтованим, оскільки ці технології є популярними та широко
використовуються в індустрії. Робота демонструє переваги використання
Docker для розгортання серверних додатків та акцентує важливість
використання AWS як потужної хмарної платформи.
Ретельний аналіз структури розробленої системи, включаючи
компоненти та їх взаємодію, надає глибоке розуміння принципів
контейнеризації. Фокус на оптимізації методів та алгоритмів контейнеризації
сприяє покращенню ефективності серверних додатків і їх більш ефективному
використанню.
77
Підкреслення значення безпеки та захисту даних у контексті розробки
системи свідчить про глибоке розуміння проблем конфіденційності та
цілісності інформації.
Зазначення технічних вимог та умов для правильної роботи системи
створює рамки для подальшої розробки та реалізації системи для
практичного використання.
Ефективності обраних методів контейнеризації вказує на вирішальне
значення цього дослідження для оптимізації серверних додатків у хмарному
середовищі. Дана кваліфікаційна робота магістра визначає нові напрями
досліджень та сприяє впровадженню новаторських підходів у сфері серверної
розробки, роблячи значущий внесок у забезпечення оптимального
функціонування серверних додатків на платформі AWS. Особливою
відмінністю даної роботи є те, що вона створює підґрунтя для подальших
наукових досліджень та розробки серверних додатків у хмарному
середовищі, розвиваючи та вдосконалюючи підходи до оптимізації серверної
інфраструктури.
78
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
AWS - Amazon Web Services.
ECS - Amazon Elastic Container Service.
EKS - Amazon Elastic Kubernetes Service.
Fargate - AWS Fargate (платформа для запуску контейнерів).
EC2 - Amazon Elastic Compute Cloud (віртуальні сервери).
VPC - Virtual Private Cloud (віртуальна приватна мережа).
IAM - Identity and Access Management (система управління доступом).
ECR - Amazon Elastic Container Registry (реєстр образів контейнерів).
API - Application Programming Interface (інтерфейс програмування додатків).
CI/CD - Continuous Integration/Continuous Deployment (постійна
інтеграція/постійне розгортання).
YAML - Yet Another Markup Language (мова розмітки для опису конфігурації
контейнерів).
CLI - Command Line Interface (командний рядок).
GUI - Graphical User Interface (графічний інтерфейс користувача).
VPC Peering - Взаємне з'єднання віртуальних приватних мереж AWS.
ALB - Application Load Balancer (балансувальник навантаження за додатками).
NLB - Network Load Balancer (мережевий балансувальник навантаження).
Route 53 - Amazon Route 53 (сервіс управління доменами та DNS).
IAM Roles - Ролі у системі управління доступом AWS.
EBS - Amazon Elastic Block Store (сховище блочного сховища AWS).
S3 - Amazon Simple Storage Service (сховище об'єктів AWS).
Docker - Популярний контейнеризаційний інструмент.
Kubernetes - Платформа для оркестрації контейнерів.
FaaS - Function as a Service (функція як сервіс).
CNI - Container Network Interface (інтерфейс мережі контейнера).
VPC Flow Logs - Журнали потоків віртуальної приватної мережі.
79
SG - Security Group (група безпеки).
TLS - Transport Layer Security (протокол захисту транспортного рівня).
VPN - Virtual Private Network (віртуальна приватна мережа).
ASG - Auto Scaling Group (група автоматичного масштабування).
ECS Task - Завдання Amazon ECS.
EKS Node Group - Група вузлів Amazon EKS.
EC2 Instance - Екземпляр Amazon EC2.
IAM Policy - Політика у системі управління доступом.
SSM - Systems Manager (системний менеджер AWS).
AWS CLI - Amazon Web Services Command Line Interface.
EKS Pod - Під Amazon EKS.
80
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Nigel Poulton. Docker Deep Dive. Shelter Island: Nigel Poulton, 2018. 410 p.
2. Kelsey Hightower. Kubernetes: Up and Running. Brendan Burns, Joe Beda.
O'Reilly Media, 2017. 202 p.
3. Michael Wittig. Amazon Web Services in Action. Brendan Burns, Joe Beda.
Manning Publications, 2018. 550 p.
4. Ben Piper. AWS Certified Solutions Architect Study Guide: Associate SAA-
C01 Exam. David Clinton. Sybex, 2019. 504 p.
5. Yevgeniy Brikman. Terraform: Up and Running. O'Reilly Media, 2020. 404 p.
6. Jeff Nickoloff. Docker in Action. Manning Publications, 2016. 320 p.
7. Brendan Burns. Kubernetes Best Practices. O'Reilly Media, 2019. 350 p.
8. Carl Albing. Amazon Web Services (AWS) Cookbook. Michael Schwarz.
O'Reilly Media, 2015. 560 p.
9. John Arundel. Cloud Native DevOps with Kubernetes. Michael Schwarz.
O'Reilly Media, 2019. 248 p.
10.Liz Rice. Container Security: Fundamental Technology Concepts that Protect
Containerized Applications. O'Reilly Media, 2020. 202 p.
11.Kief Morris. Infrastructure as Code: Managing Servers in the Cloud. O'Reilly
Media, 2016. 362 p.
12.Chris Tankersley. Docker for Developers: Develop and run your application
with Docker containers. Packt Publishing, 2017. 361 p.
13.Daniel Jones. Kubernetes: A Step-by-Step Guide to Learn and Master
Kubernetes. Independently published, 2020. 234 p.
14.Simon Driscoll. Amazon EKS and Kubernetes: A Step-by-Step Guide.
Independently published, 2020. 90 p.
81
15.Brendan Burns. Kubernetes Best Practices: Blueprints for Building Successful
Applications on Kubernetes. O'Reilly Media, 2020. 120 p.
16.Justin Menga. Docker on Amazon Web Services. Packt Publishing, 2019. 380
p.
17.Kevin Hopp. Amazon Elastic Kubernetes Service: Up and Running. Brendan
Burns. O'Reilly Media, 2020. 158 p.
18.Vinod Singh. Containerization with Docker. Packt Publishing, 2017. 432 p.
19.David Clinton. Learn Amazon Web Services in a Month of Lunches. Sander
Rossel. Manning Publications, 2017. 328 p.
20.Marko Luksa. Kubernetes in Action. Manning Publications, 2017. 390 p.
21.Paul M. Duvall. DevOps for AWS. Michael Cote, Jez Humble. O'Reilly Media,
2012. 370 p.
22.Joshua Cook. Docker for Data Science: Building Scalable and Extensible Data
Infrastructure Around the Jupyter Notebook Server. Apress, 2017. 237 p.
23.Rafal Leszko. Continuous Delivery with Docker and Jenkins. Packt Publishing,
2018. 442 p.
ДОДАТОК А
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор Віра БАБЕНКО
__________________
“___” _____________ 2023р.
Дослідження методів і алгоритмів контейнеризації сучасних
серверних додатків на базі рішень AWS
Специфікація
482.ЧДТУ.32278-01
Листів 2
Розробник _______________ Ярослав ТКАЧЕНКО
Керівник _______________ Віра БАБЕНКО
Черкаси 2023
2
482.ЧДТУ.32278-01
Позначення Найменування Примітка
Документація
482.ЧДТУ.32278-01 12 01 Текст програми
482.ЧДТУ.32278-01 34 01 Інструкція користувача
ДОДАТОК Б
Дослідження методів і алгоритмів контейнеризації сучасних
серверних додатків на базі рішень AWS
Текс програми
482.ЧДТУ.32278-01 12 01
Листів 12
Розробник _______________ Ярослав ТКАЧЕНКО
Черкаси 2023
2
482.ЧДТУ.32278-01 12 01
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
@RestController
public class DomainInfoController {
@GetMapping("/getDomainInfo")
public List<DomainInfo> getDomainInfo(@RequestParam("domainNames")
List<String> domainNames) {
List<DomainInfo> results = new ArrayList<>();
for (String domainName : domainNames) {
try {
InetAddress inetAddress = InetAddress.getByName(domainName);
String ipAddress = inetAddress.getHostAddress();
Document doc = Jsoup.connect("http://" + domainName).get();
List<String> links = new ArrayList<>();
for (Element link : doc.select("a[href]")) {
links.add(link.attr("abs:href"));
}
results.add(new DomainInfo(domainName, ipAddress, links));
} catch (UnknownHostException e) {
results.add(new DomainInfo(domainName, "Помилка: Доменне ім'я не
існує", new ArrayList<>()));
} catch (IOException e) {
results.add(new DomainInfo(domainName, "Помилка при з'єднанні зі
сторінкою", new ArrayList<>()));
}
}
3
482.ЧДТУ.32278-01 12 01
return results;
}
}
public class DomainInfo {
private String domainName;
private String ipAddress;
public DomainInfo(String domainName, String ipAddress) {
this.domainName = domainName;
this.ipAddress = ipAddress;
}
public String getDomainName() {
return domainName;
}
public void setDomainName(String domainName) {
this.domainName = domainName;
}
public String getIpAddress() {
return ipAddress;
}
public void setIpAddress(String ipAddress) {
this.ipAddress = ipAddress;
}
}
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class RedisService {
private final StringRedisTemplate redisTemplate;
public RedisService(StringRedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
4
482.ЧДТУ.32278-01 12 01
public void saveData(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public String getData(String key) {
return redisTemplate.opsForValue().get(key);
}
public void deleteData(String key) {
redisTemplate.delete(key);
}
}
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HtmlParser {
public static List<String> parseHtmlForLinks(String htmlContent) {
List<String> links = new ArrayList<>();
try {
Document doc = Jsoup.parse(htmlContent);
Elements linkElements = doc.select("a[href]");
for (Element linkElement : linkElements) {
String link = linkElement.attr("abs:href");
links.add(link);
}
} catch (IOException e) {
e.printStackTrace();
}
return links;
}
}
package com.chdtu.server.services;
import com.codahale.metrics.Gauge;
5
482.ЧДТУ.32278-01 12 01
import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry;
import io.dropwizard.db.DataSourceFactory;
import java.util.SortedMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class StartService implements Runnable {
private final MetricRegistry mr;
private final DataSourceFactory dbConnectionFactory;
private final int maxSize;
private long fakeUntil;
Gauge activeGauge = null;
public StartService(MetricRegistry mr, DataSourceFactory
dbConnectionFactory) {
ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(this,0,500, TimeUnit.MILLISECONDS);
this.mr = mr;
this.dbConnectionFactory = dbConnectionFactory;
this.maxSize = dbConnectionFactory.getMaxSize();
}
volatile float load;
public float getLoad() {
return load;
}
public void setFakeit() {
fakeUntil = System.currentTimeMillis() + 30 * 1000;
}
@Override
public void run() {
if(fakeUntil < System.currentTimeMillis()) {
6
482.ЧДТУ.32278-01 12 01
if(activeGauge == null) {
SortedMap<String, com.codahale.metrics.Gauge> gl =
mr.getGauges(new MetricFilter() {
@Override
public boolean matches(String s, Metric metric) {
return s.startsWith("io.dropwizard.db");
}
});
activeGauge =
gl.get("io.dropwizard.db.ManagedPooledDataSource.mysql.active");
}
if(activeGauge != null) {
Object activeObj = activeGauge.getValue();
Integer active = (Integer) activeObj;
float headroom = (maxSize - active) *1.0f / maxSize;
if(headroom < 0.5) {
load = (0.5f - headroom) *2f;
} else {
load = 0.0f;
}
} else {
load = 0.0f;
}
} else {
load = 0.1f;
}
}
}
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class HttpClient {
public static String fetchHtmlContent(String url) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = httpClient.execute(httpGet);
7
482.ЧДТУ.32278-01 12 01
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity;
return EntityUtils.toString(entity);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
public class LinkSearchService {
public List<String> searchLinksOnPage(String url) {
String htmlContent = HttpClient.fetchHtmlContent(url);
if (htmlContent != null) {
return HtmlParser.parseHtmlForLinks(htmlContent);
}
return Collections.emptyList();
}
}
Copy code
public class LinkCrawlerService {
public List<LinkResult> crawlMultiplePages(List<String> pageUrls) {
List<LinkResult> results = new ArrayList<>();
for (String pageUrl : pageUrls) {
List<String> links = LinkSearchService.searchLinksOnPage(pageUrl);
LinkResult result = new LinkResult(pageUrl, links);
results.add(result);
}
return results;
}
}
8
482.ЧДТУ.32278-01 12 01
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager(RedisConnectionFactory
redisConnectionFactory) {
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(
Duration.ofMinutes(5)))
.transactionAware()
.build();
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class ExcelFileGenerator {
public static void generateExcelFile(String name, String filePath, List<String>
domainNames, List<Integer> foundDomainsCount) {
try (Workbook workbook = new XSSFWorkbook()) {
Sheet sheet = workbook.createSheet(name);
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("#");
headerRow.createCell(1).setCellValue("Іʼя ресурсу");
headerRow.createCell(2).setCellValue("Кількість посилань");
for (int i = 0; i < domainNames.size(); i++) {
Row dataRow = sheet.createRow(i + 1);
dataRow.createCell(0).setCellValue(i);
dataRow.createCell(1).setCellValue(domainNames.get(i));
dataRow.createCell(2).setCellValue(foundDomainsCount.get(i));
}
try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
workbook.write(fileOut);
}
9
482.ЧДТУ.32278-01 12 01
System.out.println("Excel-файл створено успішно.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.chdtu.server.services;
import com.chdtu.server.dao.LinkHrefService;
import com.chdtu.server.db.Link;
import com.chdtu.server.db.Href;
import com.chdtu.server.dto.HrefBoolean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LinkHrefService {
static Logger logger = LoggerFactory.getLogger(LinkHrefService.class);
private final LinkHrefService linkHrefService;
public LinkHrefService(LinkHrefService linkHrefService) {
this.linkHrefService = linkHrefService;
}
private String getHref(long linkid, LINK_PARAMS name) {
return linkHrefService.getString(linkid, name.toString());
}
private Integer getIntegerFromString(String str, LINK_PARAMS name) {
if(str == null) {
return Integer.parseInt(name.getDefaultValue());
}
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return Integer.parseInt(name.getDefaultValue());
10
482.ЧДТУ.32278-01 12 01
}
}
private Boolean getBooleanFromString(String str, LINK_PARAMS name) {
if("false".equals(str)) return false;
if("true".equals(str)) return true;
str = name.getDefaultValue();
return Boolean.valueOf(str);
}
public Integer getInteger(long linkid, LINK_PARAMS name) {
if (name.getClazz() != Integer.class) {
throw new IllegalArgumentException("Помилка");
}
String str = getHref(linkid,name);
if(str == null) return Integer.parseInt(name.getDefaultValue());
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return Integer.parseInt(name.getDefaultValue());
}
}
public Boolean getBoolean(long linkid, LINK_PARAMS name) {
if (name.getClazz() != Boolean.class) {
throw new IllegalArgumentException("Неправильний тип");
}
String str = getHref(linkid,name);
return getBooleanFromString(str, name);
}
private String getStringFromString(String str, LINK_PARAMS name) {
if (str == null) {
str = name.getDefaultValue();
}
return str;
}
public String getString(long linkid, LINK_PARAMS name) {
if (name.getClazz() != String.class) {
return;
}
String str = getHref(linkid,name);
11
482.ЧДТУ.32278-01 12 01
return getStringFromString(str, name);
}
public void updateBoolean(long linkid,LINK_PARAMS name, boolean value) {
linkHrefService.setString(linkid,name.toString(),Boolean.toString(value));
}
public void updateInteger(Long linkid, LINK_PARAMS name, int val) {
linkHrefService.setString(linkid,name.toString(),""+val);
}
public Map<Long, HrefBoolean> getAllHrefsBooleanByHref(LINK_PARAMS
name) {
if (name.getClazz() != Boolean.class) {
throw new IllegalArgumentException("Помилка");
}
Map<Long, HrefBoolean> pb = new HashMap<>();
List<Href> prefs = linkHrefService.findAllByHref(name);
for (Href pref : prefs) {
HrefBoolean p = new HrefBoolean();
p.setLinkId(pref.getLinkId());
p.setName(pref.getName());
p.setValue(getBooleanFromString(pref.getValue(), name));
pb.put(p.getLinkId(), p);
}
return pb;
}
public void populateLinkHrefsDTO(List<Link> linkList) {
Map<Long, HrefBoolean> amap =
getAllHrefsBooleanByHref(LINK_PARAMS.noTimeBehaviorOn);
for (Link a : linkList) {
HrefBoolean pb = amap.get(a.getId());
if (pb == null) {
a.setNoTimeBehaviorOn(getBooleanFromString(null,LINK_PARAMS.noTimeBe
haviorOn));
} else {
Boolean val = pb.getValue();
a.setNoTimeBehaviorOn(pb.getValue());
}
a.setTest(getInteger(a.getId(),LINK_PARAMS.test));
12
482.ЧДТУ.32278-01 12 01
}
}
public void populateLinkHrefsDTO(Link link) {
link.setNoTimeBehaviorOn(getBoolean(link.getId(),
LinkHrefService.LINK_PARAMS.noTimeBehaviorOn));
link.setFullScaleRampTimeMS(getInteger(link.getId(),LINK_PARAMS.fullScale
RampTimeMS));
}
}
ДОДАТОК В
Дослідження методів і алгоритмів контейнеризації сучасних
серверних додатків на базі рішень AWS
Інструкція користувача
482.ЧДТУ.32278-01 34 01
Листів 4
Розробник _______________ Ярослав ТКАЧЕНКО
Черкаси 2023
2
482.ЧДТУ.32278-01 34 01
Створення та запуск Java додатку в Amazon Elastic Container Service
(ECS) може бути складним завданням, але в даному розділі буде надано
загальну інструкцію для цього процесу. ECS має багато конфігураційних
опцій, і реальна процедура може відрізнятися залежно від конкретного
випадку.
Перед початком процесу налаштування потрібно створити Docker
контейнер для вашого Java додатку. Docker контейнер - це стандартизований,
автономний пакет програмного забезпечення, який включає в себе все
необхідне для виконання конкретної програми або додатку, включаючи код,
середовище виконання та всі необхідні залежності. Docker контейнери стали
популярними інструментом для розгортання та управління додатками через
різні середовища, такі як розробка, тестування та виробництво, завдяки своїй
портативності і ізольованості.
Потрібно використовувати Docker для збірки образу з власним Java
додатком. Використовувати команди типу docker build для цього.
Завантажувати створений Docker образ на Amazon Elastic Container Registry
(ECR) або інше Docker репозиторій, якщо використовується інший.
Docker репозиторій (Docker repository) - це сховище для зберігання та
розповсюдження Docker образів. Docker образи - це самоконтейнеризовані
пакети програмного забезпечення, які містять в собі код додатка, його
залежності, налаштування та інші компоненти, необхідні для запуску додатка
в Docker контейнері.
У консолі AWS потрібно створити кластер ECS, який буде служити для
запуску контейнерів. Встановити налаштування для кластера. Наступним
кроком після створення кластеру буде створення задач і сервісів.
Створити ECS задачу та сервіс для даного додатку. Налаштувати
необхідну кількість контейнерів, розміщення, автоматичне масштабування і
багато іншого. Впевнитися, що контейнери отримують всі необхідні
3
482.ЧДТУ.32278-01 34 01
параметри, такі як змінні середовища, підключення до бази даних, та інші
конфігураційні параметри.
Запустити свій ECS сервіс в консолі або за допомогою AWS CLI,
вказавши ім'я таска і сервісу.
AWS CLI (Amazon Web Services Command Line Interface) - це інтерфейс
командного рядка, який надається Amazon Web Services (AWS) для взаємодії
з AWS послугами та ресурсами. AWS CLI дозволяє розробникам і
адміністраторам працювати з AWS, використовуючи команди, замість
використання веб-інтерфейсу або SDK (Software Development Kit).
Встановити систему моніторингу та логування для власного ECS
сервісу, використовуючи інструменти, такі як Amazon CloudWatch.
Конфігуруйте маршрутизацію трафіку до вашого контейнера, якщо це
необхідно.
Amazon CloudWatch - це послуга моніторингу, логування та аналізу для
Amazon Web Services (AWS). Ця послуга дозволяє збирати та візуалізувати
дані про роботу ресурсів та додатків на AWS, а також налаштовувати
сповіщення та автоматичну реакцію на події в інфраструктурі AWS.
Потрібно забезпечити постійну підтримку та керування розробленого
ECS сервісом, включаючи автоматичне масштабування, оновлення
контейнерів та інші операції.
Це загальна інструкція, і процес може бути більш складним, в
залежності від конкретних потреб додатка та інфраструктури.
Рекомендується вивчити офіційну документацію Amazon ECS та
скористатися AWS Management Console для конфігурації і керування
контейнерами.
Налаштування маршрутизації (Route) в Amazon Web Services (AWS)
може включати різні кроки, в залежності від потреби користувача. Для цього
необхідно перейти до служби Amazon VPC (Virtual Private Cloud),
4
482.ЧДТУ.32278-01 34 01
натиснувши "Services" (Служби) в верхньому меню та обравши "VPC" під
"Networking & Content Delivery" (Мережа та доставка вмісту).
У лівому боці обрати "Route Tables" (Таблиці маршрутизації) для тієї
VPC, в якій хочете налаштувати маршрутизацію. Якщо потрібно додати
новий маршрут, натисніть кнопку "Create Route Table" (Створити таблицю
маршрутизації) та дайте їй назву.
Натисніть "Routes" (Маршрути) на вкладці "Route Table Details" (Деталі
таблиці маршрутизації) і оберіть "Edit routes" (Редагувати маршрути). Тут
можна додавати нові маршрути. Далі вкажіть IP-адресу чи префікс мережі,
яку ви хочете маршрутизувати. Також потрібно обрати ціль (конкретний
інтерфейс чи VPN-з'єднання). Після введення даних, натиснути "Save routes"
(Зберегти маршрути) для застосування нових маршрутів до таблиці
маршрутизації.
Переконатися, що налаштування маршруту відображаються правильно,
і маршрутизація працює, як очікувалося.