База даних публічних реактивних функціональних сигналів

Автор(и)

  • Д. Вітковський КПІ ім. Ігоря Сікорського, Україна
  • С. Теленик КПІ ім. Ігоря Сікорського, Україна

DOI:

https://doi.org/10.20535/1560-8956.45.2024.313200

Ключові слова:

база даних, реактивне програмування, сигнали, функціональне програмування, ефекти, події, черги повідомлень

Анотація

Об’єктом дослідження є процеси комунікації між функціональними компонентами програмного забезпечення інформаційних систем. Мета полягає у підвищенні ефективності комунікації між компонентами таких систем та коректної синхронізації їх станів. Сформульована проблема підвищення ефективності комунікації між функціональними компонентами складних систем з мікросервісною архітектурою, та коректної синхронізації їх станів. У процесі аналізу існуючих підходів до вирішення сформульованої вище проблеми встановлено, що найпростішим способом комунікації між сервісами є REST API, але він не дозволяє зробити мікросервіси достатньо ізольованими, не гарантує доставку, отримання й зберігання повідомлень про транзакцію/зміну стану. Частину цих вимог задовольняють система повідомлень, такі як StormMQ, RabbitMQ, Apache Kafka та інші. Але вони не забезпечують зберігання даних, що не є повідомленнями. СКБД, наприклад MongoDB, надають певну гарантію доставки за рахунок «потоків змін» та журналу операцій, але вони дуже чутливі до налаштувань журналу. Обґрунтовано доцільність вирішення проблеми шляхом розповсюдження оновлень за допомогою стійких реактивних значень (сигналів). Запропонований підхід до вирішення проблеми на основі бази даних спеціальної структури та клієнтської бібліотеки-компаньйона, що поєднують у собі підхід до архітектури, керованої подіями, та функціональні реактивні сигнали. База даних публічних сигналів автоматично сповіщає підписників про зміни у значеннях та їх дочірніх вузлах. Запропоновано архітектуру рішення і концепцію його реалізації, варіант двійкового представлення шляху до вузлів у базі даних, описано алгоритми поведінки системи керування базами даних та клієнтських бібліотек стосовно публікації та оновлення даних у базі даних. Розроблено частковий прототип системи керування базами даних та бібліотеки для фреймворку SolidJS. Щоб розширити сценарії використання та варіанти міжсервісної комунікації, урізноманітнити поведінку застосунків-клієнтів, планується: розробити спеціальний двосторонній протокол зв’язку, до динамічної типізації даних додати статичну, розширити вибір примітивних типів і уможливити зберігання похідних сигналів та сигналів-тригерів, розробити інтерпретовану мову програмування, яка б дозволила виконувати комбінування сигналів у похідні. Для розподілених систем необхідно також реалізувати стійкі черги повідомлень для підписників, аби вони не втрачали послідовність змін у разі відмови клієнта або системи керування базами даних.

Бібл. 15, іл. 9.

Посилання

Моренець С. Особливості event-driven architecture на прикладах з практики. DOU.ua. URL: https://dou.ua/forums/topic/38182/.

Redis Ltd. Redis. Version 7.2.5. 2024. URL: https://redis.io/.

Redis keyspace notifications. Redis - The Real-time Data Platform. URL: https://redis.io/docs/latest/develop/use/keyspace-notifications/.

Linux Foundation. Valkey. Version 7.2.5. 2024. URL: https://valkey.io/.

Supabase Inc. Supabase. Version 1.24.4. 2024. URL: https://supabase.com/.

Subscribing to Database Changes. Supabase Docs. URL: https://supabase.com/docs/guides/realtime/subscribing-to-database-changes.

MongoDB, Inc. MongoDB. Version 7.3.2. 2024. URL: https://www.mongodb.com/.

MongoDB, Inc. Change streams. MongoDB Manual v7.0. URL: https://www.mongodb.com/docs/manual/changeStreams/.

Broadcom Inc. RabbitMQ. Version 3.13.3. URL: https://www.rabbitmq.com/.

Broadcom Inc. RabbitMQ Documentation. RabbitMQ. URL: https://www.rabbitmq.com/docs.

Kamina T., Aotani T. An approach for persistent time-varying values. SPLASH '19: 2019 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity, Athens Greece. New York, NY, USA, 2019. URL: https://doi.org/10.1145/3359591.3359730.

Kamina T., Aotani T. Harmonizing Signals and Events with a Lightweight Extension to Java. The Art, Science, and Engineering of Programming. 2018. Vol. 2, no. 3. URL: https://doi.org/10.22152/programming-journal.org/2018/2/5.

Kamina T., Ueno S. Distributed Persistent Signals: Architecture and Implementation. REBLS '22: 9th ACM SIGPLAN International Workshop on Reactive and Event-Based Languages and Systems, Auckland New Zealand. New York, NY, USA, 2022. URL: https://doi.org/10.1145/3563837.3568341.

RRB vector: a practical general purpose immutable sequence / N. Stucki et al. ACM SIGPLAN Notices. 2015. Vol. 50, no. 9. P. 342–354. URL: https://doi.org/10.1145/2858949.2784739.

Carniato R. SolidJS. Version 1.8.17. 2024. URL: https://www.solidjs.com/.

##submission.downloads##

Опубліковано

2024-10-15 — Оновлено 2024-10-28