Дослідження надійності системи розгортання мікросервісів у веб-сервісах
Автор: Федоришин Богдан Володимирович
Кваліфікаційний рівень: магістр
Спеціальність: Проектування та адміністрування інформаційних комунікаційних мереж
Інститут: Інститут телекомунікацій, радіоелектроніки та електронної техніки
Форма навчання: денна
Навчальний рік: 2023-2024 н.р.
Мова захисту: українська
Анотація: На сьогоднішній день існує багато способів та підходів до розгортання інформаційних систем. В даній роботі розглядаються основні недоліки та переваги даних підходів, основну увагу приділено двом підходам, а саме - розгортання мікросервісів в кластері Kubernetes та розгортання мікросервісів в хмарному провайдері AWS. Для реалізації порівняльного аналізу було практично проведено розгортання інформаційної системи з використанням обох підходів. В якості інформаційної систему було розроблено та використано веб-застосунок написаний на мові програмування python, який на вхід приймає число, а на вихід видає число з ряду Фібоначчі для заданого вхідного числа. Даний застосунок написано з використанням бібліотеки flask та , для зручного використання під час розгортання та експлуатації системи, створено docker image з вмістом даного застосунку. Розгортання в хмарному провайдері AWS проводилося з використанням підходу інфраструктура як код Iac, використовуючи інструмент Terraform було описано хмарну інфраструктуру у вигляді двох Ec2 інстансів типу m5.large та з використанням операційної системи linux amazon, для рівномірного розподілення трафіку використовується балансувальник навантаження load balancer з почерговою стратегією розподілення. Далі розгорнуту інфраструктуру налаштовано за допомогою інструменту Ansible, використовуючи ansible-playbook, а саме - встановлено docker engine на операційну систему, завантажено docker image веб-застосунку, який був попередньо зібраний та опублікований в репозиторії docker hub, та запуск docker контейнера з прокиданням порту 80 для обробки http запитів. Час розгортання системи був визначений з використанням bash скрипта, який фіксує час початку розгортання системи та час, коли система повністю розгорнута. Після чого було проведено навантаження на систему використовуючи python скрипт. який тисячу раз надсилав запит на веб-застосунок з випадковим чином згенерованим вхідним параметром в діапазоні від 10 000 до 20 000. Даний скрипт виводив результат проведення тестування у вигляді списку серверів та кількості оброблених ними запитів. Після цього проводиться перевірка графіків завантаженості CPU на серверах використовуючи інструмент хмарного провайдера AWS - CloudWatch, далі проводиться імітація виходу частини обладнання з ладу шляхом примусового виключення одного з інстансів ec2 та проводиться повторне тестування завантаженості системи, порівнюються графіки завантаженості CPU, з яких видно, що весь трафік припадає на один сервер, який збільшив використання CPU через більшу кількість запитів. Для розгортання мікросервісів в кластері Kubernetes використовується попередньо створений та налаштований Kubernetes кластер в хмарному провайдері AWS з аналогічними серверними потужньостямит для кожної з нод - m5.large, що дозволяє провести порівняння двох систем в наближених умовах. Для розгортання системи в Kubernetes використовується декларативний спосіб розгортання kubectl apply з попередньо створених файлів з описом архітектури, а саме - використовується тип Deployment з кількість реплік 3 шт. Також аналогічно з першим підходом - використовується балансувальник навантаження, який реалізований за допомогою компонента Kubernetes - Service. Після розгортання системи в кластері проводиться тестування навантаження системи тим самим python скриптом, після чого імітується вихід частини обладнання з ладу шляхом примусового відключення двох нод, в даному випадку двох ec2 типу m5.large. Після виходу з ладу двох серверів проводиться повторний тест навантаження та аналізується графік навантаження мережі та CPU з якого видно, що навантаження на сервер, який залишився не зросло, оскільки Kubernetes автоматично підняв необхідну кількість реплік застосунку на інших нодах. Висновки даного дослідження дають нам глибоке розуміння ефективності та відмінностей двох основних підходів до розгортання інформаційних систем - використання Kubernetes у кластері та хмарного провайдера AWS. Обидва підходи мають свої переваги та недоліки, але детальний порівняльний аналіз може служити важливим кроком при виборі оптимального рішення для конкретного проекту. Розгортання мікросервісів в кластері Kubernetes дозволяє зручно та ефективно управляти ресурсами, забезпечуючи автоматичну масштабованість та відновлення після виходу частини обладнання з ладу. Автоматичне управління репліками та використання кластера для балансування навантаження дозволяють системі демонструвати високий рівень надійності та стабільності при виході з ладу окремих компонентів той час як розгортання в AWS забезпечує високий рівень гнучкості та легкість інтеграції з іншими сервісами хмари. Проте, при виході з ладу окремих серверів, система виявляє велику чутливість до втрати ресурсів, що може призвести до перебоїв у роботі. Важливим аспектом є інструментарій, використаний для автоматизації розгортання та управління - Terraform та Ansible для AWS, та kubectl для Kubernetes. Їх правильне використання визначає ефективність та стабільність процесу. У цілому, обидва підходи є цінними з точки зору можливостей розгортання, але їх вибір повинен бути обґрунтованим з урахуванням конкретних вимог проекту, його масштабів та технічних характеристик.