01 / Realtime-сервіси · власний продукт

Mnemos.

Події Cristalix SAO в реальному часі, підписки, профілі та акаунти.

РольСамостійна розробка
СтанАктивний продукт
КороткоПриблизно 150 користувачів
M. MNEMOS / ACCOUNT HOME
EVENTS · ACCOUNTS · REALTIME Mnemos ~150 people using the platform
Real Mnemos application account home: active events, daily rewards, wallet, roles, teams and activity
KOTLIN / KAFKA / REACTAPPLICATION INTERFACE

Застосунок Mnemos. Справжній екран головної сторінки акаунта.

Про проєкт

Події, підписки та інші функції Mnemos

Mnemos починався як спосіб стежити за подіями Cristalix SAO без постійного перегляду гри. Згодом це переросло в платформу зі стрічкою подій, підписками, профілями гравців, командами, сповіщеннями, нагородами й керуванням акаунтом.

Я самостійно спроєктував і реалізував backend, вебзастосунок та розгортання. Mnemos користувалися близько 150 людей, частина можливостей була платною. Проєкт підтримую й надалі вдосконалюю.

Справжній головний екран Mnemos: активний акаунт, події, нагороди, гаманець, команда та активність
Інтерфейс продукту

Головна сторінка акаунта

На цьому екрані об’єднані поточний акаунт, глобальні події, щоденні нагороди, баланс, члени команди й остання активність. Ці розділи працюють із даними різних сервісів Mnemos.

Відкрити скриншот
Моя робота

Що я розробив

  • Сервіси Kotlin/Spring Boot, контракти між ними та обробка подій через Kafka.
  • Акаунти, права доступу, Keycloak і realtime-з’єднання.
  • Вебінтерфейс React/TypeScript, Telegram-інтеграція, розгортання та діагностика.
Приклад реалізації

Від ігрової події до сповіщення

Обробка подій — одна з основ Mnemos. Подія має потрапити в стрічку та до користувачів із відповідними підписками. Водночас повторне повідомлення від джерела не повинно створювати дублікати.

01

Збирання

Окремий collector фіксує підтримувану активність і надсилає звіт через автентифіковане з’єднання до realtime-service.

02

Обробка

event-service перевіряє, нормалізує й зберігає подію. Повторні звіти відсікаються під час обробки.

03

Публікація

Доменні події поширюються через Kafka. Механізми outbox/inbox враховують повторну доставку та повторні спроби.

04

Доставка

Realtime оновлює підключені клієнти. notification-service перевіряє підписки й передає відповідні повідомлення Telegram-інтеграції.

Collector не мусить знати про профілі, налаштування підписок або Telegram. Кожна частина системи обробляє свою відповідальність.

Технічні рішення

Технічні деталі

01

Межі сервісів

Backend розділений за функціями продукту: акаунти, події, сповіщення, каталог гравців, профілі, гаманець, соціальні функції та realtime-транспорт. Кожен сервіс відповідає за власну логіку та контракти. HTTP використовується для синхронних операцій, Kafka — для змін, на які мають реагувати інші сервіси.

У спільних бібліотеках залишаються механізми авторизації, обміну повідомленнями та інфраструктурний код. Спільну доменну модель між сервісами не створював.

02

Надійність обробки подій

Оновлення бази даних і публікація повідомлення не мають розходитися при збої. Для вихідних подій використовую transactional outbox, а на стороні споживачів — inbox та дедуплікацію. Це дозволяє обробляти повторну доставку без появи другої логічної події.

Швидка доставка в інтерфейс винесена окремо від постійного зберігання: WebSocket передає оновлення клієнтам, а за цілісність стану відповідають доменні сервіси.

03

Зовнішні API та експлуатація

Каталог гравців відповідає за визначення особи, присутності в грі й поточного SAO-реалму. Роботу із зовнішнім API обмежують квоти, cooldown, окремі канали запитів та метрики черг і застарілих спостережень.

Частина планових задач поки виконується лише в одній репліці, оскільки rate limiter процесно-локальний. Цю межу задокументував і враховую під час розгортання.

Технології
KotlinSpring BootApache KafkaPostgreSQLRedisKeycloakReact
Результат

Що вийшло

Mnemos — продукт, який вийшов за межі початкової стрічки подій і має реальних користувачів. Я продовжую підтримувати його, розгортати зміни й виправляти проблеми, що виникають під час експлуатації.

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

Наступний проєктWaveCode