Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/6648Full metadata record
| DC Field | Value | Language |
|---|---|---|
| dc.contributor.advisor | Бабенко, Віра | - |
| dc.contributor.author | Федоров, Денис | - |
| dc.date.accessioned | 2026-01-07T17:19:32Z | - |
| dc.date.available | 2026-01-07T17:19:32Z | - |
| dc.date.issued | 2025 | - |
| dc.identifier.uri | https://er.chdtu.edu.ua/handle/ChSTU/6648 | - |
| dc.description.abstract | У сучасному цифровому середовищі обсяг даних, якими користуються приватні особи та організації, постійно зростає. Традиційні локальні системи зберігання не завжди забезпечують необхідну гнучкість, масштабованість та доступність, що робить хмарні сервіси ключовим рішенням. Особлива увага приділяється файловим сховищам, де необхідні швидкий доступ, надійність та можливість безпечного обміну файлами між користувачами. Використання хмарної платформи AWS та механізмів автоматичного масштабування дозволяє оптимізувати ресурси, забезпечити стабільну роботу при змінному навантаженні та підвищити ефективність обробки запитів. Розробка масштабованого хмарного файлового сервісу з автоматичним розподілом ресурсів є актуальною задачею сучасних інформаційних технологій і відповідає потребам користувачів у надійному та швидкому зберіганні та обміні даними. Метою кваліфікаційної роботи є розробка масштабованого хмарного файлового сервісу з автоматичним розподілом ресурсів на базі AWS, який забезпечує надійне зберігання, швидкий доступ та зручне поширення файлів між користувачами. Об'єкт дослідження – масштабовані хмарні сервіси та їх архітектура, зокрема системи зберігання та обміну файлами в хмарному середовищі з автоматичним розподілом обчислювальних ресурсів. Предмет дослідження є методи проєктування, впровадження та оптимізації хмарних файлових сервісів, зокрема механізми автоматичного розподілу ресурсів, масштабування, управління доступом та забезпечення безпеки даних у середовищі AWS. Наукова новизна полягає у розробці масштабованого хмарного файлового сервісу з автоматичним розподілом ресурсів на базі AWS, який поєднує сучасні підходи serverless-архітектури, механізми автоматичного масштабування та оптимізації витрат з високим рівнем захисту даних. Практична цінність полягає у створенні функціональної хмарної системи файлового зберігання з автоматичним розподілом ресурсів, яка може бути використана для обміну файлами як у приватних, так і у корпоративних середовищах. Таким чином, робота має значення як для теоретичного вдосконалення, так і для їхньої практичної реалізації. Висновки включають в себе основні результати роботи. У додатках наведено специфікацію, текст програми та інструкцію користувача. Загальний обсяг основного тексту роботи становить 91 сторінок. У кваліфікаційній роботі магістра 9 рисунків та 3 додатки. Для виконання роботи використано 25 літературних джерел. | uk_UA |
| dc.title | Проектування масштабованих хмарних сервісів з автоматичним розподілом ресурсів | uk_UA |
| dc.type | Master Thesis | uk_UA |
| Appears in Collections: | 123 Комп’ютерна інженерія (Комп'ютерні системи та мережі) | |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| 1_ТИТУЛКА_Федоров-merged.pdf Restricted Access | 1.96 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА ІНФОРМАЦІЙНОЇ БЕЗПЕКИ ТА КОМП’ЮТЕРНОЇ
ІНЖЕНЕРІЇ
Пояснювальна записка
до кваліфікаційної роботи магістра
на тему: «Проектування масштабованих хмарних
сервісів з автоматичним розподілом ресурсів»
ЧДТУ.252470.007 ПЗ
Виконав: студент 2 курсу, групи МКМ-2405
спеціальності 123 – Комп’ютерна інженерія
за освітньою програмою – Комп’ютерні системи
та мережі
Денис ФЕДОРОВ
Керівник
д.т.н., професор Віра БАБЕНКО
Н. контроль
Світлана ГРЕСЬКО
Рецензент
доцент кафедри інженерної та аварійно-
рятувальної техніки ННІ оперативно-рятувальних
сил НУЦЗ України, к.т.н., с.н.с.
Ольга МЕЛЬНИК
«ЗАХИСТ ДОЗВОЛЯЮ»
Завідувач кафедри ІБ та КІ
к.т.н., доцент ______ Артем ЛАВДАНСЬКИЙ
Черкаси 2025 року
Форма № Н-9.01
Черкаський державний технологічний університет
Факультет інформаційних технологій і систем
Кафедра інформаційної безпеки та комп‘ютерної інженерії
Освітньо-кваліфікаційний рівень Магістр
Спеціальність 123 – Комп’ютерна інженерія
Освітня програма Комп’ютерні системи та мережі
«ЗАТВЕРДЖУЮ»
Завідувач кафедри _____ Артем ЛАВДАНСЬКИЙ
«08» жовтня 2025 року
ЗАВДАННЯ
на кваліфікаційну роботу магістра студенту
Федорову Денису Дмитровичу
(прізвище, ім‘я, по батькові)
1. Тема роботи Проектування масштабованих хмарних сервісів з автоматичним
розподілом ресурсів
Керівник роботи Бабенко Віра Григорівна, д.т.н., професор
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом університету від «07» жовтня 2025р. № 307/03-03
2. Строк подання студентом роботи
3. Вихідні дані до роботи:
Сучасні хмарні сервіси, вимоги користувачів до файлових сховищ, сервіси AWS (S3, Lambda,
DynamoDB, API Gateway), serverless-архітектура, автоматичне масштабування, безпека даних.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ
Розділ 1 Аналіз предметної області та постановка задачі дослідження
Розділ 2 Вибір технології та інструментальних засобів розробки системи
Розділ 3 Розробка системи з автоматичним розподілом ресурсів
Розділ 4 Захист системи з автоматичним розподілом ресурсів
Висновки
Перелік скорочень та умовних позначень
Список використаних джерел
Додатки
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів):
Додаток А Специфікація
Додаток Б Текст програм
Додаток В Інструкція користувача
6. Консультанти розділів роботи
Підпис, дата
Розділ Прізвище, ініціали та
посада завдання видав завдання прийняв
консультанта
7. Дата видачі завдання 08 жовтня 2025 року
КАЛЕНДАРНИЙ ПЛАН
№ з/п Назва етапів кваліфікаційної роботи магістра Строк виконання
етапів роботи Примітка
1 Збір матеріалу 07.10 – 20.10 виконано
2 Обробка матеріалу 21.10 – 06.11 виконано
3 Обґрунтування актуальності виконання 07.11 – 10.11 виконано
досліджень
4 Оцінка стану проблеми, виокремлення виконано
дослідницьких задач, постановка задачі 11.11 – 15.11
дослідження
5 Викладення сутності і результатів дослідження 16.11– 27.11 виконано
6 Практичне застосування результатів виконано
дослідження 28.11 – 30.11
7 Оформлення результатів в пояснювальну записку 01.12 – 03.12 виконано
8 Подання роботи на відгук та рецензування 04.12.25 виконано
Студент-магістрант ____________________ Денис ФЕДОРОВ
(підпис)
Керівник роботи _____________________ Віра БАБЕНКО
(підпис)
АНОТАЦІЯ
У сучасному цифровому середовищі обсяг даних, якими користуються
приватні особи та організації, постійно зростає. Традиційні локальні системи
зберігання не завжди забезпечують необхідну гнучкість, масштабованість та
доступність, що робить хмарні сервіси ключовим рішенням.
Особлива увага приділяється файловим сховищам, де необхідні
швидкий доступ, надійність та можливість безпечного обміну файлами між
користувачами. Використання хмарної платформи AWS та механізмів
автоматичного масштабування дозволяє оптимізувати ресурси, забезпечити
стабільну роботу при змінному навантаженні та підвищити ефективність
обробки запитів.
Розробка масштабованого хмарного файлового сервісу з автоматичним
розподілом ресурсів є актуальною задачею сучасних інформаційних
технологій і відповідає потребам користувачів у надійному та швидкому
зберіганні та обміні даними.
Метою кваліфікаційної роботи є розробка масштабованого хмарного
файлового сервісу з автоматичним розподілом ресурсів на базі AWS, який
забезпечує надійне зберігання, швидкий доступ та зручне поширення файлів
між користувачами.
Об'єкт дослідження – масштабовані хмарні сервіси та їх архітектура,
зокрема системи зберігання та обміну файлами в хмарному середовищі з
автоматичним розподілом обчислювальних ресурсів.
Предмет дослідження є методи проєктування, впровадження та
оптимізації хмарних файлових сервісів, зокрема механізми автоматичного
розподілу ресурсів, масштабування, управління доступом та забезпечення
безпеки даних у середовищі AWS.
Наукова новизна полягає у розробці масштабованого хмарного
файлового сервісу з автоматичним розподілом ресурсів на базі AWS, який
поєднує сучасні підходи serverless-архітектури, механізми автоматичного
масштабування та оптимізації витрат з високим рівнем захисту даних.
Практична цінність полягає у створенні функціональної хмарної
системи файлового зберігання з автоматичним розподілом ресурсів, яка може
бути використана для обміну файлами як у приватних, так і у корпоративних
середовищах.
Таким чином, робота має значення як для теоретичного вдосконалення,
так і для їхньої практичної реалізації.
Висновки включають в себе основні результати роботи. У додатках
наведено специфікацію, текст програми та інструкцію користувача. Загальний
обсяг основного тексту роботи становить 91 сторінок. У кваліфікаційній
роботі магістра 9 рисунків та 3 додатки. Для виконання роботи використано
25 літературних джерел.
ANNOTATION
In today's digital environment, the amount of data used by individuals and
organizations is constantly growing. Traditional local storage systems do not always
provide the necessary flexibility, scalability and availability, which makes cloud
services a key solution.
Particular attention is paid to file storage, where fast access, reliability and the
ability to securely exchange files between users are required. Using the AWS cloud
platform and automatic scaling mechanisms allows you to optimize resources,
ensure stable operation under variable load and increase the efficiency of query
processing.
The development of a scalable cloud file service with automatic resource
allocation is a relevant task of modern information technologies and meets the needs
of users in reliable and fast data storage and exchange.
The purpose of the qualification work is to develop a scalable cloud file
service with automatic resource allocation based on AWS, which provides reliable
storage, fast access and convenient file sharing between users.
The object of research is scalable cloud services and their architecture, in
particular, file storage and sharing systems in a cloud environment with automatic
allocation of computing resources.
The subject of research is methods for designing, implementing and
optimizing cloud file services, in particular mechanisms for automatic resource
allocation, scaling, access management and ensuring data security in the AWS
environment.
The scientific novelty lies in the development of a scalable cloud file service
with automatic resource allocation based on AWS, which combines modern
approaches to serverless architecture, mechanisms for automatic scaling and cost
optimization with a high level of data protection.
The practical value lies in the creation of a functional cloud file storage
system with automatic resource allocation, which can be used for file sharing in both
private and corporate environments.
Thus, the work is important both for theoretical improvement and for their
practical implementation.
The conclusions include the main results of the work. The appendices contain
the specification, program text and user manual. The total volume of the work is
91 pages. The master's qualification work includes 9 figures and 3 appendices. 25
literary sources were used to complete the work.
2
ЗМІСТ
ВСТУП…………………………………………………………………………. 4
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ…………………………………………………..... 7
1.1 Аналіз предметної області……………………………………...….. 7
1.2 Вибір напряму дослідження……………………………………….. 15
1.3 Постановка задачі…………………………………………………... 27
1.4 Висновки до розділу 1……………………………………………… 30
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ ОБМІНУ ФАЙЛАМИ……………………………... 32
2.1 Огляд існуючих технологій………………………………………... 32
2.2 Вибір технологій …………………………………………………... 42
2.3 Висновки до розділу 2……………………………………………… 51
РОЗДІЛ 3 РОЗРОБКА СИСТЕМИ ОБМІНУ ФАЙЛАМИ З
АВТОМАТИЧНИМ РОЗПОДІЛОМ РЕСУРСІВ…………………………..... 53
3.1 Структура системи…………………………………………………. 53
3.2 Опис функцій системи……………………………………………... 61
3.3 Технічні вимоги для роботи з системою………………………....... 69
3.4 Оцінка ефективності …………......................................................... 72
3.5 Висновки до розділу 3……………………………………………… 75
РОЗДІЛ 4 ЗАХИСТ СИСТЕМИ ОБМІНУ ФАЙЛАМИ З
АВТОМАТИЧНИМ РОЗПОДІЛОМ РЕСУРСІВ …………………………… 76
4.1 Огляд існуючих рішень ……………………………………………. 76
4.2 Реалізація захисту даних у системі……………………...………… 82
4.3 Висновки до розділу 4……………………………………………… 85
ВИСНОВКИ…………………………………………………………………… 86
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ…………………..... 88
3
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ……………………………………... 90
ДОДАТОК А – 482.ЧДТУ.52470-01 Проектування масштабованих
хмарних сервісів з автоматичним розподілом ресурсів
4
ВСТУП
Актуальність теми дослідження. У сучасному цифровому середовищі
обсяг даних, якими обмінюються користувачі та організації, постійно зростає.
Традиційні локальні системи зберігання вже не забезпечують необхідної
гнучкості, масштабованості та доступності, що робить хмарні технології
ключовим інструментом для побудови сучасних сервісів. Особливо це
стосується файлових сховищ, де потрібні висока швидкість доступу,
безперебійна робота та можливість швидко адаптувати інфраструктуру під
змінні навантаження.
Хмарні платформи, такі як Amazon Web Services, дозволяють
автоматично розподіляти ресурси, що забезпечує оптимальну продуктивність
і економію коштів. Це особливо важливо для сервісів, де кількість завантажень
і запитів може змінюватися непередбачувано. Автоматичне масштабування
дає змогу уникнути перевантажень, мінімізувати простої та знизити витрати
на підтримку системи.
Сучасні вимоги до безпеки даних і швидкості доставки контенту
потребують застосування захищених та географічно розподілених хмарних
інструментів. Побудова файлового сховища з використанням таких технологій
дозволяє гарантувати надійність, доступність і зручність для користувачів.
Розробка масштабованого хмарного файлового сервісу з автоматичним
розподілом ресурсів є актуальною задачею, що відповідає сучасним
тенденціям розвитку інформаційних систем і дозволяє вирішити практичні
потреби в безпечному зберіганні й обміні файлами.
Метою кваліфікаційної роботи є розробка масштабованого хмарного
файлового сервісу з автоматичним розподілом ресурсів на базі AWS, який
забезпечує надійне зберігання, швидкий доступ та зручне поширення файлів
між користувачами.
5
Для досягнення цієї мети буде виконано комплекс задач, спрямованих
на проєктування архітектури, налаштування хмарної інфраструктури,
розробку веб-порталу та впровадження механізмів автоматичного
масштабування й захисту даних.
Основні завдання та цілі роботи включають:
1. Аналіз існуючих рішень та технологій у сфері хмарних файлових
сервісів та інструментів автоматичного масштабування.
2. Проєктування архітектури системи, що включає файлове сховище,
веб-портал та механізми доступу до файлів.
3. Створення хмарної інфраструктури на базі AWS з використанням
S3, Lambda, API Gateway, DynamoDB, EC2 або інших оптимальних
сервісів.
4. Реалізація механізмів автоматичного розподілу та масштабування
ресурсів для забезпечення стабільної роботи під час змін
навантаження.
5. Забезпечення захисту даних, включно з контролем доступу,
шифруванням та безпечною роботою API.
6. Розробка інструкцій та рекомендацій щодо подальшого
використання та масштабування створеної системи.
На цей час існує достатньо мало джерел інформації, в яких автори
описують тематику схожу, зокрема AWS. Автор Ебергард Вольф в книзі
«Мікросервіси з Docker, Kubernetes та AWS» розкриває принципи
мікросервісної архітектури, де кожен сервіс працює незалежно та виконує
окрему функцію. Автор детально пояснює використання контейнеризації за
допомогою Docker, що дозволяє ізолювати сервіси та спрощує їх розгортання
у хмарному середовищі. Окрему увагу приділено оркестрації контейнерів
через Kubernetes. Розглядаються механізми автоматичного масштабування,
балансування навантаження та управління ресурсами, що забезпечують
стабільну роботу розподілених систем навіть при високому навантаженні.
6
Книга демонструє, як розгортати та керувати мікросервісами у хмарному
середовищі AWS, зокрема за допомогою сервісів ECS, EKS та Fargate.
Висвітлено патерни проектування, що підвищують надійність,
відмовостійкість та масштабованість сервісів.
Автор наводить практичні приклади побудови веб-сервісів, які здатні
обробляти великі навантаження та швидко масштабуватися. Для
кваліфікаційної роботи це дозволяє зрозуміти, як організувати бекенд
хмарного файлового сховища, реалізувати автоматичне масштабування та
балансування навантаження, а також ефективно розгортати сервіси в AWS.
Об'єкт дослідження – масштабовані хмарні сервіси та їх архітектура,
зокрема системи зберігання та обміну файлами в хмарному середовищі з
автоматичним розподілом обчислювальних ресурсів.
Предмет дослідження є методи проєктування, впровадження та
оптимізації хмарних файлових сервісів, зокрема механізми автоматичного
розподілу ресурсів, масштабування, управління доступом та забезпечення
безпеки даних у середовищі AWS.
Наукова новизна полягає у розробці масштабованого хмарного
файлового сервісу з автоматичним розподілом ресурсів на базі AWS, який
поєднує сучасні підходи serverless-архітектури, механізми автоматичного
масштабування та оптимізації витрат з високим рівнем захисту даних.
Практична цінність полягає у створенні функціональної хмарної
системи файлового зберігання з автоматичним розподілом ресурсів, яка може
бути використана для обміну файлами як у приватних, так і у корпоративних
середовищах.
Використана література, під час написання кваліфікаційної роботи,
досить добре розкриває тему та відображає потреби для аналізу.
7
РОЗДІЛ 1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ ДОСЛІДЖЕННЯ
1.1 Аналіз предметної області
У сучасному цифровому середовищі кількість даних, які обробляють
організації та приватні користувачі, постійно зростає. Це зумовлює
необхідність створення систем, здатних ефективно працювати під високим
навантаженням та забезпечувати стабільну обробку запитів у реальному часі.
Високонавантажені системи відрізняються великим обсягом одночасних
запитів, значними потоками даних і потребою в швидкому доступі до
інформації. У таких системах будь-який збій або затримка обробки даних
може призвести до серйозних наслідків, включно з фінансовими втратами,
порушенням бізнес-процесів або зниженням довіри користувачів.
Однією з головних проблем високонавантажених систем є
масштабованість. Традиційні монолітні рішення не здатні гнучко реагувати на
змінні навантаження: якщо кількість запитів різко зростає, сервери швидко
перевантажуються, що призводить до падіння продуктивності або повного
простою системи. У випадку файлових сховищ це особливо критично, адже
великі обсяги завантажень і одночасних звернень до файлів можуть
створювати вузькі місця у системі, які складно усунути без глобальної
реконфігурації інфраструктури.
Ще однією проблемою є оптимізація ресурсів і витрат. У
високонавантажених системах використання традиційних серверних рішень
часто призводить до нерівномірного завантаження серверів: у пікові години
ресурси перевантажені, а в години низького навантаження вони залишаються
недовантаженими. Це створює економічно неефективну модель управління
інфраструктурою, особливо коли мова йде про великі корпоративні
8
середовища або сервіси з великим обсягом користувачів. Автоматичне
масштабування ресурсів, яке надають сучасні хмарні платформи, дозволяє
вирішити цю проблему, але його впровадження вимагає правильного
проєктування архітектури та налаштування механізмів моніторингу і
управління ресурсами.
Одним із ключових аспектів високонавантажених систем є стабільність
і відмовостійкість. Системи повинні працювати безперервно навіть при збоях
окремих компонентів. У випадку файлових сховищ це означає, що доступ до
даних має залишатися доступним навіть при відмові окремого сервера або
сервісу. Забезпечення високої доступності включає застосування
кластеризації, розподілених баз даних, черг повідомлень, реплікації даних та
балансування навантаження між вузлами. Недостатнє планування таких
механізмів може призвести до втрати даних, затримок у обробці запитів і
падіння продуктивності системи.
Коли кількість одночасних користувачів і запитів велика, стає критично
важливо гарантувати, що інформація зберігається і передається безпечно. Це
включає шифрування даних на рівні зберігання та передачі, контроль доступу,
аудит дій користувачів та захист від атак, що можуть виникати через
перевантаження системи або вразливості сервісів. Для хмарних систем,
особливо тих, що працюють на AWS або інших провайдерах, важливо
правильно налаштувати IAM-політики, VPC, S3-бакети та серверлес-функції
для запобігання несанкціонованому доступу [1].
Сучасні підходи до вирішення проблем високонавантажених систем
включають використання serverless-архітектури та мікросервісів. Serverless-
підхід дозволяє створювати компоненти системи, які автоматично
масштабуються відповідно до кількості запитів, без необхідності керувати
фізичними або віртуальними серверами. Це особливо ефективно для обробки
подій, таких як завантаження файлів, генерація посилань або виконання
9
обчислювальних задач, бо ресурси надаються тільки тоді, коли вони потрібні,
що оптимізує витрати і підвищує продуктивність.
Мікросервісна архітектура дозволяє розбити систему на незалежні
модулі, які відповідають за конкретні функції, наприклад, управління
файлами, автентифікацію користувачів, обробку запитів або логування. Такий
підхід підвищує відмовостійкість, бо збій одного мікросервісу не впливає на
роботу всієї системи. Водночас він створює додаткові виклики: потрібно
правильно організувати комунікацію між сервісами, забезпечити транзакційну
узгодженість та обробку помилок.
Для високонавантажених файлових сховищ важливим є ефективне
управління потоками даних. Коли одночасно обробляються тисячі запитів на
завантаження та завантаження файлів, звичайні підходи до читання/запису
даних на диск або в базу даних можуть стати вузьким місцем. Тому
застосовуються черги повідомлень, асинхронні обробники та кешування, що
дозволяє рівномірно розподіляти навантаження та мінімізувати затримки.
Не менш важливим є моніторинг і логування. У високонавантажених
системах потрібно постійно відстежувати стан сервісів, обсяг навантаження,
використання ресурсів і продуктивність компонентів. Це дозволяє вчасно
виявляти проблеми, наприклад, перевантаження сервісів, падіння
продуктивності баз даних або збої у мережевій інфраструктурі. У хмарних
системах AWS для цього застосовуються сервіси CloudWatch, CloudTrail та
інші інструменти моніторингу, які надають можливість автоматично
реагувати на змінне навантаження.
Високонавантажені системи також стикаються з проблемою затримок і
латентності. При великій кількості запитів навіть невеликі затримки у обробці
кожного запиту можуть призвести до помітного погіршення продуктивності
для користувачів. Щоб зменшити латентність, застосовують CDN (Content
Delivery Network), географічно розподілені бази даних, кешування часто
використовуваних даних і асинхронну обробку запитів [2].
10
Проблематика роботи з високонавантаженими системами включає
кілька ключових аспектів: забезпечення масштабованості та відмовостійкості,
оптимізацію ресурсів та витрат, безпеку даних, ефективне управління
потоками даних, моніторинг і логування, а також зменшення затримок
обробки запитів. У контексті сучасних хмарних сервісів, таких як AWS, ці
проблеми частково вирішуються за допомогою serverless-архітектури,
мікросервісного підходу, автоматичного масштабування і сучасних
інструментів моніторингу.
Розробка файлових сховищ у високонавантаженому середовищі
потребує комплексного підходу: поєднання сучасних архітектурних рішень,
ефективного використання хмарних ресурсів і впровадження механізмів
автоматичного масштабування. Високонавантажені системи вимагають від
розробників глибокого розуміння як програмних, так і інфраструктурних
аспектів, що включає знання серверлес-підходів, балансування навантаження,
асинхронної обробки, безпеки даних і принципів розподілених систем.
Розробка масштабованого хмарного файлового сервісу з автоматичним
розподілом ресурсів є актуальною і складною задачею, що поєднує технічні,
архітектурні та організаційні виклики. Успішне вирішення цих проблем
забезпечує надійну роботу системи навіть при великих пікових
навантаженнях, дозволяє оптимізувати витрати та гарантує безпеку і
доступність даних для користувачів.
Зростання обсягів цифрової інформації, що генерується як приватними
користувачами, так і організаціями, обумовлює необхідність ефективних
механізмів зберігання та обміну даними. Традиційні локальні файлові системи
та централізовані сервери не завжди забезпечують необхідну швидкість
доступу, масштабованість і відмовостійкість при високих навантаженнях. У
зв’язку з цим файлообмінники стають критично важливим інструментом, який
дозволяє користувачам оперативно завантажувати, зберігати та передавати
дані, зберігаючи при цьому контроль за доступом та безпекою інформації.
11
Особлива актуальність файлообмінників проявляється в умовах
високонавантажених систем, де одночасно обробляються великі потоки
запитів і даних. Використання активних файлообмінників дозволяє
реалізувати динамічний розподіл ресурсів, автоматичне масштабування і
балансування навантаження, що забезпечує стабільну роботу системи навіть
при пікових навантаженнях. Це робить такі системи незамінними для
корпоративного використання, навчальних закладів, наукових проєктів і будь-
яких середовищ, де необхідна швидка передача великих обсягів інформації.
Крім того, файлообмінники актуальні через потребу в інтеграції
сучасних механізмів безпеки даних. Збільшення кількості користувачів і
одночасних підключень підвищує ризик несанкціонованого доступу, втрати
або пошкодження даних. Сучасні файлообмінники забезпечують шифрування
даних, контроль доступу, аудит дій користувачів та генерацію тимчасових
посилань для безпечного обміну файлами, що підвищує рівень довіри до
системи.
Не менш важливим є економічний аспект використання
файлообмінників. Завдяки застосуванню хмарних технологій та serverless-
архітектури, такі системи дозволяють оптимізувати витрати на
інфраструктуру, автоматично масштабувати ресурси відповідно до
навантаження та ефективно використовувати обчислювальні потужності. Це
робить їх особливо актуальними для бізнесу та організацій, які прагнуть
поєднати високу продуктивність із мінімізацією експлуатаційних витрат.
Файлообмінники залишаються актуальними у науковому та
практичному контексті, оскільки вони поєднують ефективність зберігання
даних, швидкість доступу, безпеку інформації та економічну доцільність. Їх
застосування забезпечує сучасним користувачам і організаціям надійні
інструменти для обміну інформацією, що відповідає вимогам цифрової
економіки та високонавантажених систем.
12
Обробка файлів, особливо великих за обсягом, є ресурсомістким
процесом, що зумовлено низкою технічних та організаційних факторів. Перш
за все, великі файли потребують значного об’єму оперативної пам’яті для
завантаження та обробки. Навіть базові операції, такі як читання, запис або
копіювання файлів, вимагають виділення буферів пам’яті, пропорційних
розміру файлу. У випадку багатокористувацьких або високонавантажених
систем, коли одночасно обробляються десятки або сотні великих файлів,
потреби в оперативній пам’яті зростають експоненційно, що може призвести
до перевантаження серверів та погіршення продуктивності.
Другим фактором є паралельне оброблення потоків даних. Сучасні
файлові системи та хмарні сервіси дозволяють одночасно працювати з
багатьма користувачами або програмами, які звертаються до файлів у
реальному часі [3]. При цьому кожна операція з файлом, будь то завантаження,
передача або трансформація даних, створює додаткові обчислювальні
навантаження на процесор і дискову підсистему. Великий обсяг файлів
ускладнює процес управління потоками, викликає затримки у доступі та
потребує ефективного балансування ресурсів між користувачами.
Також є вплив обчислювальної складності операцій. Великі файли часто
обробляються не лише для зберігання, а й для виконання різних операцій:
шифрування, компресії, індексації, перевірки цілісності або антивірусного
сканування. Кожна з цих операцій вимагає значної обчислювальної
потужності та може створювати пікові навантаження на сервери або хмарну
інфраструктуру. Наприклад, шифрування або розшифрування файлів обсягом
десятки чи сотні гігабайт потребує одночасної роботи багатьох процесорних
ядер і інтенсивного використання оперативної пам’яті.
Велике значення має мережева інфраструктура при роботі з великими
файлами. Передача великих обсягів даних через локальні або глобальні мережі
створює навантаження на канали зв’язку, що може призвести до затримок і
падіння продуктивності. Особливо це критично для хмарних середовищ, де
13
файли завантажуються на віддалені сервери або отримуються від користувачів
через Інтернет. Висока пропускна здатність мережі, паралельна обробка
запитів та оптимізація передачі даних стають ключовими для забезпечення
ефективності системи.
Крім того, зберігання великих файлів вимагає значного обсягу
дискового простору і ефективної системи управління даними. При
використанні традиційних серверів або централізованих сховищ швидкість
читання та запису файлів часто обмежується дисковою підсистемою, що
створює вузькі місця у системі. Для хмарних платформ, таких як AWS, ці
проблеми частково вирішуються за рахунок розподіленого зберігання даних
(S3, EBS, Glacier), автоматичної реплікації та кешування, але все одно
потребують грамотного проєктування архітектури та виділення достатніх
ресурсів.
Не менш важливим є керування метаданими та індексація великих
файлів. Щоб забезпечити швидкий доступ і пошук даних, необхідно
створювати і підтримувати індекси, що додатково навантажує процесори та
пам’ять. При великих обсягах файлів кількість записів у базах даних або
системах управління метаданими значно зростає, що потребує застосування
масштабованих рішень, таких як NoSQL-бази даних або хмарні сервіси для
зберігання метаданих [4].
Робота з великими файлами потребує значних ресурсів через сумарний
вплив обсягу даних, потреби в оперативній пам’яті, процесорної потужності,
мережевих ресурсів та ефективного зберігання. Для високонавантажених і
хмарних систем це створює особливі виклики, що вимагають застосування
механізмів автоматичного масштабування, балансування навантаження,
кешування та оптимізації передачі даних. Усі ці аспекти роблять управління
великими файлами складним і ресурсомістким завданням, що підкреслює
необхідність використання сучасних архітектурних підходів і хмарних
технологій для забезпечення ефективності та надійності системи.
14
Використання хмарних серверів для розробки та експлуатації
високонавантажених систем забезпечує низку суттєвих переваг, пов’язаних із
масштабованістю, гнучкістю та оптимізацією витрат. Однією з ключових
переваг є еластичне масштабування, яке дозволяє автоматично збільшувати
або зменшувати кількість обчислювальних ресурсів залежно від поточного
навантаження. Це дає можливість системі працювати стабільно навіть у
періоди пікових запитів, не допускаючи перевантаження інфраструктури та
зниження продуктивності. Такий підхід неможливий або суттєво дорожчий у
традиційних дата-центрах, де ресурси потрібно закуповувати наперед і вручну
управляти їх розподілом.
Також є висока відмовостійкість і географічна розподіленість хмарних
ресурсів. Хмарні провайдери, такі як AWS, Azure або Google Cloud,
пропонують інфраструктуру, що автоматично дублює дані та сервіси між дата-
центрами в різних регіонах і зонах доступності. Це мінімізує ризики простою,
втрати даних або збоїв у роботі системи. Завдяки цьому високонавантажені
системи можуть забезпечувати безперервну роботу навіть у випадку аварій,
що є критичним для сучасних цифрових сервісів.
Ще однією перевагою є оптимізація фінансових витрат, оскільки хмарні
середовища працюють за моделлю “pay-as-you-go”. Це означає, що організація
сплачує лише за фактично використані ресурси. Для високонавантажених
систем це особливо важливо, адже вони потребують значних ресурсів тільки
в моменти пікового навантаження. Хмарні технології дозволяють знизити
загальну вартість інфраструктури, усувають необхідність утримання фізичних
серверів та зменшують витрати на технічне обслуговування.
Хмарні сервери також забезпечують високу швидкість розгортання
нових компонентів системи, що значно прискорює процес розробки та
модернізації високонавантажених рішень. Завдяки контейнеризації,
інструментам автоматизації (CI/CD) та serverless-технологіям, розгортання
нових сервісів або функцій займає лічені хвилини, що суттєво підвищує
15
ефективність роботи команди розробників та дозволяє оперативно реагувати
на зміни ринкових потреб.
Крім того пропонують широкі можливості для інтеграції механізмів
безпеки, серед яких шифрування даних, багатоетапна автентифікація, системи
контролю доступу, журнали аудиту та автоматичне виявлення аномалій. Для
високонавантажених систем це є принципово важливим, оскільки збільшення
кількості користувачів та запитів підвищує ризики несанкціонованого доступу
та кібератак. Вбудовані засоби безпеки хмарних сервісів дозволяють суттєво
знизити ці ризики без необхідності створення складної інфраструктури
захисту власними силами.
Хмара забезпечує ефективне управління даними, включаючи
розподілене зберігання, кешування, можливість побудови CDN-мереж для
швидкої доставки контенту та автоматичні інструменти резервного
копіювання [5]. Це особливо важливо для систем, що працюють з великими
обсягами файлів або з інтенсивними потоками запитів.
Використання хмарних серверів є одним з найоптимальніших рішень для
побудови високонавантажених систем, оскільки поєднує масштабованість,
надійність, економічну ефективність та сучасні інструменти управління
даними. Хмарна інфраструктура забезпечує стабільність системи навіть при
різких змінах навантаження, дозволяє швидко впроваджувати нові функції та
гарантує високий рівень захисту інформації, що робить її базовою технологією
для розвитку сучасних цифрових сервісів.
1.2 Вибір напряму дослідження
Розробка додатків у хмарній інфраструктурі сьогодні є одним з
ключових напрямів еволюції інформаційних технологій, оскільки хмара
формує нову парадигму створення, розгортання та масштабування
програмних систем. Перехід від традиційних серверних рішень до хмарних
16
моделей обумовлений стрімким зростанням потреб у гнучкості, доступності,
надійності й обчислювальних ресурсах. Сучасні організації дедалі частіше
відмовляються від локальних дата-центрів, обираючи хмарну інфраструктуру
як основну платформу для створення IT-продуктів. Це пов’язано з тим, що
хмарні технології забезпечують адаптивність до змін навантаження,
автоматизацію операційних процесів, вбудовані засоби безпеки та значну
оптимізацію витрат.
Однією з фундаментальних передумов використання хмарних
технологій у розробці програмного забезпечення є можливість відокремлення
логіки застосунку від фізичної інфраструктури. У традиційних програмних
системах розробники змушені враховувати апаратні обмеження, особливості
мережевої взаємодії та специфіку налаштувань серверів. Натомість у хмарній
інфраструктурі більшість цих аспектів автоматизується, а керування
ресурсами стає прозорим і динамічним. Завдяки цьому розробники
зосереджуються на бізнес-логіці, алгоритмах, функціональних модулях та
якості користувацького досвіду, а не на фізичній інфраструктурі. Це значно
пришвидшує цикл розробки та підвищує здатність системи до адаптації.
Суттєвий вплив на процес розробки хмарних додатків має розподілений
характер сучасних систем. Хмара забезпечує інструменти для створення
додатків, що працюють у географічно рознесених середовищах, підтримують
високу доступність, автоматичне балансування навантаження та можливість
обробляти мільйони одночасних запитів. Розробка таких систем вимагає
застосування архітектурних підходів, таких як мікросервіси, подієва
архітектура, безсерверні технології (serverless), контейнеризація та функції як
сервіс (FaaS). Кожен із цих підходів передбачає можливість масштабування
окремих компонентів, незалежного оновлення мікросервісів, автоматичного
розподілу навантаження та ізоляції помилок.
Мікросервісна архітектура, що широко використовується у хмарних
середовищах, базується на принципі розподілу системи на невеликі ізольовані
17
компоненти, які виконують конкретні функції та взаємодіють між собою через
стандартизовані API. Це дозволяє розробляти, тестувати та масштабувати
кожен сервіс незалежно від інших. Наприклад, у файловому хмарному сервісі
окремі мікросервіси можуть відповідати за авторизацію, зберігання файлів,
обробку метаданих, генерацію тимчасових посилань, аудит операцій або
контроль версій. Усі ці компоненти мають різні вимоги до навантаження, і
хмарна інфраструктура дозволяє саме тим сервісам, що мають високий трафік,
отримувати більше ресурсів.
Хмарна інфраструктура надає можливість реалізувати безсерверну
архітектуру, яка є логічним продовженням еволюції розподілених систем.
Serverless дає змогу запускати окремі функції у відповідь на події, при цьому
немає потреби управляти серверами або підтримувати постійно працюючі
інстанси. У контексті файлових сервісів безсерверні функції можуть
обробляти завантаження файлів, їхню індексацію, створення картинок-прев’ю,
перевірку вірусів, надсилання сповіщень або логування дій. Хмарна
платформа автоматично визначає кількість функцій, які мають бути запущені
паралельно для обслуговування навантаження, що дозволяє системі ефективно
реагувати на пікові навантаження.
Важливим розробки хмарних додатків є забезпечення масштабованості.
У традиційних середовищах масштабування вимагало закупівлі нового
обладнання, зміни інфраструктури або перенесення додатків. У хмарі
масштабування відбувається автоматично та прозоро для розробника.
Системи автоматичного масштабування (Auto Scaling) аналізують показники,
такі як CPU, кількість запитів, затримка або обсяг черги, і змінюють кількість
робочих екземплярів сервісу. Це дозволяє підтримувати стабільну
продуктивність навіть у випадку різких змін трафіку. Наприклад, якщо
хмарний файловий сервіс отримує величезну кількість одночасних
завантажень, інфраструктура автоматично створює додаткові інстанси для
обробки цих запитів.
18
Розробка додатків у хмарній інфраструктурі також передбачає значно
розширені можливості забезпечення безпеки. Більшість хмарних платформ
мають вбудовані засоби шифрування даних, як при зберіганні (encryption at
rest), так і при передачі (encryption in transit), а також підтримують
багаторівневу систему автентифікації, контроль доступу, журналювання,
аудит, управління ключами та інструменти виявлення аномалій. У випадку
файлових сервісів ці механізми дозволяють контролювати доступ до файлів,
створювати тимчасові посилання з обмеженим терміном дії, відстежувати всі
операції над даними, виявляти підозрілі запити та запобігати атакам. Хмара
також значно полегшує впровадження стандартів безпеки, таких як GDPR,
ISO 27001, HIPAA, PCI DSS, що критично важливо для систем, які працюють
з конфіденційною або комерційною інформацією.
Ще однією важливою особливістю хмарного середовища є
використання інфраструктури як коду (Infrastructure as Code, IaC). Цей підхід
забезпечує можливість описувати інфраструктуру декларативними
конфігураційними файлами, які можуть бути збережені у системах контролю
версій, автоматизовані та протестовані [6]. Такий підхід дозволяє забезпечити
відтворюваність середовища, швидко розгортати нові екземпляри системи,
працювати в команді та уникати помилок, пов’язаних з ручним
налаштуванням серверів. Інфраструктура як код є особливо важливою для
високонавантажених систем, де інфраструктурні помилки або нестабільність
можуть спричинити масштабні збої.
Хмарні технології також відіграють ключову роль у забезпеченні
високоінтенсивної роботи додатків зі значними обсягами даних. Великі дані
потребують відповідних механізмів зберігання, реплікації, складних запитів,
кешування та аналітики. Хмарні провайдери пропонують спеціалізовані
сервіси для роботи з великими масивами даних, такі як розподілені файлові
системи, об’єктні сховища, бази даних NoSQL, черги повідомлень, кеші, шини
подій та аналітичні платформи. Це дозволяє створювати системи, здатні
19
обробляти терабайти інформації щодня, забезпечувати низькі затримки
доступу та високу продуктивність.
Одним із найважливіших є оптимізація витрат. Хмарні платформи
працюють за моделлю оплати за фактичне використання, що дозволяє
уникнути переплат за невикористані ресурси. У традиційних інфраструктурах
необхідно наперед інвестувати в сервери, мережеве обладнання, системи
охолодження, технічну підтримку та фізичний простір. Хмарна модель усуває
ці витрати, забезпечуючи автоматичне масштабування ресурсів, плату за
виклики функцій або обсяг збережених даних, а також інструменти
прогнозування та аналізу витрат. Це дає змогу будувати високонавантажені
системи із мінімальними фінансовими витратами та оптимальним рівнем
продуктивності.
Складність розробки хмарних додатків полягає в необхідності
враховувати специфіку розподілених систем, які мають підвищені вимоги до
надійності, узгодженості даних, обробки помилок та міжсервісної взаємодії.
Розробники повинні враховувати затримки мережі, можливість часткових
відмовок, необхідність ретрай-логіки, черг повідомлень, ідемпотентність
операцій та забезпечення транзакцій у розподілених середовищах. Усі ці
фактори мають вирішальне значення для побудови систем, які витримують
високі навантаження та гарантують стабільний доступ до даних.
Хмарні додатки часто використовують контейнеризацію та оркестрацію.
Контейнери забезпечують ізольоване виконання програмного забезпечення,
що дає змогу переносити застосунки між середовищами без зміни їх оточення.
Оркестратори, такі як Kubernetes, дозволяють автоматично керувати
масштабуванням, відновленням та розподілом навантаження між
контейнерами. Це є ключовим для складних високонавантажених архітектур,
де важливо забезпечити сталість та передбачуваність поведінки системи.
У процесі розробки хмарних додатків важливу роль відіграють
інструменти CI/CD (Continuous Integration / Continuous Deployment). Вони
20
забезпечують автоматичне тестування, збірку, розгортання та моніторинг
нових версій додатків. У великих системах ручне розгортання є надто
повільним і схильним до помилок, тому автоматизація процесів стає критично
важливою. Хмарні провайдери пропонують спеціалізовані інструменти, що
дозволяють побудувати повний конвеєр доставки програмного забезпечення,
починаючи від коміту в репозиторій і закінчуючи автоматичним розгортанням
на продуктивній інфраструктурі.
Важливою складовою є моніторинг та логування в режимі реального
часу. Високонавантажені системи повинні забезпечувати прозорість роботи
всіх компонентів, своєчасне виявлення помилок, аналіз продуктивності та
прогнозування можливих проблем. Хмарні сервіси моніторингу дозволяють
збирати дані про навантаження, швидкість обробки запитів, використання
ресурсів, журнали помилок, події безпеки та статистику виконання функцій.
Це забезпечує стабільність системи та прискорює реакцію на збої.
Розробка додатків у хмарній інфраструктурі ‒ це комплексний
процес, що базується на сучасних архітектурних підходах, автоматизації,
розподілених обчисленнях, механізмах безпеки та ефективному управлінні
ресурсами. Хмара забезпечує розробникам унікальні можливості, які було
неможливо реалізувати у традиційних локальних інфраструктурах:
автоматичне масштабування, безсерверне виконання, глобальну доступність,
високу відмовостійкість, оптимізацію витрат і швидке розгортання. Це робить
хмарні технології ключовим інструментом у створенні сучасних
високонавантажених систем, зокрема систем зберігання та обміну файлами,
які вимагають високої продуктивності, надійності та безпеки.
Amazon Web Services сьогодні є найбільш розвиненою та масштабною
екосистемою хмарних сервісів у світі. Платформа містить сотні інструментів,
які охоплюють практично всі сфери роботи з даними: обчислення, зберігання,
аналітику, безпеку, машинне навчання, IoT та serverless-архітектури
зображено на рисунку 1.1.
21
Рисунок 1.1 – Інструменти AWS
Однією з ключових переваг AWS є її глобальна інфраструктура - десятки
регіонів і численні зони доступності, що дозволяють будувати системи з
мінімальними затримками та високою стійкістю до відмов.
Сховище Amazon S3, яке є основою безлічі сучасних сервісів, здатне
обробляти колосальну кількість запитів та автоматично збільшувати
пропускну здатність. Цей сервіс практично не потребує ручного втручання -
він самостійно управляє масштабуванням, реплікацією та зберіганням даних.
Для обчислень AWS пропонує EC2 та інструменти автоматичного
масштабування, а також serverless-сервіси, зокрема AWS Lambda, що
дозволяють виконувати програмний код тільки тоді, коли надходить запит, і
не витрачати кошти на постійно активні сервери [7].
AWS часто обирають завдяки поєднанню гнучкості та продуктивності,
проте ця платформа також вимагає продуманого управління ресурсами ‒
неправильні налаштування можуть швидко збільшити вартість проєкту.
22
Незважаючи на це, для складних, ресурсомістких або високонавантажених
систем AWS залишається однією з найефективніших платформ.
Microsoft Azure посідає друге місце на ринку й активно
використовується у корпоративному секторі. Azure особливо цінують за
інтеграцію з продуктами Microsoft, такими як Windows Server, Active
Directory, Office 365 та SQL Server. Це дозволяє компаніям безболісно
переносити частину інфраструктури в хмару або комбінувати локальні сервіси
з хмарними.
Azure надає широкий набір сервісів для зберігання та обробки
інформації. Azure Blob Storage забезпечує централізоване та надійне
зберігання великих обсягів неструктурованих даних, а обчислювальні сервіси
‒ Azure Virtual Machines, Azure Functions та керований Kubernetes ‒
дозволяють створювати масштабовані та гнучкі системи, зображено на
рисунку 1.2.
Рисунок 1.2 – Сервіси Azure
Серед сильних сторін Azure ‒ потужні DevOps-інструменти, зручні
рішення для побудови гібридних середовищ і тісна взаємодія з локальними
23
корпоративними мережами. Проте для деяких складних контейнерних
платформ Azure може поступатися за гнучкістю та швидкістю розгортання
рішень на основі Kubernetes [8].
Google Cloud Platform вирізняється фокусом на високопродуктивних
обчисленнях, роботі з великими даними та машинним навчанням.
Інфраструктура GCP базується на тих самих технологіях, які забезпечують
роботу наймасштабніших сервісів світу ‒ Google Search, Gmail, Maps та
YouTube. Сервіси зображені на рисунку 1.3.
Це надає платформі доступ до надзвичайно швидкої та надійної
глобальної мережі.
Рисунок 1.3 – Сервіси Google Cloud Platform
Основне сховище Google Cloud Storage оптимізоване для розподіленого
доступу та великих обсягів інформації. GCP також відома своїм сервісом
Google Kubernetes Engine, який тривалий час вважався найкращою хмарною
реалізацією Kubernetes завдяки автоматизації та високому рівню стабільності.
24
У сфері аналітики та штучного інтелекту GCP надає потужні
інструменти ‒ від BigQuery до Vertex AI, які дозволяють будувати системи
аналізу даних у реальному часі та реалізовувати комплексні ML-моделі [9].
Основним недоліком платформи є менша кількість сервісів порівняно з AWS,
але в напрямку роботи з великими даними GCP часто перевершує конкурентів.
AWS пропонує найширший набір можливостей і найгнучкішу інфраструктуру
для складних, масштабованих систем. Microsoft Azure є оптимальним вибором
для підприємств, що використовують екосистему Microsoft і цінують гібридні
рішення. Google Cloud Platform найчастіше обирають для систем,
орієнтованих на аналітику, машинне навчання та інтенсивну роботу
контейнеризованих застосунків.
Усі три платформи забезпечують високу продуктивність, доступність і
захист даних, але відрізняються підходами:
AWS робить акцент на гнучкості й багатофункціональності.
Azure ‒ на корпоративній інтеграції та гібридних моделях.
GCP ‒ на ефективності, швидкості мережі та роботі з великими даними.
Автоматичний розподіл ресурсів є одним із ключових механізмів, що
забезпечує ефективність та масштабованість сучасних хмарних
інфраструктур. Його основне завдання полягає у динамічному та адаптивному
підборі необхідної кількості обчислювальних потужностей, пам’яті,
мережевих ресурсів або пропускної здатності для забезпечення стабільної
роботи застосунків у середовищі, де навантаження може змінюватися
непередбачувано. Завдяки цьому користувачі сплачують лише за фактично
використані ресурси, а система підтримує високу доступність без потреби у
ручному втручанні.
Механізми автоматичного масштабування у хмарних платформах
базуються на безперервному моніторингу стану застосунків та
інфраструктури. Система аналізує такі показники, як завантаження процесора,
кількість активних запитів, обсяг дискових операцій або затримки у мережі,
25
після чого приймає рішення про збільшення чи зменшення виділених ресурсів.
Цей процес може відбуватися горизонтально -шляхом додавання чи
вимкнення окремих екземплярів сервісів, або вертикально -шляхом зміни
конфігурації існуючих вузлів, наприклад збільшення обсягу оперативної
пам’яті чи кількості ядер процесора.
Однією з ключових переваг автоматичного розподілу ресурсів є
можливість стабільно підтримувати роботу високонавантажених систем
навіть під час різких пікових навантажень. Наприклад, у файлових сховищах
різке збільшення кількості операцій завантаження чи скачування файлів може
перевищити можливості статично налаштованого сервера. Хмарні платформи
на кшталт AWS, Google Cloud чи Azure дозволяють миттєво розширити
ресурси завдяки додатковим обчислювальним контейнерам або інстансам, що
запускаються автоматично. Таким чином забезпечується безперервність
роботи та відсутність деградації продуктивності навіть у найскладніші
моменти.
Автоматичний розподіл ресурсів також суттєво впливає на раціональне
використання коштів. Без цього механізму організації змушені були б постійно
підтримувати максимальну конфігурацію серверного обладнання, що здатне
витримати пікові навантаження, навіть коли протягом більшої частини часу
воно не використовується повністю. Хмарна модель, навпаки, дозволяє
системі самостійно зменшувати масштаб у періоди низької активності,
вимикаючи надлишкові ресурси. Це реалізує принцип «оплата за фактичне
використання», що робить хмарні архітектури особливо економічно
вигідними для великих проєктів та високонавантажених сервісів.
Сучасні платформи широко застосовують автоматичний розподіл
ресурсів у serverless-архітектурі. У таких системах користувач зовсім не керує
серверами ‒ обчислення виконуються лише під час надходження запитів.
Наприклад, AWS Lambda автоматично виділяє необхідні потужності для
обробки будь-якої кількості паралельних викликів, фактично знімаючи з
26
розробника відповідальність за інфраструктуру. Подібний підхід забезпечує
не лише масштабованість, але й підвищену стійкість: відмова окремого вузла
не впливає на роботу всієї системи, оскільки нові екземпляри функцій
створюються автоматично.
Важливим є забезпечення рівномірного балансування навантаження між
різними компонентами системи. Балансувальники трафіку аналізують потік
запитів і спрямовують їх до найменш завантажених вузлів, що дозволяє
уникнути перевантаження окремих серверів. У великих розподілених
системах балансування може відбуватися на кількох рівнях -від маршрутизації
HTTP-запитів до розподілу потоків даних у системах зберігання [10]. Завдяки
цьому хмарні застосунки зберігають стабільну роботу незалежно від кількості
користувачів або специфіки навантаження.
Автоматичне виділення та оптимізація ресурсів також підсилює рівень
безпеки та надійності системи. Коли частина інфраструктури виходить з ладу
або демонструє ознаки деградації, механізми самовідновлення автоматично
видаляють несправні вузли та створюють нові. У результаті зменшується
залежність від окремих фізичних серверів, а відмова не призводить до зупинки
сервісу. Багато хмарних платформ поєднують автоматичне масштабування з
географічною реплікацією, завдяки чому системи продовжують працювати
навіть у разі недоступності одного з регіонів.
Операції запису, читання, генерації посилань, сканування файлів,
авторизації та роботи з метаданими часто виконуються паралельно та мають
різний профіль навантаження. Розподільчі алгоритми дозволяють виділяти
ресурси окремо для кожного типу операцій, забезпечуючи оптимальну
продуктивність та зменшуючи ризик появи «вузьких місць». Завдяки цьому
система зберігає високу швидкодію навіть при різкому збільшенні кількості
користувачів або обсягу переданих даних.
Автоматичний розподіл ресурсів є фундаментальною складовою
побудови сучасних хмарних рішень. Він забезпечує адаптивність, стійкість і
27
економічність інфраструктури, дозволяючи застосункам ефективно
працювати в умовах нестабільних та зростаючих навантажень. Для
високонавантажених сервісів, включно з файловими сховищами, автоматичне
масштабування не лише підвищує продуктивність, але й мінімізує ризики
відмов, оптимізує витрати та створює умови для безперервного розвитку
системи.
1.3 Постановка задачі
У рамках даної кваліфікаційної роботи передбачається проєктування та
розроблення масштабованої хмарної системи файлового сховища, призначеної
для зберігання, обробки та надання доступу до цифрових файлів у
динамічному високонавантаженому середовищі. Система базуватиметься на
хмарній інфраструктурі AWS та використовуватиме механізми автоматичного
розподілу ресурсів з метою забезпечення стабільної продуктивності, гнучкого
масштабування та оптимізації витрат на обчислювальні ресурси. Такий підхід
дозволяє створити сервіс, здатний працювати у режимі змінних навантажень
та обслуговувати значні обсяги користувацьких операцій.
Постановка задачі передбачає створення високонадійної системи, здатної
функціонувати в умовах нерівномірного потоку запитів та значної кількості
збережених файлів. Традиційні централізовані файлові сховища мають низку
обмежень, зокрема фіксовану конфігурацію апаратних ресурсів, складність
горизонтального масштабування та високі витрати на підтримку фізичної
інфраструктури. На відміну від них, хмарні технології забезпечують
еластичність, що дозволяє системі динамічно змінювати конфігурацію
залежно від поточного навантаження, роблячи їх оптимальним рішенням для
сучасних файлообмінних платформ.
У процесі постановки задачі необхідно визначити функціональні
можливості системи та вимоги до її компонентів. Серед основних функцій
передбачається забезпечення можливості завантаження файлів
28
користувачами, їх надійного довготривалого зберігання, формування
унікальних посилань для отримання доступу, а також реалізація гнучких
механізмів контролю доступу. Система повинна підтримувати роботу з
великими обсягами даних та файлами значного розміру, що вимагає
застосування оптимізованих моделей зберігання, високошвидкісних
алгоритмів передачі даних та реплікаційних технологій, стійких до збоїв.
Невід’ємною складовою є інтеграція механізмів автоматичного
розподілу обчислювальних ресурсів. У зв’язку з тим, що інтенсивність запитів
може змінюватися у десятки разів протягом короткого проміжку часу, система
має забезпечувати автоматичне збільшення чи зменшення кількості доступних
ресурсів. Для цього доцільним є використання таких сервісів AWS, як Amazon
S3, AWS Lambda, Amazon DynamoDB та Auto Scaling, які спільно формують
гнучку безсерверну архітектуру з високою адаптивністю до змін у роботі
користувачів.
Окремий блок задач пов’язаний із забезпеченням безпеки збережених
даних. Оскільки система працюватиме з користувацькими файлами, необхідно
гарантувати їх конфіденційність, цілісність і захищеність від
несанкціонованого доступу. З цією метою передбачається впровадження
шифрування даних у стані спокою та під час передавання, використання
розмежування прав доступу, аудит операцій та логування активності. Такі
заходи забезпечать відповідність сучасним вимогам до інформаційної безпеки
та міжнародним стандартам захисту даних.
Подальша постановка задачі включає розробку, налаштування та
експериментальну оцінку масштабованого файлового сховища з
автоматизованим управлінням ресурсами. Система повинна демонструвати
високу відмовостійкість, низькі затримки при доступі до файлів, гнучкі
можливості адаптації до змін у навантаженні та мінімальні експлуатаційні
витрати. Усе це досягається використанням хмарної архітектури, яка
забезпечує необхідний рівень гнучкості та технологічної стійкості.
29
Система файлового сховища, що розробляється, повинна функціонувати
на основі обчислювальних інстансів, об’єктних сховищ, serverless-
компонентів та механізмів управління доступом. Така архітектура забезпечує
можливість безперервної обробки даних у реальному часі, а також значно
полегшує масштабування та інтеграцію з додатковими сервісами. Реплікація
даних між датацентрами, автоматичне відновлення після збоїв і висока
доступність сервісів дозволяють досягти надійності, яка недосяжна для
класичних локальних систем.
Додатковою перевагою є економічна ефективність хмарних
інфраструктур, зокрема моделі оплати за фактичне використання (pay-as-you-
go). Вона забезпечує оптимальне розподілення бюджету, оскільки ресурси
виділяються лише за необхідності. Хмарні платформи також пропонують
широкі можливості для моніторингу, логування та автоматизованого
управління системою, що суттєво спрощує її підтримку та розвиток.
Важливим аспектом є реалізація механізмів автоматичного
масштабування, які дають змогу динамічно адаптувати ресурси системи до
реального навантаження. У періоди низької активності інфраструктура
повинна переходити у режим мінімального споживання ресурсів, а окремі
компоненти ‒ повністю деактивуватися до появи запитів. Це забезпечує
енергоефективність, знижує операційні витрати та підвищує загальну
гнучкість системи. У моменти пікового навантаження система повинна
автоматично розширювати доступні ресурси, підтримуючи необхідний рівень
продуктивності та запобігаючи деградації сервісу.
Реалізація подібних механізмів автоматичного управління ресурсами
також підвищує відмовостійкість системи, оскільки мінімізує залежність від
ручного адміністрування та зменшує ризики виникнення помилок. Така
архітектура працює як саморегульований механізм і дозволяє підтримувати
стабільний рівень продуктивності незалежно від умов експлуатації.
30
У підсумку результатом роботи має стати повністю автоматизована
інфраструктура файлової системи, яка здатна динамічно адаптуватися до змін
у навантаженні, забезпечувати стабільну продуктивність, економічне
використання ресурсів та високий рівень надійності. Така система
відповідатиме сучасним вимогам до побудови хмарних сервісів та стане
технологічною платформою для подальшого розвитку високопродуктивних
рішень у сфері зберігання та обробки даних.
1.4 Висновки до розділу 1
У розділі було проведено ґрунтовний аналіз предметної області, що
дозволив визначити ключові проблеми та вимоги, характерні для сучасних
високонавантажених систем файлового зберігання. Дослідження показало, що
зростання обсягів даних, інтенсивності трафіку та кількості користувачів
створює суттєві виклики для традиційних архітектур, які не здатні забезпечити
стабільну роботу під змінним або піковим навантаженням.
Особлива увага була приділена таким аспектам, як масштабованість,
відмовостійкість, оптимізація ресурсів, безпека даних та мінімізація
латентності. Високонавантажені системи потребують архітектурних рішень,
які дозволяють гнучко реагувати на зміну навантаження, рівномірно
розподіляти роботу між компонентами та забезпечувати безперервність
доступу до файлів навіть за умов часткових збоїв інфраструктури.
Аналіз показав, що сучасні хмарні технології, зокрема serverless-моделі,
автоматичне масштабування, мікросервісна архітектура та інтегровані
інструменти моніторингу, є найбільш ефективними засобами для побудови
високонавантажених файлових систем. Вони дозволяють оптимізувати
використання ресурсів, мінімізувати витрати на інфраструктуру, підвищити
продуктивність та забезпечити високий рівень безпеки.
У процесі дослідження визначено, що традиційні монолітні підходи не
можуть гарантувати стабільну роботу за умов великої кількості одночасних
31
запитів та динамічної зміни навантаження. Тому для проєктування сучасного
файлового сервісу необхідно застосовувати розподілені та хмарні моделі, що
дозволяють автоматизувати процеси управління ресурсами, забезпечувати
масштабованість та підтримувати високу доступність даних.
32
РОЗДІЛ 2 ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ ОБМІНУ ФАЙЛАМИ
2.1 Огляд існуючих технологій
У сучасних високотехнологічних системах, де масштабованість,
відмовостійкість та автоматизація є ключовими вимогами, традиційні підходи
до управління інфраструктурою вже не забезпечують необхідної швидкості
розвитку та стабільності роботи сервісів. У зв’язку з цим концепція
Infrastructure as Code (IaC) стала одним із фундаментальних підходів у
побудові та експлуатації хмарних архітектур. AWS, як найбільша хмарна
платформа світу, надає широкий набір інструментів для написання,
розгортання та підтримки інфраструктури у вигляді коду, що дозволяє робити
процеси створення інфраструктурних ресурсів керованими, відтворюваними
та автоматизованими.
Amazon Web Services (AWS) ‒ це комплексна хмарна платформа, яка
включає понад 200 сервісів: від обчислювальних ресурсів (Amazon EC2, AWS
Lambda) до сховищ (Amazon S3, EFS, Glacier), баз даних (RDS, DynamoDB),
мережевих компонентів (VPC, Route 53, API Gateway) та інструментів безпеки
(IAM, KMS, Cognito) [11]. Така різноманітність дозволяє створювати
інфраструктури будь-якої складності ‒ від невеликих веб-додатків до
глобальних розподілених систем. Ключовою характеристикою AWS є
еластичність, тобто здатність автоматично збільшувати чи зменшувати
кількість інфраструктурних ресурсів залежно від навантаження. Це особливо
актуально для високонавантажених систем, де кількість запитів може
змінюватися у десятки разів протягом дня. Проте ефективне використання
можливостей AWS потребує автоматизації. Ручне створення ресурсів через
консоль є повільним, помилковим та нефункціональним у довгостроковій
33
перспективі. Саме в цьому контексті виникає необхідність у використанні
концепції інфраструктури як коду.
Infrastructure as Code ‒ це методологія, що дозволяє описувати
інфраструктуру у вигляді коду, який зберігається у репозиторіях, проходить
рев’ю, тестується, версіонується та автоматично застосовується. Принцип
роботи зображено на рисунку 2.1.
Рисунок 2.1 – Принцип роботи Infrastructure as Code
Головними перевагами IaC є відтворюваність, контроль змін та аудит,
зменшення людських помилок, інтеграція з CI/CD процесами, а також
масштабованість та гнучкість середовищ.
У контексті AWS основним “двигуном” IaC є AWS CloudFormation, а
сучасні надбудови над ним ‒ AWS CDK, Sceptre, Terraform, Pulumi та інші.
AWS CloudFormation ‒ це нативний сервіс AWS, який дозволяє
описувати інфраструктуру у вигляді декларативних шаблонів (JSON або
YAML). CloudFormation забезпечує автоматичне створення, оновлення та
видалення ресурсів AWS, перевірку залежностей між ресурсами, збереження
стану у вигляді стеків, інтеграцію з IAM для контрольованого доступу та
можливість створення кастомних ресурсів [12]. Принцип роботи зображено
на рисунку 2.2.
34
Рисунок 2.2 ‒ Принцип роботи AWS CloudFormation
Проте написання великих YAML/JSON-шаблонів є складним і важко
масштабованим завданням. Саме для вирішення цих обмежень було створено
наступний рівень абстракції ‒ AWS CDK.
AWS CDK ‒ це фреймворк, який дозволяє описувати інфраструктуру у
вигляді звичайного коду, використовуючи популярні мови програмування:
TypeScript, Python, Java, C# або Go. CDK компілюється у шаблони
CloudFormation і розгортає ресурси через CloudFormation. Інженер може
використати цикли, функції, класи, модулі та умовні конструкції, яких немає
в YAML/JSON [13]. CDK містить конструкції (constructs) різного рівня, що
автоматизують складні налаштування, наприклад один рядок коду може
створити повністю налаштований S3 бакет із шифруванням, lifecycle
правилами та блокуванням публічного доступу. Принцип використання
зображено на рисунку 2.3.
Модульність CDK дозволяє створювати власні бібліотеки архітектурних
шаблонів ‒ “інфраструктурні компоненти”, які легко переносити у нові
проєкти. CDK також інтегрується з CI/CD процесами та дозволяє бачити
детальний diff змін перед застосуванням, що забезпечує безпечне оновлення
ресурсів.
35
Рисунок 2.3 – Принцип використання AWS CDK
Sceptre ‒ це інструмент на Python, який автоматизує роботу з
CloudFormation-шаблонами та спрощує управління великими
інфраструктурами. Його головне призначення ‒ керування інфраструктурою,
що складається з багатьох стеків CloudFormation.
Amazon Elastic Container Service (ECS) є керованим сервісом
контейнеризації в AWS, який дозволяє розгортати, управляти та масштабувати
Docker-контейнери в хмарному середовищі. Контейнеризація, у свою чергу,
дозволяє ізолювати додатки та їхні залежності у єдиному пакеті, що забезпечує
передбачувану поведінку незалежно від середовища. ECS підтримує як запуск
контейнерів на власних EC2-інстансах, так і використання безсерверного
варіанту ‒ Fargate, який знімає з розробника обов’язки з управління
інфраструктурою, забезпечуючи автоматичне виділення ресурсів та
масштабування, структура сервісу зображена на рисунку 2.4.
Основним логічним елементом ECS є кластер, що представляє собою
групу обчислювальних ресурсів для запуску контейнерів, а також сервіси та
таски, які визначають правила розгортання та життєвий цикл
контейнеризованих додатків. ECS інтегрується з іншими сервісами AWS,
такими як CloudWatch для моніторингу, IAM для управління доступом, та
Application Load Balancer для маршрутизації трафіку до контейнерів [13]. Це
забезпечує високу масштабованість, гнучкість і відмовостійкість
контейнерних додатків у хмарі.
36
Рисунок 2.4 – Структура Amazon Elastic Container Service (ECS)
Amazon Simple Storage Service (S3) ‒ це об’єктне сховище для
зберігання необмеженої кількості даних різного типу, від статичних веб-
файлів до резервних копій та великих масивів даних для аналітики, принцип
роботи зображено на рисунку 2.5.
Рисунок 2.5 ‒ Принцип роботи Amazon Simple Storage Service (S3)
37
Ключовою концепцією S3 є бакет, який виступає логічним контейнером
для об’єктів. Кожен об’єкт у S3 зберігається з унікальним ключем і
метаданими, а також може бути зашифрований за допомогою сервісів SSE-S3,
SSE-KMS або користувацьких ключів. S3 підтримує політики контролю
доступу, включаючи IAM-політики, ACL, а також блокування публічного
доступу для підвищення безпеки. S3 забезпечує високу доступність і
надійність завдяки реплікації даних у кількох зонах доступності (Availability
Zones), а також підтримує версіонування об’єктів та функціональність
життєвих циклів для автоматичного архівування чи видалення даних. Крім
того, S3 інтегрується з аналітичними та машинними сервісами AWS, такими
як Athena, Redshift Spectrum та SageMaker, що дозволяє обробляти дані
безпосередньо в хмарі, не переміщуючи їх.
Load Balancer у AWS ‒ це сервіс для розподілу вхідного трафіку між
різними обчислювальними ресурсами з метою підвищення продуктивності,
надійності та масштабованості додатків. Принцип роботи зображено на
рисунку 2.6.
Рисунок 2.6 – Принцип роботи Load Balancer у AWS
38
AWS надає три основні типи балансувальників: Application Load
Balancer (ALB), Network Load Balancer (NLB) та Gateway Load Balancer (GLB).
ALB працює на рівні HTTP/HTTPS і підтримує маршрутизацію на основі URL,
заголовків та методів запитів, що дозволяє створювати складні правила
маршрутизації для мікросервісної архітектури. NLB призначений для
високопродуктивних сценаріїв TCP/UDP і забезпечує низьку затримку при
обробці мільйонів запитів на секунду, зберігаючи при цьому стабільну роботу
додатків у випадку збою окремих ресурсів. GLB інтегрується з сервісами
безпеки та мережевої маршрутизації, дозволяючи масштабувати віртуальні
мережеві функції [14]. Load Balancer підтримує інтеграцію з ECS, дозволяючи
автоматично маршрутизувати запити до контейнерів, а також з S3 для
організації доступу до статичних ресурсів через CDN Amazon CloudFront. За
рахунок балансування навантаження забезпечується рівномірне використання
ресурсів, зменшуються точки відмови та підвищується загальна
відмовостійкість інфраструктури.
Інтеграція ECS, S3 та Load Balancer у хмарній архітектурі AWS дозволяє
створювати масштабовані, гнучкі та надійні системи. Контейнери ECS
забезпечують ізоляцію додатків та автоматичне масштабування, S3 слугує
централізованим сховищем даних із високою доступністю, а Load Balancer
гарантує рівномірний розподіл навантаження та високу продуктивність
сервісів. Спільне використання цих сервісів дозволяє реалізовувати сучасні
хмарні архітектури на основі мікросервісів, забезпечуючи ефективність
управління ресурсами, безпеку та високу доступність сервісів.
Мова програмування Java є однією з найбільш поширених і
універсальних мов для розробки програмного забезпечення. Вона була
створена компанією Sun Microsystems у 1995 році з метою забезпечити
принцип «Write Once, Run Anywhere» (WORA), тобто можливість запускати
програмний код на будь-якій платформі, де встановлена віртуальна машина
Java (JVM) [15]. Основою Java є об’єктно-орієнтована парадигма, яка дозволяє
39
моделювати складні системи через класи, об’єкти та взаємодію між ними.
Такий підхід сприяє повторному використанню коду, зменшенню дублювання
та підвищенню підтримуваності програмних систем. Java активно
використовується у розробці корпоративних додатків, мобільних додатків для
Android, веб-сервісів та розподілених систем, завдяки своїй стабільності,
багатому набору бібліотек і підтримці великої кількості фреймворків, таких
як Spring, Hibernate та JavaFX. Крім того, наявність вбудованих механізмів
управління пам’яттю, таких як автоматичне прибирання сміття (Garbage
Collector), знижує ймовірність витоків ресурсів та підвищує безпеку
виконання програм.
Мова C# була розроблена компанією Microsoft на початку 2000-х років
як частина платформи .NET і швидко здобула популярність завдяки простоті
синтаксису та широким можливостям для створення як десктопних, так і веб-
та мобільних додатків. C# підтримує об’єктно-орієнтоване програмування,
включає сучасні концепції, такі як делегати, події, лямбда-вирази та
асинхронне програмування через ключові слова async/await, що дозволяє
ефективно працювати з потоками і ресурсами. Платформа .NET надає
розробникам універсальну середу виконання (CLR), яка забезпечує управління
пам’яттю, безпеку типів та інтеграцію з різними апаратними платформами
Windows, а також сумісність із Linux і macOS через .NET Core. C# активно
використовується у створенні корпоративних систем, ігор (через Unity), веб-
додатків з ASP.NET та сервісів на основі мікросервісної архітектури.
Обидві мови, Java і C#, підтримують багатопоточність та сучасні
парадигми програмування, що дозволяє ефективно розробляти масштабовані
та продуктивні додатки. Java виділяється кросплатформністю та стабільністю
у великих корпоративних системах, тоді як C# надає тісну інтеграцію з
екосистемою Microsoft і потужні інструменти для швидкої розробки і
налагодження. Обидві мови активно застосовують концепції інкапсуляції,
успадкування та поліморфізму, що сприяє структурованості коду та його
40
підтримці на великих проєктах. Крім того, наявність широких стандартних
бібліотек і фреймворків для обох мов дозволяє швидко інтегрувати сторонні
сервіси, виконувати роботу з базами даних, обробляти мережеві запити та
реалізовувати складну бізнес-логіку.
Порівняльний аналіз показує, що вибір між Java та C# часто
визначається екосистемою та специфікою проєкту. Java забезпечує
максимальну портативність і надійність при роботі з розподіленими
системами та Android-додатками, тоді як C# надає більш багаті засоби
інтеграції з платформою Windows та інструментами розробки Microsoft, що
робить її ефективною для корпоративних рішень та геймдеву. Обидві мови
постійно розвиваються: Java впроваджує сучасні функції, такі як Pattern
Matching та Records, а C# активно розвиває асинхронне програмування,
функціональні підходи та нові конструкції синтаксису для підвищення
продуктивності розробки [16].
Java і C# виступають ключовими інструментами сучасного
програмування, забезпечуючи широкий спектр можливостей для реалізації
складних і масштабованих рішень, підтримку об’єктно-орієнтованої та
функціональної парадигм, а також інтеграцію з різноманітними платформами
та сервісами. Вибір мови визначається не лише технічними особливостями,
але й вимогами проєкту, потребами команди розробників та специфікою
цільової екосистеми.
PostgreSQL є об’єктно-реляційною системою управління базами даних
(СУБД), яка відзначається високою надійністю, розширюваністю та
відповідністю стандартам SQL. Вона була створена з акцентом на підтримку
складних типів даних, транзакцій та розширених механізмів управління
цілісністю даних. PostgreSQL дозволяє працювати з реляційними та
нереляційними структурами, включаючи JSON, XML, HSTORE та інші, що
робить її ефективною для сучасних веб- та корпоративних додатків. Однією з
ключових особливостей PostgreSQL є підтримка ACID-транзакцій, що
41
забезпечує надійність збереження даних навіть у випадку збоїв системи. Крім
того, вона надає можливості створення власних функцій, типів даних, індексів
і тригерів, що значно розширює функціональність системи та дозволяє
оптимізувати її під специфіку конкретного застосування. Система активно
використовується у фінансових сервісах, аналітичних платформах, IoT-
додатках та хмарних сервісах завдяки високій масштабованості та
стабільності.
MySQL є однією з найбільш популярних реляційних СУБД, яка
відзначається простотою використання, широкою підтримкою та
ефективністю при роботі з великими обсягами даних. Вона була розроблена
для забезпечення швидкої обробки запитів та надійного зберігання інформації
у веб-додатках, що робить її стандартом для багатьох інтернет-платформ і
CMS, таких як WordPress, Drupal та Joomla. MySQL підтримує транзакції,
індекси та реплікацію, а також надає можливість масштабування як
вертикально, так і горизонтально, що забезпечує гнучкість у побудові великих
систем. Особливістю MySQL є наявність різних движків зберігання даних,
таких як InnoDB та MyISAM, що дозволяє обирати оптимальну
продуктивність і функціональність залежно від вимог проєкту. Вона також
активно використовується для аналітики, інтеграції з веб-сервісами та
хмарними платформами, завдяки широкій підтримці інструментів і бібліотек
для різних мов програмування.
Обидві СУБД підтримують стандарт SQL, але мають різні підходи до
розширюваності та управління даними. PostgreSQL відзначається багатими
можливостями для складних запитів, глибокою підтримкою транзакцій та
розширення через власні функції і типи даних, що робить її ідеальною для
аналітичних та корпоративних рішень [17]. MySQL, у свою чергу,
оптимізована для високошвидкісного зберігання і обробки великих потоків
простих запитів, що робить її ефективною для веб-додатків та систем з
великою кількістю одночасних підключень.
42
Сучасний розвиток обох систем включає інтеграцію з хмарними
платформами та технологіями контейнеризації, що дозволяє розгортати бази
даних у масштабованих інфраструктурах. PostgreSQL надає підтримку
розподілених транзакцій, розширені механізми реплікації та паралельну
обробку запитів, а MySQL активно використовує реплікацію Master-Slave,
Cluster і підтримку великих масивів даних у хмарних сервісах. Обидві системи
мають розвинену екосистему інструментів для резервного копіювання,
моніторингу та оптимізації продуктивності, що дозволяє підтримувати
високий рівень надійності та безпеки.
PostgreSQL і MySQL виступають потужними інструментами для
побудови реляційних баз даних, кожна зі своїми сильними сторонами:
PostgreSQL – для складних і критично важливих додатків з високими
вимогами до цілісності та гнучкості даних, а MySQL – для
високопродуктивних веб-систем та додатків з великою кількістю
користувачів. Вибір між ними визначається специфікою проєкту, вимогами
до продуктивності, масштабованості та інтеграції із зовнішніми сервісами.
2.2 Вибір технологій
У межах проєктування масштабованого хмарного сервісу з
автоматичним розподілом ресурсів буде розроблено спеціалізоване програмне
забезпечення, яке забезпечуватиме можливість завантаження та вивантаження
файлів користувачами у будь-який момент часу. Такий функціонал є базовим
для сучасних хмарних платформ, адже передбачає роботу з великими
обсягами даних, високою частотою звернень та необхідністю гарантувати
надійну доступність сервісу. Система передбачатиме підтримку одночасних
операцій від великої кількості клієнтів, що створює підвищене навантаження
на інфраструктуру та вимагає ретельного вибору архітектурних рішень.
43
Оскільки сервіс буде високонавантаженим, особливу увагу потрібно
приділити вибору технологій, здатних забезпечити горизонтальне
масштабування та гнучке управління ресурсами. Важливо передбачити
використання контейнеризації, систем оркестрації, а також хмарних
платформ, які підтримують автоматичний перерозподіл обчислювальних
потужностей залежно від фактичного трафіку та навантаження. Коректно
підібрані технологічні рішення не лише оптимізують продуктивність системи,
але й дозволять уникнути критичних затримок та збоїв у моменти пікового
використання сервісу. Такий підхід забезпечить стабільність, надійність і
можливість подальшого розвитку сервісу у випадку зростання кількості
користувачів та обсягів даних.
Система подібного типу набагато ефективніше реалізується саме в
хмарному середовищі, оскільки саме хмара надає всі необхідні механізми для
динамічного масштабування, автоматичного керування ресурсами та
забезпечення стабільної роботи під високими навантаженнями. У традиційній
інфраструктурі довелося б заздалегідь закуповувати обладнання «про запас»,
що призводить до зайвих витрат, складної підтримки та неможливості швидко
реагувати на несподіване зростання навантаження. Хмара ж дозволяє будувати
систему за принципом еластичності, коли ресурси додаються або звільняються
автоматично відповідно до реальних потреб.
До головних переваг використання хмарного середовища належать
гнучке масштабування, висока доступність, автоматизація інфраструктури,
можливість глобального розгортання та значне зниження витрат на підтримку
апаратної частини. Хмара також забезпечує централізоване управління
даними, надійні механізми резервного копіювання та зручну інтеграцію з
іншими сервісами, що дозволяє будувати складні системи швидше та з
меншими ризиками. Крім того, хмарні провайдери надають інструменти для
автоматичного моніторингу та балансування навантаження, що є критично
важливим для високонавантажених систем завантаження й обробки файлів.
44
Серед популярних хмарних сервісів, які можна використати для
реалізації подібної системи, варто виділити Google Cloud Platform, Microsoft
Azure та Amazon Web Services. Усі вони пропонують широкий спектр
інструментів для побудови масштабованих додатків, зокрема хмарні сховища,
обчислювальні ресурси, системи оркестрації контейнерів та сервіси
автоматичного масштабування. Проте оптимальним вибором для реалізації
проєкту можна вважати саме Amazon Web Services, оскільки AWS має
найбільш розвинену інфраструктуру, високий рівень надійності, широку
екосистему інструментів та сервіси, спеціально розроблені для автоматичного
розподілу ресурсів. Використання AWS дозволить створити максимально
гнучку, стабільну та продуктивну систему, здатну витримувати значні
навантаження та забезпечити безперебійну роботу користувачів.
AWS також надає можливість суттєво заощаджувати кошти завдяки
правильному налаштуванню механізмів автоматичного керування ресурсами.
Хмарна інфраструктура Amazon побудована за принципом оплати лише за
фактичне використання, тому у ті моменти, коли навантаження на систему
зменшується або повністю зникає, можна автоматично відключати певні
обчислювальні потужності чи допоміжні сервіси. Це дозволяє уникнути
ситуації, коли ресурси продовжують працювати без необхідності та генерують
зайві витрати.
Завдяки використанню таких сервісів, як Auto Scaling, Lambda та
інтелектуальні механізми керування контейнерами в Amazon ECS чи Amazon
EKS, система може самостійно зменшувати кількість активних інстансів або
взагалі переходити в режим мінімального споживання ресурсів. У разі появи
нового навантаження ресурси знову автоматично активуються та
масштабуються відповідно до потреб користувачів. Такий підхід робить
архітектуру не лише гнучкою та надійною, а й економічно ефективною, адже
оплата здійснюється пропорційно реальному використанню хмарних сервісів.
Саме тому AWS вважається оптимальним рішенням для побудови
45
високонавантажених систем із змінною інтенсивністю роботи, де важливо
забезпечити баланс між продуктивністю та фінансовою ефективністю.
Для проєктування масштабованої хмарної системи з автоматичним
розподілом ресурсів вибір мови програмування є стратегічно важливим
рішенням, яке впливає не лише на початкову розробку, а й на довгострокову
підтримку, розширення функціоналу та стабільність сервісу під високими
навантаженнями. Мова програмування визначає підхід до побудови
архітектури, стиль взаємодії між компонентами, спосіб обробки паралельних
процесів і те, наскільки легко система зможе адаптуватися до нових вимог. У
межах хмарного середовища, де ключову роль відіграє швидкість реагування,
надійність та ефективність використання ресурсів, це питання має особливе
значення.
Сьогодні існує низка мов програмування, які активно використовуються
для побудови серверної логіки, розподілених систем і хмарних сервісів. Java
є однією з найстаріших і найбільш стабільних технологій, відомою своєю
портативністю та потужною екосистемою. Великі корпорації часто
використовують її для побудови розподілених систем, проте Java-додатки
можуть вимагати більше ресурсів у порівнянні з іншими мовами. Python
зручний та гнучкий, ідеально підходить для швидкої розробки й
прототипування, але його інтерпретована природа інколи стає обмеженням
для високонавантажених сценаріїв, де потрібна максимальна продуктивність.
JavaScript із Node.js став популярним завдяки асинхронності та швидкій
обробці великої кількості одночасних з’єднань, але великі Node.js-проєкти
можуть бути складними в підтримці через динамічну типізацію та відсутність
строгих правил структуризації. Go від Google демонструє високу швидкість,
простоту й ефективність роботи з багатопоточністю, однак екосистема цієї
мови менш зріла порівняно з більш традиційними платформами.
На цьому фоні мова програмування C# вирізняється своєю
збалансованістю та універсальністю. Вона забезпечує високу продуктивність
46
завдяки Just-In-Time компіляції та оптимізаціям, які здійснює
платформа .NET. C# поєднує строгість статичної типізації та зручність
об’єктно-орієнтованого підходу, що дозволяє створювати масштабовані,
структуровані та безпечні застосунки. Важливо зазначити, що .NET продовжує
активно розвиватися, зокрема у напрямку кросплатформених рішень, що
робить C# актуальним вибором не лише для Windows, а й для Linux-
середовищ, часто використовуваних у хмарній інфраструктурі [18].
Особливу перевагу C# отримує у поєднанні з AWS, яка пропонує
повноцінний офіційний SDK для .NET. Це дає змогу максимально ефективно
працювати з такими сервісами, як Amazon S3, EC2, Lambda, DynamoDB та
іншими. Розробник може без зайвих труднощів інтегрувати у свій застосунок
функціонал автоматичного масштабування, асинхронної обробки запитів,
управління файлами та розподілу ресурсів. Крім того, C# добре підходить для
створення мікросервісної архітектури, що є одним із ключових підходів при
побудові сучасних хмарних систем.
Завдяки своїй стабільності, доступності широкого набору інструментів
та здатності витримувати значні навантаження, C# стає оптимальним вибором
для реалізації сервісу, який повинен залишатися надійним навіть у моменти
пікового трафіку. Ця мова дозволяє створити ефективну, масштабовану та
довговічну систему, що забезпечуватиме користувачам можливість
безперебійно завантажувати і вивантажувати файли, а розробникам – легко
підтримувати та розвивати її в майбутньому.
Розроблене програмне забезпечення матиме можливість працювати в
різних сервісах AWS, що забезпечує максимальну гнучкість та адаптивність
системи до потреб користувачів і характеру навантаження. Завдяки
модульності архітектури й використанню сучасних підходів до розробки, ПЗ
можна розгортати як на віртуальних машинах, так і в контейнеризованому
середовищі, що дозволяє вибрати оптимальний спосіб його експлуатації.
47
Одним із варіантів розгортання є Amazon EC2 ‒ сервіс, що надає
масштабовані віртуальні сервери з можливістю гнучкого конфігурування
ресурсів. Використання EC2 забезпечує повний контроль над операційною
системою, програмним оточенням та мережевими налаштуваннями. Це
особливо корисно у випадках, коли застосунок має специфічні вимоги або
потребує глибокої оптимізації. Завдяки Auto Scaling EC2 може автоматично
збільшувати чи зменшувати кількість інстансів залежно від фактичного
навантаження, забезпечуючи високу продуктивність і оптимальне
використання ресурсів.
Іншим ефективним рішенням є використання Amazon ECS ‒ сервісу
оркестрації контейнерів, що дозволяє запускати та керувати
контейнеризованими застосунками. Перевагою ECS є спрощене
масштабування, автоматичний розподіл навантаження та можливість легко
розгортати нові версії застосунку без зупинки системи. Контейнери дають
змогу забезпечити однакове оточення в усіх середовищах, підвищити
стабільність і значно спростити процес розробки та оновлення. У поєднанні з
AWS Fargate ECS дозволяє повністю уникнути управління серверами, що ще
більше оптимізує витрати та прискорює розгортання.
Таким чином, розроблене програмне забезпечення може бути
інтегроване в різні сервіси AWS ‒ як у класичні віртуальні машини EC2, так і
в сучасне контейнеризоване середовище ECS. Це забезпечує масштабованість,
надійність і гнучкість, дозволяючи адаптувати систему до будь-яких вимог і
забезпечувати стабільну роботу навіть під високими навантаженнями.
Розробка додатку з використанням Amazon ECS є кращим рішенням,
оскільки цей сервіс забезпечує високу ефективність управління контейнерами,
автоматизацію процесів масштабування та максимально прозору інтеграцію з
іншими хмарними інструментами AWS. Використання ECS дозволяє будувати
систему, яка легко адаптується до змін навантаження, швидко оновлюється та
забезпечує стабільність роботи навіть у складних високонавантажених
48
сценаріях. Контейнеризований підхід також полегшує процес розгортання,
оскільки дає змогу створити однакове робоче оточення для всіх інстансів
застосунку, незалежно від середовища чи етапу життєвого циклу.
Оскільки основою роботи ECS є контейнеризація, додатковим важливим
етапом під час розробки системи стає вибір відповідної технології
контейнеризації. Контейнери дозволяють ізолювати програму та її залежності,
створюючи легке, портативне та повторюване середовище, що значно
зменшує кількість помилок, пов’язаних із конфігураціями. Вони також
спрощують процес масштабування та оновлення, оскільки кожна нова версія
застосунку може бути оформлена як окремий контейнерний образ.
Найкращим вибором у цьому випадку є Docker ‒ найбільш популярна
та зріла технологія контейнеризації, що стала фактичним стандартом у галузі.
Docker забезпечує швидке створення, запуск та управління контейнерами, а
також легко інтегрується з Amazon ECS, дозволяючи розробникам без
труднощів передавати образи у хмару та керувати їхнім життєвим циклом.
Крім того, Docker має величезну екосистему, детальну документацію та
широку підтримку спільноти, що суттєво спрощує розробку та підвищує
надійність системи.
Таким чином, поєднання Docker і Amazon ECS є оптимальним рішенням
для розробки масштабованого хмарного сервісу. Це забезпечує швидке
розгортання, стабільність, високу продуктивність та можливість гнучкого
масштабування, що є критичними факторами для системи, яка повинна
витримувати великі навантаження й динамічно реагувати на зміни трафіку.
У процесі проєктування масштабованої хмарної системи важливим
етапом є вибір технології бази даних, адже саме вона забезпечує надійне
зберігання, структурованість та швидке отримання даних, необхідних для
коректної роботи сервісу. В умовах високонавантаженого середовища
коректно підібрана база даних впливає не лише на продуктивність, а й на
стабільність системи, її можливість масштабуватися та обробляти велику
49
кількість одночасних запитів. Тому на етапі проєктування слід ретельно
проаналізувати типи баз даних і визначити, який підхід найбільше відповідає
вимогам майбутнього застосунку.
У сучасній розробці активно використовуються як реляційні, так і
нереляційні бази даних. Нереляційні (NoSQL) системи, такі як MongoDB,
Cassandra чи DynamoDB, добре підходять для роботи з великими
неструктурованими даними, а також забезпечують легке горизонтальне
масштабування. Проте їхня гнучкість іноді обмежує можливість
гарантованого збереження даних у суворо структурованому вигляді, а також
ускладнює реалізацію складних транзакцій. Хоч ці технології є ефективними
у певних сценаріях, вони не завжди оптимальні для систем, де потрібно
забезпечити чіткі зв’язки між даними та високий рівень цілісності.
Для майбутньої системи більш відповідним рішенням є використання
реляційної бази даних. Реляційні СУБД надають чітку структуру, підтримку
складних транзакцій, забезпечують цілісність та узгодженість даних. Це
особливо важливо для функціоналу завантаження та вивантаження файлів, де
потрібно зберігати метадані, інформацію про користувачів, сесії, статуси
обробки та інші пов’язані дані. Реляційні бази дозволяють вибудувати надійну
модель даних, яку легко підтримувати та розширювати у майбутньому. Їх
ефективність у рамках хмарного середовища є додатковою перевагою, адже
AWS пропонує керовані рішення, які знімають із розробника значну частину
операційних витрат.
Серед відомих реляційних баз даних варто відзначити MySQL, MariaDB,
Microsoft SQL Server та PostgreSQL. Кожна з них має свої переваги, проте
найбільш універсальним і сучасним варіантом є саме PostgreSQL. Ця СУБД
поєднує у собі потужність класичної реляційної моделі з можливістю
працювати з більш складними типами даних, включно з JSON. PostgreSQL
відома високою продуктивністю, підтримкою розширень, стабільністю та
широкою спільнотою. Вона є повністю відкритою технологією, що дозволяє
50
уникнути прив’язки до конкретного вендора та дає можливість адаптувати її
під специфічні потреби системи.
З огляду на ці особливості оптимальним вибором для майбутньої
системи є PostgreSQL. Вона забезпечить надійне та ефективне зберігання
даних, дозволить легко масштабувати систему й підтримувати складні
операції, необхідні для стабільної роботи хмарного сервісу. PostgreSQL у
поєднанні з інфраструктурою AWS створює гнучке, швидке та надійне
рішення, яке відповідатиме вимогам як поточної, так і майбутньої версії
програмного забезпечення.
З огляду на вище перелічені технології можна створити програмне
забезпечення, яке матиме відмінні можливості автоматичного масштабування
та буде здатним динамічно реагувати на зміну навантаження. Поєднання
хмарної інфраструктури AWS, контейнеризації через Docker, використання
Amazon ECS та реляційної бази даних PostgreSQL формує потужний
фундамент для побудови системи, що легко адаптується до будь-яких умов
роботи. Така архітектура забезпечує гнучкість, надійність та швидку реакцію
на зміни трафіку, що є критично важливим для високонавантажених сервісів.
Використання ECS дозволяє запускати додаток у контейнерах, які
можуть автоматично масштабуватися залежно від реального навантаження, а
механізми AWS Auto Scaling забезпечують плавне збільшення або зменшення
кількості активних інстансів без участі адміністратора. Це означає, що система
сама визначає моменти зростання активності користувачів і автоматично
виділяє додаткові обчислювальні ресурси, щоб забезпечити стабільну й
безперебійну роботу. Коли навантаження спадає, зайві ресурси вимикаються,
що робить роботу сервісу економічно ефективною.
У результаті таке програмне забезпечення буде здатне підтримувати
великий обсяг операцій із файлами, обробляти велику кількість одночасних
запитів та зберігати дані в надійному структурованому вигляді. Обрана
архітектура надасть змогу системі автоматично адаптуватися до потреб
51
користувачів, забезпечить високу продуктивність та дозволить уникнути
простоїв у пікові моменти. Це робить запропонований підхід оптимальним
для створення сучасного масштабованого хмарного сервісу, що зможе
ефективно функціонувати навіть у умовах значного зростання трафіку.
2.3 Висновки до розділу 2
У другому розділі було проведено ґрунтовний аналіз сучасних
технологій та інструментальних засобів, що забезпечують розробку,
розгортання та підтримку масштабованих і надійних інформаційних систем у
хмарному середовищі. Розгляд можливостей AWS показав, що дана
платформа надає широкий спектр сервісів, які дозволяють створювати
інфраструктури будь-якого рівня складності, забезпечуючи еластичність,
відмовостійкість та високу продуктивність. Концепція Infrastructure as Code,
реалізована через такі інструменти, як AWS CloudFormation та AWS CDK,
відіграє ключову роль у автоматизації процесів управління інфраструктурою,
роблячи їх контрольованими, повторюваними та безпечними.
Інтеграція контейнерних технологій, зокрема Amazon ECS, дозволяє
реалізовувати мікросервісну архітектуру з гнучким масштабуванням та
ізоляцією сервісів. Використання S3 як основного об’єктного сховища та Load
Balancer для розподілу навантаження забезпечує стабільність роботи системи
та оптимальне використання ресурсів. Така комбінація сервісів дає змогу
створювати сучасні хмарні рішення, що відповідають вимогам
продуктивності, надійності та безпеки.
Аналіз мов програмування Java та C# засвідчив їх придатність для
розробки складних і високонавантажених систем. Обидві мови підтримують
сучасні парадигми програмування, мають широкі екосистеми та забезпечують
масштабованість, що робить їх ефективними для різноманітних типів
52
застосунків. Вибір конкретної мови визначається особливостями проєкту та
цільовим середовищем.
Окрему увагу приділено базі даних PostgreSQL, яка завдяки своїй
розширюваності, підтримці складних типів даних і високому рівню
транзакційної надійності є оптимальним вибором для систем, що потребують
зберігання структурованої та напівструктурованої інформації.
Вибір технологій та інструментальних засобів, розглянутих у цьому
розділі, забезпечує фундамент для створення сучасної, надійної та
масштабованої системи. Вони дозволяють реалізувати ефективну архітектуру,
яка відповідає вимогам безпеки, продуктивності та гнучкості, що є критично
важливим для успішного функціонування розроблюваного програмного
продукту.
53
РОЗДІЛ 3 РОЗРОБКА СИСТЕМИ ОБМІНУ ФАЙЛАМИ З
АВТОМАТИЧНИМ РОЗПОДІЛОМ РЕСУРСІВ
3.1 Структура системи
У рамках даної кваліфікаційної роботи було розроблено систему для
обміну файлами між користувачами, яка забезпечує зручне та безпечне
завантаження, зберігання та вивантаження даних. Розроблена система
передбачає роботу з великою кількістю одночасних запитів і здатна ефективно
обслуговувати користувачів навіть під високим навантаженням. Основна мета
системи полягає в тому, щоб користувачі могли швидко передавати файли
один одному, зберігаючи при цьому контроль над доступом та
конфіденційністю даних.
Для реалізації цієї системи було використано сучасні хмарні технології,
що дозволяють забезпечити масштабованість та стабільність роботи сервісу.
Система підтримує автоматичне розподілення ресурсів, що дає змогу швидко
реагувати на збільшення або зменшення навантаження без втрати
продуктивності. Користувачі можуть взаємодіяти з додатком у будь-який час,
а система автоматично керує ресурсами та забезпечує високу доступність
сервісу.
Розроблена система не лише реалізує базовий функціонал обміну
файлами, а й враховує сучасні вимоги до надійності та продуктивності. Вона
є прикладом ефективного поєднання хмарних сервісів, контейнеризації та
реляційної бази даних, що дозволяє створити гнучке й надійне рішення для
організації обміну даними між користувачами у високонавантаженому
середовищі.
Розроблена система складається з двох взаємопов’язаних компонентів:
програмного забезпечення та інфраструктури, на якій воно функціонує.
Програмне забезпечення реалізує весь функціонал системи, включаючи
54
завантаження та вивантаження файлів, управління користувачами, обробку
запитів та взаємодію з базою даних. Воно забезпечує безперебійну роботу
сервісу, високу продуктивність і стабільність навіть при великому
навантаженні, а також підтримує автоматичне масштабування та адаптацію
до зміни інтенсивності трафіку. Інфраструктура розробленої хмарної системи
зображено на рисунку 3.1
Рисунок 3.1 ‒ Інфраструктура розробленої хмарної системи
Інфраструктурна складова системи забезпечує необхідні ресурси для
роботи програмного забезпечення та реалізацію масштабованості. Вона
включає в себе хмарне середовище AWS, сервіси обчислень, такі як Amazon
EC2 та Amazon ECS, контейнери для ізоляції й розгортання застосунків, а
також реляційну базу даних PostgreSQL для надійного зберігання даних.
55
Інфраструктура дозволяє автоматично виділяти додаткові ресурси у випадку
збільшення навантаження та оптимізувати їхнє використання під час
зменшення активності користувачів.
Поєднання програмного забезпечення та інфраструктури створює
цілісну систему, яка забезпечує ефективний обмін файлами між
користувачами, стабільну роботу під високим навантаженням та економічно
ефективне використання хмарних ресурсів. Така структура робить систему
гнучкою, надійною та готовою до масштабування у майбутньому.
Програмне забезпечення розроблене на мові програмування C#, що
забезпечує високу продуктивність, стабільність і надійність роботи системи.
Використання C# дозволяє ефективно реалізувати серверну логіку, обробку
запитів користувачів та управління великими обсягами даних, що є критично
важливим для системи обміну файлами. Мова програмування надає розвинені
можливості для роботи з потоками, асинхронними операціями та складними
структурами даних, що дозволяє обробляти одночасно велику кількість
запитів без зниження продуктивності.
Завдяки архітектурі, побудованій на основі C#, програмне забезпечення
здатне ефективно взаємодіяти з реляційною базою даних PostgreSQL,
забезпечуючи швидке зберігання та отримання даних, а також підтримку
складних транзакцій і структурованих запитів. Це дозволяє системі обробляти
великі обсяги файлів і метаданих, гарантуючи цілісність та узгодженість
інформації.
Використання C# робить програмне забезпечення не лише
продуктивним і надійним, а й здатним масштабуватися разом зі зростанням
навантаження та обсягів даних, що є важливою умовою для сучасних хмарних
сервісів високої інтенсивності.
Розроблений програмний додаток використовує PostgreSQL як основну
реляційну базу даних, що забезпечує надійне зберігання, структурованість та
узгодженість даних. PostgreSQL є однією з найбільш потужних і стабільних
56
реляційних СУБД, що підтримує складні транзакції, зберігання великих
обсягів структурованих даних та виконання запитів із високою
продуктивністю. Однією з ключових переваг PostgreSQL є її здатність
працювати з різними типами даних, включаючи JSON, що дозволяє
поєднувати класичну реляційну модель із можливістю роботи з
напівструктурованими даними. Крім того, PostgreSQL має багатий набір
індексів, механізми реплікації та підтримку розширень, що підвищує гнучкість
і функціональність системи.
Серед основних переваг PostgreSQL варто виділити стабільність, високу
надійність зберігання даних, підтримку складних транзакцій та можливість
масштабування за допомогою реплікації і шардінгу. Вона добре підходить для
роботи з великими обсягами даних і забезпечує високу цілісність інформації,
що є критично важливим для системи обміну файлами. До потенційних
недоліків можна віднести трохи складнішу конфігурацію у порівнянні з
деякими іншими СУБД, а також необхідність додаткового налаштування для
горизонтального масштабування у великих розподілених середовищах. Проте
у поєднанні з хмарними сервісами AWS ці обмеження зводяться до мінімуму
завдяки автоматизованим механізмам управління ресурсами.
Для даної системи PostgreSQL є оптимальним вибором, оскільки вона
дозволяє надійно зберігати метадані файлів, інформацію про користувачів,
сесії та статуси завантаження, а також швидко обробляти запити користувачів.
Використання реляційної бази даних забезпечує логічну цілісність і
структурованість даних, що важливо для організації безпечного та
ефективного обміну файлами.
AWS надає ряд механізмів для масштабування та автоматичного
збільшення ресурсів у роботі з PostgreSQL. Зокрема, сервіс Amazon RDS
дозволяє автоматично масштабувати обчислювальні ресурси та сховище бази
даних відповідно до навантаження, виконувати автоматичне резервне
копіювання, створювати репліки для читання і забезпечувати високу
57
доступність через Multi-AZ розгортання. Це означає, що у випадку зростання
кількості запитів або обсягів даних система сама виділяє додаткові ресурси
для підтримки продуктивності, а при зменшенні навантаження масштаби
ресурсів автоматично зменшуються, що дозволяє ефективно використовувати
хмарну інфраструктуру та знижувати витрати.
Поєднання PostgreSQL та можливостей AWS забезпечує стабільну,
масштабовану та надійну систему з автоматичним розподілом ресурсів, яка
здатна обробляти великі обсяги даних і забезпечувати безперебійну роботу
користувачів навіть під високим навантаженням.
Розроблене програмне забезпечення було успішно розгорнуто в
середовищі Amazon ECS, що забезпечує ефективне керування контейнерами
та високу гнучкість у розгортанні додатку. Завдяки використанню ECS,
додаток працює в ізольованих контейнерах, що спрощує управління
ресурсами, забезпечує стабільність роботи та дозволяє легко оновлювати та
масштабувати систему без простоїв. Контейнери надають однакове робоче
середовище для всіх інстансів, що підвищує надійність і передбачуваність
поведінки програмного забезпечення під час виконання різних операцій.
Система налаштована таким чином, що AWS автоматично збільшує
кількість екземплярів контейнерів у разі зростання навантаження, що дозволяє
підтримувати високу пропускну здатність та швидко реагувати на збільшення
кількості одночасних користувачів. Використання механізмів Auto Scaling в
ECS гарантує, що під час пікових періодів система сама виділяє додаткові
ресурси, забезпечуючи безперебійну роботу сервісу та стабільну
продуктивність. При зменшенні навантаження кількість активних контейнерів
автоматично скорочується, що дозволяє оптимально використовувати ресурси
та знижувати витрати.
Розгортання програмного забезпечення в ECS з автоматичним
масштабуванням забезпечує високу доступність, надійність та ефективне
використання ресурсів, роблячи систему готовою до роботи у
58
високонавантажених умовах та забезпечуючи комфортний і стабільний обмін
файлами між користувачами.
Розроблена інфраструктура побудована з використанням принципу
контейнеризації, що дозволяє ізолювати додаток та його залежності у
незалежні, легкі та портативні середовища. Для контейнеризації обрано
Docker ‒ сучасну та широко застосовувану технологію, яка забезпечує
створення, розгортання та управління контейнерами на всіх етапах життєвого
циклу програмного забезпечення. Використання Docker дозволяє гарантувати
однакове робоче середовище на різних етапах розробки, тестування та
експлуатації, що значно знижує ризик помилок, пов’язаних із невідповідністю
конфігурацій.
Контейнеризація надає низку суттєвих переваг для розробленої
інфраструктури. По-перше, вона забезпечує портативність ‒ контейнери
можуть бути запущені на будь-якому сервері або в хмарному середовищі без
потреби в додаткових налаштуваннях. По-друге, Docker сприяє швидкому
розгортанню та оновленню програмного забезпечення, адже кожен контейнер
являє собою готовий до запуску образ із усіма залежностями, що дозволяє
впроваджувати нові версії додатку без простоїв. По-третє, контейнеризація
сприяє ізоляції компонентів системи, що підвищує безпеку та стабільність:
помилки в одному контейнері не впливають на роботу інших.
Крім того, контейнеризація значно спрощує масштабування. Завдяки
Docker та інтеграції з Amazon ECS, додаткові екземпляри контейнерів можуть
автоматично запускатися при збільшенні навантаження, що дозволяє
підтримувати стабільну продуктивність навіть у пікові періоди. Це також
забезпечує економію ресурсів, оскільки при зменшенні навантаження
надлишкові контейнери автоматично вимикаються. Використання
контейнерів також полегшує інтеграцію з іншими сервісами, такими як бази
даних, черги повідомлень чи сервіси обробки файлів, що робить архітектуру
системи більш гнучкою та модульною.
59
Застосування принципу контейнеризації з використанням Docker
дозволяє створити гнучку, надійну та масштабовану інфраструктуру для
розробленого програмного забезпечення. Це забезпечує високу доступність
сервісу, легкість розгортання, можливість швидкого масштабування та
ефективне управління ресурсами у хмарному середовищі AWS.
У розробленій системі всі файли, які користувачі завантажують через
програмне забезпечення, автоматично зберігаються в Amazon S3 ‒
масштабованому та надійному хмарному сховищі. Коли користувач
завантажує файл через інтерфейс додатку, програмне забезпечення обробляє
запит, перевіряє права доступу, формує метадані та передає файл у S3 за
допомогою API. Кожен файл зберігається у вигляді об’єкта з унікальним
ідентифікатором, що дозволяє точно відслідковувати і керувати даними,
забезпечуючи при цьому високу надійність та доступність навіть у разі
великого обсягу файлів або одночасних завантажень від багатьох
користувачів.
Для завантаження та завантаження файлів користувачами
використовується Amazon CloudFront ‒ глобальна CDN (Content Delivery
Network), яка розповсюджує дані з S3 по численних регіональних вузлах. Це
дозволяє користувачам отримувати доступ до файлів максимально швидко
незалежно від їхнього місцезнаходження. Коли користувач запитує файл,
CloudFront доставляє його з найближчого до користувача вузла, що значно
зменшує час очікування та навантаження на основне сховище. У поєднанні з
S3 це забезпечує швидкий, безпечний і масштабований доступ до даних навіть
у умовах високої активності користувачів.
Використання S3 гарантує практично необмежене сховище з високою
надійністю та можливістю резервного копіювання. CloudFront забезпечує
оптимальну продуктивність завдяки кешуванню файлів у точках присутності,
що знижує затримки та підвищує пропускну здатність системи. Комбінація S3
і CloudFront дозволяє легко масштабувати систему без необхідності
60
додаткового управління інфраструктурою, адже обидва сервіси підтримують
автоматичне збільшення ресурсів при зростанні навантаження. Крім того,
такий підхід підвищує безпеку даних: можна налаштувати контроль доступу
через IAM ролі, підписані URL та шифрування даних на стороні сервера, що
гарантує захист файлів від несанкціонованого доступу.
Інтеграція розробленого програмного забезпечення з Amazon S3 та
CloudFront забезпечує ефективний, надійний і швидкий обмін файлами між
користувачами. Вона дозволяє підтримувати високу пропускну здатність
системи, масштабувати її під навантаження та одночасно гарантує безпеку і
доступність даних у будь-який час.
Користувач має змогу завантажувати файли через зручний
користувацький інтерфейс, який також доступний через Amazon CloudFront.
Завдяки використанню CloudFront, інтерфейс додатку доставляється
користувачу з найближчого до нього вузла мережі CDN, що забезпечує швидке
завантаження сторінок та стабільну роботу додатку незалежно від
географічного розташування користувача. Це особливо важливо для
високонавантажених систем, де час відгуку та продуктивність інтерфейсу
безпосередньо впливають на зручність користування та ефективність обміну
файлами.
При завантаженні файлу користувач взаємодіє безпосередньо з
інтерфейсом: обирає файл, підтверджує завантаження, після чого програмне
забезпечення обробляє запит, перевіряє права доступу та передає файл у
хмарне сховище S3. CloudFront виступає проміжним шаром, який прискорює
доступ до інтерфейсу і до файлів, забезпечує кешування часто
використовуваних ресурсів та знижує затримки під час взаємодії користувача
з системою.
Такий підхід має низку переваг. По-перше, користувач отримує швидкий
і стабільний доступ до інтерфейсу незалежно від місця свого перебування. По-
друге, CloudFront знижує навантаження на основні сервери додатку, оскільки
61
ресурси кешуються у точках присутності мережі CDN. По-третє, це підвищує
надійність та масштабованість системи, адже додаткові користувачі або пікові
навантаження не призводять до уповільнення роботи інтерфейсу або збою у
процесі завантаження файлів.
Завдяки інтеграції користувацького інтерфейсу з CloudFront користувачі
отримують швидкий, зручний і стабільний доступ до функцій системи обміну
файлами, що значно підвищує ефективність і комфорт використання
розробленого програмного забезпечення.
3.2 Опис функцій системи
Розроблена система обміну файлами надає користувачам повний набір
функцій для зручного та безпечного обміну даними у хмарному середовищі.
Вона спроектована таким чином, щоб кожен користувач мав можливість
швидко створити власний обліковий запис, завантажувати файли, зберігати їх
у надійному сховищі та ділитися ними як із конкретними користувачами, так
і публічно. Основним принципом роботи системи є забезпечення надійності,
масштабованості та безперебійного доступу до даних у будь-який час, що
робить її ефективним інструментом для обміну файлами незалежно від
географічного розташування користувачів.
Однією з перших функцій, доступних користувачу, є створення власного
акаунту. Під час реєстрації користувач надає базову інформацію, таку як
електронна адреса та пароль, а система перевіряє унікальність облікового
запису та забезпечує захист даних за допомогою шифрування та безпечного
зберігання паролів. Після створення акаунту користувач отримує
персоналізований доступ до власного профілю, де може керувати
налаштуваннями безпеки, змінювати персональні дані та контролювати
доступ до файлів, які він завантажує. Ця функція є ключовою для організації
безпечного та зручного середовища, оскільки вона дозволяє ідентифікувати
62
користувачів та гарантує, що файли будуть доступні лише авторизованим
особам.
Після створення акаунту користувач має можливість завантажувати
файли у систему. Завантаження файлів відбувається через користувацький
інтерфейс, доступний через Amazon CloudFront, що забезпечує швидкий та
стабільний доступ до сервісу незалежно від місця перебування користувача.
При завантаженні файлів система автоматично передає дані у хмарне сховище
Amazon S3, де файли зберігаються у вигляді об’єктів із унікальними
ідентифікаторами. Кожен файл супроводжується метаданими, такими як
назва, розмір, дата завантаження та тип доступу, що дозволяє ефективно
керувати інформацією та забезпечує можливість подальшого пошуку та
сортування файлів. Завдяки інтеграції з хмарною інфраструктурою та
автоматичному масштабуванню ресурсів, система здатна обробляти
одночасно великий обсяг файлів і запитів без втрати продуктивності.
Інтерфейс розробленої системи зображено на рисунку 3.2.
Рисунок 3.2 ‒ Інтерфейс розробленої системи
63
Ще однією важливою функцією є можливість ділитися файлами з
іншими користувачами за допомогою посилань. Система дозволяє створювати
як публічні, так і приватні посилання. Публічні посилання доступні будь-
якому користувачу, який має їх, що дозволяє легко поширювати файли в
мережі або надавати доступ до інформації для широкої аудиторії. Приватні
посилання обмежують доступ лише конкретними користувачами або групами,
які авторизовані у системі, що підвищує рівень безпеки та конфіденційності.
Користувач може налаштовувати термін дії посилання, обмежувати кількість
завантажень або забороняти повторне пересилання файлів, що забезпечує
додатковий контроль над розповсюдженням даних. Список завантажених
файлів зображено на рисунку 3.3.
Інтерфейс системи надає користувачу можливість легко переглядати всі
завантажені файли, сортувати їх за різними параметрами, шукати потрібні
об’єкти за назвою або іншими атрибутами та отримувати детальну інформацію
про кожен файл. Для зручності користувача реалізована функція попереднього
перегляду файлів, що дозволяє переглядати зміст без необхідності
завантаження. Система також підтримує керування групами файлів, що
дозволяє об’єднувати файли за проєктами чи категоріями, підвищуючи
зручність організації даних.
Важливою складовою системи є інтеграція з механізмами безпеки та
контролю доступу. Користувачі можуть встановлювати права доступу до
кожного файлу або посилання, обирати, хто може переглядати, завантажувати
або редагувати файли, а також отримувати сповіщення про будь-які дії з їхніми
даними. Це забезпечує високу надійність і захист інформації, що особливо
важливо для конфіденційних документів або великих корпоративних даних.
Крім того, система зберігає лог всіх операцій із файлами, що дозволяє
відстежувати історію змін та завантажень.
64
Рисунок 3.3 – Список завантажених файлів
Ще однією функцією є інтеграція з автоматичним масштабуванням
хмарної інфраструктури. З точки зору користувача це означає, що швидкість
завантаження та доступу до файлів залишається стабільною навіть під час
пікових навантажень. Система автоматично виділяє додаткові ресурси, якщо
кількість користувачів або обсяг переданих файлів зростає, що робить процес
обміну даними безперебійним і ефективним. Для користувача це проявляється
у високій швидкості завантаження, мінімальних затримках та стабільній
роботі інтерфейсу.
65
Завдяки комплексному набору функцій, користувачі мають можливість
не лише зберігати та передавати файли, а й повноцінно керувати доступом до
них, об’єднувати файли у логічні групи, створювати посилання з різними
рівнями доступу та відслідковувати історію змін. Такий підхід забезпечує
максимальний комфорт і гнучкість у роботі з файлами, роблячи систему
придатною як для індивідуального користування, так і для командної роботи
або корпоративних проєктів.
Розроблена система обміну файлами є комплексним інструментом для
користувачів, що поєднує простоту використання, безпеку та надійність із
сучасними можливостями масштабування. Вона дозволяє створювати
акаунти, завантажувати файли, ділитися ними через публічні та приватні
посилання, контролювати доступ і ефективно організовувати інформацію.
Інтеграція з хмарними сервісами та автоматичне масштабування забезпечують
стабільну роботу навіть під високим навантаженням, роблячи систему
сучасним і зручним рішенням для обміну файлами.
Розроблена система обміну файлами, незважаючи на широкий
функціонал та високий рівень зручності, має певні обмеження, які необхідно
враховувати користувачам під час взаємодії з сервісом. Одним із ключових
обмежень є встановлені ліміти на завантаження файлів для користувачів, які
не мають зареєстрованого акаунту. Система дозволяє обмінюватися файлами
навіть із незареєстрованими користувачами, надаючи можливість швидко
поділитися даними за допомогою публічних посилань. Це забезпечує
гнучкість у використанні сервісу, оскільки не кожен користувач повинен
проходити процес реєстрації для одноразової передачі файлів. Проте для таких
користувачів введені обмеження щодо кількості файлів, які можна
завантажити, а також загального обсягу даних, що дозволяє запобігти
надмірному навантаженню на систему та зберігати стабільну роботу сервісу
для всіх користувачів.
66
Для незареєстрованих користувачів також існують обмеження за часом
зберігання файлів. Завантажені файли зберігаються лише протягом
обмеженого періоду, після чого вони автоматично видаляються з системи. Це
обмеження спрямоване на економію ресурсів та підтримання ефективності
хмарного сховища, а також на забезпечення безпеки даних. Такий підхід
дозволяє користувачам швидко ділитися інформацією, не створюючи акаунт,
при цьому система гарантує, що тимчасові дані не будуть зберігатися
необмежено, що знижує ризик втрати контролю над конфіденційними
файлами.
Для зареєстрованих користувачів система надає розширені можливості,
проте й тут передбачені певні обмеження. Кожен зареєстрований акаунт має
встановлений період зберігання файлів. Це означає, що навіть якщо
користувач завантажує файли у власний обліковий запис, вони не
залишаються у системі назавжди, а автоматично видаляються після
завершення певного періоду. Такий підхід допомагає підтримувати баланс
між зручністю користувачів та економією хмарних ресурсів. Користувачі
можуть планувати завантаження та завчасно завантажувати файли повторно,
якщо вони потрібні для довготривалого зберігання, або користуватися
функціями керування файлами, щоб оптимально використовувати доступний
час зберігання.
Крім того, для всіх користувачів, незалежно від того, зареєстровані вони
чи ні, існують обмеження на кількість одночасних завантажень та загальний
обсяг даних, який можна передати у визначений проміжок часу. Це обмеження
забезпечує стабільну роботу системи навіть під час пікових навантажень та
дозволяє уникати перевантаження сервісу, що могло б призвести до
уповільнення доступу або тимчасової недоступності файлів. Для
незареєстрованих користувачів ці ліміти є більш суворими, тоді як
зареєстровані користувачі отримують розширені квоти, що стимулює
створення облікових записів та активне користування сервісом.
67
Обмеження також стосуються доступу до посилань на файли.
Користувачі можуть створювати публічні та приватні посилання, але термін
дії таких посилань регламентується. Публічні посилання можуть бути
доступні обмежений час, після чого вони стають недійсними, а приватні
посилання також підпорядковуються правилам доступу та часу зберігання
файлів у системі. Це дозволяє підтримувати високий рівень контролю над
переданою інформацією, запобігаючи ситуаціям, коли файли залишаються
доступними необмежено для широкого кола користувачів.
Обмеження розробленої системи спрямовані на забезпечення
стабільності, безпеки та ефективного використання ресурсів, водночас
зберігаючи зручність для користувачів. Незареєстровані користувачі
отримують можливість швидко ділитися файлами через обмежені по часу та
обсягу посилання, тоді як зареєстровані користувачі можуть користуватися
розширеним функціоналом, маючи контроль над своїми файлами протягом
визначеного періоду. Загальні ліміти на кількість завантажень та обсяг даних
забезпечують безперебійну роботу системи навіть при високому
навантаженні, а чіткі правила зберігання та доступу до файлів допомагають
користувачам планувати роботу та ефективно управляти своїми даними.
Завдяки таким обмеженням система залишається масштабованою,
надійною та безпечною, водночас надаючи користувачам можливість зручно
обмінюватися файлами, організовувати доступ за посиланнями та
контролювати терміни зберігання інформації. Це робить сервіс зручним для
одноразових користувачів, які не бажають реєструвати акаунт, а також для
постійних користувачів, які потребують надійного та структурованого
середовища для обміну та зберігання файлів у хмарі.
Адміністратор розробленої системи обміну файлами виконує ключову
роль у забезпеченні стабільної та безпечної роботи сервісу, контролюючи
роботу користувачів, доступ до файлів та загальний стан системи. Головною
функцією адміністратора є управління обліковими записами користувачів та
68
контроль за їхніми діями у системі. Адміністратор має можливість
переглядати список зареєстрованих користувачів, перевіряти їхні облікові
дані, змінювати статуси акаунтів та блокувати користувачів у разі порушення
правил використання сервісу. Ця функція забезпечує підтримку безпеки
системи та дозволяє оперативно реагувати на потенційні загрози або спроби
несанкціонованого доступу.
Крім управління обліковими записами, адміністратор відповідає за
контроль завантаження файлів та їх зберігання у системі. Він може
переглядати завантажені файли, відстежувати обсяг використаного хмарного
сховища, контролювати терміни зберігання файлів та при необхідності
видаляти їх для оптимізації ресурсів. Адміністратор також має можливість
встановлювати обмеження для користувачів, наприклад, ліміти на кількість
файлів, максимальний розмір об’єктів та період зберігання даних. Ці функції
дозволяють підтримувати баланс між зручністю користувачів і ефективним
використанням ресурсів хмарної інфраструктури, запобігаючи
перевантаженню сервісу та забезпечуючи стабільну роботу системи навіть під
високим навантаженням.
Однією з важливих функцій адміністратора є управління доступом до
файлів та контролем публічних і приватних посилань. Адміністратор може
перевіряти, які файли були зроблені доступними для загального користування,
контролювати терміни дії посилань та при необхідності блокувати доступ до
певних об’єктів. Це дозволяє запобігти витоку конфіденційної інформації та
гарантувати, що користувачі дотримуються встановлених правил обміну
файлами. Крім того, адміністратор може надавати розширені права доступу
окремим користувачам або групам, наприклад, для корпоративних акаунтів,
де кілька користувачів повинні мати змогу працювати з одними й тими самими
файлами у рамках певних проєктів.
Адміністратор також відповідає за моніторинг і контроль роботи
системи в цілому. Це включає відстеження завантаження серверів, стану
69
хмарних ресурсів, активності користувачів та продуктивності додатку.
Адміністратор має доступ до журналів активності, де зберігається інформація
про всі дії користувачів, включаючи завантаження файлів, створення посилань
та зміну налаштувань акаунтів. Це дозволяє швидко виявляти можливі
проблеми, аналізувати причини збоїв або конфліктів у роботі системи та
приймати своєчасні рішення щодо їх усунення. Моніторинг також включає
контроль обсягу хмарного сховища, що дозволяє своєчасно планувати його
розширення або оптимізацію, забезпечуючи стабільну роботу системи навіть
у періоди пікових навантажень.
Розроблена система обміну файлами є повноцінною масштабованою
системою з автоматичним виділенням ресурсів, що забезпечує її ефективну та
безперебійну роботу навіть під високим навантаженням. Завдяки інтеграції з
хмарною платформою AWS, система здатна динамічно реагувати на зміну
кількості одночасних користувачів та обсягу оброблюваних даних. Коли
навантаження зростає, автоматичні механізми масштабування збільшують
кількість активних екземплярів контейнерів у ECS, виділяють додаткові
обчислювальні ресурси та забезпечують стабільну продуктивність додатку.
Це дозволяє підтримувати високу пропускну здатність системи та уникати
затримок у роботі користувачів, навіть у пікові періоди активності.
3.3 Технічні вимоги для роботи з системою
Для ефективного адміністрування розробленої системи обміну файлами
необхідно дотримуватися низки технічних вимог, які забезпечують стабільну
роботу сервісу, безпеку даних та можливість масштабування під високі
навантаження. Основною вимогою є наявність стабільного доступу до хмарної
платформи AWS, оскільки вся інфраструктура системи побудована на її
сервісах, включаючи ECS для управління контейнерами, S3 для зберігання
файлів та CloudFront для швидкого доступу користувачів до інтерфейсу та
файлів. Адміністратор повинен мати надійне підключення до інтернету, що
70
дозволяє віддалено контролювати всі компоненти системи, налаштовувати
автоматичне масштабування та оперативно реагувати на зміни у навантаженні
чи потенційні проблеми.
Однією з ключових вимог є наявність доступу до облікового запису з
правами адміністратора у хмарній платформі AWS. Такий доступ дозволяє
адміністратору управляти сервісами ECS, контролювати кількість
контейнерів, переглядати журнали роботи додатку та налаштовувати політики
масштабування. Адміністратор повинен мати можливість створювати та
керувати обліковими записами користувачів, налаштовувати обмеження на
завантаження файлів та час їх зберігання, а також контролювати доступ до
приватних та публічних посилань. Наявність адміністративного доступу також
дозволяє відслідковувати статистику використання системи, аналізувати
активність користувачів та приймати рішення щодо оптимізації ресурсів.
Ще однією важливою технічною вимогою є наявність сучасного веб-
браузера для роботи з адміністративним інтерфейсом. Адміністратор
взаємодіє з системою через веб-інтерфейс, який надає доступ до панелі
управління користувачами, файлами, посиланнями та ресурсами хмарної
інфраструктури. Браузер повинен підтримувати роботу з JavaScript, сучасні
протоколи безпеки та шифрування, що забезпечує захищене та коректне
відображення адміністративних функцій [19]. Крім того, адміністративний
інтерфейс повинен бути сумісним із різними платформами, включаючи
стаціонарні комп’ютери та мобільні пристрої, що дозволяє адміністратору
контролювати систему з будь-якого місця та у будь-який час.
Адміністратор також повинен мати базові знання щодо контейнеризації
та роботи з Docker, оскільки система побудована на контейнерах, які
управляються через ECS. Знання принципів роботи контейнерів дозволяє
адміністратору ефективно контролювати стан контейнерів, перевіряти логи
роботи додатку та при необхідності перезапускати або оновлювати
контейнери без впливу на роботу користувачів. Важливим є розуміння
71
процесів автоматичного масштабування, щоб налаштовувати мінімальну та
максимальну кількість контейнерів відповідно до поточного навантаження, а
також контролювати розподіл ресурсів у хмарному середовищі.
Для забезпечення безпеки системи адміністратор повинен
дотримуватися вимог щодо управління обліковими даними та правами
доступу. Це включає використання складних паролів, двофакторної
автентифікації для адміністративного акаунту, налаштування ролей та прав
доступу для користувачів, контроль публічних і приватних посилань, а також
моніторинг підозрілої активності . Технічні вимоги передбачають регулярний
аналіз журналів активності, перевірку термінів зберігання файлів, обмежень
на кількість завантажень та контролю за використанням ресурсів.
Адміністратор має бути готовим оперативно реагувати на порушення безпеки
або некоректну поведінку користувачів, щоб забезпечити стабільну та надійну
роботу сервісу.
Ще однією технічною вимогою є забезпечення резервного копіювання
та відновлення даних. Адміністратор повинен мати доступ до інструментів
AWS, які дозволяють створювати резервні копії контейнерів та даних у S3, а
також відновлювати файли у разі аварій або випадкового видалення. Це
включає моніторинг стану хмарного сховища, перевірку доступності файлів
та регулярну перевірку цілісності даних. Наявність таких процедур дозволяє
забезпечити безперервність роботи сервісу та гарантувати, що користувачі
завжди матимуть доступ до своїх файлів навіть у випадку технічних збоїв.
Крім цього, адміністратор повинен дотримуватися вимог щодо
контролю продуктивності та оптимізації використання ресурсів. Це включає
моніторинг завантаження контейнерів, кількості одночасних користувачів,
обсягу переданих файлів та швидкості завантаження даних. На основі цих
показників адміністратор налаштовує автоматичне масштабування, оптимізує
ресурси хмарної інфраструктури та планує розширення сховища при
необхідності. Виконання цих вимог дозволяє підтримувати високу пропускну
72
здатність системи та стабільну роботу сервісу навіть у періоди пікових
навантажень.
Технічні вимоги для роботи адміністратора включають наявність
стабільного інтернет-з’єднання, адміністративного доступу до AWS,
сучасного веб-браузера, базових знань щодо контейнеризації та роботи з
Docker, дотримання правил безпеки, контроль резервного копіювання та
відновлення даних, а також моніторинг продуктивності та оптимізацію
ресурсів. Дотримання цих вимог дозволяє адміністратору забезпечити
надійну, безпечну та стабільну роботу системи, ефективно керувати
користувачами, файлами та ресурсами, а також підтримувати високий рівень
доступності та продуктивності сервісу для всіх користувачів.
3.4 Оцінка ефективності
Розроблена система обміну файлами демонструє високу ефективність
завдяки використанню хмарної інфраструктури AWS та автоматичного
масштабування ресурсів. Основною перевагою такої архітектури є можливість
динамічно реагувати на зміну навантаження та оптимально використовувати
обчислювальні потужності без необхідності ручного втручання. Вона дозволяє
забезпечити стабільну роботу навіть при пікових навантаженнях, високій
кількості одночасних користувачів та великому обсязі переданих файлів. Всі
операції з файлами, від завантаження до створення посилань, виконуються
швидко та без затримок, що підвищує загальну продуктивність системи та
комфорт користувачів.
Система забезпечує автоматичне масштабування контейнерів у ECS, що
дозволяє під час зростання навантаження додатково виділяти ресурси, а під
час зниження активності зменшувати їх кількість. Такий підхід дозволяє не
лише підтримувати стабільну продуктивність, але й економити кошти на
обчислювальних ресурсах. Використання Amazon S3 для зберігання файлів
гарантує надійність та доступність даних, а CloudFront забезпечує швидкий
73
доступ до інтерфейсу та файлів незалежно від місця розташування
користувача. Завдяки цим сервісам користувачі отримують можливість
завантажувати та ділитися файлами без затримок, а адміністратор системи має
можливість контролювати стан ресурсів і діяльність користувачів у реальному
часі.
Для порівняння, якщо б подібна система була побудована без
використання хмарної платформи AWS, її ефективність була б значно
нижчою. У такому випадку адміністратор або IT-відділ організації змушені
були б самостійно забезпечувати виділення серверів, налаштовувати
балансування навантаження, керувати зберіганням файлів та забезпечувати
резервне копіювання [20]. В умовах зростання кількості користувачів або
великих обсягів даних система, побудована на власних серверах, могла б
стикатися із затримками або навіть простоєм через недостатню кількість
обчислювальних ресурсів. Масштабування вручну потребувало б значних
витрат часу, технічних знань і додаткових ресурсів, а автоматичне виділення
ресурсів у такій системі було б неможливим.
Також система без AWS потребувала б значних фінансових витрат на
придбання серверного обладнання, його обслуговування, електроенергію та
забезпечення безперебійної роботи дата-центру. Крім того, адміністратори
були б змушені самостійно реалізовувати резервування файлів, що
ускладнювало б контроль цілісності даних та підвищувало ризик втрати
інформації. У розробленій системі на AWS всі ці процеси автоматизовані: S3
забезпечує зберігання файлів з високою надійністю, а CloudFront дозволяє
ефективно доставляти дані користувачам, скорочуючи час доступу та
зменшуючи навантаження на сервери.
Ефективність розробленої системи також проявляється у зручності
адміністративного управління. Адміністратор має доступ до всіх інструментів
через веб-інтерфейс, може переглядати логи активності, контролювати доступ
до файлів та посилань, налаштовувати політики обмежень та автоматично
74
масштабувати ресурси. У системі без хмарної платформи ці дії потребували б
встановлення та налаштування додаткового програмного забезпечення,
підтримки фізичної інфраструктури та значного часу на адміністрування. В
результаті, робота адміністратора в такій системі була б менш ефективною та
більш трудомісткою.
Ще одним важливим аспектом є надійність та безпека зберігання файлів.
У хмарній системі файли зберігаються у S3, де вони реплікуються в кількох
регіонах, що забезпечує високу доступність та захист від втрати даних. У
локальній системі, побудованій без використання AWS, забезпечення
аналогічного рівня надійності потребувало б додаткового обладнання,
організації резервного копіювання та контролю за працездатністю серверів.
Це призводило б до підвищених витрат та збільшення ймовірності технічних
збоїв або втрати файлів.
Таким чином, оцінка ефективності розробленої системи показує, що
використання хмарної платформи AWS значно підвищує продуктивність,
масштабованість, надійність та економічну ефективність. Автоматичне
виділення ресурсів, можливість масштабування контейнерів, надійне
зберігання даних та швидкий доступ до файлів забезпечують стабільну роботу
системи навіть під високими навантаженнями. Порівняння із системою,
побудованою без хмарної платформи, демонструє, що власні сервери та ручне
масштабування значно обмежують ефективність, підвищують витрати та
ускладнюють адміністрування.
Використання AWS дозволяє реалізувати сучасну масштабовану
систему обміну файлами з високим рівнем надійності, продуктивності та
зручності для користувачів і адміністраторів, що робить її ефективним та
економічно вигідним рішенням для організацій будь-якого масштабу.
75
3.5 Висновки до розділу 3
У третьому розділі було детально розглянуто процес розробки системи
з автоматичним розподілом ресурсів, спрямованої на забезпечення швидкого,
безпечного та масштабованого обміну файлами між користувачами. На основі
сучасних хмарних технологій, контейнеризації та реляційної бази даних
створено комплексне рішення, яке поєднує високу продуктивність, гнучкість
та надійність.
Розроблена архітектура системи містить два основних компоненти ‒
програмне забезпечення та хмарну інфраструктуру, які взаємодіють як єдиний
механізм. Програмне забезпечення, реалізоване мовою C#, забезпечує
стабільну обробку великої кількості одночасних запитів, асинхронну роботу з
даними та ефективну взаємодію з PostgreSQL. Використана реляційна база
даних гарантує цілісність, узгодженість та безпечне зберігання структурованої
інформації.
Інфраструктурна частина системи побудована на сервісах AWS, що
забезпечують автоматичне масштабування та адаптацію до змін
навантаження. Контейнеризація на Docker та розгортання в Amazon ECS
дозволили створити гнучке середовище, яке легко оновлюється, швидко
масштабується та забезпечує високу доступність сервісу. Інтеграція Amazon
S3 і CloudFront гарантує надійне зберігання файлів, миттєву доставку контенту
та низьку затримку доступу незалежно від місцезнаходження користувача.
Створена система є гнучкою, надійною та готовою до подальшого
розширення, що робить її ефективним інструментом для роботи у
високонавантажених середовищах.
76
РОЗДІЛ 4 ЗАХИСТ СИСТЕМИ ОБМІНУ ФАЙЛАМИ З
АВТОМАТИЧНИМ РОЗПОДІЛОМ РЕСУРСІВ
4.1 Огляд існуючих рішень
Хмарні обчислювальні системи надають користувачам можливість
зберігати, обробляти та передавати дані через віддалені сервери, що
забезпечує масштабованість, гнучкість і зручність використання. Однак разом
із цими перевагами зростають і ризики щодо конфіденційності, цілісності та
доступності інформації. Захист інформації в хмарних середовищах є
комплексним завданням, яке включає технічні, організаційні та правові
заходи. Однією з ключових проблем є передача даних через відкриті канали
зв’язку, що робить інформацію вразливою до перехоплення та атак типу
«людина посередині» (Man-in-the-Middle).
Для забезпечення конфіденційності даних у хмарі широко
застосовуються методи криптографічного захисту, зокрема шифрування при
зберіганні (at rest) та при передачі (in transit). Використання стандартів AES,
RSA та TLS/SSL дозволяє запобігти несанкціонованому доступу до даних
навіть у випадку компрометації мережевих каналів або серверів. Крім того,
реалізація механізмів багаторівневої автентифікації та авторизації, таких як
MFA (Multi-Factor Authentication), IAM (Identity and Access Management) та
політики ролей, забезпечує контроль доступу до ресурсів хмарної
інфраструктури на рівні користувачів, груп і сервісів.
Іншим важливим аспектом є управління ризиками, пов’язаними з
багатокористувацьким середовищем хмарних сервісів. Віртуалізація та
мультиарендність створюють потенційні загрози ізоляції даних, коли помилки
або вразливості однієї віртуальної машини можуть впливати на інші
користувацькі середовища. Для мінімізації таких ризиків застосовуються
77
методи сегментації мереж, віртуальні приватні мережі (VPN), ізольовані
контейнерні середовища та розподілені системи з обмеженим доступом між
арендами [21].
Моніторинг і аудит активності в хмарних системах є важливою
складовою захисту інформації. Логування подій доступу, використання служб
SIEM (Security Information and Event Management) та автоматизоване
виявлення аномальної поведінки дозволяють своєчасно реагувати на
інциденти безпеки. Важливу роль відіграє і забезпечення цілісності даних за
допомогою контрольних сум, хеш-функцій та резервного копіювання, що
дозволяє відновлювати інформацію після випадкових або зловмисних змін.
Також необхідно враховувати правові та нормативні вимоги, пов’язані
з обробкою персональних даних і критично важливою інформацією.
Регламенти, такі як GDPR, HIPAA або локальні закони про захист даних,
визначають вимоги до зберігання, передачі та доступу до даних у хмарі.
Хмарні провайдери зазвичай пропонують сертифікації та відповідність
стандартам безпеки (ISO 27001, SOC 2), що дозволяє користувачам впевнено
інтегрувати свої сервіси з мінімальними ризиками [22].
Таким чином, захист інформації в хмарних системах базується на
комплексному підході, який поєднує криптографію, управління доступом,
ізоляцію середовищ, моніторинг і аудит, а також дотримання нормативних
вимог. Ефективне поєднання цих заходів дозволяє забезпечити
конфіденційність, цілісність та доступність даних, підвищуючи безпеку
хмарної інфраструктури навіть у умовах постійно зростаючих кіберзагроз.
Захист інформації при роботі з інформаційними системами
передбачає контроль доступу користувачів до ресурсів та гарантування, що
кожен запит виконується відповідно до прав і ролей. Автентифікація є першим
етапом цього процесу і спрямована на підтвердження особи користувача.
Традиційно автентифікація здійснюється за допомогою логіну та паролю,
проте сучасні системи часто застосовують багатофакторну автентифікацію
78
(MFA), що включає одноразові коди, апаратні токени або біометричні дані. Це
значно знижує ризик несанкціонованого доступу у разі компрометації одного
з факторів, наприклад, пароля.
Після автентифікації відбувається авторизація, яка визначає, які дії
користувач може виконувати та до яких даних він має доступ. Авторизація
базується на заздалегідь визначених політиках доступу, ролях користувачів і
рівнях привілеїв. Розробка гнучких моделей авторизації, таких як RBAC (Role-
Based Access Control) та ABAC (Attribute-Based Access Control), дозволяє
точно регламентувати права доступу і запобігати надмірним привілеям, що
часто є причиною витоків інформації або внутрішніх загроз.
Ключовим є також безпечне зберігання та передача облікових даних.
Паролі та токени мають зберігатися у зашифрованому вигляді, а комунікації
між клієнтом і сервером – здійснюватися через захищені протоколи, такі як
TLS/SSL [23]. Регулярна перевірка та оновлення політик доступу, аудит
активності користувачів і ведення журналів подій дозволяють своєчасно
виявляти підозрілі дії, потенційні спроби компрометації та внутрішні
порушення безпеки.
Сучасні інформаційні системи також застосовують механізми
тимчасових сесій, обмеження кількості спроб входу та автоматичне
блокування підозрілих облікових записів. Це дозволяє зменшити ймовірність
атак методом перебору паролів та інших спроб несанкціонованого доступу.
Інтеграція автентифікації з централізованими службами управління
ідентифікацією, такими як LDAP, Active Directory або хмарні рішення на
зразок AWS Cognito, підвищує рівень безпеки та спрощує адміністрування
системи у великих організаціях.
Захист інформації при роботі з системою через авторизацію та
автентифікацію є багаторівневим процесом, що включає підтвердження особи
користувача, регулювання прав доступу, шифрування облікових даних, аудит
активності та використання сучасних технологій багатофакторного контролю.
79
Комплексне впровадження цих заходів забезпечує надійний захист даних і
мінімізує ризики несанкціонованого доступу та внутрішніх загроз.
Захист інформації при збереженні даних у базах даних є критично
важливим елементом інформаційної безпеки, оскільки саме тут зберігаються
ключові ресурси організації, включаючи персональні дані, фінансову
інформацію та бізнес-критичні записи. Основним завданням є запобігання
несанкціонованому доступу до даних, їх втраті, пошкодженню або
модифікації. Для цього застосовуються комплексні підходи, що поєднують
апаратні, програмні та процедурні засоби захисту.
Одним із основних методів захисту є шифрування даних. Воно може
бути реалізоване як на рівні бази даних (Transparent Data Encryption – TDE),
так і на рівні окремих полів або таблиць. Шифрування гарантує, що навіть у
разі компрометації фізичного носія чи бази даних, інформація залишатиметься
недоступною для зловмисників без ключа розшифрування. Важливим
аспектом є також захист ключів шифрування, які мають зберігатися у
безпечному середовищі та регулярно оновлюватися [24].
Контроль доступу до бази даних реалізується через систему
автентифікації користувачів та авторизації на рівні ролей і привілеїв. Кожен
користувач отримує права відповідно до необхідності доступу до конкретних
таблиць, записів чи функцій, що дозволяє мінімізувати ризик внутрішніх
загроз та несанкціонованого перегляду конфіденційних даних. У великих
організаціях часто використовуються централізовані системи управління
ідентифікацією, які забезпечують єдиний контроль доступу та спрощують
адміністрування привілеїв.
Не менш важливим є забезпечення цілісності та відновлюваності даних.
Регулярне створення резервних копій, застосування контрольних сум і
журналювання змін дозволяють своєчасно відновлювати інформацію у разі
збою, атаки або помилок користувачів. Для захисту від SQL-ін’єкцій та інших
атак на рівні бази даних використовуються механізми валідації запитів,
80
підготовлені вирази та політики безпечного програмування, що обмежують
можливості впровадження шкідливого коду.
Сучасні хмарні бази даних додають додаткові рівні захисту, такі як
ізольовані середовища, моніторинг доступу та інтеграція з сервісами безпеки
хмарної платформи. Наприклад, у AWS можна застосовувати шифрування на
рівні сервісів RDS або Aurora, а також керовані політики доступу через IAM,
що дозволяє максимально точно регламентувати, хто і які операції може
виконувати з базою даних.
Захист інформації при збереженні даних у базі охоплює шифрування,
контроль доступу, аудит, резервування та моніторинг активності. Комплексне
застосування цих методів забезпечує конфіденційність, цілісність та
доступність інформації, мінімізує ризики компрометації та підвищує
загальний рівень безпеки інформаційної системи.
Захист інформації при роботі з Java-додатками є важливим, оскільки
більшість сучасних корпоративних систем і веб-сервісів побудовані саме на
цій платформі. Java забезпечує ряд внутрішніх механізмів безпеки, таких як
контроль доступу до ресурсів, управління пам’яттю та ізоляція виконання
коду, проте ефективний захист інформації досягається лише при
комплексному підході, який поєднує засоби мови, архітектурні рішення та
процедури безпечного програмування.
Одним із напрямів захисту є автентифікація та авторизація користувачів.
У Java-додатках це реалізується через інтеграцію з безпечними сервісами
ідентифікації, такими як LDAP, OAuth2 або SAML, а також через
використання ролей та політик доступу, які визначають, які ресурси й функції
програми доступні конкретному користувачу. Використання стандартних
бібліотек безпеки, таких як Java Security API або Spring Security, дозволяє
централізовано контролювати аутентифікацію, шифрування паролів та
управління сесіями.
81
Шифрування даних є ще одним важливим елементом захисту. Java
забезпечує широкий спектр криптографічних алгоритмів через Java
Cryptography Architecture (JCA) та Java Cryptography Extension (JCE), що
дозволяє шифрувати конфіденційні дані як у пам’яті, так і при їхньому
збереженні або передаванні по мережі [25]. При цьому важливо правильно
управляти ключами шифрування, застосовувати сучасні стандарти
(наприклад, AES або RSA) та уникати зберігання секретів у відкритому
вигляді у коді чи конфігураційних файлах.
Для захисту від атак на рівні додатку необхідно застосовувати принципи
безпечного програмування. Java-додатки часто піддаються атакам типу SQL-
ін’єкцій, XSS, CSRF або маніпуляціям з сесіями. Використання підготовлених
запитів для роботи з базами даних, валідація вхідних даних та контроль HTTP-
запитів дозволяє мінімізувати ці ризики. Додатково рекомендується регулярне
тестування на вразливості та аудит безпеки коду, що дозволяє виявляти та
усувати потенційні проблеми до їхньої експлуатації.
Моніторинг і логування активності користувачів та системи є
невід’ємною частиною захисту інформації. У Java-додатках можна
використовувати вбудовані засоби журналювання, такі як Log4j або SLF4J,
для фіксації подій входу, помилок доступу та підозрілої активності. Ці дані
дозволяють оперативно реагувати на інциденти, відстежувати спроби
несанкціонованого доступу та підтримувати відповідність нормативним
вимогам щодо безпеки.
Сучасні Java-додатки, особливо ті, що працюють у хмарних або
мікросервісних середовищах, також вимагають додаткових механізмів
безпеки на рівні інфраструктури. Це включає шифрування з’єднань (TLS/SSL),
захист API через токени та ключі, а також управління конфігураціями та
секретами через безпечні сховища (наприклад, AWS Secrets Manager чи
HashiCorp Vault).
Захист базується на комбінації криптографії, контролю доступу,
82
безпечного програмування та моніторингу. Такий комплексний підхід
дозволяє забезпечити конфіденційність, цілісність та доступність даних,
мінімізувати ризики атак та підвищити надійність програмного забезпечення.
4.2 Реалізація захисту даних у системі
Розроблена система обміну файлами передбачає комплексну реалізацію
захисту даних користувачів на всіх рівнях роботи сервісу, що забезпечує
безпеку, конфіденційність та цілісність інформації. Однією з ключових
складових захисту є контроль доступу до файлів та облікових записів
користувачів. Кожен користувач під час створення акаунту проходить
процедуру автентифікації за допомогою електронної адреси та пароля. Паролі
зберігаються у зашифрованому вигляді, що гарантує неможливість їхнього
розкриття у разі потенційного злому бази даних. Крім того, система підтримує
додаткові механізми безпеки, такі як двофакторна автентифікація, яка суттєво
підвищує рівень захисту, оскільки навіть у разі викрадення пароля сторонній
користувач не зможе отримати доступ до облікового запису.
Ще одним важливим аспектом є реалізація контролю доступу до файлів.
Система дозволяє створювати публічні та приватні посилання на файли, що
забезпечує гнучкий рівень доступу залежно від потреб користувача. Публічні
посилання надають можливість перегляду та завантаження файлів будь-яким
користувачам, які отримали посилання, проте вони обмежені за часом дії та
кількістю завантажень. Приватні посилання обмежують доступ лише
конкретними користувачами або групами, які авторизовані у системі.
Користувачі можуть додатково встановлювати термін зберігання файлів,
контролювати кількість завантажень та обмежувати можливість пересилання
файлів. Це дозволяє гарантувати, що доступ до конфіденційної інформації
буде обмежений лише уповноваженими особами.
83
Важливу роль у захисті даних відіграє використання хмарного сховища
Amazon S3. Файли, що завантажуються користувачами, автоматично
зберігаються у S3 у зашифрованому вигляді. Використовується як серверне
шифрування даних (SSE-S3 або SSE-KMS), так і контроль доступу на рівні
bucket, що дозволяє задавати детальні правила доступу до кожного об’єкта.
Завдяки цьому сторонні особи не можуть отримати доступ до файлів навіть у
разі компрометації окремих частин інфраструктури. Крім того, S3 забезпечує
високу надійність та реплікацію даних у кількох фізично розташованих дата-
центрах, що гарантує цілісність і доступність файлів навіть у випадку збоїв
окремих серверів.
Захист даних реалізований також на рівні мережі та передачі даних.
Взаємодія користувачів із системою відбувається через безпечні протоколи
HTTPS, що гарантує шифрування інформації під час передачі та захищає дані
від перехоплення у мережі. Інтерфейс користувача, доступний через Amazon
CloudFront, забезпечує доставку контенту з найближчого вузла мережі CDN,
одночасно підтримуючи безпечний канал зв’язку та кешування даних для
підвищення швидкості доступу. Завдяки цьому користувачі можуть безпечно
завантажувати та переглядати файли, навіть використовуючи глобальні
мережі з великою кількістю проміжних вузлів.
Особливу увагу приділено захисту даних під час автоматичного
масштабування системи. Контейнери Docker, що працюють у ECS, ізольовані
один від одного, що запобігає несанкціонованому доступу до даних між
різними екземплярами додатку. Контейнери отримують доступ до файлів
лише через захищені внутрішні API, а обмін даними між контейнерами та S3
відбувається через зашифровані канали та аутентифіковані запити. Це
дозволяє забезпечити безпеку даних навіть під час збільшення кількості
контейнерів для обробки пікових навантажень.
Адміністратор системи відіграє ключову роль у підтримці захисту
даних. Він контролює права доступу користувачів, встановлює політики
84
обмежень на завантаження та зберігання файлів, відстежує активність
користувачів і проводить аудит дій у системі. Логи дій користувачів та
адміністратора зберігаються у хмарі та доступні для аналізу, що дозволяє
своєчасно виявляти потенційні загрози та проводити необхідні заходи для
запобігання несанкціонованого доступу. Також адміністратор відповідає за
налаштування резервного копіювання, моніторинг цілісності даних та
перевірку коректності роботи автоматичних механізмів видалення файлів по
завершенню встановленого терміну зберігання.
Не менш важливим аспектом є захист від потенційних зловмисних дій
або несанкціонованого доступу з боку користувачів. Система реалізує
контроль одночасних завантажень, обмежує кількість файлів, що можна
передавати у певний період часу, та встановлює обмеження на максимальний
розмір файлів. Такі обмеження дозволяють запобігти перевантаженню сервісу
та потенційним атакам на доступність системи, одночасно захищаючи дані
всіх користувачів.
Захист даних у розробленій системі реалізований комплексно і охоплює
кілька рівнів: автентифікацію та контроль доступу користувачів, шифрування
даних на рівні зберігання та передачі, ізоляцію контейнерів та захищене
масштабування ресурсів, контроль дій адміністратора та резервне копіювання.
Поєднання цих механізмів дозволяє забезпечити високий рівень безпеки,
конфіденційності та цілісності даних, а також гарантує надійну роботу
системи навіть під високими навантаженнями.
Завдяки таким підходам користувачі можуть бути впевнені у
захищеності своїх файлів, а адміністратори мають повний контроль над
доступом, політиками безпеки та станом системи. У комплексі реалізація
захисту даних робить розроблену систему надійним та безпечним
інструментом для обміну файлами у хмарному середовищі, поєднуючи
масштабованість, зручність використання та високу ступінь безпеки.
85
4.3 Висновки до розділу 4
У розділі було розглянуто комплексні підходи до захисту інформації в
системах з автоматичним розподілом ресурсів, а також проаналізовано
практичну реалізацію цих механізмів у розробленому програмному рішенні.
Огляд існуючих технологій показав, що сучасні хмарні системи потребують
багаторівневого захисту, який включає шифрування даних, автентифікацію та
авторизацію користувачів, сегментацію середовища, моніторинг активності
та відповідність міжнародним стандартам безпеки.
Розроблена система обміну файлами враховує основні вимоги
інформаційної безпеки і забезпечує конфіденційність, цілісність та
доступність даних користувачів. Реалізовано захищене зберігання файлів у
хмарному середовищі, контроль доступу до ресурсів, шифрування
конфіденційної інформації, ведення журналів подій та підтримку
двофакторної автентифікації. Завдяки цьому система здатна протидіяти
більшості поширених загроз, таких як несанкціонований доступ, викрадення
облікових даних, модифікація або втрата інформації.
Таким чином, впроваджені організаційні та технічні засоби дозволяють
забезпечити високий рівень захисту та надійності роботи системи, що є
критично важливим для стабільного функціонування сервісу та безпеки
користувацьких даних.
86
ВИСНОВКИ
У ході виконання кваліфікаційної роботи магістра було проведено
ґрунтовний аналіз предметної області, що дозволив визначити ключові
проблеми та вимоги, характерні для сучасних високонавантажених систем
файлового зберігання. Дослідження показало, що зростання обсягів даних,
інтенсивності трафіку та кількості користувачів створює суттєві виклики для
традиційних архітектур, які не здатні забезпечити стабільну роботу під
змінним або піковим навантаженням.
Особлива увага приділялася питанням масштабованості,
відмовостійкості, оптимізації ресурсів, безпеки даних та мінімізації
латентності. Було встановлено, що ефективне функціонування сучасних
файлових сервісів можливо лише за умови застосування хмарних та
розподілених архітектур з автоматичним управлінням ресурсами, що
забезпечують гнучке реагування на зміну навантаження та безперервний
доступ до даних навіть у разі часткових збоїв інфраструктури.
Проведений аналіз сучасних технологій і інструментальних засобів
розробки показав, що хмарні сервіси AWS, контейнеризація на Docker,
мікросервісна архітектура та реляційна база даних PostgreSQL дозволяють
створювати високонавантажені системи з оптимальним використанням
ресурсів, високою продуктивністю, масштабованістю та надійністю.
Інтеграція сервісів Amazon S3 і CloudFront забезпечує безпечне зберігання та
швидку доставку контенту, а застосування Load Balancer і механізмів
автоматичного масштабування гарантує стабільність роботи під час пікових
навантажень.
Особливу увагу приділено інформаційній безпеці. У розробленій
системі реалізовано багаторівневий захист даних, що включає автентифікацію
та авторизацію користувачів, шифрування даних на рівні зберігання та
87
передачі, контроль доступу до файлів, ізоляцію контейнерів, журналювання
подій та підтримку двофакторної автентифікації. Такий комплексний підхід
дозволяє гарантувати конфіденційність, цілісність та доступність інформації,
а також мінімізує ризики несанкціонованого доступу, втрати чи модифікації
даних.
Результати роботи підтвердили, що поєднання сучасних хмарних
технологій, мікросервісної архітектури та комплексних заходів інформаційної
безпеки дозволяє створювати високонавантажені, масштабовані та надійні
системи обміну файлами. Розроблена в кваліфікаційній роботі система є
гнучким, безпечним та ефективним інструментом, який здатний забезпечити
стабільну роботу в умовах високого навантаження та захист даних
користувачів на належному рівні.
88
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
AWS (Amazon Web Services) – хмарна платформа для створення та
управління інфраструктурою, сервісами та додатками.
CDK (Cloud Development Kit) – інструмент для створення інфраструктури як
коду (IaC) в AWS.
ECS (Elastic Container Service) – сервіс для розгортання, управління та
масштабування контейнерних додатків.
S3 (Simple Storage Service) – об’єктне сховище для зберігання та доступу до
даних у хмарі.
DB (Database) – база даних, система для зберігання та обробки
структурованих даних.
RDS (Relational Database Service) – керований сервіс реляційних баз даних у
хмарі.
TLS/SSL (Transport Layer Security / Secure Sockets Layer) – протоколи
шифрування для захисту даних під час передачі в мережі.
API (Application Programming Interface) – інтерфейс для взаємодії між
програмами та сервісами.
LDAP (Lightweight Directory Access Protocol) – протокол для доступу та
управління інформацією у директоріях користувачів.
OAuth2 (Open Authorization 2.0) – стандарт для авторизації доступу до
ресурсів без передачі пароля.
SAML (Security AssertionMarkup Language) – протокол обміну інформацією
про аутентифікацію та авторизацію між системами.
JCA (Java Cryptography Architecture) – архітектура Java для реалізації
криптографічних функцій.
89
JCE (Java Cryptography Extension) – розширення JCA, що забезпечує сильні
методи шифрування у Java.
XSS (Cross-Site Scripting) – атака на веб-додаток, що дозволяє вставляти
шкідливий код.
CSRF (Cross-Site Request Forgery) – атака, що змушує користувача
виконувати небажані дії в системі.
AES (Advanced Encryption Standard) – сучасний стандарт симетричного
шифрування даних.
RSA (Rivest–Shamir–Adleman) – алгоритм асиметричного шифрування, що
використовується для захисту інформації.
SQL (Structured Query Language) – мова запитів до реляційних баз даних.
PostgreSQL – реляційна база даних з відкритим кодом, що підтримує
розширені функції.
MySQL – популярна реляційна база даних з відкритим кодом, широко
застосовується у веб-додатках.
90
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Eberhard Wolff. Microservices with Docker, Kubernetes, and AWS.
Munich: Addison-Wesley, 2020. 400 p.
2. Adrian Cockcroft. Cloud Architecture Patterns: Using AWS, Azure, and
Google Cloud. Sebastopol: O’Reilly Media, 2018. 384 p.
3. Mark Wilkins. AWS for Solutions Architects: Design, Build, and Maintain
Secure, High-Performing. New York: Packt Publishing, 2021. 450 p.
4. Sean P. Kane, John R. Hogan. AWS Certified Solutions Architect Study
Guide. Indianapolis: Sybex, 2022. 800 p.
5. Brendan Burns, Joe Beda, Kelsey Hightower. Kubernetes: Up and Running.
Sebastopol: O’Reilly Media, 2019. 256 p.
6. Nigel Poulton. The Docker Book: Containerization is the New
Virtualization. Birmingham: Leanpub, 2021. 330 p.
7. Russell Dinnage. Infrastructure as Code: Dynamic Systems for the Cloud
Age. New York: Practical Guide, 2017. 300 p.
8. Yevgeniy Brikman. Terraform: Up & Running. Sebastopol: O’Reilly Media,
2020. 250 p.
9. James Turnbull. The Docker Ecosystem. San Francisco: No Starch Press,
2018. 290 p.
10. Victor Farcic. DevOps Automation Cookbook. Birmingham: Packt
Publishing, 2017. 520 p.
11. Michael Wittig, Andreas Wittig. Amazon Web Services in Action. Shelter
Island: Manning Publications, 2023. 650 p.
12. Anthony Sequeira. AWS Certified Developer Official Study Guide.
Indianapolis: Sybex, 2021. 740 p.
13. David Clinton. Learning AWS. Sebastopol: O’Reilly Media, 2022. 600 p.
91
14. Graham Dumpleton. mod_wsgi: Deploying Python Web Applications.
Bristol: WebOps Press, 2018. 180 p.
15. Kelsey Hightower, Brendan Burns. Cloud Native Infrastructure. Sebastopol:
O’Reilly Media, 2019. 400 p.
16. Martin Kleppmann. Designing Data-Intensive Applications. Sebastopol:
O’Reilly Media, 2022. 616 p.
17. Wolfgang Scherrer. High Performance MySQL. Boston: O’Reilly Media,
2019. 550 p.
18. Joshua Bloch. Effective Java. Boston: Addison-Wesley, 2018. 416 p.
19. Herbert Schildt. C# 9.0 in a Nutshell. Sebastopol: O’Reilly Media, 2021.
800 p.
20. Bruce Tate. Contemporary Cloud Native Architecture. Portland: Wiley,
2020. 350 p.
21. В. І. Савченко, О. І. Поліщук. Хмарні обчислення: основи, моделі,
сервіси. Київ: Наукова думка, 2021. 400 с.
22. О. М. Коваль, І. В. Ткаченко. Безпека інформаційних систем у хмарних
середовищах. Львів: ЛНУ ім. І. Франка, 2022. 320 с.
23. П. П. Іваненко. Масштабовані веб-системи: архітектура та
проєктування. Харків: ФОП Іваненко, 2023. 360 с.
24. Н. В. Терещенко, С. О. Мироненко. Сучасні технології баз даних.
Одеса: ОНУ, 2020. 480 с.
25. Ю. А. Шевченко. Контейнеризація додатків: Docker та Kubernetes.
Київ: КПІ ім. Ігоря Сікорського, 2021. 280 с.
ДОДАТОК А
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
к.т.н., доцент Артем ЛАВДАНСЬКИЙ
__________________
“___” _____________ 2025р.
Проектування масштабованих хмарних сервісів з автоматичним
розподілом ресурсів
Специфікація
482.ЧДТУ.52470-01
Листів 2
Розробник _______________ Денис ФЕДОРОВ
Керівник _______________ Віра БАБЕНКО
Черкаси 2025
2
482.ЧДТУ.52470-01
Позначення Найменування Примітка
Документація
482.ЧДТУ.52470-01 12 01 Текст програми
482.ЧДТУ.52470-01 34 01 Інструкція користувача
ДОДАТОК Б
Проектування масштабованих хмарних сервісів з автоматичним
розподілом ресурсів
Текс програми
482.ЧДТУ.52470-01 12 01
Листів 22
Розробник _______________ Денис ФЕДОРОВ
Черкаси 2025
2
482.ЧДТУ.52470-01 12 01
using System;
using System.Collections.Generic;
namespace FileShareAPI.Models
{
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public bool IsAuthorized { get; set; } // true = paid, false = guest
public bool IsAdmin { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime? LastLogin { get; set; }
public bool IsActive { get; set; } = true;
// Navigation properties
public ICollection<File> UploadedFiles { get; set; } = new List<File>();
public ICollection<Folder> OwnedFolders { get; set; } = new List<Folder>();
public ICollection<FolderShare> SharedFolders { get; set; } = new
List<FolderShare>();
public ICollection<FileDownloadLog> DownloadLogs { get; set; } = new
List<FileDownloadLog>();
public ICollection<UserRole> UserRoles { get; set; } = new
List<UserRole>();
}
public class File
{
public int Id { get; set; }
public string FileName { get; set; }
public string S3Key { get; set; } // Path in S3
public string ContentType { get; set; }
public long FileSize { get; set; }
public string FileHash { get; set; } // For integrity checking
public int UploadedByUserId { get; set; }
public int? FolderId { get; set; }
public DateTime UploadedAt { get; set; } = DateTime.UtcNow;
public DateTime? LastModified { get; set; }
public bool IsDeleted { get; set; } = false;
3
482.ЧДТУ.52470-01 12 01
public int MaxDownloadsForGuests { get; set; } = 5;
public User UploadedByUser { get; set; }
public Folder Folder { get; set; }
public ICollection<FileDownloadLog> DownloadLogs { get; set; } = new
List<FileDownloadLog>();
}
// Folder Entity
public class Folder
{
public int Id { get; set; }
public string FolderName { get; set; }
public int OwnedByUserId { get; set; }
public int? ParentFolderId { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public bool IsDeleted { get; set; } = false;
public User Owner { get; set; }
public Folder ParentFolder { get; set; }
public ICollection<File> Files { get; set; } = new List<File>();
public ICollection<Folder> SubFolders { get; set; } = new List<Folder>();
public ICollection<FolderShare> SharedWith { get; set; } = new
List<FolderShare>();
}
public class FolderShare
{
public int Id { get; set; }
public int FolderId { get; set; }
public int SharedWithUserId { get; set; }
public bool CanRead { get; set; } = true;
public bool CanWrite { get; set; } = false;
public bool CanDelete { get; set; } = false;
public DateTime SharedAt { get; set; } = DateTime.UtcNow;
public DateTime? ExpiresAt { get; set; }
public Folder Folder { get; set; }
public User SharedWithUser { get; set; }
}
public class FileDownloadLog
{
4
482.ЧДТУ.52470-01 12 01
public int Id { get; set; }
public int FileId { get; set; }
public int? DownloadedByUserId { get; set; }
public string GuestIdentifier { get; set; } // IP address or session ID for guests
public DateTime DownloadedAt { get; set; } = DateTime.UtcNow;
// Navigation properties
public File File { get; set; }
public User DownloadedByUser { get; set; }
}
public class Role
{
public int Id { get; set; }
public string RoleName { get; set; }
public string Description { get; set; }
public ICollection<UserRole> UserRoles { get; set; } = new
List<UserRole>();
}
public class UserRole
{
public int UserId { get; set; }
public int RoleId { get; set; }
public User User { get; set; }
public Role Role { get; set; }
}
public class AdminLog
{
public int Id { get; set; }
public int AdminUserId { get; set; }
public string Action { get; set; }
public string EntityType { get; set; }
public int EntityId { get; set; }
public string Details { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
}
5
482.ЧДТУ.52470-01 12 01
using Microsoft.EntityFrameworkCore;
using FileShareAPI.Models;
namespace FileShareAPI.Data
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
public DbSet<User> Users { get; set; }
public DbSet<File> Files { get; set; }
public DbSet<Folder> Folders { get; set; }
public DbSet<FolderShare> FolderShares { get; set; }
public DbSet<FileDownloadLog> FileDownloadLogs { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<AdminLog> AdminLogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>()
.HasKey(u => u.Id);
modelBuilder.Entity<User>()
.HasIndex(u => u.Email)
.IsUnique();
modelBuilder.Entity<User>()
.HasIndex(u => u.Username)
.IsUnique();
modelBuilder.Entity<File>()
.HasOne(f => f.UploadedByUser)
.WithMany(u => u.UploadedFiles)
.HasForeignKey(f => f.UploadedByUserId)
.OnDelete(DeleteBehavior.Cascade);
6
482.ЧДТУ.52470-01 12 01
modelBuilder.Entity<File>()
.HasOne(f => f.Folder)
.WithMany(fo => fo.Files)
.HasForeignKey(f => f.FolderId)
.OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<Folder>()
.HasOne(f => f.Owner)
.WithMany(u => u.OwnedFolders)
.HasForeignKey(f => f.OwnedByUserId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Folder>()
.HasOne(f => f.ParentFolder)
.WithMany(f => f.SubFolders)
.HasForeignKey(f => f.ParentFolderId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<FolderShare>()
.HasOne(fs => fs.Folder)
.WithMany(f => f.SharedWith)
.HasForeignKey(fs => fs.FolderId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<FolderShare>()
.HasOne(fs => fs.SharedWithUser)
.WithMany(u => u.SharedFolders)
.HasForeignKey(fs => fs.SharedWithUserId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<FileDownloadLog>()
.HasOne(fdl => fdl.File)
.WithMany(f => f.DownloadLogs)
.HasForeignKey(fdl => fdl.FileId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<FileDownloadLog>()
.HasOne(fdl => fdl.DownloadedByUser)
.WithMany(u => u.DownloadLogs)
.HasForeignKey(fdl => fdl.DownloadedByUserId)
.OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<UserRole>()
.HasKey(ur => new { ur.UserId, ur.RoleId });
7
482.ЧДТУ.52470-01 12 01
modelBuilder.Entity<UserRole>()
.HasOne(ur => ur.User)
.WithMany(u => u.UserRoles)
.HasForeignKey(ur => ur.UserId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<UserRole>()
.HasOne(ur => ur.Role)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.RoleId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Role>().HasData(
new Role { Id = 1, RoleName = "Admin", Description = "Administrator
role" },
new Role { Id = 2, RoleName = "User", Description = "Regular user
role" },
new Role { Id = 3, RoleName = "Guest", Description = "Guest user
role" }
);
}
}
}
namespace FileShareAPI.DTOs
{
// User DTOs
public class RegisterDto
{
public string Username { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public class LoginDto
{
public string Email { get; set; }
public string Password { get; set; }
}
public class UserDto
{
8
482.ЧДТУ.52470-01 12 01
public int Id { get; set; }
public string Username { get; set; }
public string Email { get; set; }
public bool IsAuthorized { get; set; }
public bool IsAdmin { get; set; }
public DateTime CreatedAt { get; set; }
}
public class UpdateUserDto
{
public string Username { get; set; }
public string Email { get; set; }
}
// File DTOs
public class FileDto
{
public int Id { get; set; }
public string FileName { get; set; }
public long FileSize { get; set; }
public DateTime UploadedAt { get; set; }
public int UploadedByUserId { get; set; }
public string UploadedByUsername { get; set; }
}
public class FileUploadDto
{
public string FileName { get; set; }
public int? FolderId { get; set; }
}
// Folder DTOs
public class FolderDto
{
public int Id { get; set; }
public string FolderName { get; set; }
public int OwnedByUserId { get; set; }
public DateTime CreatedAt { get; set; }
public List<FileDto> Files { get; set; }
public List<FolderDto> SubFolders { get; set; }
}
public class CreateFolderDto
9
482.ЧДТУ.52470-01 12 01
{
public string FolderName { get; set; }
public int? ParentFolderId { get; set; }
}
// Share DTOs
public class ShareFolderDto
{
public int FolderId { get; set; }
public int SharedWithUserId { get; set; }
public bool CanRead { get; set; } = true;
public bool CanWrite { get; set; } = false;
public bool CanDelete { get; set; } = false;
public DateTime? ExpiresAt { get; set; }
}
public class FolderShareDto
{
public int Id { get; set; }
public int FolderId { get; set; }
public int SharedWithUserId { get; set; }
public string SharedWithUsername { get; set; }
public bool CanRead { get; set; }
public bool CanWrite { get; set; }
public bool CanDelete { get; set; }
public DateTime SharedAt { get; set; }
}
// Admin DTOs
public class AdminActionDto
{
public int UserId { get; set; }
public string Action { get; set; }
public string Details { get; set; }
}
public class AdminLogDto
{
public int Id { get; set; }
public int AdminUserId { get; set; }
public string Action { get; set; }
public string EntityType { get; set; }
public int EntityId { get; set; }
10
482.ЧДТУ.52470-01 12 01
public DateTime CreatedAt { get; set; }
}
// Auth Response
public class AuthResponseDto
{
public bool Success { get; set; }
public string Message { get; set; }
public UserDto User { get; set; }
public string Token { get; set; }
}
}
using Amazon.S3;
using Amazon.S3.Transfer;
using Amazon.S3.Model;
using System.IO;
using System.Threading.Tasks;
namespace FileShareAPI.Services
{
public interface IS3Service
{
Task<string> UploadFileAsync(Stream fileStream, string fileName, string
contentType);
Task<Stream> DownloadFileAsync(string s3Key);
Task DeleteFileAsync(string s3Key);
Task<bool> FileExistsAsync(string s3Key);
Task<string> GeneratePresignedUrlAsync(string s3Key, int
expirationMinutes = 15);
}
public class S3Service : IS3Service
{
private readonly IAmazonS3 _s3Client;
private readonly IConfiguration _configuration;
private readonly string _bucketName;
public S3Service(IAmazonS3 s3Client, IConfiguration configuration)
{
_s3Client = s3Client;
_configuration = configuration;
_bucketName = configuration["AWS:BucketName"];
11
482.ЧДТУ.52470-01 12 01
}
public async Task<string> UploadFileAsync(Stream fileStream, string
fileName, string contentType)
{
try
{
var s3Key =
$"uploads/{DateTime.UtcNow:yyyy/MM/dd}/{Guid.NewGuid()}_{fileName}";
var putRequest = new PutObjectRequest
{
BucketName = _bucketName,
Key = s3Key,
InputStream = fileStream,
ContentType = contentType,
Metadata = new Dictionary<string, string>
{
{ "original-filename", fileName }
}
};
await _s3Client.PutObjectAsync(putRequest);
return s3Key;
}
catch (AmazonS3Exception ex)
{
throw new Exception($"Error uploading file to S3: {ex.Message}", ex);
}
}
public async Task<Stream> DownloadFileAsync(string s3Key)
{
try
{
var getRequest = new GetObjectRequest
{
BucketName = _bucketName,
Key = s3Key
};
var response = await _s3Client.GetObjectAsync(getRequest);
var memoryStream = new MemoryStream();
12
482.ЧДТУ.52470-01 12 01
await response.ResponseStream.CopyToAsync(memoryStream);
memoryStream.Position = 0;
return memoryStream;
}
catch (AmazonS3Exception ex)
{
throw new Exception($"Error downloading file from S3: {ex.Message}",
ex);
}
}
public async Task DeleteFileAsync(string s3Key)
{
try
{
var deleteRequest = new DeleteObjectRequest
{
BucketName = _bucketName,
Key = s3Key
};
await _s3Client.DeleteObjectAsync(deleteRequest);
}
catch (AmazonS3Exception ex)
{
throw new Exception($"Error deleting file from S3: {ex.Message}", ex);
}
}
public async Task<bool> FileExistsAsync(string s3Key)
{
try
{
var request = new GetObjectMetadataRequest
{
BucketName = _bucketName,
Key = s3Key
};
await _s3Client.GetObjectMetadataAsync(request);
return true;
}
catch (AmazonS3Exception ex)
13
482.ЧДТУ.52470-01 12 01
{
if (ex.StatusCode == System.Net.HttpStatusCode.NotFound)
return false;
throw;
}
}
public async Task<string> GeneratePresignedUrlAsync(string s3Key, int
expirationMinutes = 15)
{
try
{
var request = new GetPreSignedUrlRequest
{
BucketName = _bucketName,
Key = s3Key,
Expires = DateTime.UtcNow.AddMinutes(expirationMinutes),
Verb = HttpVerb.GET
};
return await Task.FromResult(_s3Client.GetPreSignedURL(request));
}
catch (AmazonS3Exception ex)
{
throw new Exception($"Error generating presigned URL:
{ex.Message}", ex);
}
}
}
}
using System.Security.Cryptography;
using System.Text;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Security.Claims;
using FileShareAPI.Data;
using FileShareAPI.Models;
namespace FileShareAPI.Services
{
public interface IAuthService
{
14
482.ЧДТУ.52470-01 12 01
Task<AuthResponseDto> RegisterAsync(RegisterDto model);
Task<AuthResponseDto> LoginAsync(LoginDto model);
Task<bool> ChangePasswordAsync(int userId, string oldPassword, string
newPassword);
string GenerateJwtToken(User user);
Task<User> GetUserByEmailAsync(string email);
}
public class AuthService : IAuthService
{
private readonly AppDbContext _context;
private readonly IConfiguration _configuration;
private readonly ILogger<AuthService> _logger;
public AuthService(AppDbContext context, IConfiguration configuration,
ILogger<AuthService> logger)
{
_context = context;
_configuration = configuration;
_logger = logger;
}
public async Task<AuthResponseDto> RegisterAsync(RegisterDto model)
{
try
{
// Check if email already exists
var existingUser = await _context.Users
.FirstOrDefaultAsync(u => u.Email == model.Email);
if (existingUser != null)
{
return new AuthResponseDto
{
Success = false,
Message = "Email already registered"
};
}
// Create new user
var user = new User
{
Username = model.Username,
15
482.ЧДТУ.52470-01 12 01
Email = model.Email,
PasswordHash = HashPassword(model.Password),
IsAuthorized = false, // New users are guests
IsAdmin = false,
CreatedAt = DateTime.UtcNow
};
_context.Users.Add(user);
// Assign Guest role
var guestRole = await _context.Roles.FirstOrDefaultAsync(r =>
r.RoleName == "Guest");
if (guestRole != null)
{
_context.UserRoles.Add(new UserRole
{
User = user,
Role = guestRole
});
}
await _context.SaveChangesAsync();
_logger.LogInformation($"User {user.Username} registered
successfully");
return new AuthResponseDto
{
Success = true,
Message = "Registration successful",
User = MapToUserDto(user),
Token = GenerateJwtToken(user)
};
}
catch (Exception ex)
{
_logger.LogError($"Registration error: {ex.Message}");
return new AuthResponseDto
{
Success = false,
Message = "Registration failed"
};
}
16
482.ЧДТУ.52470-01 12 01
}
public async Task<AuthResponseDto> LoginAsync(LoginDto model)
{
try
{
var user = await _context.Users
.Include(u => u.UserRoles)
.FirstOrDefaultAsync(u => u.Email == model.Email);
if (user == null || !VerifyPassword(model.Password,
user.PasswordHash))
{
return new AuthResponseDto
{
Success = false,
Message = "Invalid email or password"
};
}
if (!user.IsActive)
{
return new AuthResponseDto
{
Success = false,
Message = "User account is deactivated"
};
}
user.LastLogin = DateTime.UtcNow;
_context.Users.Update(user);
await _context.SaveChangesAsync();
_logger.LogInformation($"User {user.Username} logged in
successfully");
return new AuthResponseDto
{
Success = true,
Message = "Login successful",
User = MapToUserDto(user),
Token = GenerateJwtToken(user)
};
17
482.ЧДТУ.52470-01 12 01
}
catch (Exception ex)
{
_logger.LogError($"Login error: {ex.Message}");
return new AuthResponseDto
{
Success = false,
Message = "Login failed"
};
}
}
public async Task<bool> ChangePasswordAsync(int userId, string
oldPassword, string newPassword)
{
try
{
var user = await _context.Users.FindAsync(userId);
if (user == null)
return false;
if (!VerifyPassword(oldPassword, user.PasswordHash))
return false;
user.PasswordHash = HashPassword(newPassword);
_context.Users.Update(user);
await _context.SaveChangesAsync();
_logger.LogInformation($"User {user.Username} changed password");
return true;
}
catch (Exception ex)
{
_logger.LogError($"Change password error: {ex.Message}");
return false;
}
}
public string GenerateJwtToken(User user)
{
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_configuration["Jwt:Secret"]);
18
482.ЧДТУ.52470-01 12 01
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Name, user.Username),
};
if (user.IsAdmin)
claims.Add(new Claim(ClaimTypes.Role, "Admin"));
if (user.IsAuthorized)
claims.Add(new Claim("IsAuthorized", "true"));
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddHours(24),
Issuer = _configuration["Jwt:Issuer"],
Audience = _configuration["Jwt:Audience"],
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(key),
SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
public async Task<User> GetUserByEmailAsync(string email)
{
return await _context.Users.FirstOrDefaultAsync(u => u.Email == email);
}
private string HashPassword(string password)
{
return BCrypt.Net.BCrypt.HashPassword(password);
}
private bool VerifyPassword(string password, string hash)
{
return BCrypt.Net.BCrypt.Verify(password, hash);
}
19
482.ЧДТУ.52470-01 12 01
private UserDto MapToUserDto(User user)
{
return new UserDto
{
Id = user.Id,
Username = user.Username,
Email = user.Email,
IsAuthorized = user.IsAuthorized,
IsAdmin = user.IsAdmin,
CreatedAt = user.CreatedAt
};
}
}
}
using FileShareAPI.Data;
using FileShareAPI.Models;
using System.Security.Cryptography;
namespace FileShareAPI.Services
{
public interface IFileService
{
Task<File> UploadFileAsync(int userId, IFormFile formFile, int? folderId);
Task<Stream> DownloadFileAsync(int fileId, int? userId, string
guestIdentifier);
Task DeleteFileAsync(int fileId, int userId);
Task<List<FileDto>> GetUserFilesAsync(int userId);
Task<File> GetFileByIdAsync(int fileId);
Task<bool> CanUserAccessFileAsync(int fileId, int userId);
}
public class FileService : IFileService
{
private readonly AppDbContext _context;
private readonly IS3Service _s3Service;
private readonly ILogger<FileService> _logger;
public FileService(AppDbContext context, IS3Service s3Service,
ILogger<FileService> logger)
{
_context = context;
_s3Service = s3Service;
20
482.ЧДТУ.52470-01 12 01
_logger = logger;
}
public async Task<File> UploadFileAsync(int userId, IFormFile formFile,
int? folderId)
{
try
{
var user = await _context.Users.FindAsync(userId);
if (user == null)
throw new Exception("User not found");
// Validate file size (max 100MB for free users, 1GB for authorized)
long maxSize = user.IsAuthorized ? 1024 * 1024 * 1024 : 100 * 1024 *
1024;
if (formFile.Length > maxSize)
throw new Exception($"File size exceeds limit of {maxSize / (1024 *
1024)}MB");
// Upload to S3
using var stream = formFile.OpenReadStream();
var s3Key = await _s3Service.UploadFileAsync(stream,
formFile.FileName, formFile.ContentType);
// Calculate file hash
var fileHash = CalculateFileHash(formFile.OpenReadStream());
// Create file record
var file = new File
{
FileName = formFile.FileName,
S3Key = s3Key,
ContentType = formFile.ContentType,
FileSize = formFile.Length,
FileHash = fileHash,
UploadedByUserId = userId,
FolderId = folderId,
UploadedAt = DateTime.UtcNow,
MaxDownloadsForGuests = user.IsAuthorized ? int.MaxValue : 5
};
_context.Files.Add(file);
await _context.SaveChangesAsync();
21
482.ЧДТУ.52470-01 12 01
_logger.LogInformation($"File {file.FileName} uploaded by user
{userId}");
return file;
}
catch (Exception ex)
{
_logger.LogError($"File upload error: {ex.Message}");
throw;
}
}
public async Task<Stream> DownloadFileAsync(int fileId, int? userId, string
guestIdentifier)
{
try
{
var file = await _context.Files.Include(f =>
f.Folder).FirstOrDefaultAsync(f => f.Id == fileId);
if (file == null)
throw new Exception("File not found");
// Check access permissions
bool hasAccess = false;
if (userId.HasValue)
{
// Check if it's the owner
if (file.UploadedByUserId == userId)
hasAccess = true;
// Check if folder is shared with user
if (file.FolderId.HasValue)
{
var folderShare = await _context.FolderShares
.FirstOrDefaultAsync(fs =>
fs.FolderId == file.FolderId &&
fs.SharedWithUserId == userId &&
fs.CanRead &&
(fs.ExpiresAt == null || fs.ExpiresAt > DateTime.UtcNow));
if (folderShare != null)
hasAccess = true;
22
482.ЧДТУ.52470-01 12 01
}
}
else
{
// Guest access - check download limit
var downloadCount = await _context.FileDownloadLogs
.Where(fdl => fdl.FileId == fileId && fdl.GuestIdentifier ==
guestIdentifier)
.CountAsync();
if (downloadCount < file.MaxDownloadsForGuests)
hasAccess = true;
}
if (!hasAccess)
throw new UnauthorizedAccessException("You don't have access to
this file");
// Log download
var log = new FileDownloadLog
{
FileId = fileId,
DownloadedByUserId = userId,
GuestIdentifier = guestIdentifier,
DownloadedAt = DateTime.UtcNow
};
_context.FileDownloadLogs.Add(log);
await _context.SaveChangesAsync();
_logger.LogInformation($"File {file.FileName} downloaded");
return await _s3Service.DownloadFileAsync(file.S3Key);
}
catch (Exception ex)
{
_logger.LogError($"File download error: {ex.Message}");
throw;
}
}
ДОДАТОК В
Проектування масштабованих хмарних сервісів з автоматичним
розподілом ресурсів
Інструкція користувача
482.ЧДТУ.52470-01 34 01
Листів 4
Розробник _______________ Денис ФЕДОРОВ
Черкаси 2025
2
482.ЧДТУ.52470-01 34 01
Адміністратор, який вперше працює з розробленою системою обміну
файлами, повинен забезпечити правильне налаштування інфраструктури на
платформі AWS для забезпечення стабільної та безпечної роботи сервісу.
Першим кроком є створення адміністративного облікового запису у хмарі
AWS з повним доступом до всіх необхідних сервісів. Обліковий запис повинен
бути захищений складним паролем та бажано двофакторною автентифікацією,
щоб гарантувати безпеку керування системою. Після створення облікового
запису необхідно переконатися, що у адміністратора є доступ до сервісів ECS,
S3 та CloudFront, оскільки саме через них відбувається управління
контейнерами, зберігання файлів та доставка даних користувачам.
Наступним кроком є налаштування сховища файлів у Amazon S3.
Адміністратор створює bucket, у якому будуть зберігатися всі завантажені
користувачами файли. Для забезпечення безпеки даних слід включити
шифрування на рівні об’єктів, обрати відповідний метод шифрування та
налаштувати політики доступу, щоб файли могли завантажуватися лише через
авторизовані компоненти системи. Необхідно також визначити правила
видалення файлів, які закінчили термін зберігання, та встановити політики
версіонування для можливості відновлення випадково видалених файлів. Ці
налаштування забезпечують безпеку та надійність даних, а також дозволяють
контролювати обсяг використаного хмарного сховища.
Після налаштування S3 адміністратор переходить до конфігурації ECS
для запуску контейнерів із додатком. На цьому етапі важливо створити кластер
ECS та визначити параметри запуску контейнерів, включаючи образи Docker,
кількість контейнерів для мінімального та максимального навантаження та
ресурси, які виділяються кожному контейнеру. Налаштування автоматичного
масштабування дозволяє системі динамічно збільшувати кількість
контейнерів при рості навантаження та зменшувати їх у моменти низької
активності. Адміністратор має переконатися, що контейнери правильно
3
482.ЧДТУ.52470-01 34 01
підключені до S3 та можуть взаємодіяти з іншими компонентами системи
через захищені API, щоб забезпечити безперебійну роботу додатку та
безпечний доступ до файлів користувачів.
Далі здійснюється налаштування CloudFront для доставки контенту
користувачам. Адміністратор створює дистрибутив CloudFront, вказує
джерело даних у вигляді bucket S3 та налаштовує правила кешування та
безпеки. Важливо включити підтримку HTTPS, щоб забезпечити шифрування
даних під час передачі користувачам, а також визначити терміни кешування
файлів, щоб користувачі отримували актуальні версії без затримок. Через
CloudFront інтерфейс користувача стає доступним з будь-якої точки світу з
мінімальними затримками, що покращує зручність користування сервісом та
підвищує продуктивність системи.
Перший запуск системи вимагає запуску контейнерів ECS та перевірки
їх роботи. Адміністратор повинен переконатися, що всі контейнери
стартували успішно, додаток підключений до S3 та CloudFront, і що
користувачі можуть без проблем завантажувати та переглядати файли.
Важливо провести первинне тестування завантаження файлів, створення
публічних та приватних посилань, перевірки обмежень доступу та контролю
часу зберігання файлів. У разі виявлення будь-яких помилок необхідно
переглянути конфігурацію контейнерів, права доступу у S3 або налаштування
CloudFront і внести корективи для забезпечення стабільної роботи системи.
Адміністратор також повинен налаштувати моніторинг та логування
системи. Для цього використовуються інструменти AWS, які дозволяють
відслідковувати стан контейнерів, активність користувачів, завантаження
файлів та обсяг використаного сховища. Моніторинг допомагає оперативно
реагувати на будь-які відхилення від нормальної роботи, виявляти потенційні
загрози або неполадки і забезпечувати безперервну доступність системи. Логи
4
482.ЧДТУ.52470-01 34 01
зберігаються у хмарі та доступні для аналізу адміністратору, що дозволяє
контролювати безпеку та ефективність роботи сервісу.
Окрім первинного запуску та налаштування інфраструктури,
адміністратор відповідає за регулярне обслуговування системи. Це включає
контроль використання ресурсів, перевірку працездатності контейнерів,
моніторинг S3 та CloudFront, оновлення образів Docker та внесення змін у
налаштування масштабування при зміні навантаження. Важливо підтримувати
актуальні версії програмного забезпечення, забезпечувати резервне
копіювання та перевірку цілісності даних, а також регулярно проводити аудит
прав доступу користувачів та стану безпеки системи.
Таким чином, правильне налаштування інфраструктури на AWS,
перший запуск контейнерів, перевірка роботи додатку та регулярне
обслуговування є критично важливими для ефективної та стабільної роботи
системи обміну файлами. Адміністратор, дотримуючись цих процедур,
забезпечує безпеку, надійність та високу продуктивність сервісу, створюючи
комфортні умови для користувачів та підтримуючи масштабованість системи
у будь-яких умовах.