NearWave — досвід участі у розробці застосунку для знайомств
Мав нагоду долучитися до розробки нового додатку NearWave, який дозволяє надсилати приватні та публічні повідомлення людям поблизу.
Окрім знайомств, продукт можна використовувати і в побутових ситуаціях — наприклад, швидко попросити допомогу чи знайти павербанк неподалік :).
Product
NearWave — це мобільний додаток з функціоналом:
- приватних і публічних повідомлень у радіусі;
- live-відстеження геолокації;
- пошуку користувачів за географічною близькістю.
My tasks
Я працював у складі команди над мікросервісною архітектурою з використанням gRPC. Основні зони відповідальності:
- Identity Servic — авторизація, управління акаунтами, профілями та ролями;
- Proximity Service — live-трекінг координат користувачів, пошук людей поруч через гео-запити (MongoDB).
Tech stack
- Node.js / NestJS — основа бекенду;
- TypeScript — статична типізація;
- gRPC — взаємодія між мікросервісами;
- PostgreSQL + TypeORM — зберігання користувацьких даних;
- MongoDB (Geo queries) — пошук користувачів за геолокацією;
- Redis — кешування та зберігання сесій;
- JWT та ролева система доступів;
- Docker — контейнеризація сервісів;
- WebSockets — інтеграція з live-геолокацією.
Challenges
Під час роботи були й непрості ситуації. Наприклад, коли реалізовував ендпоінти для реєстрації та автентифікації користувачів, зіткнувся з проблемою інтеграції між мікросервісами через gRPC.
Частина контрактів (прото-файли) була реалізована некоректно до мене:
- методи сервісів не співпадали з оголошеннями в клієнті;
- виникали помилки через неправильні шляхи до
.protoфайлів; - інтерфейси не відповідали фактичній логіці.
У результаті сервіс не повертав access_token, і довгий час було незрозуміло, де саме виникає проблема — в моїй реалізації чи в контрактах. Після кількох ітерацій рефакторингу вдалося привести .proto до консистентного стану, і лише тоді інтеграція запрацювала стабільно.
Цей кейс навчив мене:
- завжди ретельно перевіряти узгодженість контрактів між мікросервісами;
- документувати зміни в
.protoта синхронізувати їх з командою; - не поспішати шукати помилку «у своєму коді», якщо підозра є на базові інтерфейси.
- і, мабуть, найголовніше — пам’ятати, що .proto генерує camelCase-поля, навіть якщо у файлі вони були написані у snake_case 😅.
Lessons learned
Проєкт дав мені практичний досвід у:
- побудові мікросервісної архітектури;
- інтеграції сервісів через gRPC;
- роботі з геолокаційними даними (MongoDB, live update);
- оптимізації бекенд-логіки для real-time сценаріїв;
- колаборації в команді над продакшн-рішенням.

Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів