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




Завдання
Нашим завданням була розробка серверної частини з масштабованою архітектурою та запасом міцності для пікових навантажень. У процесі роботи було реалізовано кілька важливих технічних рішень.
API для мобільних застосунків
У клієнта вже був готовий MVP на Node.js, тому ми не змінювали стек, адже він добре підходив для розв’язання завдання. Проєкт було повністю переведено на TypeScript, переписано й доопрацьовано наявні модулі, а також розроблено нові.
Важливою вимогою були повнота й актуальність документації до API, оскільки над мобільним застосунком працювала інша команда, і потрібно було забезпечити комфортну взаємодію. Для цього було впроваджено механізм генерації документації з коду. Завдяки цьому після внесення змін до вихідного коду документація залишається актуальною, а опис методів — повним.
Для зручності тестування й розробки було налаштовано кілька середовищ, щоб команда мобільного застосунку могла комфортно вести розробку, а клієнт — у будь-який момент проводити презентації для бізнес-партнерів.
Масштабована архітектура
Застосунок працює в надійному й перевіреному часом середовищі — Amazon Web Services.
Серверна частина складається з багатьох мікросервісів, кожен із яких відповідає за окрему функцію. Для обробки великої кількості запитів і автоматичного масштабування в міру зростання проєкту ми обрали AWS Lambda як середовище для запуску функцій. Це рішення від Amazon дає змогу зменшити витрати на налаштування й підтримку серверів та зосередитися на бізнес-завданнях.


Надійність
Для забезпечення надійності рішення застосовано всі доступні механізми AWS і налаштовано резервне копіювання.
Відмовостійкість
- Реплікація баз даних у кількох регіонах
- Реплікація пошукового індексу в кількох регіонах
- Автоматичне горизонтальне масштабування за допомогою Lambda-функцій
Резервне копіювання
Попри заходи для забезпечення безперебійної роботи, завжди залишається ризик виникнення позаштатної ситуації.
На цей випадок було налаштовано резервне копіювання критичних даних і механізми відновлення.
Централізований системний журнал
Для швидкого й зручного аналізу помилок та інших ситуацій було налаштовано централізоване сховище логів і доставку логів з усіх мікросервісів. Для входу й розподілу доступу було налаштовано єдиний SSO та реалізовано власний Identity Provider, який використовується і в інших сервісах компанії.
Система моніторингу
Налаштовано життєво важливі метрики для відстеження стану системи.
Покриття тестами
Критичну бізнес-логіку та API покрито автоматичними тестами, що підтримує високий рівень якості та допомагає уникати критичних помилок ще на етапі розробки.
Адміністративний інтерфейс
Для керування акаунтами, користувачами, пристроями та іншими елементами системи розроблено адміністративний інтерфейс на React — швидкий, зручний і адаптивний.


Результат
У результаті клієнт отримав масштабовану серверну платформу для мобільного продукту, готову до роботи з даними з натільних сенсорів. Проєкт продовжує розвиватися й готується до виходу на ринки США та Європи, а ми забезпечуємо технічну підтримку, додаємо новий функціонал і покращуємо наявний.





