Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/7344
Title: Система обміну інформацією між підрозділами підприємств з використанням технології GraphQL
Authors: ГРЕСЬКО, Світлана
ЗІНЗІРОВ, Ігор
Keywords: GRAPHQL;СИСТЕМА ОБМІНУ ІНФОРМАЦІЄЮ;ВЗАЄМОДІЯ ПІДРОЗДІЛІВ;ТЕХНОЛОГІЇ ПЕРЕДАЧІ ДАНИХ;ІНФОРМАЦІЙНІ СИСТЕМИ;API ДЛЯ ПІДПРИЄМСТВ;ІНТЕГРАЦІЯ ІНФОРМАЦІЙНИХ СИСТЕМ;АРХІТЕКТУРА API;КРОС-ПЛАТФОРМНИЙ ОБМІН ДАНИМИ
Issue Date: 2024
Abstract: Метою виконання даної кваліфікаційної роботи на здобуття освітнього ступеня «бакалавр» є система обміну інформацією між підрозділами підприємств з використанням технології GraphQLі. Загальний обсяг роботи становить 81 сторінок пояснювальної записки та 3 додатки. У роботі 9 рисунків, 1 таблиця. Для виконання роботи використано 20 літературних джерел. Основними завданнями кваліфікаційної роботи є розробка програми, яка використовуватиме GraphQL, матиме мікросервісну архітектуру та зможе працювати як синхронно, так і асинхронно. Вона забезпечуватиме ефективну комунікацію між різними підрозділами. Стислий опис розділів кваліфікаційної роботи бакалавра складається з аналізу предметної області та постановки задачі; вибору технологій та інструментальних засобів; розробки системи обміну інформацією між підрозділами підприємств з використанням технології GraphQL.
URI: https://er.chdtu.edu.ua/handle/ChSTU/7344
Appears in Collections:123 Комп’ютерна інженерія (Комп'ютерні системи та мережі)

Files in This Item:
File Description SizeFormat 
1_ТИТУЛКА_Зінзіров-merged.pdf
  Restricted Access
1.51 MBAdobe PDFView/Open Request a copy


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

Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА ІНФОРМАЦІЙНОЇ БЕЗПЕКИ ТА КОМП’ЮТЕРНОЇ ІНЖЕНЕРІЇ
ПОЯСНЮВАЛЬНА ЗАПИСКА
до кваліфікаційної роботи бакалавра
на тему:«Система обміну інформацією між
підрозділами підприємств з використанням
технології GraphQL»
ЧДТУ.246014.001 ПЗ
Виконав: студент 4 курсу, групи ЗКМ-2005
спеціальності 123 – «Комп’ютерна інженерія»
за освітньою програмою – «Комп’ютерні системи
та мережі»
Ігор ЗІНЗІРОВ
Керівник
старший викладач
Світлана ГРЕСЬКО
Рецензент
к.т.н., доцент, доцент кафедри комп’ютерної
інженерії та інформаційних технологій
Черкаського державного бізнес коледжу
Марія ЗАХАРОВА
«ЗАХИСТ ДОЗВОЛЯЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор ___________ Віра БАБЕНКО
Черкаси 2024 року
Форма № Н-9.01
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Факультет: інформаційних технологій і систем
Кафедра: інформаційної безпеки та комп’ютерної інженерії
Освітньо-кваліфікаційний рівень: Бакалавр
Спеціальність 123 – Комп’ютерна інженерія
Освітня програма Комп’ютерні системи та мережі
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор _____________ Віра БАБЕНКО
«28» лютого 2024 року
ЗАВДАННЯ
на кваліфікаційну роботу бакалавра студенту
Зінзірову Ігорю Юрійовичу
(прізвище, ім‘я, по батькові)
1. Тема роботи: Система обміну інформацією між підрозділами підприємств з
використанням технології GraphQL
Керівник роботи: старший викладач Гресько Світлана Олексіївна
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом університету від «26» лютого 2024 р. № 60/04
2. Строк подання студентом роботи:
3. Вихідні дані до роботи:
 розробити мікросервісну архітектуру;
 впровадити технологію GraphQL;
 реалізувати синхронну та асинхронну комунікації між підрозділами;
 забезпечити безпеку передачі даних.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити):
Вступ
1. Аналіз предметної області та постановка задачі
2. Вибір технологій та інструментальних засобів
3. Розробка системи обміну інформацією між підрозділами підприємств з використанням
технології GraphQL
4. Захист системи обміну інформацією між підрозділами підприємств з використанням
технології GraphQL
Висновки
Додатки
Список використаних джерел
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів):
Додаток А Специфікація
Додаток Б Текст програм
Додаток В Інструкція користувача
6. Консультанти розділів роботи:
Розділ Прізвище, ініціали Підпис, дата
консультанта завдання видав завдання прийняв
7. Дата видачі завдання: 28 лютого 2024 року
КАЛЕНДАРНИЙ ПЛАН
Термін
№ з/п Назва етапів роботи виконання Примітка
етапів роботи
1 Збір матеріалу 01.03 – 14.03 виконано
2 Обробка матеріалу 15.03 – 20.03 виконано
3 Обґрунтування актуальності виконання досліджень 21.03 – 25.03 виконано
4 Оцінка стану проблеми, виокремлення дослідницьких виконано
задач, постановка задачі дослідження 26.03 – 01.04
5 Викладення сутності і результатів дослідження 03.04 – 08.04 виконано
6 Практичне застосування результатів дослідження 09.04 – 27.04 виконано
7 Оформлення результатів в пояснювальну записку 28.04 – 02.05 виконано
8 Подання роботи на відгук та рецензування 15.05 – 20.05 виконано
9 Обробка матеріалу 29.05 – 1.05 виконано
10 Обґрунтування актуальності виконання досліджень 15.05 – 20.05 виконано
Студент ___________________________ Ігор ЗІНЗІРОВ
(підпис)
Керівник роботи ___________________________ Світлана ГРЕСЬКО
(підпис)
АНОТАЦІЯ
Метою виконання даної кваліфікаційної роботи на здобуття освітнього
ступеня «бакалавр» є система обміну інформацією між підрозділами
підприємств з використанням технології GraphQLі.
Загальний обсяг роботи становить 81 сторінок пояснювальної записки та
3 додатки. У роботі 9 рисунків, 1 таблиця. Для виконання роботи використано
20 літературних джерел.
Основними завданнями кваліфікаційної роботи є розробка програми, яка
використовуватиме GraphQL, матиме мікросервісну архітектуру та зможе
працювати як синхронно, так і асинхронно. Вона забезпечуватиме ефективну
комунікацію між різними підрозділами.
Стислий опис розділів кваліфікаційної роботи бакалавра складається з
аналізу предметної області та постановки задачі; вибору технологій та
інструментальних засобів; розробки системи обміну інформацією між
підрозділами підприємств з використанням технології GraphQL.
Ключові слова: GRAPHQL, СИСТЕМА ОБМІНУ ІНФОРМАЦІЄЮ,
ВЗАЄМОДІЯ ПІДРОЗДІЛІВ, ТЕХНОЛОГІЇ ПЕРЕДАЧІ ДАНИХ, API ДЛЯ
ПІДПРИЄМСТВ, ІНФОРМАЦІЙНІ СИСТЕМИ, ІНТЕГРАЦІЯ
ІНФОРМАЦІЙНИХ СИСТЕМ, АРХІТЕКТУРА API, КРОС-ПЛАТФОРМНИЙ
ОБМІН ДАНИМИ
ANOTATION
The purpose of this qualifying work for obtaining the bachelor's degree is a
system of information exchange between divisions of enterprises using GraphQLi
technology.
The total volume of work is 81 pages of an explanatory note and 3 appendices.
The work includes 9 figures, 1 table. 20 literary sources were used to perform the
work.
The main tasks of the qualification work are the development of a program that
will use GraphQL, have a microservice architecture and be able to work both
synchronously and asynchronously. It will ensure effective communication between
different departments.
A concise description of the sections of the bachelor's qualification work
consists of an analysis of the subject area and a statement of the problem; selection of
technologies and tools; development of an information exchange system between
enterprise divisions using GraphQL technology.
Keywords: GraphQL, INFORMATION EXCHANGE SYSTEM,
INTERDEPARTMENTAL INTERACTION, DATA TRANSFER
TECHNOLOGIES, API FOR ENTERPRISES, INFORMATION SYSTEMS,
INFORMATION SYSTEMS INTEGRATION, API ARCHITECTURE, CROSS-
PLATFORM DATA EXCHANGE
ЗМІСТ
ВСТУП……………………………………………………………………………..4
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА ЗАДАЧІ.….…..7
1.1 Аналіз існуючих систем………………………...………….………….7
1.2 Постановка задачі………...………………………………………...…13
1.3 Висновки до розділу 1..………………………………….…………...15
2 ВИБІР ТЕХНОЛОГІЙ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ………......17
2.1 Огляд існуючих технологій……………………………….………….17
2.2 Обґрунтування вибору…..………………………………………...….25
2.3 Висновки до розділу 2…………………………………….………….31
3 РОЗРОБКА СИСТЕМИ ОБМІНУ ІНФОРМАЦІЄЮ МІЖ
ПІДРОЗДІЛАМИ ПІДПРИЄМСТВ З ВИКОРИСТАННЯМ ТЕХНОЛОГІЇ
GraphQL...……………...……………………………………………………..33
3.1 Структура системи……………...………………………………..…...33
3.2 Опис функцій системи………………………………………………..39
3.3 Технічні вимоги для роботи з системою…………………………….43
3.4 Оцінка ефективності………………………………………………….45
3.5 Висновки до розділу 3………………………………………………..47
4 ЗАХИСТ СИСТЕМИ ОБМІНУ ІНФОРМАЦІЄЮ МІЖ ПІДРОЗДІЛАМИ
ПІДПРИЄМСТВ З ВИКОРИСТАННЯМ ТЕХНОЛОГІЇ GraphQL…........49
4.1 Огляд існуючих рішень …………………..………….………………49
4.2 Реалізація захисту даних користувачів……………………….….….55
4.3 Висновки до розділу 4…………..…………………………….……...59
ЧДТУ.246014.001 ПЗ
Змн. Арк. № докум. Підпис Дат
РозрКобив Зінзіров І.Ю. а Система обміну Літ. Лист Листів
Керівник Гресько С.О. інформацією між 2 81
Рецеанзент Захарова М.В. підрозділами підприємств з
Н.Контроль Гресько С.О. використанням технології Кафедра ІБ та КІ
Затвфердив Бабенко В.Г. GraphQL гр. ЗКМ-2005
Пояснювальна записка
е
д
р
а
К
К
-
0
6
ВИСНОВКИ……………………………………………………………………..60
ДОДАТКИ:
А – 482.ЧДТУ.46014.01Система обміну інформацією між підрозділами
підприємств з використанням технології GraphQL
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ……………………………...………..80
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 3
а
ВСТУП
Актуальність теми.У сучасному бізнес-середовищі ефективна
комунікація між підрозділами підприємства є ключовим фактором успішного
функціонування та розвитку компаній. Сучасні підприємства генерують
величезні обсяги даних, які необхідно швидко і ефективно передавати між
різними підрозділами. Технологія GraphQL дозволяє оптимізувати запити до
баз даних, зменшуючи обсяг переданої інформації лише до необхідного
мінімуму, що забезпечує швидкий доступ до актуальних даних в режимі
реального часу.
Традиційні REST API часто виявляються занадто громіздкими та не
гнучкими для складних систем з великою кількістю взаємодій. GraphQL
пропонує більш гнучкий підхід, дозволяючи клієнтам запитувати саме ті
дані, які їм потрібні. Це зменшує навантаження на сервери та мережу, що є
важливим для великих підприємств з розподіленими системами. Завдяки
цьому підвищується ефективність розробки та впровадження нових функцій і
сервісів.
Ефективна система обміну інформацією сприяє кращій координації між
підрозділами, що підвищує продуктивність та знижує ризик помилок через
відсутність або неточність даних. Підприємства, що використовують сучасні
технології для покращення внутрішньої комунікації, отримують значні
конкурентні переваги на ринку. Впровадження GraphQL дозволяє
оптимізувати бізнес-процеси, підвищуючи ефективність та швидкість
реагування на зміни, що сприяє загальній продуктивності та
конкурентоспроможності компанії.
Існує кілька альтернатив технології GraphQL для обміну інформацією
між підрозділами підприємств. REST API, популярний і простий у
використанні, базується на HTTP-запитах, але має недоліки у вигляді
надлишкових даних і великої кількості кінцевих точок. gRPC,
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 4
а
високопродуктивний фреймворк від Google, використовує HTTP/2 і
ProtocolBuffers, підходить для мікросервісів та високонавантажених систем.
OData, протокол від Microsoft, забезпечує фільтрацію, сортування та інші
гнучкі можливості для запитів до веб-сервісів. Falcor, фреймворк від Netflix,
дозволяє запитувати тільки потрібні дані, працюючи з віртуальними JSON-
графами, що спрощує роботу з даними. SOAP, протокол для обміну
структурованою інформацією, використовує XML і підтримує складні
операції та стандарти безпеки, але є громіздким. JSON:API, специфікація для
оптимізації роботи з JSON, мінімізує кількість запитів і обсяг переданих
даних, дозволяючи запитувати необхідні ресурси одним запитом.
Виходячи з вищесказаного, можна зробити висновок, що дана тема
система обміну інформацією між підрозділами підприємств з використанням
технологіїGraphQLє актуальною.
Метою кваліфікаційної роботи є розробка програми, яка
використовуватиме GraphQL, матиме мікросервісну архітектуру та зможе
працювати як синхронно, так і асинхронно. Вона забезпечуватиме ефективну
комунікацію між різними підрозділами. Для досягнення сформульованої
мети необхідно вирішити такі задачі:
Для досягнення сформульованої мети необхідно вирішити такі задачі:
1. Розробка мікросервісної архітектури
2. Впровадження GraphQL API
3. Реалізація синхронної та асинхронної комунікації
4. Забезпечення безпеки передачі даних
На даний момент існує багато джерел інформації, в яких автори
використовують та описуютьGraphQL, наприклад «GraphQL: Повний
посібник по використанню та розробці веб-застосунків» від Ч. Скотта
досліджує технологію GraphQL і її використання для побудови ефективних
веб-застосунків, надаючи від базових концепцій до практичних прикладів
реалізації. «GraphQL в дії: Побудова ефективних API» від А. Кларка детально
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 5
а
розглядає практичні аспекти реалізації GraphQL API, забезпечуючи необхідні
знання та інструменти для побудови гнучких та продуктивних API.
«GraphQL і React: Повний посібник для веб-розробника» від Д. Хеммінгсона
досліджує використання GraphQL з React для побудови сучасних веб-
застосунків, надаючи практичні поради та приклади реалізації. «Розробка
GraphQL API з Node.js: Практичне керівництво» від К. Патерсона досліджує
процес розробки GraphQL API з використанням Node.js, надаючи практичні
поради та інструкції для реалізації обміну інформацією між підрозділами
підприємств.
Тема має важливе практичне значення у сучасному бізнесі.
Використання технології GraphQL дозволяє підприємствам побудувати
ефективну та гнучку систему обміну даними між різними підрозділами.
Застосування цієї технології дозволяє значно спростити процеси комунікації
між відділами, зменшити кількість запитів до сервера, а також підвищити
продуктивність та ефективність обміну інформацією.У результаті,
впровадження такої системи сприяє підвищенню ефективності управління,
швидкості прийняття рішень та загальної продуктивності підприємства.
Кваліфікаційна робота складається з 4-х розділів, яких подається
інформація про:
1. Обрану предметну область дослідження та про постановку проблема;
2. Огляд існуючих технологій, за допомогою яких можна реалізувати
подібну систему та обґрунтування вибору тієї чи іншої технології;
3. Реалізацію системи: відображення структури системи, опис функцій
кожної частини системи, технічні вимоги до системи а також
практична оцінка ефективності роботи;
4. Розробка захисту інформації для системи.
Використана література, під час написання кваліфікаційної роботи,
досить добре розкриває основні методики та підходи для розробки подібних
систем.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 6
а
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ТА ПОСТАНОВКА
ЗАДАЧІ
1.1 Аналіз існуючих систем
Передача даних – це процес обміну інформацією між двома або більше
пристроями або системами. Вона включає в себе відправлення, прийом та
обробку даних у вигляді сигналів або пакетів через різні канали зв'язку, такі
як дротові (наприклад, Ethernet) або бездротові (наприклад, Wi-Fi) мережі.
Передача данихпотрібна для обміну даними дозволяє різним
пристроям, таким як комп'ютери, смартфони, сервери, датчики та інші,
взаємодіяти та синхронізувати свою роботу.
Користувачі можуть отримувати доступ до необхідної інформації в
режимі реального часу з будь-якої точки світу, що є критично важливим для
сучасного бізнесу та особистих потреб.
У великих компаніях або організаціях передача даних дозволяє різним
відділам та філіям обмінюватися інформацією та працювати разом, навіть
якщо вони знаходяться в різних географічних локаціях.
Передача даних необхідна для автоматизованих систем, які
контролюють різні процеси, наприклад, у виробництві, логістиці, або в
розумних будинках.
Зростання обсягів даних потребує ефективних методів їх передачі для
зберігання та аналізу, що особливо важливо для наукових досліджень,
фінансових установ та інтернет-компаній.Ефективна передача даних
забезпечує безперервність бізнес-процесів, включаючи управління
ланцюгами поставок, взаємодію з клієнтами, та фінансовий облік.
Передача даних дозволяє здійснювати резервне копіювання важливої
інформації та забезпечувати її безпеку шляхом створення копій даних в
різних місцях.
Приклади технологій передачі даних:
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 7
а
1. Ethernet та Wi-Fi для локальних мереж;
2. Інтернет для глобальної передачі даних;
3. Bluetooth та NFC для ближнього зв'язку;
4. 4G/5G мобільні мережі для передачі даних на ходу;
5. API (інтерфейси прикладного програмування) для обміну даними між
програмами.
Таким чином, передача даних є фундаментальною складовою
сучасного інформаційного суспільства, забезпечуючи зв'язок, обмін та
зберігання інформації, необхідної для функціонування різних систем та
пристроїв.
Ethernet та Wi-Fi– це два основних способи підключення до локальних
мереж. Ethernet використовує провідне підключення, тоді як Wi-Fi забезпечує
бездротове підключення. Ethernet зазвичай використовується для
підключення комп'ютерів, принтерів та інших пристроїв до мережі через
Ethernet-кабель, тоді як Wi-Fi надає можливість підключення без кабелів
через бездротові мережі, що дозволяє пристроям підключатися до Інтернету
через Wi-Fi маршрутизатори [1].
Мобільні мережі 4G/5G – ці мережі забезпечують підключення до
Інтернету на рухливих пристроях, таких як смартфони, планшети та
ноутбуки. Вони працюють через мобільних операторів і забезпечують високу
швидкість передачі даних навіть у рухомому стані.
Інтернет– це глобальна мережа, яка дозволяє обмінюватися даними між
комп'ютерами та пристроями по всьому світу. Для передачі даних в Інтернеті
використовуються протоколи передачі даних, такі як TCP/IP.
Bluetooth та NFC– ці технології використовуються для ближнього
бездротового зв'язку між пристроями. Bluetooth дозволяє підключати
пристрої на відстані до 10 метрів, тоді як NFC (ближнє поле) дозволяє
обмінюватися даними на дуже короткій відстані (декілька сантиметрів).
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 8
а
API (інтерфейси прикладного програмування) -це набір правил та
інструкцій, які дозволяють різним програмам та сервісам обмінюватися
даними через мережу Інтернет [2]. Вони дозволяють створювати інтеграції
між різними сервісами та автоматизувати обмін даними.
Передача даних синхронним способом за допомогою HTTP (Протокол
передачі гіпертексту) відбувається за принципом "запит-відповідь". Коли
клієнт відправляє HTTP-запит на сервер, він очікує на відповідь від сервера,
перш ніж продовжити виконання інших операцій, схема зображена на
рисунку 1.1.
Рисунок 1.1. – Принцип передачі даних через за допомогою HTTP
Цей процес блокує виконання коду на стороні клієнта до тих пір, поки
сервер не поверне відповідь. Такий підхід часто використовується для
отримання даних з сервера, оновлення сторінок веб-сайтів або взаємодії з
API [3]. Хоча цей метод є простим у реалізації, він може призводити до
затримок у відображенні даних на стороні клієнта, особливо у випадку
великої кількості запитів або поганого з'єднання з мережею.
Передача даних синхронним способом за допомогою HTTP
використовується для взаємодії між клієнтом (наприклад, веб-браузером) і
сервером. У цьому сценарії клієнт відправляє запит на сервер, що містить
необхідну інформацію, і чекає, доки сервер обробить цей запит і поверне
відповідь. Після цього клієнт може продовжити виконання своїх дій.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 9
а
HTTP використовується для передачі різноманітної інформації,
включаючи статичні веб-сторінки, динамічний контент, запити на отримання
даних з сервера (наприклад, через API), а також для надсилання даних на
сервер (наприклад, форми, які ви заповнюєте в Інтернеті).
Один з основних недоліків синхронної передачі даних через HTTP
полягає в тому, що клієнт блокується, чекаючи на відповідь від сервера. Це
може призвести до затримок у відображенні або реакції на дії користувача.
Також, при великому обсязі даних або мережевих перешкод можуть
виникати проблеми з продуктивністю та швидкістю передачі.
Передача даних асинхронним способом, наприклад, за допомогою
технологій, таких як Kafka та WebSocket, відрізняється від синхронної
передачі даних через HTTP тим, що вона не потребує чекання на відповідь
від сервера.
Kafka – це система потокової обробки даних, яка дозволяє публікувати,
підписуватися та обробляти потокові дані в реальному часі. Вона дозволяє
створювати асинхронні потоки даних, де відправник (продюсер) публікує
повідомлення в «тему», а отримувач (споживач) може підписатися на цю
тему та отримувати дані незалежно від часу їх відправки [4].
Процес роботи з ApacheKafka в спрощеному вигляді можна описати
так:
1. Виробник створює повідомлення та відправляє його до вузла Kafka.
Створює повідомлення і відправляє його до сервера Kafka.Це повідомлення
потрапляє до брокера Kafka для подальшої обробки;
2. Брокер зберігає повідомлення у темі, на яку підписані споживачі.
Брокер Kafka приймає повідомлення від виробника та зберігає його у
відповідній темі (topic). Ця тема може мати кілька підписників, які будуть
отримувати повідомлення, коли вони будуть доступні;
3.Споживач отримує потрібні дані, роблячи запит до теми. Може
зробити запит до теми Kafka, який включає певний діапазон або тип
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 10
а
повідомлень, які він хоче отримати.Коли потрібні дані доступні у темі,
брокер Kafka передає їх споживачеві для подальшої обробки або
використання.
Такий процес роботи з ApacheKafka зображений на рисунку 1.2.
Рисунок 1.2 – Принцип роботи з ApacheKafka
Цей простий процес дозволяє ефективно передавати повідомлення між
додатками і системами за допомогою ApacheKafka, що робить його корисним
інструментом для розподіленого обміну даними.
WebSocket– це протокол зв'язку, який дозволяє встановлювати
двостороннє з'єднання між клієнтом та сервером через веб-сокет. Він
дозволяє відправляти дані між клієнтом та сервером в реальному часі без
необхідності постійних запитів клієнта до сервера [5]. Це особливо корисно
для реалізації функціоналу веб-сайтів, які потребують миттєвої взаємодії,
таких як чати, потокове відео тощо, принцип роботи зображено на
рисунку 1.3.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 11
а
Рисунок 1.3 –Принцип роботи WebSocket
Загалом, WebSocket є потужним засобом для забезпечення
інтерактивної комунікації між клієнтом та сервером у реальному часі, що
відкриває безліч можливостей для створення сучасних веб-додатків.
Протокол WebSocket існує як надбудова над TCP (протокол передачі
керованих даних). Специфікація цього протоколу визначає дві URI схеми для
вебсокетів: ws:// для нешифрованого з’єднання та wss:// відповідно — для
шифрованого. Комунікація за допомогою цього протоколу складається з
початкового хендшейку, що встановлює з’єднання, та подальшого обміну
даними між клієнтом та сервером.
Обмін даними відбувається у вигляді фреймів з заданим типом. Кожне
повідомлення може складатися з одного чи більше фреймів, які всі мають
однаковий тип. Такі типи включають текстові дані, бінарні дані та контрольні
фрейми, які не несуть корисної інформації, але передають службові сигнали
на рівні протоколу, наприклад, сигнал про необхідність закриття з'єднання.
В обох випадках, асинхронний підхід дозволяє клієнту та серверу
взаємодіяти без чекання на відповідь, що дозволяє покращити
продуктивність та швидкість обміну даними.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 12
а
1.2 Постановка задачі
Розробка архітектури передачі даних є важливою з кількох причин.
Добре спроектована архітектура дозволяє оптимізувати передачу даних,
зменшуючи накладні витрати мережі та час передачі. Ефективна архітектура
дозволяє швидко та надійно обмінюватися даними між різними
компонентами системи.
Правильно спроектована архітектура передачі даних легко
масштабується для врахування зростання обсягів даних та підвищення
навантаження на систему. Це робить її готовою для використання у великих
проектах або системах з високою відвідуваністю.
Архітектура передачі даних може бути спроектована з урахуванням
надійності, забезпечуючи механізми виявлення та відновлення помилок
передачі, а також забезпечуючи резервне копіювання даних.
Розробка архітектури передачі даних також дозволяє враховувати
аспекти безпеки, такі як захист даних від несанкціонованого доступу,
шифрування даних під час передачі та автентифікація користувачів.
Добре спроектована архітектура дозволяє забезпечити сумісність
інтерфейсів передачі даних, що полегшує інтеграцію з іншими системами та
послугами.
Отже, розробка архітектури передачі даних є ключовим етапом у
створенні ефективних, масштабованих, надійних та безпечних
інформаційних систем.
Мати розподілені системи між підрозділами є важливою з причин, що
нижчесистеми дозволяють підрозділам працювати незалежно один від
одного, забезпечуючи ефективнішу організацію роботи. Кожен підрозділ
може спеціалізуватися на конкретних завданнях або областях, що сприяє
оптимізації процесів та забезпеченню більшої продуктивності.
Розподілені системи легше адаптуються до змін у бізнес-середовищі,
оскільки кожен підрозділ може реагувати на потреби своєї конкретної галузі
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 13
а
без впливу на інші частини системи. Це дозволяє компаніям бути більш
гнучкими та швидко реагувати на зміни на ринку.
Розподілені системи дозволяють розміщувати ресурси (дані,
обчислювальну потужність тощо) там, де вони найбільш ефективно
використовуються. Наприклад, деякі дані можуть бути локалізовані на
місцевих серверах для забезпечення швидкого доступу, тоді як інші можуть
бути централізовані в хмарному середовищі для більшої доступності та
забезпечення резервного копіювання.
Дозволяють розподіляти ризики та зменшувати ймовірність
виникнення серйозних проблем. У випадку збою або неполадок у одному
підрозділі, інші можуть продовжувати працювати без перебоїв.
Системи можуть розподіляти навантаження на мережу та сервери,
зменшуючи концентрацію трафіку та забезпечуючи більшу доступність.
Узагальнюючи, розподілені системи дозволяють компаніям бути більш
гнучкими, ефективними та адаптивними до змін у бізнес-середовищі, що
допомагає їм досягати своїх стратегічних цілей та забезпечувати стабільний
розвиток.
Розробка асинхронних систем передачі даних має низку переваг, які
важливо враховувати, вони дозволяють обробляти більше запитів і операцій
без блокування потоку виконання. Це означає, що програма може
продовжувати виконувати інші дії, поки одна операція чекає на завершення,
що веде до підвищення продуктивності та швидкості виконання.
Системи дозволяють ефективно використовувати ресурси, оскільки не
блокують потоки виконання, а замість цього відправляють задачі у чергу на
виконання. Це дозволяє оптимально розподіляти обчислювальні ресурси та
зменшує витрати на управління потоками.
Легше масштабувати для обробки великого обсягу даних та запитів.
Завдяки використанню не блокуючих операцій та ефективному
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 14
а
використанню ресурсів, система може легко адаптуватися до зростання
обсягу роботи.
Деякі задачі вимагають миттєвої відповіді або обробки даних у
реальному часі. Асинхронні системи дозволяють обробляти такі задачі
швидко та ефективно, що робить їх ідеальними для додатків, які працюють у
реальному часі, наприклад, онлайн-ігор або фінансових систем.
Асинхронні системи можуть працювати більш ефективно у випадках,
коли є затримки у відповіді від зовнішніх ресурсів, таких як бази даних чи
зовнішні API. Замість очікування відповіді, система може продовжувати
виконувати інші завдання, що дозволяє оптимізувати час виконання та
зменшує ризик блокування.
Отже, розробка асинхронних систем передачі даних дозволяє
підвищити продуктивність, ефективно використовувати ресурси, забезпечити
скалабельність та зменшити залежність від зовнішніх факторів, що робить їх
важливими для багатьох сучасних додатків і систем.
1.3 Висновки до розділу 1
Аналізуючи існуючі системи та принципи їх роботи, стає очевидним,
що передача даних є критично важливим елементом сучасних технологій. Це
не лише забезпечує обмін інформацією між різними системами та
користувачами, але й дозволяє оптимізувати ресурси, забезпечуючи
ефективність та продуктивність роботи.
Розробка архітектури передачі даних, розподілених систем та
асинхронних систем дозволяє оптимізувати цей процес, забезпечуючи
ефективну організацію, гнучкість та масштабованість. Розподілені системи
між підрозділами дозволяють зменшити ризики, оптимізувати використання
ресурсів та забезпечити адаптивність до змін у бізнес-середовищі.
Асинхронні системи передачі даних забезпечують ефективну обробку
та відправку інформації, підвищуючи продуктивність та забезпечуючи
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 15
а
реальний час відповіді. Загалом, ці принципи та технології відіграють
важливу роль у розробці сучасних систем, допомагаючи компаніям досягати
своїх стратегічних цілей та забезпечувати стабільний розвиток в умовах
постійно змінного бізнес-середовища.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 16
а
2ВИБІР ТЕХНОЛОГІЇ ТА ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ
РОЗРОБКИ СИСТЕМИ
2.1 Огляд існуючих технологій
HTTP (HypertextTransferProtocol) є протоколом передачі даних, який
використовується для обміну інформацією між веб-браузерами та веб-
серверами у всесвітній мережі Інтернет. Він є основним засобом взаємодії
між клієнтськими та серверними системами в Інтернеті та забезпечує
передачу гіпертекстових документів, таких як веб-сторінки, зображення,
відео та інші ресурси.
HTTP базується на моделі клієнт-сервер, де клієнти (веб-браузери або
інші агенти) надсилають запити на сервери, а сервери обробляють ці запити
та надсилають відповіді. Протокол передає дані у вигляді текстових
повідомлень, які складаються з трьох основних елементів: запит, заголовок
та тіло.
Основні методи HTTP включають GET, POST, PUT, DELETE, які
використовуються для різних типів операцій з ресурсами на сервері. GET
використовується для отримання ресурсів, POST для відправки даних на
сервер, PUT для зміни або створення ресурсів, а DELETE для видалення
ресурсів [6].
HTTP також підтримує ряд інших методів, заголовків та статусів, які
використовуються для керування та контролю передачі даних. Наприклад,
заголовки можуть містити інформацію про тип передаваних даних,
кодування, кешування тощо.
Одним з основних обмежень HTTP є відкритий характер передачі
даних, що робить його вразливим до перехоплення та модифікації з боку
зловмисників. Тому для забезпечення безпеки передачі конфіденційної
інформації зазвичай використовується HTTPS - захищена версія протоколу
HTTP, яка використовує шифрування для захисту даних під час передачі.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 17
а
Переваги протоколу HTTP включають наступне:
1. Може бути легко реалізований разом з іншими протоколами в Інтернеті
або в інших мережах, що робить його універсальним і зручним для
використання;
2. HTTP-сторінки зберігаються в комп'ютерних і інтернет-кешах, що
дозволяє їм швидко завантажуватися та бути доступними для
користувачів;
3. Незалежно від платформи, HTTP дозволяє легко переносити програми
на різні операційні системи;
4. Протокол не вимагає постійної підтримки під час виконання, що
полегшує його використання та розгортання;
5. HTTP може бути використаний через брандмауери, що дозволяє його
використання в глобальних програмах та системах;
6. Не потребує встановлення постійного з'єднання, що дозволяє уникнути
мережевих накладних витрат на створення та підтримку стану сеансу і
забезпечує безперервну передачу інформації.
Обмеження протоколу HTTP включають наступне:
1. HTTP передає дані у відкритому вигляді, що означає, що будь-хто, хто
має доступ до мережі, може переглядати передану інформацію,
включаючи конфіденційний контент;
2. Відсутність вбудованих механізмів захисту від зміни даних може
створити загрозу цілісності інформації. Це означає, що зловмисники
можуть модифікувати вміст передаваних даних без спеціальних
обмежень;
3. У зв'язку з відсутністю шифрування, хтось, хто перехоплює запити,
може отримати доступ до чутливої інформації, такої як імена
користувачів і паролі, що може призвести до компрометації безпеки
даних.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 18
а
Таким чином, HTTP є ключовим протоколом для передачі даних в
Інтернеті, проте його використання слід доповнювати HTTPS для
забезпечення безпеки і конфіденційності переданої інформації.
WebSocket– це протокол зв'язку, який надає двосторонній,
повнодуплексний канал для обміну даними між клієнтом і сервером через
єдине постійне з'єднання [7]. Він створений для забезпечення більш
ефективної комунікації в реальному часі, особливо в веб-додатках, які
вимагають швидкої і безперервної передачі даних, таких як чати, онлайн-
ігри, біржові торгівлі тощо.
WebSocket забезпечує двосторонню передачу даних одночасно, що
дозволяє клієнту і серверу надсилати повідомлення один одному в будь-який
момент часу.
Після встановлення з'єднання між клієнтом і сервером, воно
залишається відкритим до явного закриття однією зі сторін, що зменшує
накладні витрати на встановлення нових з'єднань.
На відміну від традиційних HTTP-запитів, де кожен запит
супроводжується заголовками, WebSocket обмінюється даними з
мінімальними накладними витратами, що покращує продуктивність.
WebSocket може передавати як текстові дані (наприклад, JSON), так і
бінарні дані.
Процес встановлення з'єднання WebSocket починається з HTTP-запиту
під назвою "handshake". Клієнт надсилає запит на сервер з проханням
перейти на WebSocket-з'єднання. Приклад такого запиту може виглядати так
на рисунку 2.1.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 19
а
Рисунок 2.1 – Приклад запиту перейти на WebSocket-з'єднання
Сервер відповідає позитивно, якщо підтримує WebSocket-з'єднання
(рисунок 2.2).
Рисунок 2.2 – Позитивна відповідь сервера
Після успішного хендшейку HTTP-з'єднання перетворюється на
WebSocket-з'єднання. Дані в WebSocket передаються у вигляді фреймів.
Кожне повідомлення може складатися з одного або кількох фреймів. Існують
кілька типів фреймів.
Текстові фрейми – для передачі текстових даних (наприклад, JSON).
Бінарні фрейми – для передачі бінарних даних.
Контрольні фрейми – використовуються для управління з'єднанням,
наприклад, для закриття з'єднання або перевірки зв'язку (ping/pong).
Кожне повідомлення фрагментується на фрейми, які можуть бути
надіслані по черзі. Фрейми містять метадані, такі як тип даних і контрольна
інформація.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 20
а
Переваги WebSocket полягають в зменшення накладних витрат на
встановлення з'єднання та передачу заголовків, що забезпечує швидку і
стабільну комунікацію. Постійне з'єднання дозволяє досягти мінімальної
затримки між відправкою запиту і отриманням відповіді. Підходить для
додатків, які вимагають миттєвої передачі даних у реальному часі.
WebSocket часто використовується в таких додатках, як чат-додатки, де
забезпечують миттєве спілкування між користувачами. Онлайн-ігри де дають
змогу гравцям взаємодіяти в режимі реального часу. Фінансові біржі, де
підтримують швидку передачу даних про торги і котирування [7].
Сповіщення у реальному часі, де інформують користувачів про важливі події
миттєво.
WebSocket є потужним інструментом для побудови інтерактивних і
чуйних веб-додатків, що потребують швидкої та ефективної передачі даних у
реальному часі. Його здатність підтримувати постійне з'єднання і мінімальні
накладні витрати робить його ідеальним для додатків, де швидкість і
продуктивність є критичними факторами.
ApacheKafka– це розподілена платформа обробки потоків подій, яка
дозволяє публікувати, підписуватися, зберігати та обробляти потоки записів
у реальному часі. Вона була розроблена в LinkedIn і відкрита для
громадськості в 2011 році як проект з відкритим вихідним кодом. Наразі
ApacheKafka є одним з основних компонентів багатьох сучасних архітектур
обробки даних.
Основні компоненти Kafka:
1. Продюсери (Producers). Відповідають за публікацію даних (подій) у
Kafka. Продюсер відправляє повідомлення до певного топіку;
2. Топіки (Topics). Логічні канали, через які продюсери надсилають дані.
Кожен топік може мати декілька підписників (споживачів);
3. Споживачі (Consumers). Читають дані з топіків. Споживачі можуть
бути об'єднані в групи для обробки даних паралельно;
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 21
а
4. Брокери (Brokers). Сервери, які складають кластер Kafka і відповідають
за зберігання даних та обслуговування продюсерів і споживачів;
5. Кластер (Cluster). Група брокерів, яка забезпечує масштабованість і
стійкість до збоїв.
Kafka здатна обробляти сотні тисяч повідомлень в секунду завдяки
своїй розподіленій архітектурі. Дані зберігаються в кластері на декількох
брокерах, що забезпечує стійкість до збоїв одного або декількох серверів.
Гарантує доставку повідомлень, зберігаючи їх на диску та реплікуючи між
брокерами. Кількість брокерів і розмір кластеру можуть бути збільшені без
зупинки системи, що дозволяє обробляти все більші обсяги даних. Kafka
може зберігати дані протягом тривалого часу, що дозволяє відтворювати
потоки подій та обробляти їх повторно.
Робота полягає в тому, що продюсери створюють повідомлення та
відправляють їх у топіки. Повідомлення можуть містити будь-які дані у
форматі ключ-значення.
Кожен топік розділений на кілька розділів (partitions), які
розподіляються між брокерами в кластері. Це забезпечує паралельну обробку
даних і підвищує пропускну здатність.
Споживачі підписуються на топіки і зчитують повідомлення з них.
Споживачі можуть працювати в групах, де кожна група отримує унікальний
набір розділів для обробки. Це дозволяє масштабувати обробку даних на
декілька споживачів [8].
Застосування Kafka різноманітне, відстеження та обробка подій у
реальному часі, таких як кліки користувачів, транзакції та інші
активності.Об'єднання даних з різних джерел у єдину платформу для
подальшого аналізу та обробки. Збір і аналіз даних з різних систем для
моніторингу та виявлення аномалій. Централізоване збирання та зберігання
логів з різних сервісів для подальшого аналізу.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 22
а
Переваги Kafka полягають, що реплікація даних та зберігання на диску
забезпечують стійкість до збоїв. Може обробляти великі обсяги даних з
мінімальною затримкою. Може бути легко масштабована для обробки
зростаючих обсягів даних. Можливість інтеграції з різними системами та
платформами через численні конектори та API.
ApacheKafka є потужною платформою для обробки потоків подій у
реальному часі, яка забезпечує надійну та ефективну передачу даних між
різними компонентами системи. Завдяки своїй високій продуктивності,
масштабованості та стійкості до збоїв, Kafka стала однією з
найпопулярніших технологій для побудови розподілених систем обробки
даних.
GraphQL– це мова запитів для API та середовище виконання для
обробки цих запитів з ваших існуючих даних. Вона була розроблена
Facebook у 2012 році і стала загальнодоступною у 2015 році як проект з
відкритим вихідним кодом. GraphQL надає більш ефективний, потужний та
гнучкий підхід до роботи з API порівняно з традиційними REST API [9].
Основні концепції GraphQL, що структуру даних, які можна запитувати
через GraphQL. Схема складається з типів та полів, які описують можливі
запити та відповіді. Визначають форму та структуру даних у GraphQL.
ObjectType – визначає набір полів, які можуть бути запитані.
ScalarType–прості типи даних, такі як `String`, `Int`, `Float`, `Boolean` та
`ID`.
EnumType–список можливих значень.
InputType–використовується для передавання об'єктів як аргументи в
запитах.
Запити (Queries) – визначають, які дані необхідно отримати з сервера.
Запити можуть бути складними і включати вкладені поля.
Мутації (Mutations) – використовуються для зміни даних на сервері
(створення, оновлення, видалення).
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 23
а
Підписки (Subscriptions) – дозволяють клієнтам отримувати оновлення в
реальному часі при зміні даних на сервері.
Як працює GraphQL зображено на рисунку 2.3.
Рисунок 2.3 – Принцип роботи GraphQL
Переваги GraphQL:
1. Гнучкість у запитах. Клієнт може запитувати лише ті дані, які йому
потрібні, що зменшує обсяг передаваних даних і підвищує
продуктивність;
2. Ефективність. Один запит може отримувати дані з кількох ресурсів
одночасно, що зменшує кількість запитів до сервера;
3. Типізація. Схема GraphQL строго типізована, що допомагає уникати
помилок і забезпечує інтуїтивно зрозумілу документацію;
4. Підтримка реального часу. Підписки дозволяють отримувати
оновлення в реальному часі, що особливо корисно для додатків з
живими даними.
Недоліки GraphQL:
1. Складність. Створення і підтримка схеми може бути складнішим, ніж
у REST API;
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 24
а
2. Кешування. Кешування запитів у GraphQL складніше реалізувати,
ніж у REST API;
3. Безпека. Необхідно ретельно налаштовувати доступ до даних,
оскільки клієнти можуть запитувати складні структури даних.
GraphQL активно використовується у різних типах додатків, дозволяє
ефективно отримувати необхідні дані без зайвих запитів. Забезпечує
гнучкість і швидкість доступу до даних. Дозволяє об'єднати дані з різних
мікросервісів в один запит [10].
GraphQL– це потужний інструмент для створення API, який забезпечує
гнучкість, ефективність та типізацію запитів. Він дозволяє клієнтам точно
визначати, які дані їм потрібні, що зменшує обсяг передаваних даних і
покращує продуктивність додатків. Завдяки своїм перевагам, GraphQL стає
все більш популярним серед розробників, які прагнуть створювати сучасні,
масштабовані та ефективні системи обміну даними.
2.2 Обґрунтування вибору
Вибір технологій для розробки системи обміну інформацією між
підрозділами підприємства є критично важливим кроком, який впливає на
ефективність і продуктивність всієї організації
Правильно обрані технології забезпечують швидку та надійну передачу
інформації між департаментами, що дозволяє зменшити час на обробку
запитів та прийняття рішень. Це сприяє підвищенню загальної ефективності
робочих процесів і мінімізує ймовірність виникнення затримок та
непорозумінь.
Сучасні технології комунікації, такі як корпоративні месенджери,
відеоконференції та інші інструменти, забезпечують безперебійний обмін
інформацією навіть у випадках, коли співробітники працюють віддалено або
знаходяться в різних часових поясах. Це особливо важливо в умовах
глобалізації бізнесу.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 25
а
Вибір надійних технологій з високим рівнем захисту даних є
критичним для збереження конфіденційності інформації, яка передається між
департаментами. Це допомагає запобігти витокам даних та
несанкціонованому доступу до корпоративної інформації.
Технології, що використовуються для комунікації, повинні бути
масштабованими та гнучкими, щоб мати можливість адаптуватися до
зростаючих потреб підприємства. Вони повинні легко інтегруватися з
іншими системами та бути готовими до розширення функціональності
відповідно до розвитку компанії.
Правильний вибір технологій сприяє покращенню колаборації між
співробітниками, дозволяючи їм ефективніше працювати над спільними
проектами, обмінюватися ідеями та вирішувати проблеми в реальному часі.
Це допомагає створити більш згуртовану та продуктивну команду.
Інтеграція автоматизованих систем комунікації може значно знизити
операційні витрати та зекономити час, який витрачається на рутинні
завдання. Це дозволяє співробітникам зосередитися на більш важливих
стратегічних питаннях.
Завдяки швидкому доступу до актуальної інформації, керівництво та
співробітники можуть приймати більш обґрунтовані та своєчасні рішення. Це
підвищує адаптивність підприємства до змін ринкових умов та
конкурентного середовища.
Вибір технологій для системи комунікації між департаментами
підприємства є надзвичайно важливим елементом, який впливає на всі
аспекти діяльності організації. Правильний підхід до цього вибору може
забезпечити значні переваги, включаючи покращення ефективності, безпеки,
колаборації та загальної продуктивності підприємства.
Синхронна комунікація передбачає обмін інформацією в реальному
часі, коли всі учасники одночасно беруть участь у процесі спілкування. Цей
вид комунікації дозволяє отримати негайний зворотній зв'язок, що
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 26
а
прискорює процес прийняття рішень і сприяє більш ефективній командній
роботі. Синхронне спілкування також допомагає зменшити непорозуміння,
оскільки учасники можуть одразу уточнювати та пояснювати інформацію.
Асинхронна комунікація не вимагає одночасної участі всіх учасників,
що дає змогу співробітникам спілкуватися в зручний для них час. Це
особливо корисно для команд, що працюють у різних часових поясах або
мають гнучкий графік роботи. Асинхронне спілкування дозволяє учасникам
ретельно продумувати свої відповіді, що може підвищити якість обговорень і
прийняття рішень. Воно також сприяє документуванню процесу спілкування,
оскільки всі повідомлення та файли зберігаються і можуть бути переглянуті в
будь-який момент.
Поєднання синхронної та асинхронної комунікації може забезпечити
максимальну ефективність. Синхронна комунікація підходить для
термінових питань та активних обговорень, тоді як асинхронна дозволяє
глибше опрацювати інформацію та забезпечити гнучкість у спілкуванні.
Використання обох підходів допомагає створити збалансовану систему
комунікації, що відповідає потребам різних департаментів та забезпечує
безперебійну роботу підприємства.
Для забезпечення як синхронної, так і асинхронної комунікації між
департаментами підприємства можна використовувати GraphQL, який
підтримує обидва способи спілкування.
GraphQL є потужним інструментом, що дозволяє ефективно
організувати як синхронну, так і асинхронну комунікацію всередині
підприємства. У випадку синхронної комунікації, GraphQL дозволяє клієнтам
запитувати конкретні дані, які їм потрібні, і отримувати їх у реальному часі.
Це забезпечує швидкий зворотний зв'язок і дозволяє оперативно реагувати на
запити. Наприклад, при запиті даних про статус проекту чи ресурсів,
відповідні департаменти можуть отримати актуальну інформацію негайно.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 27
а
Для асинхронної комунікації GraphQL використовує механізми
підписки (subscriptions). Підписки дозволяють клієнтам отримувати
оновлення даних у реальному часі, без потреби постійно запитувати сервер.
Це означає, що коли певні дані змінюються, всі підписані клієнти
автоматично отримують повідомлення про ці зміни. Такий підхід є ідеальним
для відстеження довготривалих процесів або моніторингу подій, що
відбуваються протягом певного часу.
Переваги використання GraphQL:
1. Гнучкість запитів. Користувачі можуть запитувати тільки ті дані, які
їм потрібні, що знижує навантаження на мережу і сервери;
2. Ефективність. Можливість об'єднання багатьох запитів у один, що
зменшує кількість запитів до сервера і прискорює обробку інформації;
3. Реальний час. Підписки на зміни даних дозволяють забезпечити
своєчасне отримання актуальної інформації;
4. Централізоване управління даними. Використання єдиного API для
доступу до різних джерел даних спрощує управління і підвищує
консистентність даних.
GraphQL є універсальним інструментом, який забезпечує як синхронну,
так і асинхронну комунікацію між департаментами підприємства.
Використання GraphQL дозволяє оптимізувати обмін інформацією,
забезпечити актуальність даних у реальному часі та підвищити загальну
ефективність роботи організації.
Серверні частини підрозділів компанії можна розробити з
використанням мови програмування Node.js, що забезпечує низку переваг
для ефективної та масштабованої комунікації між департаментами.
Node.js використовує асинхронну, неблокуючу модель вводу-виводу,
що дозволяє обробляти велику кількість запитів одночасно без значного
впливу на продуктивність. Це робить Node.js ідеальним вибором для
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 28
а
створення серверних частин, які мають забезпечувати ефективну обробку
запитів від різних департаментів у реальному часі.
Використання JavaScript як на клієнтській, так і на серверній стороні
спрощує процес розробки, дозволяючи використовувати один і той же стек
технологій для всього додатка. Це сприяє кращій взаємодії між командами
розробників, полегшує обмін знаннями та прискорює процес розробки і
впровадження нових функцій.
Node.js має велику екосистему модулів і пакетів, доступних через npm
(NodePackageManager), що дозволяє швидко додавати необхідні
функціональні можливості до серверної частини. Це зменшує час на
розробку та впровадження нових рішень.
Node.js підтримує модульну архітектуру, що дозволяє створювати
окремі, незалежні компоненти для кожного підрозділу. Це забезпечує
гнучкість у розробці та дозволяє легко масштабувати систему, додаючи нові
модулі або оновлюючи існуючі без порушення роботи інших частин системи.
Node.js підтримує інтеграцію з GraphQL через Apollo Server, що
забезпечує потужний і зручний інструментарій для створення гнучких та
масштабованих API. Використання Node.js разом з Apollo Server для
реалізації GraphQL API надає низку переваг для розробки серверних частин
підрозділів компанії.
Apollo Server легко інтегрується з Node.js, забезпечуючи просте і
швидке налаштування GraphQL API. Це дозволяє розробникам швидко
розпочати роботу та зосередитися на реалізації бізнес-логіки, а не на
налаштуванні інфраструктури.
Apollo Server надає вбудовані інструменти для моніторингу
продуктивності, налагодження та документації API, що значно полегшує
процес розробки та підтримки. GraphQLPlayground, інтегрований з Apollo
Server, дозволяє розробникам інтерективно виконувати запити та
тестувати API.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 29
а
Інтеграція Node.js з Apollo Server для використання GraphQL API є
ефективним рішенням для створення сучасних, гнучких та масштабованих
серверних частин підприємства. Це забезпечує простоту налаштування,
гнучкість у розробці, підтримку реального часу та високий рівень безпеки,
що робить його ідеальним вибором для реалізації комунікаційних рішень між
підрозділами компанії.
У різних підрозділів компанії можуть бути різні вимоги до зберігання
даних, що часто призводить до використання різних баз даних. Однак, для
спрощення процесу розробки та забезпечення узгодженості, можна обрати
одну базу даних, таку як MySQL, яка пропонує низку переваг.
MySQL є однією з найпопулярніших реляційних баз даних у світі. Її
універсальність дозволяє використовувати MySQL для різних типів додатків,
від невеликих проектів до великих корпоративних систем. Це означає, що
вона може задовольнити потреби різних підрозділів компанії. Використання
єдиної бази даних сприяє спрощенню процесу розробки, оскільки
розробники можуть працювати з однаковими інструментами та підходами до
зберігання даних. Це також зменшує час на навчання та адаптацію, оскільки
команди не потребують опанування кількох різних систем.
MySQL відома своєю простотою встановлення, налаштування та
адміністрування. Завдяки великій кількості документації, інструментів та
спільноти підтримки, розробники та адміністратори можуть швидко
знаходити рішення для своїх задач. Це значно знижує витрати на
обслуговування та підтримку системи, що є важливим фактором для будь-
якої компанії.
Однією з ключових переваг MySQL є її висока продуктивність та
надійність. Вона забезпечує швидку обробку запитів та стабільну роботу
навіть при великих навантаженнях. Це дозволяє підрозділам компанії
ефективно обробляти великі обсяги даних та забезпечувати високу швидкість
доступу до інформації. Крім того, MySQL підтримує масштабованість, що
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 30
а
дозволяє компанії розширювати свою інфраструктуру відповідно до
зростання бізнесу без значних зусиль.
Важливою особливістю MySQL є її підтримка стандарту SQL, що
забезпечує сумісність з багатьма іншими системами та інструментами. Це
дозволяє легко інтегрувати MySQL з існуючими рішеннями та забезпечувати
безперебійну взаємодію між різними підрозділами компанії. Також, MySQL
підтримує функціональність реплікації та резервного копіювання, що сприяє
забезпеченню безпеки та збереженню даних.
Вибір MySQL як єдиної бази даних для всіх підрозділів компанії може
значно спростити процес розробки, зменшити витрати на обслуговування та
забезпечити високу продуктивність і надійність системи. Це дозволяє
зосередитися на розвитку бізнесу, а не на вирішенні технічних проблем,
пов'язаних з використанням різних баз даних.
2.3 Висновки до розділу 2
Було розглянуто кілька ключових технологій, які використовуються
для передачі даних та забезпечення зв'язку між компонентами програмних
систем. HTTP є базовим протоколом для передачі гіпертекстових даних у
мережі Інтернет, який забезпечує зв'язок між клієнтом і сервером. Websocket
є технологією, що дозволяє з'єднання між клієнтом і сервером для обміну
даними в реальному часі. Kafka представляє собою потужну та масштабовану
платформу для обробки потокових даних та побудови розподілених систем
обробки даних. GraphQL - це мова запитів та середовище виконання запитів
для роботи з даними, яке дозволяє клієнтам запитувати лише ті дані, які їм
потрібні, та отримувати їх у зручному форматі.
Обґрунтування вибору цих технологій базується на їхній ефективності,
масштабованості та здатності відповідати вимогам сучасних програмних
систем. HTTP, Websocket, Kafka та GraphQL надають широкі можливості для
розробки різноманітних застосувань, включаючи веб-додатки, мобільні
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 31
а
додатки, IoT рішення та багато іншого. Їх використання дозволяє
розробникам ефективно створювати масштабовані та високопродуктивні
системи забезпечення зв'язку та обробки даних, що відповідають вимогам.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 32
а
3 РОЗРОБКА СИСТЕМИ ОБМІНУ ІНФОРМАЦІЄЮМІЖ
ПІДРОЗДІЛАМИ ПІДПРИЄМСТВ З ВИКОРИСТАННЯМ
ТЕХНОЛОГІЇ GraphQL
3.1 Структура системи
Для реалізації теми було розроблено систему відвантаження замовлень
для інтернет магазину, яка включає два основні підрозділи: підрозділ
приймання замовлень та підрозділ відвантаження замовлень. Ця система
забезпечує ефективне управління процесами від моменту отримання
замовлення до його доставки клієнту.
Підрозділ приймання замовлень відповідає за обробку вхідних
замовлень від клієнтів. Цей підрозділ займається перевіркою наявності
товарів на складі, підтвердженням замовлень та передачею їх до підрозділу
відвантаження. Завдяки використанню сучасних технологій, система
автоматично перевіряє наявність товару, оновлює статус замовлення та
інформує клієнтів про підтвердження або будь-які зміни у їхніх замовленнях.
Це забезпечує швидкий та ефективний процес обробки замовлень,
зменшуючи ймовірність помилок та затримок.
Підрозділ відвантаження замовлень відповідає за підготовку товарів до
відправки, пакування та організацію доставки до клієнтів. Цей підрозділ
отримує підтверджені замовлення від підрозділу приймання, збирає
необхідні товари зі складу, упаковує їх відповідно до стандартів компанії та
передає кур'єрським службам для доставки. Система відвантаження
замовлень дозволяє автоматично генерувати накладні, етикетки для
відправки та інші необхідні документи, що значно спрощує процес логістики.
Розробка та впровадження системи відвантаження замовлень для
інтернет-магазину є важливим кроком до оптимізації бізнес-процесів та
забезпечення конкурентоспроможності на ринку. Завдяки ефективній роботі
підрозділів приймання та відвантаження, інтернет-магазин може швидше та
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 33
а
якісніше обслуговувати своїх клієнтів, що сприяє підвищенню їхньої
задоволеності та лояльності.
Взаємодія між підрозділами приймання та відвантаження замовлень в
інтернет-магазині здійснюється за допомогою GraphQL. Використання
GraphQL забезпечує ефективну та гнучку комунікацію між цими
підрозділами, дозволяючи їм обмінюватися необхідною інформацією у
реальному часі.Структура розробленої системи зображена на рисунку 3.1.
Підрозділ приймання замовлень
Інтерфейс інтернет Модуль оброблення
магазину замовлень
БД
GraphQLінтерфейс
GraphQLінтерфейс
БД
Модуль комунікації Модуль оброблення
з “Новою поштою” замовлень
Підрозділ відвантаження замовлень
Рисунок 3.1 – Структура розробленої системи
GraphQL дозволяє підрозділу приймання замовлень швидко та точно
передавати дані про підтверджені замовлення до підрозділу відвантаження.
Завдяки цьому, інформація про кожне замовлення, включаючи деталі товарів,
кількість, статус оплати та адреси доставки, миттєво стає доступною для
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 34
а
підрозділу відвантаження. Це забезпечує швидке збирання, пакування та
підготовку замовлень до відправки.
З іншого боку, підрозділ відвантаження замовлень використовує
GraphQL для постійного оновлення статусу замовлень. Всі дії, пов'язані з
обробкою замовлення, такі як збір товарів, пакування, передача кур'єрській
службі та доставка, синхронізуються в системі. Це дозволяє підрозділу
приймання замовлень та клієнтам відслідковувати поточний стан замовлення
у режимі реального часу.
GraphQL надає можливість кожному підрозділу запитувати саме ті
дані, які їм необхідні, що зменшує навантаження на мережу та покращує
продуктивність системи. Це також знижує ризик помилок, оскільки
інформація передається і обробляється централізовано та узгоджено.
Використання GraphQL для взаємодії між підрозділами приймання та
відвантаження замовлень сприяє покращенню ефективності бізнес-процесів в
інтернет-магазині. Це дозволяє підвищити швидкість обробки замовлень,
зменшити час доставки та забезпечити високу якість обслуговування
клієнтів. Завдяки GraphQL, інтернет-магазин може надавати клієнтам точну і
актуальну інформацію про їхні замовлення, що сприяє підвищенню
задоволеності клієнтів та їхньої лояльності.
Система підписок в GraphQL - це механізм, який дозволяє підрозділам
отримувати інформацію про оновлення в режимі реального часу. Вона
дозволяє підписуватися на певні події або дані і автоматично отримувати
сповіщення в разі їх зміни.
У контексті розробленої системи, підрозділи можуть використовувати
систему підписок в GraphQL для отримання оновлень про зміни в
замовленнях, статусі товарів на складі, або будь-яких інших подій, які
можуть бути важливими для їхньої роботи.
Як це працює? Коли певні дані змінюються в системі, GraphQL
надсилає повідомлення всім підрозділам, які підписані на ці дані. Це може
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 35
а
відбуватися за допомогою WebSocket з'єднання, що дозволяє підтримувати
постійне з'єднання між клієнтом і сервером і передавати дані в обидва
напрямки в реальному часі.
Таким чином, коли, наприклад, замовлення змінює свій статус або
новий товар додається на склад, GraphQL сервер автоматично надсилає
оновлену інформацію всім підрозділам, які підписалися на ці події. Це
дозволяє підрозділам завжди мати актуальну інформацію та швидко
реагувати на будь-які зміни.
Використання системи підписок в GraphQL спрощує процес отримання
оновлень для підрозділів компанії, забезпечуючи швидку та ефективну
комунікацію між ними в реальному часі. Це дозволяє підвищити
продуктивність та забезпечити більш ефективне управління бізнес-
процесами.
У системі GraphQL підрозділи можуть отримувати тільки потрібну
інформацію, без необхідності отримувати повний об’єкт ресурсу завдяки
функціоналу, що називається "фрагменти". Фрагменти дозволяють клієнтам
визначати, які саме поля об’єкта їм потрібні, і запитувати лише цю
інформацію від сервера.
Це особливо корисно в ситуаціях, коли об’єкт має багато полів, але
клієнт потребує лише деякі з них [11]. Наприклад, у випадку з інтернет-
магазином, коли підрозділ відвантаження замовлень хоче отримати
інформацію тільки про товари, які потрібно відправити, вони можуть
скористатися фрагментами, щоб запитувати лише поля, які стосуються цих
товарів (наприклад, назва товару, кількість одиниць, ідентифікатор тощо), а
інші дані, такі як опис, ціна, виробник і т. д., не будуть запитуватися і не
будуть включені в відповідь.
Це дозволяє оптимізувати передачу даних через мережу, зменшує обсяг
трафіку та покращує продуктивність системи. Крім того, використання
фрагментів дозволяє зберігати структуру запитів більш організованою та
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 36
а
зрозумілою, оскільки клієнт може явно вказати, які саме дані йому потрібні
для кожного типу запиту.
Отже, функціонал фрагментів у GraphQL дозволяє підрозділам
компанії отримувати лише ту інформацію, яка їм необхідна для виконання
їхніх завдань, що сприяє ефективнішій роботі та оптимізації використання
ресурсів [12].
У системі існують модулі обробки замовлень в обох підрозділах, які
виконують однакову функцію, але мають різний принцип роботи, залежно
від конкретних потреб та процесів кожного підрозділу.
У підрозділі приймання замовлень модуль обробки замовлень
базується на принципі автоматизованої перевірки та підтвердження
замовлень. Цей модуль отримує вхідні замовлення від клієнтів, перевіряє
їхню достовірність та наявність товарів на складі, а потім автоматично
підтверджує замовлення та передає інформацію до модуля відвантаження
замовлень для подальшої обробки. Цей принцип роботи спрощує процес
обробки замовлень, зменшує час, необхідний для їхнього оброблення, і
забезпечує швидку реакцію на замовлення в режимі реального часу.
У підрозділі відвантаження замовлень модуль обробки замовлень
працює на основі принципу оптимізованого управління запасами та
логістичними процесами. Цей модуль отримує підтверджені замовлення від
модуля приймання замовлень, забезпечує збір необхідних товарів зі складу та
їхнє відправлення до клієнтів. Даний модуль використовує алгоритми
оптимізації запасів, які дозволяють ефективно розподіляти товари на складі
та швидко формувати замовлення. Це допомагає зменшити час підготовки
замовлень до відправлення, забезпечує точність та повноту замовлень, а
також оптимізує використання складського простору та ресурсів.
Отже, модулі обробки замовлень в обох підрозділах системи
виконують однакову функцію - обробку та виконання замовлень, але вони
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 37
а
можуть мати різний принцип роботи, що відповідає специфіці кожного
підрозділу та його потребам.
В обох підрозділах компанії використовується власна база даних, що
зберігає тільки потрібну для підрозділу інформацію. Це дозволяє
оптимізувати роботу кожного підрозділу та забезпечує високу ефективність в
управлінні даними.
Використання власних баз даних для кожного підрозділу дозволяє
підтримувати високий рівень ізоляції даних, забезпечує безпеку та
конфіденційність інформації та дозволяє кожному підрозділу працювати з
даними в найбільш оптимальний спосіб для своїх потреб. Такий підхід
допомагає забезпечити ефективну роботу кожного підрозділу компанії та
підтримує високу продуктивність управління бізнес-процесами.
Розроблена система використовує мікросервісну архітектуру, що
дозволяє розділити функціональність на невеликі незалежні компоненти, які
називаються мікросервісами. Кожен мікросервіс відповідає за виконання
конкретної функції або набору функцій, і може бути розгорнутий,
масштабований та оновлюваний незалежно від інших сервісів.
Такий підхід дозволяє створювати більш гнучкі та масштабовані
системи, оскільки різні частини системи можуть розвиватися незалежно одна
від одної. Крім того, мікросервісна архітектура сприяє полегшенню
розгортання та управління окремими компонентами, а також забезпечує
підвищену надійність та стабільність системи в цілому [13].
Однією з переваг такої архітектури є можливість інтеграції розробленої
системи в будь-який існуючий інтернет-магазин. Будучи розділеним на
невеликі мікросервіси, кожен з яких відповідає за певну функціональність
(наприклад, обробку замовлень, управління запасами, авторизацію
користувачів тощо), система може бути інтегрована в існуючу
інфраструктуру магазину без значних змін у вже існуючому коді.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 38
а
Такий підхід дозволяє підприємствам легко розширювати та
модернізувати їхні інтернет-магазини, додаючи нові функціональність або
вдосконалюючи існуючі, не завдаючи шкоди загальній архітектурі системи.
В результаті, компанії можуть ефективно використовувати розроблену
систему для підвищення продуктивності та конкурентоспроможності їхніх
інтернет-магазинів.
3.2 Опис функцій системи
Основною функцією розробленої системи є опрацювання замовлень,
що створені через інтернет-магазин, та автоматичне відвантаження цих
замовлень. Це означає, що система відповідає за приймання, обробку та
відправлення замовлень від клієнтів з мінімальною участю людини.
Коли клієнт робить замовлення через інтернет-магазин, дані про це
замовлення автоматично надходять до системи. Розроблена система
опрацьовує це замовлення, перевіряє наявність товарів на складі, обчислює
вартість та терміни доставки, та автоматично готує замовлення до
відправлення.
Одним із ключових етапів цього процесу є взаємодія з
постачальниками доставки, наприклад, службою доставки. Після
підтвердження замовлення система автоматично створює доставку через
інтерфейс API постачальника доставки, надаючи всю необхідну інформацію
про адресу отримувача, розмір та вагу посилки та інші деталі.
Коли замовлення готове до відправлення, система автоматично
підготовлює накладну, яка може бути використана для відстеження посилки,
та іншу документацію, ініціює процес пакування та маркування замовлення,
та забезпечує відправлення посилки до служби доставки для подальшого
доставлення клієнту.
Такий підхід дозволяє максимально автоматизувати процес обробки та
відправлення замовлень, зменшуючи ризик помилок та підвищуючи
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 39
а
швидкість та ефективність обробки. Результатом є підвищення задоволеності
клієнтів, зниження витрат та покращення загальної ефективності бізнесу.
Розроблена система успішно інтегрована з компанією "Нова пошта",
що дозволяє автоматизувати процес відправлення та доставки замовлень для
клієнтів інтернет-магазину. Ця інтеграція забезпечує швидкий, ефективний
та надійний спосіб доставки товарів.
Завдяки інтеграції з "Новою поштою", система автоматично створює
доставку для кожного замовлення, передаючи необхідну інформацію, таку як
адреса отримувача, розміри та вага посилки, через API інтерфейс компанії.
Це дозволяє забезпечити швидку та точну обробку замовлень, а також
покращити взаємодію з клієнтами шляхом надання можливості відстеження
статусу доставки їхніх замовлень.
Інтеграція з «Новою поштою» також дозволяє автоматизувати процес
генерації накладних та іншої необхідної документації для відправлення
посилок. Це спрощує процес підготовки замовлень до відправлення та
зменшує час, необхідний для виконання цих завдань.
Загалом, інтеграція з "Новою поштою" дозволяє підвищити
ефективність та продуктивність процесу доставки замовлень, зменшити
ризики помилок та забезпечити високий рівень задоволеності клієнтів. Це
важливий крок у створенні успішного та конкурентоспроможного інтернет-
бізнесу.
Розроблене рішення є backend сервісом, що означає, що воно
зосереджене на обробці даних, логіці бізнес-процесів та взаємодії з іншими
системами, і не має власного користувацького інтерфейсу. Його головною
метою є обробка замовлень та керування процесом відвантаження, а також
інтеграція з іншими сервісами, такими як служби доставки.
Це означає, що рішення працює у фоновому режимі, обробляючи
запити від інших систем чи користувачів через API, але не має свого
власного інтерфейсу, з якого можна було би взаємодіяти безпосередньо.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 40
а
Замість цього, воно надає можливість взаємодіяти з собою через програмний
інтерфейс, який можуть використовувати інші частини системи чи зовнішні
системи для обміну даними та комунікації.
Такий підхід дозволяє розробникам зосередитися на функціональності
та ефективності бекенду, не турбуючись про розробку та підтримку
користувацького інтерфейсу. Це особливо важливо у випадках, коли рішення
призначене для інтеграції з іншими системами або використання як частина
складних додатків чи інфраструктури.
Клієнти системи мають можливість інтегрувати існуючі інтернет-
магазини через GraphQL інтерфейс. GraphQL є потужним запитовим мовою
та серверним API, який дозволяє клієнтам отримувати лише ті дані, які їм
потрібні, в одному запиті [14]. Це робить GraphQL ідеальним інструментом
для інтеграції з існуючими інтернет-магазинами.Приклад інтеграції з
системою через інтерфейс GraphQLзображено на рисунку 3.2.
Рисунок 3.2 – Приклад інтеграції з системою через інтерфейс GraphQL
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 41
а
Розроблена система надає можливість додавати продукти в систему, які
в майбутньому можуть бути частиною замовлення. Ця функціональність
дозволяє адміністраторам або управлінцям інтернет-магазину додавати нові
товари до каталогу та керувати їхніми параметрами, такими як назва, опис,
ціна, наявність та інші характеристики.
Додані в систему продукти стають доступними для клієнтів при
оформленні замовлення через інтернет-магазин. Клієнти можуть переглядати
каталог товарів, вибирати підходящі товари та додавати їх до свого кошика
для подальшого оформлення замовлення.
Ця функціональність є важливою для ефективного управління
асортиментом товарів та забезпеченням широкого вибору для клієнтів. Вона
дозволяє магазинам оперативно додавати нові товари та актуалізувати
існуючі дані про них, щоб відповідати змінюючимся вимогам ринку та
попиту споживачів.
Система також надає можливість працювати з покупцями, зберігаючи
інформацію про них у своїй базі даних. Ця функціональність дозволяє
інтернет-магазинам ефективно керувати взаємодією з клієнтами, збирати та
аналізувати дані про них для підтримки персоналізованих послуг та
рекламних кампаній.
Інформація про покупців може включати їх особисті дані, такі як ім'я,
адреса, контактна інформація, а також історію їхніх замовлень, вподобання,
статуси та інші важливі дані. Ці дані зберігаються в системі у безпечному та
конфіденційному режимі з метою забезпечення захисту приватності клієнтів
та дотримання вимог законодавства про захист персональних даних.
За допомогою інформації про покупців, інтернет-магазини можуть
надавати персоналізовані послуги та рекомендації, створювати індивідуальні
пропозиції та знижки для клієнтів, вести програми лояльності та бонусні
системи, а також здійснювати аналітику та прогнозування для покращення
стратегій маркетингу та продажів.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 42
а
Розроблена система дозволить власникам інтернет-магазинів
ефективніше виконувати відправку замовлень при менших витратах. Це
можливо завдяки автоматизації та оптимізації процесів обробки та
відправлення замовлень.
Одним з ключових аспектів цієї ефективності є автоматичне керування
складом та запасами. Система дозволяє власникам магазинів в реальному
часі відстежувати рівень запасів товарів на складі та автоматично
оновлювати їх, коли товари закінчуються або наближаються до критичного
рівня. Це допомагає уникнути необхідності утримання великих запасів
товарів на складі та зменшити витрати на управління запасами.
Автоматизована система обробки та відправлення замовлень дозволяє
оптимізувати процес пакування та маркування товарів, що зменшує час і
витрати, пов'язані з цими операціями. Вона також надає можливість вибору
найбільш ефективного та економічного варіанту доставки для кожного
замовлення, що дозволяє зменшити витрати на доставку та забезпечити
задоволення клієнтів.
Система допомагає власникам інтернет-магазинів ефективніше
управляти процесом відправлення замовлень, зменшуючи час та витрати,
пов'язані з цим процесом, що в свою чергу сприяє підвищенню
прибутковості та конкурентоспроможності бізнесу.
3.3 Технічні вимоги для роботи з системою
Розроблена система може бути запущена на будь-якому VPS сервері,
що робить її дуже гнучкою і доступною для використання. Віртуальні
сервери приватних облак (VPS) надають універсальне та масштабоване
середовище для розгортання програмного забезпечення, включаючи веб-
додатки та сервіси.
Запуск системи на VPS сервері дає власникам інтернет-магазинів
повний контроль над середовищем виконання, включаючи конфігурацію
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 43
а
сервера, масштабування та безпеку. Вони можуть вибрати хостінг-
провайдера та план, які відповідають їхнім потребам та бюджету, і
розгорнути систему на вибраному сервері за допомогою зручного інтерфейсу
або інструментів управління сервером.
Використання VPS сервера для розгортання розробленої системи
дозволяє власникам магазинів забезпечити надійність, гнучкість та
масштабованість в управлінні їхнім інтернет-бізнесом [15].
Однією з вимог для запуску сервісу є наявність бази даних MySQL.
MySQL– це потужна та надійна реляційна система керування базами даних
(СКБД), яка забезпечує зберігання та управління структурованою
інформацією для додатків. Вона є однією з найпопулярніших баз даних у
світі, що використовується для широкого спектру застосувань, від веб-сайтів
до підприємственних систем.
MySQL надає можливості зберігання, організації та маніпулювання
даними у відносно простий та ефективний спосіб. Вона підтримує широкий
спектр функцій, включаючи транзакції, індексацію, процедури та тригери,
що робить її ідеальним вибором для потреб багатьох додатків.
Наявність MySQL бази даних в системі дозволяє зберігати та управляти
різноманітною інформацією, такою як дані про замовлення, товари,
користувачі, історія покупок та багато іншого. Це є ключовим елементом для
правильного функціонування сервісу та забезпечення ефективного
управління даними.
Для інтеграції з розробленою системою рекомендується
використовувати GraphQL клієнт. GraphQL клієнт - це програмне
забезпечення або бібліотека, яка дозволяє взаємодіяти з GraphQL сервером та
виконувати запити до нього.
Використання GraphQL клієнта дозволяє зручно взаємодіяти з API
системи та отримувати необхідні дані у форматі, який відповідає потребам
клієнта. Крім того, GraphQL клієнт забезпечує можливість автоматичної
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 44
а
генерації запитів та типів даних на основі схеми GraphQL сервера, що
спрощує процес розробки та підтримки клієнтської частини додатка.
З використанням GraphQL клієнта розробники можуть легко
створювати та відлагоджувати запити до сервера, взаємодіяти з різними
частинами API та отримувати точно ту інформацію, яка їм потрібна. Це
дозволяє підвищити продуктивність розробки, зменшити кількість помилок
та покращити досвід користувача.
3.4 Оцінка ефективності
Порівняння ефективності розробленої системи є важливою практикою
з кількох причин:
1. Оцінка продуктивності. Порівняння дозволяє зрозуміти, наскільки
добре система працює в порівнянні з іншими аналогічними рішеннями
або з власними попередніми версіями. Це допомагає виявити можливі
проблеми з продуктивністю та шукати способи їх вирішення;
2. Оптимізація ресурсів. Шляхом порівняння ефективності можна
виявити, як ресурси, такі як час виконання, пам'ять або обсяг
мережевого трафіку, використовуються системою. Це дозволяє
вдосконалювати алгоритми, оптимізувати запити до бази даних та
вдосконалювати архітектуру системи з метою оптимізації
використання ресурсів;
3. Покращення користувацького досвіду. Шляхом порівняння різних
версій або альтернативних рішень можна визначити, яке з них
найбільше задовольняє потреби користувачів. Це дозволяє виявити
можливості для покращення користувацького досвіду та реагувати на
потреби аудиторії;
4. Оптимізація витрат. Порівняння ефективності допомагає виявити
можливості для зменшення витрат, таких як час розробки, зберігання
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 45
а
даних або витрати на інфраструктуру. Це дозволяє забезпечити
оптимальний баланс між витратами та продуктивністю системи.
Отже, порівняння ефективності розробленої системи є важливою
практикою, яка допомагає забезпечити оптимальну продуктивність,
відповідати потребам користувачів та оптимізувати витрати.
Розроблена система може бути порівняна з ручними процесами, які
зараз часто використовуються в інтернет-магазинах, зокрема через:
Автоматизація процесу обробки замовлень дозволяє прискорити їх
виконання, уникнути помилок та забезпечити більш швидке задоволення
потреб клієнтів.
Система дозволяє автоматично відстежувати кількість товарів на
складі, уникнути нестачі або перенадлишку, що допомагає оптимізувати
запаси та забезпечує постійну доступність товарів для клієнтів.
Автоматизована система дозволяє швидко реагувати на запити клієнтів,
надавати точну інформацію про статус замовлення та забезпечувати зручний
процес покупок.
Збереження та обробка даних про замовлення, клієнтів та інвентар
дозволяє отримувати цінні аналітичні дані, які можуть бути використані для
прийняття стратегічних рішень щодо розвитку бізнесу.
Отже, розроблена система може відзначатися значними перевагами у
порівнянні з ручними процесами, що допомагає оптимізувати роботу
інтернет-магазинів та покращувати їхню ефективність.Таблиця порівняння
розробленої системи з ручним процесом обробки замовлення представлено в
таблиці 3.1.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 46
а
Таблиця 3.1 – Порівняння розробленої системи з ручним процесом
обробки замовлення
Тип порівняння Розроблена система Ручний процес
Час опрацювання замовлення <= 10 секунд >= 15 хвилин
Час відвантаження замовлення <= 2 годин <= 1 День
Ймовірність помилки Низька Висока
Порівнявши використання розробленої системи з ручними процесами
відвантаження замовлень, стає очевидною перевага використання системи.
Завдяки автоматизованому підходу, система дозволяє уникнути багатьох
помилок, що можуть виникнути в результаті людського фактору в ручних
процесах. Крім того, автоматизація забезпечує швидше опрацювання та
відвантаження замовлень, що позитивно впливає на час доставки та
задоволення клієнтів. Такий підхід також ефективно використовує ресурси
підприємства, зменшуючи час і зусилля, необхідні для виконання процесів
вручну. Отже, порівнявши обидва методи, стає зрозумілим, що використання
розробленої системи є логічнішим та більш продуктивним рішенням.
3.5 Висновки до розділу 3
У розділі було детально описано структуру системи, функції, технічні
вимоги та проведено оцінку її ефективності.
Структура системи була розроблена з урахуванням потреб
користувачів та вимог бізнесу. Застосування технології GraphQL дозволило
побудувати гнучку та зручну архітектуру, яка дозволяє ефективно
обмінюватися даними між підрозділами підприємства.
Описано функції системи включав в себе можливості запитування та
отримання різноманітних типів даних, роботу з автентифікацією та
авторизацією користувачів, а також підтримку асинхронних запитів та
обробку помилок.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 47
а
Технічні вимоги для роботи з системою були чітко визначені і
включали в себе необхідність наявності сучасного браузера, підтримки
протоколу HTTPS та налагодженого зв'язку з сервером.
За допомогою проведеної оцінки ефективності було визначено, що
система забезпечує високу продуктивність та надійність у роботі, дозволяє
зменшити час на розробку та підтримку програмного забезпечення, а також
забезпечує зручний та ефективний обмін даними між підрозділами
підприємства.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 48
а
4 ЗАХИСТ АВТОМАТИЗОВАНОЇ СИСТЕМИ
4.1 Огляд існуючих рішень
Захист інформації – це комплекс заходів і технологій, спрямованих на
збереження конфіденційності, цілісності та доступності даних. У сучасному
світі, де інформація стає все більш цінним ресурсом, питання її захисту
набувають особливого значення. Незалежно від типу організації, будь-яка
компанія чи установа стикається з ризиками, пов’язаними з витоками,
втратами або несанкціонованим доступом до інформації. Основні аспекти
захисту інформації це забезпечення доступу до даних лише авторизованим
користувачам.Шифрування даних, контроль доступу, політики безпеки,
багатофакторна автентифікація.
Цілісність (Integrity) це захист даних від несанкціонованих змін або
пошкоджень. Використання цифрових підписів, хеш-функцій, механізмів
перевірки цілісності даних, контроль версій.
Доступність (Availability) забезпечує доступу до даних у будь-який час,
коли це необхідно авторизованим користувачам.Використання резервного
копіювання, реплікації даних, захист від DDoS-атак, планування відновлення
після збоїв [16].
Захист інформації важливий бо втрата або витік конфіденційної
інформації може призвести до серйозних фінансових втрат та юридичних
наслідків. Таких як комерційна таємниця, персональні дані клієнтів,
фінансові звіти.
Забезпечення безперервності бізнесу. Збої в роботі систем можуть
призвести до зупинки бізнес-процесів і втрати доходів, так як атаки на ІТ-
інфраструктуру, природні катастрофи.
Недотримання вимог законодавства щодо захисту інформації може
призвести до штрафів та інших юридичних наслідків.Витоки інформації
можуть суттєво підірвати довіру клієнтів та партнерів до організації.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 49
а
Основні методи захисту інформації:
1. Шифрування даних. Процес перетворення інформації в код, який може
бути прочитаний лише за наявності ключа дешифрування;
2. Контроль доступу. Механізми, що обмежують доступ до ресурсів лише
авторизованим користувачам.
3. Автентифікація та авторизація. Процес перевірки особи користувача
(автентифікація) та визначення його прав доступу (авторизація);
4. Моніторинг та аудит. Відстеження активності в системі для виявлення
підозрілої поведінки та реагування на інциденти;
5. Резервне копіювання та відновлення. Процес створення копій даних
для відновлення у разі втрати або пошкодження.
Захист інформації є критично важливим елементом діяльності будь-
якої організації. Він включає комплекс технічних, адміністративних та
фізичних заходів, спрямованих на забезпечення конфіденційності, цілісності
та доступності даних. Впровадження ефективних механізмів захисту
інформації допомагає зменшити ризики, забезпечити безперервність бізнес-
процесів, дотримуватися законодавчих вимог і підтримувати довіру клієнтів
та партнерів. У сучасному цифровому світі захист інформації є не лише
технічною, але й стратегічною необхідністю для успішного функціонування
та розвитку організації.
SSL Сертифікати в HTTPS. SSL (SecureSocketsLayer) сертифікати є
важливими компонентами безпеки у протоколі HTTPS
(HyperTextTransferProtocolSecure). HTTPS є розширенням HTTP, яке
забезпечує безпечне з'єднання між клієнтом (наприклад, веб-браузером) та
сервером через шифрування даних. Це шифрування гарантує
конфіденційність і цілісність переданих даних, а також аутентифікацію
серверів [16].
SSL сертифікат — це цифровий сертифікат, який автентифікує особу
веб-сайту і дозволяє встановити зашифрований зв’язок. SSL сертифікати
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 50
а
видані довіреними центрами сертифікації (CertificateAuthorities, CAs), які
перевіряють особу організації чи індивідуального власника домену перед
видачею сертифіката.
Коли користувач заходить на сайт, браузер запитує SSL сертифікат у
сервера. Сервер надсилає сертифікат, який містить публічний ключ і
підтвердження того, що сертифікат виданий на певний
домен.Використовуючи публічний ключ із сертифіката, браузер шифрує дані,
які надсилаються на сервер. Сервер розшифровує ці дані за допомогою свого
приватного ключа.Сертифікати також забезпечують цілісність даних,
використовуючи криптографічні хеш-функції, що гарантує, що дані не були
змінені під час передачі.
Типи SSL сертифікатів:
1. DomainValidated (DV) SSL сертифікати.Видаються після перевірки
права власності на домен. Це найменш дорогий і найшвидший тип
сертифіката;
2. OrganizationValidated (OV) SSL сертифікати. Вимагають перевірки не
лише права власності на домен, але й юридичної інформації про
організацію. Забезпечують середній рівень довіри;
3. ExtendedValidation (EV) SSL сертифікати. Найбільш ретельно
перевірені сертифікати, які вимагають детальної перевірки юридичної
інформації про організацію. У браузерах відображаються зеленим
рядком з назвою організації, що забезпечує найвищий рівень довіри.
Процес отримання SSL сертифіката. Першим кроком є створення CSR,
що містить інформацію про домен і організацію.Вибір центру сертифікації
(CA) [17]. CA перевіряє інформацію і, якщо все правильно, видає SSL
сертифікат.Сертифікат встановлюється на веб-сервері, після чого з'єднання з
сайтом буде шифруватися за допомогою HTTPS.
Переваги використання SSL сертифікатів:
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 51
а
1. Захист конфіденційності даних. Дані, передані між клієнтом і
сервером, шифруються, що робить їх недоступними для зловмисників;
2. Аутентифікація. SSL сертифікати гарантують, що користувачі
підключаються до справжнього сайту, а не до фальшивого;
3. Цілісність даних. Захищають дані від несанкціонованих змін під час
передачі;
4. Підвищення довіри користувачів. Користувачі більш схильні довіряти
сайтам, які використовують HTTPS, що покращує репутацію сайту і
може підвищити рівень конверсії;
5. Покращення SEO. Пошукові системи, такі як Google, надають перевагу
сайтам, які використовують HTTPS.
SSL фактично вже застарілий, і більшість сучасних з'єднань
використовують його наступника, протокол TLS (TransportLayerSecurity).
Однак, термін "SSL" продовжує використовуватися в індустрії для зручності.
SSL сертифікати є критичним компонентом безпеки веб-сайтів,
забезпечуючи шифрування, аутентифікацію та цілісність даних. Вони
допомагають захистити конфіденційну інформацію користувачів, зменшують
ризики, пов'язані з фішингом і атаками "людина посередині", та підвищують
довіру користувачів до веб-сайтів. У сучасному цифровому середовищі
використання SSL/TLS сертифікатів є стандартом для забезпечення безпеки
інтернет-комунікацій[18].
TLS (TransportLayerSecurity) – це криптографічний протокол, який, як і
його попередник SSL, забезпечує безпечну передачу даних в інтернеті. TLS
використовується для навігації, отримання пошти, спілкування, обміну
файлами та інших операцій. Протокол використовує асиметричне
шифрування та сертифікати X.509 для забезпечення безпеки даних.
TLS забезпечує автентифікацію і безпечну передачу даних через
інтернет за допомогою криптографічних засобів. Зазвичай автентифікується
лише сервер, тоді як клієнт залишається неавтентифікованим. Для взаємної
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 52
а
автентифікації обидві сторони повинні підтримувати інфраструктуру
відкритих ключів (PKI), яка захищає клієнт-серверні додатки від
перехоплення, редагування повідомлень або створення підроблених.
TLS включає три основні фази діалог між сторонами для вибору
алгоритму шифрування, обмін ключами на основі криптосистем з відкритим
ключем або автентифікація на основі сертифікатів, передача даних, що
шифруються за допомогою симетричних алгоритмів шифрування.
Як працює протокол зображено на рисунку 4.1.
Рисунок 4.1 – Як працює протокол TLS
TLS має дві основні фази: рукостискання і передачу даних.
Рукостискання забезпечує шифрування даних та робить їх недоступними для
перехоплення, тоді як передача даних забезпечує конфіденційність та
надійність з'єднання [19].
Під час передачі даних за допомогою TLS вбудовані елементи
управління запобігають втручанню у зашифровані дані та повторному
відтворенню захопленого потоку даних TLS. Однак ці гарантії
застосовуються тільки під час передачі даних і не охоплюють їх після
отримання.
Шифрування даних – це процес перетворення звичайного тексту або
даних в нечитабельний формат за допомогою спеціального алгоритму, що
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 53
а
називається ключем. Цей процес призначений для забезпечення
конфіденційності та безпеки даних під час їх передачі або зберігання.
Шифрування даних може бути симетричним або асиметричним. У
симетричному шифруванні один ключ використовується як для шифрування,
так і для розшифрування даних [20]. Це означає, що той самий ключ
використовується і відправником, і отримувачем. У асиметричному
шифруванні використовується два ключі - публічний і приватний. Публічний
ключ використовується для шифрування даних, а приватний - для їх
розшифрування. Це забезпечує більшу безпеку, оскільки немає потреби
передавати приватний ключ.
Шифрування даних використовується в різних областях, таких як
забезпечення безпеки мережі, захист конфіденційної інформації,
забезпечення безпеки електронної пошти та онлайн-транзакцій, а також для
зберігання даних у хмарних сервісах.
Шифрування даних забезпечує захист від несанкціонованого доступу
до інформації, забезпечуючи її конфіденційність і цілісність. Однак важливо
вибирати надійні алгоритми шифрування та правильно керувати ключами,
щоб уникнути порушення безпеки даних.
Шифрування даних може бути реалізоване різними методами і
алгоритмами. Деякі з найпоширеніших алгоритмів шифрування включають
AES (AdvancedEncryption Standard), RSA (Rivest-Shamir-Adleman), DES
(DataEncryption Standard), і ECC (EllipticCurveCryptography). Кожен з цих
алгоритмів має свої особливості, переваги і недоліки, і їх вибір залежить від
конкретних потреб безпеки та вимог системи.
У додаток до захисту конфіденційності даних, шифрування також може
бути використане для забезпечення цілісності та автентичності даних.
Наприклад, цифровий підпис може бути використаний для підтвердження
того, що дані не були змінені під час передачі, а цифрові сертифікати можуть
бути використані для підтвердження ідентичності комунікуючих сторін.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 54
а
Шифрування даних також може бути класифіковане за способом
застосування ключів. Окрім симетричного і асиметричного шифрування,
існують гібридні методи, які комбінують обидва підходи для забезпечення
високого рівня безпеки та ефективності.
Важливо враховувати, що шифрування даних є лише одним з елементів
комплексної стратегії забезпечення інформаційної безпеки. Інші заходи, такі
як захист від несанкціонованого доступу, моніторинг та аудит доступу до
даних, також важливі для забезпечення високого рівня захисту даних.
4.2 Реалізація захисту користувачів
Захист інформації між підрозділами підприємства є критично
важливою складовою сучасного бізнес-середовища. Конфіденційність даних,
таких як інформація про клієнтів, фінансові дані та розробки, є найвищим
пріоритетом. Захист забезпечує, що ці дані залишаються конфіденційними та
доступними лише тим, хто має на це право.
Забезпечення цілісності даних - ще один важливий аспект. Це означає,
що дані не можуть бути змінені або пошкоджені під час передачі.
Недоторканість інформації забезпечує, що вона залишається достовірною та
вірною.
Крім того, важливо забезпечити доступність даних для тих, хто має до
них легальний доступ. Це означає, що необхідно використовувати ефективні
методи забезпечення доступу, щоб забезпечити, що співробітники можуть
отримати доступ до необхідної інформації, коли це потрібно.
Загалом, захист даних при передачі між підрозділами підприємства є
невід'ємною частиною забезпечення безпеки і ефективності бізнес-процесів.
При реалізації захисту даних у GraphQL важливо враховувати кілька
ключових аспектів. Спочатку, необхідно налагодити механізми
автентифікації та авторизації, які забезпечать доступ лише авторизованим
користувачам і обмежать їхні права доступу до даних. Далі, важливо
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 55
а
контролювати обробку запитів, щоб уникнути зловживання або
перевантаження сервера. Також варто забезпечити фільтрацію даних, щоб
клієнти отримували лише ту інформацію, до якої вони мають доступ.
Необхідно піклуватися про захист від SQL ін'єкцій, якщо GraphQL
використовується з базою даних. Крім того, важливо вести моніторинг і
журналювання запитів для виявлення підозрілих дій або спроб
несанкціонованого доступу до даних. Взагалі, успішний захист даних у
GraphQL вимагає комплексного підходу та систематичного контролю за
безпекою.
У розробленій системі використовується система авторизації на базі
JWT (JSON Web Token). JWT є стандартом відкритого формату токенів, які
можна використовувати для безпечної передачі інформації між сторонами у
JSON форматі.
При авторизації користувача система генерує JWT токен, який містить
певні дані про користувача та його ролі чи права доступу. Цей токен
підписується секретним ключем сервера, що гарантує його автентичність та
недоторканість. Після отримання токена, клієнт включає його у заголовок
кожного запиту до сервера.
Сервер перевіряє цей токен при кожному запиті, розшифровує його за
допомогою секретного ключа та перевіряє його підпис, щоб забезпечити його
автентичність. Після цього сервер визначає ідентифікатор користувача та
його права доступу, які використовуються для виконання запиту.
Використання JWT токенів має декілька переваг, таких як простота
використання, можливість передачі корисних даних та масштабованість.
Однак важливо правильно налаштувати систему, щоб уникнути можливих
атак, таких як перехоплення токенів або фальсифікація даних.
У розробленій системі авторизація виконується шляхом передачі
токену доступу у заголовку запиту GraphQL. Клієнт, який взаємодіє з
GraphQL сервером, включає токен доступу у заголовок під назвою
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 56
а
"Authorization" при кожному запиті. Цей токен зазвичай містить інформацію
про ідентифікатор користувача та його права доступу.
Після отримання запиту GraphQL сервер перевіряє наявність токену в
заголовку. Він аналізує цей токен, визначає його автентичність та
використовує інформацію, що міститься в ньому, для визначення прав
доступу користувача. Після цього сервер виконує запит та повертає
результат.
Використання заголовка "Authorization" для передачі токену доступу в
GraphQL дозволяє забезпечити безпеку та авторизацію у системі. Такий
підхід є стандартним і зручним для багатьох сучасних систем, що
використовують GraphQL для обміну даними.
Передача важливих даних підприємства у зашифрованому форматі є
критично важливою для забезпечення їхньої конфіденційності та безпеки.
Цей підхід гарантує, що навіть якщо дані потраплять у руки
несанкціонованих осіб, вони не зможуть прочитати чи використовувати ці
дані без відповідного ключа розшифрування.
У розробленій системі зашифровані дані передаються між підрозділами
підприємства. Тільки кінцевий департамент, який має відповідний ключ
розшифрування, може прочитати ці дані та використовувати їх для
подальшої обробки.
Важливо враховувати, що кожен департамент, який отримує
зашифровані дані, повинен мати доступ до відповідного ключа
розшифрування. Ключі розшифрування слід суворо контролювати та
розподіляти тільки серед довірених працівників, щоб мінімізувати ризик
витоку конфіденційної інформації.
Такий підхід забезпечує високий рівень захисту для важливих даних
підприємства, зберігаючи їх конфіденційність та інтегрітет у всьому процесі
передачі та обробки.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 57
а
У деяких випадках різні підрозділи підприємства можуть
використовувати різні алгоритми шифрування для захисту важливих даних.
Це може бути зумовлено різними потребами, технічними особливостями або
безпековими вимогами кожного підрозділу.
У такій ситуації підрозділи узгоджуються між собою, який алгоритм
шифрування використовувати для передачі та зберігання даних. Це може
включати обговорення безпекових вимог, вибір алгоритму шифрування,
параметрів ключа та інших важливих аспектів.
Оскільки різні алгоритми шифрування можуть мати різний рівень
безпеки та ефективності, важливо враховувати ці фактори при узгодженні
вибору. Кожен підрозділ може вибрати той алгоритм, який найкращим чином
відповідає його потребам та вимогам безпеки.
Забезпечення узгодженості між підрозділами стосовно використання
різних алгоритмів шифрування допомагає забезпечити високий рівень
безпеки та ефективного захисту важливих даних підприємства.
У контексті забезпечення безпеки та конфіденційності важливих даних
підприємства, комунікація між департаментами повинна відбуватися в
приватній мережі і не повинна бути доступна з мережі Інтернет.
Використання приватної мережі забезпечує контрольований та
захищений канал передачі даних між департаментами підприємства. Це
дозволяє уникнути ризику перехоплення або зловживання даними з боку
несанкціонованих користувачів ззовні.
Крім того, обмеження доступу до мережі Інтернет також є ключовим
аспектом забезпечення безпеки. Це запобігає зовнішнім атакам та забезпечує,
що лише довірені працівники мають доступ до комунікаційних каналів та
важливих даних підприємства.
Загалом, використання приватної мережі для комунікації між
департаментами та обмеження доступу з мережі Інтернет є важливими
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 58
а
стратегіями для забезпечення безпеки та конфіденційності важливих даних
підприємства.
4.3 Висновки до розділу 4
У розділі було детально проаналізовано існуючі рішення забезпечення
безпеки, розглянуто важливість захисту інформації в цілому та описано
реалізацію заходів забезпечення безпеки в конкретній системі.
В ході огляду існуючих рішень було виявлено, що захист інформації
має велике значення для будь-якої організації, оскільки вона є найціннішим
активом і піддається різноманітним загрозам, таким як крадіжка,
перехоплення або зміна даних. Для забезпечення високого рівня захисту
використовуються різноманітні технології та підходи, включаючи
використання SSL сертифікатів в HTTPS, TLS протоколу, шифрування даних
та інші.
SSL сертифікати в HTTPS дозволяють забезпечити безпеку передачі
даних між користувачем і сервером шляхом зашифровання інформації та
автентифікації сторін. TLS протокол, як сучасна версія SSL, також
використовується для захисту конфіденційної інформації та забезпечення
безпеки передачі даних через мережу.
Реалізація захисту даних користувачів у розробленій системі
передбачає використання захисних механізмів на різних рівнях, включаючи
автентифікацію, авторизацію, шифрування та контроль доступу. Ці заходи
дозволяють забезпечити конфіденційність, цілісність та доступність даних у
системі обміну інформацією між підрозділами підприємства з використанням
технології GraphQL.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 59
а
ВИСНОВКИ
Аналізуючи існуючі системи та принципи їх роботи, стає очевидним,
що передача даних є критично важливим елементом сучасних технологій. Це
не лише забезпечує обмін інформацією між різними системами та
користувачами, але й дозволяє оптимізувати ресурси, забезпечуючи
ефективність та продуктивність роботи.
Розробка архітектури передачі даних, розподілені системи та
асинхронні системи дозволяють оптимізувати цей процес, забезпечуючи
ефективну організацію, гнучкість та масштабованість. Розподілені системи
між підрозділами дозволяють зменшити ризики, оптимізувати використання
ресурсів та забезпечити адаптивність до змін у бізнес-середовищі.
Асинхронні системи передачі даних забезпечують ефективну обробку та
відправку інформації, підвищуючи продуктивність та забезпечуючи реальний
час відповіді.
Загалом, ці принципи та технології відіграють важливу роль у розробці
сучасних систем, допомагаючи компаніям досягати своїх стратегічних цілей
та забезпечувати стабільний розвиток в умовах постійно змінного бізнес-
середовища.
Було розглянуто кілька ключових технологій, які використовуються
для передачі даних та забезпечення зв'язку між компонентами програмних
систем. HTTP є базовим протоколом для передачі гіпертекстових даних у
мережі Інтернет, який забезпечує зв'язок між клієнтом і сервером. Websocket
є технологією, що дозволяє з'єднання між клієнтом і сервером для обміну
даними в реальному часі. Kafka представляє собою потужну та масштабовану
платформу для обробки потокових даних та побудови розподілених систем
обробки даних. GraphQL– це мова запитів та середовище виконання запитів
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 60
а
для роботи з даними, яке дозволяє клієнтам запитувати лише ті дані, які їм
потрібні, та отримувати їх у зручному форматі.
Обґрунтування вибору цих технологій базується на їхній ефективності,
масштабованості та здатності відповідати вимогам сучасних програмних
систем. HTTP, Websocket, Kafka та GraphQL надають широкі можливості для
розробки різноманітних застосувань, включаючи веб-додатки, мобільні
додатки, IoT рішення та багато іншого. Їх використання дозволяє
розробникам ефективно створювати масштабовані та високопродуктивні
системи.
Лист
ЧДТУ.246014.001 ПЗ т
Зм. Лист № докум. Підпис Дат 61
а
ДОДАТОК А
«ЗАТВЕРДЖУЮ»
Завідувач кафедри ІБ та КІ
д.т.н., професор Віра БАБЕНКО
__________________
«___» ____________ 2024 року
Система обміну інформацією між підрозділами підприємств з
використанням технології GraphQL
Специфікація
482.ЧДТУ.46014-01
Листів 2
Розробник ______________ Ігор ЗІНЗІРОВ
Керівник ______________ Світлана ГРЕСЬКО
Черкаси 2024
2
482.ЧДТУ.46014-01
Позначення Найменування Примітка
Документація
482.ЧДТУ.46014-01 12 01 Текст програми
482.ЧДТУ.46014-01 34 01 Інструкція користувача
ДОДАТОК Б
Система обміну інформацією між підрозділами підприємств з
використанням технології GraphQL
Текст програми
482.ЧДТУ.46014-01 12 01
Листів 12
Розробник: Ігор ЗІНЗІРОВ
Черкаси 2024
2
482.ЧДТУ.46014-01 12 01
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import * as moment from 'moment';
import { Equal, MoreThan, Repository } from 'typeorm';
import { I18nService } from 'nestjs-i18n';
import { MathService } from '@chdtu/common/math/services';
import { Order } from '@chdtu/orders/types';
import { OrdersService } from '@chdtu/orders/services';
import { Category, Type } from '@chdtu/transactions/enums';
import { TransactionsService } from '@chdtu/transactions/services';
import { ClientEntity } from './../entities';
import { ClientNotFoundException } from './../exceptions';
import {
Client,
FindOptions,
WeeklyAggregation,
WeeklySummary,
} from './../types';
@Injectable()
export class ClientsService {
constructor(
@InjectRepository(ClientEntity)
private readonly clientsRepository: Repository<ClientEntity>,
private readonly i18n: I18nService,
private readonly mathService: MathService,
private readonly ordersService: OrdersService,
private readonly transactionsService: TransactionsService,
) {}
async findOne(id: string, options?: FindOptions): Promise<Client | null> {
return await this.clientsRepository.findOne({
where: {
id: Equal(id),
orders: options?.transactions && {
endAt: MoreThan<Date>(new Date()),
},
},
relations: options?.transactions && {
orders: {
transactions: true,
},
3
482.ЧДТУ.46014-01 12 01
},
});
}
async findAll(): Promise<Client[]> {
return await this.clientsRepository.find({
where: {
orders: {
endAt: MoreThan<Date>(new Date()),
},
},
order: { createdAt: 'ASC' },
relations: {
orders: {
transactions: true,
},
},
});
}
async getSummary(client: Client): Promise<number> {
let summary = 0;
for (const order of client.orders) {
const available = await this.ordersService.getSummary(order);
summary += available;
}
return summary;
}
async getTransactionsAggregations(id: string): Promise<WeeklyAggregation[]> {
const endDate = moment();
const startDate = endDate.clone().subtract(7, 'days');
const orders = await this.ordersService.findAllByTransactionDate(
id,
startDate.toISOString(),
endDate.toISOString(),
);
const aggregations: { [key: string]: number } = {};
for (const order of orders || []) {
(order.transactions || []).forEach((transaction) => {
const dateOfWeek = moment(transaction.createdAt).format('YYYY-MM-DD');
aggregations[dateOfWeek] =
(aggregations[dateOfWeek] || 0) + Math.abs(transaction.amount);
});
4
482.ЧДТУ.46014-01 12 01
}
const result = Object.keys(aggregations)
.reverse()
.map((key) => ({
amount: aggregations[key],
day: new Date(key).getDay(),
milliseconds: Date.parse(key),
}));
return result.sort((a, b) => {
if ( a.milliseconds < b.milliseconds ){
return -1;
}
if ( a.milliseconds > b.milliseconds ){
return 1;
}
})
}
async getOrderSummary(id: string): Promise<WeeklySummary> {
const currentDate = moment();
const endOfWeek = currentDate.clone().endOf('isoWeek');
const startOfWeek = currentDate.clone().startOf('isoWeek');
const orders = await this.ordersService.findAll(id, {
sortingDirection: 'ASC',
primary: true,
limit: 1,
});
const order = (orders || []).find((order) => order.id);
if (!order) {
return null;
}
const startTimeStamp = moment(order.startAt).unix();
const endTimeStamp = moment(order.endAt).unix();
const timeDiff = Math.abs(endTimeStamp - startTimeStamp);
const numberDays = timeDiff / 86400;
const daysInMonth = Math.floor(numberDays) + 1;
const startDate =
startTimeStamp >= startOfWeek.unix()
? startTimeStamp
5
482.ЧДТУ.46014-01 12 01
: startOfWeek.unix();
const endDate =
endTimeStamp <= endOfWeek.unix() ? endTimeStamp : endOfWeek.unix();
const dateDiff = endDate - startDate;
const countDate = Math.round(dateDiff / (60 * 60 * 24));
const weeklyOrder = (order.amount / daysInMonth) * countDate;
let weeklyAvailableSummary = weeklyOrder;
const transactions = await this.transactionsService.findAll(
order.id,
moment.unix(startDate).toISOString(),
moment.unix(endDate).toISOString(),
);
(transactions || []).forEach((transaction) => {
weeklyAvailableSummary = weeklyAvailableSummary + transaction.amount;
});
return {
id: order.id,
availableSummary: this.mathService.roundTo(weeklyAvailableSummary, 2),
};
}
async createOrderForClient(
id: string,
order: Partial<Order>,
): Promise<Order> {
const client = await this.findOne(id);
if (!client) {
throw new ClientNotFoundException(id);
}
return await this.ordersService.create({
clientId: client.id,
...order,
});
}
async calculateWeeklySummaries(): Promise<void> {
const clients = await this.findAll();
const currentDate = moment();
const nextDay = currentDate.clone().add(1, 'days');
for (const client of clients) {
6
482.ЧДТУ.46014-01 12 01
const id = client.id;
const weeklySummary = await this.getWeeklySummary(id);
if (weeklySummary.availableSummary === 0) {
continue;
}
const orders = await this.ordersService.findAll(id, {
primary: true,
limit: 1,
dayForSearch: nextDay.toDate(),
});
const nextOrder = (orders || []).find((order) => order.id);
if (!nextOrder) {
continue;
}
const description: string =
weeklySummary.availableSummary > 0
? this.i18n.t('clients.weeklySummary.positive')
: this.i18n.t('clients.weeklySummary.negative');
const createdAt = nextDay.set({ hours: 0, minutes: 0, second: 0 });
await this.transactionsService.create({
description,
amount: this.mathService.roundTo(weeklySummary.availableSummary, 0),
currency: client.currency,
orderId: nextOrder.id,
createdAt: createdAt.toDate(),
type:
weeklySummary.id === nextOrder.id
? Type.VIRTUAL_IGNORED
: Type.VIRTUAL,
category: Category.NO_CATEGORY,
});
}
}
}
import {
Args,
Int,
Mutation,
Parent,
Query,
ResolveField,
7
482.ЧДТУ.46014-01 12 01
Resolver,
} from '@nestjs/graphql';
import { CacheInterceptor, CacheKey, CacheTTL } from '@nestjs/cache-manager';
import { UseInterceptors } from '@nestjs/common';
import { CreateOrderScheme, OrderScheme } from '@chdtu/orders/schemes';
import { Order } from '@chdtu/orders/types';
import { ClientsService } from './services';
import {
ClientScheme,
WeeklySummaryScheme,
WeeklyAggregationScheme,
} from './schemes';
import { Client, WeeklyAggregation, WeeklySummary } from './types';
@Resolver(() => ClientScheme)
export class ClientsResolver {
constructor(private readonly clientsService: ClientsService) {}
@Query(() => ClientScheme, { name: 'client' })
async getClient(@Args('id') id: string): Promise<Client> {
return await this.clientsService.findOne(id, { transactions: true });
}
@Query(() => [ClientScheme], { name: 'clientsList' })
async getClientsList(): Promise<Client[]> {
return await this.clientsService.findAll();
}
@Query(() => WeeklySummaryScheme, { name: 'weeklySummaryForClient' })
@UseInterceptors(CacheInterceptor)
@CacheTTL(86400)
@CacheKey('client-summery-balance')
async getWeeklySummaryForClient(
@Args('clientId') clientId: string,
): Promise<WeeklySummary> {
return await this.clientsService.getOrderSummary(clientId);
}
@Query(() => [WeeklyAggregationScheme], {
name: 'weeklySummaryForClient',
})
@UseInterceptors(CacheInterceptor)
@CacheTTL(86400)
@CacheKey('client-order-aggregation')
8
482.ЧДТУ.46014-01 12 01
async getWeeklyAggregationForClient(
@Args('clientId') clientId: string,
): Promise<WeeklyAggregation[]> {
return await this.clientsService.getTransactionsAggregations(clientId);
}
@Mutation(() => OrderScheme)
async createOrderForClient(
@Args('clientId') id: string,
@Args('order') order: CreateOrderScheme,
): Promise<Order> {
return this.clientsService.createOrderForClient(id, order);
}
@ResolveField('summary', () => Int, { nullable: true })
async resolveSummaryField(@Parent() client: Client): Promise<number> {
return this.clientsService.getSummary(client);
}
}
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { AuthTypeNotAcceptable } from './../exceptions';
import { AuthTypeEnum } from './../enums';
@Injectable()
export class AuthService {
constructor(private readonly configService: ConfigService) {}
async signInWithToken(value: string, type?: string): Promise<boolean | never> {
if (!value) {
return false;
}
switch (type?.toUpperCase()) {
case AuthTypeEnum.BASIC:
return this.signInWithBasicAuth(value);
default:
throw new AuthTypeNotAcceptable();
}
}
private async signInWithBasicAuth(value: string) {
const allowedToken = this.configService.get<string>('AUTH_KEY');
return allowedToken === value;
}
9
482.ЧДТУ.46014-01 12 01
}
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';
import { AuthService } from './../services';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService) {}
async canActivate(context: ExecutionContext): Promise<boolean> {
const header = this.getAuthorizationHeader(context);
const tokenType = this.extractTokenTypeFromHeader(header);
const tokenValue = this.extractTokenValueFromHeader(header);
return this.authService.signInWithToken(tokenValue, tokenType);
}
private extractTokenTypeFromHeader(header: string): string | undefined {
return header?.split(' ')[0];
}
private extractTokenValueFromHeader(header: string): string | undefined {
return header?.split(' ')[1];
}
private getAuthorizationHeader(context: ExecutionContext): string | undefined {
const graphQlContext = GqlExecutionContext.create(context);
const { req } = graphQlContext.getContext();
return req.headers['authorization'] || '';
}
}
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
Equal,
And,
LessThanOrEqual,
MoreThanOrEqual,
Repository,
In,
} from 'typeorm';
import { TransactionNotFoundException } from './../exceptions';
import { TransactionEntity } from './../entities';
10
482.ЧДТУ.46014-01 12 01
import { Transaction } from './../types';
@Injectable()
export class TransactionsService {
constructor(
@InjectRepository(TransactionEntity)
private readonly transactionsRepository: Repository<TransactionEntity>,
) {}
async findOne(id: string): Promise<Transaction | null> {
return await this.transactionsRepository.findOneBy({ id });
}
async findAll(
orderId: string,
startDate?: string,
endDate?: string,
): Promise<Transaction[]> {
return await this.transactionsRepository.find({
where: {
orderId: Equal(orderId),
createdAt:
startDate && endDate
? And(
MoreThanOrEqual<Date>(new Date(startDate)),
LessThanOrEqual<Date>(new Date(endDate)),
)
: null,
},
order: { createdAt: 'DESC' },
});
}
async findAllByIds(ids: string[]): Promise<Transaction[]> {
return await this.transactionsRepository.find({
where: {
id: In(ids),
},
});
}
async create(
transaction: Partial<Transaction>,
): Promise<Transaction | never> {
const entity = this.transactionsRepository.create(transaction);
const record = await this.transactionsRepository.save(entity);
return this.findOne(record.id);
}
11
482.ЧДТУ.46014-01 12 01
async update(
id: string,
transaction: Partial<Transaction>,
): Promise<Transaction | never> {
const entity = await this.findOne(id);
if (!entity) {
throw new TransactionNotFoundException(id);
}
await this.transactionsRepository.update(id, transaction);
return this.findOne(id);
}
async delete(id: string): Promise<Transaction | never> {
const transaction = await this.findOne(id);
if (!transaction) {
throw new TransactionNotFoundException(id);
}
await this.transactionsRepository.delete(transaction.id);
return transaction;
}
}
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { TransactionScheme, UpdateTransactionScheme } from './schemes';
import { TransactionsService } from './services';
import { Transaction } from './types';
@Resolver(() => TransactionScheme)
export class TransactionsResolver {
constructor(private readonly transactionsService: TransactionsService) {}
@Query(() => TransactionScheme, { name: 'transaction' })
async getTransaction(@Args('id') id: string): Promise<Transaction> {
return await this.transactionsService.findOne(id);
}
@Query(() => [TransactionScheme], { name: 'transactionsList' })
async getTransactionsList(
@Args('orderId') orderId: string,
@Args('startDate', { nullable: true }) startDate?: string,
12
482.ЧДТУ.46014-01 12 01
@Args('endDate', { nullable: true }) endDate?: string,
): Promise<Transaction[]> {
return await this.transactionsService.findAll(orderId, startDate, endDate);
}
@Mutation(() => TransactionScheme)
async updateTransaction(
@Args('id') id: string,
@Args('transaction') transaction: UpdateTransactionScheme,
): Promise<Transaction> {
return await this.transactionsService.update(id, transaction);
}
@Mutation(() => TransactionScheme)
async deleteTransaction(@Args('id') id: string): Promise<Transaction> {
return this.transactionsService.delete(id);
}
}
ДОДАТОК В
Система обміну інформацією між підрозділами підприємств з
використанням технології GraphQL
Інструкція користувача
482.ЧДТУ.46014-01 34 01
Листів 4
Розробник: Ігор ЗІНЗІРОВ
Черкаси 2024
2
482.ЧДТУ.46014-01 34 01
Для запуску розробленої системи необхідно використовувати PM2,
оскільки цей інструмент забезпечує стабільність і надійність її роботи у
виробничому середовищі. Розроблена система може складатися з кількох
компонентів або сервісів, що працюють на Node.js. У такому випадку
управління цими компонентами вручну може бути складним і неефективним.
PM2 дозволяє автоматизувати цей процес.
Перш за все, PM2 забезпечує автоматичний перезапуск системи у разі
збою. Це особливо важливо для забезпечення високої доступності, оскільки
безперервна робота системи критично важлива для багатьох користувачів та
бізнес-процесів. Завдяки PM2 ваша система буде автоматично
перезапускатися, що мінімізує час простою та запобігає втраті даних.
Крім того, PM2 надає можливість детального моніторингу роботи
системи. Це дозволяє в реальному часі відстежувати використання ресурсів,
таких як CPU та пам'ять, а також переглядати логи для швидкого виявлення
та усунення помилок. Така прозорість у роботі системи сприяє швидшій
діагностиці проблем і підвищенню загальної продуктивності.
PM2 також підтримує кластеризацію, що дозволяє розробленій системі
ефективно використовувати всі ядра процесора. Це значно покращує
продуктивність, оскільки кілька інстанцій додатка можуть обробляти більше
запитів одночасно, забезпечуючи краще балансування навантаження.
Ще однією перевагою використання PM2 є зручність управління
конфігураціями. Можна створити конфігураційний файл, який містить усі
необхідні налаштування для різних середовищ і компонентів системи. Це
спрощує процес розгортання і масштабування, дозволяючи легко адаптувати
систему до змінних вимог.
Таким чином, використання PM2 для запуску розробленої системи
дозволяє забезпечити її стабільну роботу, ефективне використання ресурсів
3
482.ЧДТУ.46014-01 34 01
та зручне управління. Це робить PM2 незамінним інструментом для будь-якої
сучасної системи, яка потребує надійності і масштабованості.
Також, для запуску розробленої системи важливо не лише
використовувати PM2 для управління процесами, але й налаштувати базу
даних MySQL. Правильна конфігурація бази даних є ключовим елементом
для забезпечення надійності, продуктивності та безпеки вашої системи.
Налаштування бази даних MySQL повинно відповідати вимогам вашої
системи щодо продуктивності. Це включає оптимізацію конфігураційних
параметрів, таких як max_connections, innodb_buffer_pool_size та інших, які
впливають на продуктивність і здатність бази даних обробляти велику
кількість одночасних запитів. Важливо також налаштувати індексацію
таблиць для прискорення запитів і забезпечення швидкого доступу до даних.
Забезпечення безпеки бази даних є критично важливим. Це включає
налаштування надійних паролів для користувачів бази даних, використання
шифрування для передачі даних, а також обмеження доступу до бази даних
лише для авторизованих користувачів і з конкретних IP-адрес. Резервне
копіювання даних та регулярне оновлення системи безпеки також є
невід'ємною частиною захисту бази даних.
Також варто налаштувати моніторинг бази даних для відстеження її
стану і продуктивності. Використання інструментів моніторингу дозволяє
виявляти потенційні проблеми на ранніх стадіях і швидко реагувати на них.
Це включає відстеження використання ресурсів, таких як CPU, пам'ять і диск,
а також аналіз продуктивності запитів.
Інтеграція бази даних з PM2 може бути реалізована через екосистемний
файл конфігурації, який містить усі необхідні налаштування для запуску
додатка разом з базою даних. Це забезпечує узгодженість і автоматизацію
процесу розгортання, що полегшує управління системою.
Отже, налаштування бази даних MySQL є критичним етапом для
забезпечення стабільної та ефективної роботи розробленої системи.
4
482.ЧДТУ.46014-01 34 01
Правильна конфігурація, безпека, моніторинг і інтеграція з PM2
забезпечують надійність і високу продуктивність системи, що є основою для
успішного її функціонування у виробничому середовищі.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Джонсон Л. С. Системи моніторингу: від теорії до практики /
Джонсон Л. С. – Нью-Йорк: Кембридж Універсіті Прес, 2019. – 320 с.
2. Марків О. В. Методи та технічні засоби моніторингу якості повітря в
міському середовищі / Марків О. В. – Київ: Техніка, 2020. – 248 с.
3. Сміт Дж. Роль сучасних технологій у вдосконаленні систем
моніторингу стану довкілля / Сміт Дж. – Лондон: Стенфорд Прес,
2018. – 412 с.
4. Скотт Ч. GraphQL: Повний посібник по використанню та розробці
веб-застосунків / Ч. Скотт. – К.: ДК Пресс, 2020. – 352 с.
5. Абрахамян Р. GraphQL: Заснована на даних і практиці / Р. Абрахамян.
– Київ: БХВ-Петербург, 2019. – 288 с.
6. Кларк А. GraphQL в дії: Побудова ефективних API / А. Кларк. – К.:
ДК Пресс, 2018. – 416 с.
7. Лі К. Програмування GraphQL: Підходи і інструменти / К. Лі. – Сан-
Франциско: O'Reilly Media, 2017. – 254 с.
8. Міллер Д. GraphQL: Новий підхід до розробки сучасних веб-
застосунків / Д. Міллер. – Лондон: Packt Publishing, 2019. – 312 с.
9. Кларк Д. "GraphQL: Повний посібник для початківців та
професіоналів" / Д. Кларк. - Лондон: Packt Publishing, 2020. - 312 с.
10. Рей Л. "GraphQL в дії" / Л. Рей. - Сан-Франциско: Manning
Publications, 2019. - 280 с.
11.Хьюстон Д. "Learning GraphQL: Declarative Data Fetching for Modern
Web Apps" / Д. Хьюстон: O'Reilly Media, 2018. - 220 с.
Арк.
ЧДТУ.246014.001 ПЗ 80
Змн. Арк. № докум. Підпис Дата
12.Міллер К. "Mastering GraphQL: Declarative Data Fetching for Modern
Web Apps" / К. Міллер. - Сан-Франциско: Packt Publishing, 2019. - 340
с.
13.Петерсон Е. "GraphQL: Практичні приклади та вправи" / Е. Петерсон.
- Нью-Йорк: Apress, 2020. - 280 с.
14. Чендлер Д. "Building GraphQL APIs with ASP.NET Core" / Д. Чендлер.
- Бостон: Packt Publishing, 2019. - 312 с.
15. Лі Д. "Hands-On Full Stack Web Development with GraphQL and React"
/ Д. Лі. - Сан-Франциско: Packt Publishing, 2020. - 340 с.
16. Гомес А. "Beginning GraphQL: Fetch data faster and more efficiently
whilst improving the overall performance of your web application" / А.
Гомес. - Лондон: Wiley, 2018. - 240 с.
17. Сміт П. "GraphQL: Up and Running: Building APIs for the modern web"
/ П. Сміт: O'Reilly Media, 2019. - 200 с.
18. Девлін Р. "Pro GraphQL for .NET: Scalable APIs for the modern web" /
Р. Девлін. - Бостон: Apress, 2020. - 280 с.
19. Янг Т. "Fullstack GraphQL Applications with GRANDstack" / Т. Янг. -
Сан-Франциско: O'Reilly Media, 2021. - 320 с.
20.Родрігез М. "Hands-On GraphQL for Better APIs: Build modern, data-
driven APIs with GraphQL" / М. Родрігез. - Лондон: Packt Publishing,
2021. - 280 с.
Арк.
ЧДТУ.246014.001 ПЗ 81
Змн. Арк. № докум. Підпис Дата