ВИКОРИСТАННЯ ASYNCLOCALSTORAGE ДЛЯ МУЛЬТИТЕНАНТНОСТІ В NODEJS ДОДАТКУ - Наукові конференції

Вас вітає Інтернет конференція!

Вітаємо на нашому сайті

Рік заснування видання - 2011

ВИКОРИСТАННЯ ASYNCLOCALSTORAGE ДЛЯ МУЛЬТИТЕНАНТНОСТІ В NODEJS ДОДАТКУ

29.03.2023 09:35

[1. Інформаційні системи і технології]

Автор: Ронський Святослав Ігорович, аспірант, Державний університет “Житомирська політехніка”, м. Житомир



За результатами дослідження популярності мов програмування, що проводилося спільнотою DOU (dou.ua), в загальному рейтингу за 2022 рік мова програмування JavaScript посіла перше місце (18,8%), а мова TypeScript – шосте (10,4%). Якщо розглядати популярність мов в контексті бекенд розробки, то TypeScript посів сьоме місце (3,3%), JavaScript – восьме (3%) [2]. Оскільки ці мови дозволяють розробляти як бекенд так і фронтенд частини додатку, зростає популярність цих мов і кількість написаних на них додатків. Основним середовищем для виконання бекенд коду на цих мовах є платформа NodeJS [3].

Класичні корпоративні клієнт-серверні додатки часто адмініструються в межах однієї організації. Інфраструктура таких додатків зазвичай розрахована на те, що один екземпляр програмного забезпечення працює з одним замовником або організацією. З метою оптимізації інфраструктурних витрат, виникає потреба в можливості роботи декількох замовників з одним додатком. Також, з ростом можливостей вебсерверів та браузерних технологій, все більше розробників вибирають модель розповсюдження “software as a service”. Властивість програмного забезпечення обслуговувати декілька відокремлених замовників, так званих тенантів, прозоро розподіляючи наявні ресурси називають мультитенатністю [1]. 

Розглянемо один з варіантів вирішення питання передачі ідентифікатора поточного тенанту між архітектурними шарами у NodeJS додатку. Для прикладу будемо використовувати фреймворк NestJS [4], виключно HTTP контекст та елементи чистої архітектури [5]. З точки зору архітектури, шар бізнес логіки повинен бути незалежним від контексту виклику чи шару персистентності:




В спрощеному вигляді схожу схему залежності шарів буде мати і багатошарова архітектура з використанням принципу інверсії залежностей. Розглянемо можливий вигляд контроллера [4], який буде виступати в ролі Application Layer:





Оскільки наш додаток є мультитенатним, код будь-якого репозиторію повинен знати ідентифікатор поточного тенанту. З іншого боку, оскільки дані та бізнес логіка ізольовані між тенантами, прошарок бізнес логіки може не залежати від тената як такого, тому передача параметру в цей шар є надмірним. Одним з вирішенням проблем може бути створення сервісів в “request scope” [4], але такий спосіб не є ефективним з точки використання ресурсів. 

Розглянемо вирішення цієї проблеми з використанням AsyncLocalStorage [3]. AsyncLocalStorage дозволяє зберігати та передавати певні дані через контекст асинхронних викликів. Ми можемо створити інтерцептор [4] для контексту HTTP викликів та підключати його глобально чи окремо для кожного контролера. Інтерцептор може оперувати екземпляром AsyncLocalStorage та сетити в нього tenantId. В інфраструктурному шарі ми знову можемо працювати з AsyncLocalStorage та отримувати з нього tenantId. Таким чином ми позбуваємося потреби в передачі tenantId через шар бізнес логіки.

Література

1. Defining Multi-Tenancy: A Systematic Mapping Study on the Academic and the Industrial Perspective [Електронний ресурс] / J.Kabbedijk, C. Bezemer, S. Jansen, A. Zaidman // Journal of Systems and Software 100 - October 2014. – 2014. – Режим доступу до ресурсу: https://www.researchgate.net/publication/267455810.

2. Шевченко Р. Рейтинг мов програмування 2022 [Електронний ресурс] / Р. Шевченко, І. Яновський. – 2022. – Режим доступу до ресурсу: https://dou.ua/lenta/articles/language-rating-2022.

3. NodeJS documentation [Електронний ресурс] – Режим доступу до ресурсу: https://nodejs.org/en/docs. 

4. NestJS documentation [Електронний ресурс] – Режим доступу до ресурсу: https://docs.nestjs.com.

5. Мартін Р. Чиста архітектура: Мистецтво розроблення програмного забезпечення / Роберт Мартін. – Харків: Видавництво "Ранок", 2020. – 368 с.

__________________________________________________________________________________

Науковий керівник: Кубрак Юрій Олександрович, кандидат технічних наук, доцент




Creative Commons Attribution Ця робота ліцензується відповідно до Creative Commons Attribution 4.0 International License
допомога Знайшли помилку? Виділіть помилковий текст мишкою і натисніть Ctrl + Enter
Конференції

Конференції 2024

Конференції 2023

Конференції 2022

Конференції 2021



Міжнародна інтернет-конференція з економіки, інформаційних систем і технологій, психології та педагогіки

Наукова спільнота - інтернет конференції

:: LEX-LINE :: Юридична лінія

Інформаційне суспільство: технологічні, економічні та технічні аспекти становлення