Інтеграція AWS AppSync у мобільний застосунок

Розсинхронізація даних між пристроєм і сервером непомітно підриває довіру користувачів до застосунку. Ми налаштовуємо інтеграцію AppSync під ключ: проєктуємо схему, режими синхронізації та офлайн-режим, щоб дані збігалися на всіх пристроях. Звертайтеся — повернемося з оцінкою та планом.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція AWS AppSync у мобільний застосунок
Складний
~3-5 днів
Часті запитання

Чому інтеграція AppSync у мобільний застосунок ламається на реальних навантаженнях

Інтеграція AppSync у мобільний застосунок майже завжди проходить гладко на стенді й починає сипатися в полі.

Причина не в самому сервісі, а в тому, що мобільний клієнт живе в умовах, яких немає в серверного коду: мережа зникає посеред запиту, застосунок згортають у фон, пристрій змінює Wi-Fi на стільникову мережу.

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

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

Без версіонування записів і стратегії розв'язання конфліктів остання відповідь мовчки затирає свіжіші дані, і користувач бачить застарілий стан.

Офлайн-режим мобільного застосунку тримається не на «збереженні в базу», а на строгому порядку застосування мутацій і явному правилі, чия версія запису перемагає.

Другий — дублі підписок у реальному часі. Екран перестворюється при повороті або поверненні з фону, щоразу відкриваючи нове з'єднання, і старі не закриваються. Клієнт отримує ту саму подію двічі-тричі, лічильники подвоюються, а канал тримає зайві сокети й палить батарею.

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

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

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

Що дає коректна інтеграція AppSync: режими синхронізації та їхній ефект

Режими синхронізації: що змінюється в цифрах

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

Ціна — постійне з'єднання й акуратна обробка обривів: без повторної підписки після втрати мережі інтерфейс тихо «замерзає» і показує застарілі дані.

Періодична синхронізація опитує сервер за розкладом і обходиться дешевше за ресурсами, але дає вікно розсинхрону — на повільних каналах воно зростає.

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

Ключове питання тут — розв'язання конфліктів: стратегія «перемагає останній запис» проста, але втрачає чужі правки, а версійне злиття за полями зберігає обидві сторони.

Варіант Коли підходить Обмеження
Реальний час чати, статуси, спільна робота потребує стабільної мережі, складніший відкат
Періодичне опитування каталоги, звіти, рідкісні оновлення вікно розсинхрону зростає з інтервалом
Офлайн-черга + злиття поля, склади, виїзні співробітники потрібна явна стратегія конфліктів

На практиці режими комбінують: довідники тягнуться опитуванням, критичні сутності — потоком, а запис завжди йде через чергу з версіонуванням. Такий розклад знімає цілий клас відмов — загублені правки при одночасному редагуванні та «залиплі» екрани після обриву зв'язку.

Ми налаштовуємо це на AWS AppSync, де підписки, офлайн-сховище й правила злиття описуються декларативно.

AWS AppSync

Етапи впровадження: від аудиту схеми даних до передачі документації

Впровадження синхронізації починається не з коду, а з аудиту схеми даних: які типи та поля вже є, як влаштовані зв'язки, де клієнти пишуть безпосередньо в базу, а де читають застарілі зрізи.

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

  1. Аудит схеми даних і поточних потоків. Звіряємо моделі, права доступу за операціями, розбираємо, які екрани застосунку читають і пишуть які сутності. На виході — список конфліктів і місць, де синхронізація зламає наявну логіку.
  2. Проєктування цільової схеми. Визначаємо типи, ключі розбиття та сортування, стратегію розв'язання конфліктів при одночасному редагуванні з кількох пристроїв, правила авторизації за власником запису.
  3. Налаштування синхронізації та офлайн-режиму. Підключаємо локальне сховище на пристрої, налаштовуємо черги відкладених змін і повторне надсилання після відновлення зв'язку, щоб застосунок працював без мережі та не втрачав правки.
  4. Навантажувальна перевірка мобільного застосунку. Прогоняємо сценарії з великою кількістю одночасних підписок, частими перемиканнями мережі та масовими правками. Дивимося, як поводяться час відгуку, обсяг даних, що передаються, і витрата батареї.
  5. Оптимізація за результатами замірів. Прибираємо надлишкові поля з відповідей, розбиваємо важкі запити, обмежуємо частоту оновлень там, де інтерфейсу достатньо періодичного опитування.
  6. Передача документації. Віддаємо опис схеми, правила доступу, сценарії синхронізації та офлайн-поведінки, інструкції з розгортання середовищ і чекліст для команди замовника.

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

Чим відрізняється офлайн-режим із локальною базою від прямої роботи із сервером?

Пряма робота із сервером означає, що кожен екран застосунку чекає на відповідь мережі. Поки з'єднання є, це виглядає просто: запит пішов, дані прийшли, інтерфейс оновився.

Але щойно зв'язок зник — метро, підвал, роумінг, перевантажена вежа — запити починають висіти, екрани показують порожнечу, а користувач або чекає, або йде. Інтеграція AppSync у мобільний застосунок якраз будується навколо того, щоб цей розрив не був видимий людині.

Офлайн-режим із локальною базою даних перевертає схему: застосунок пише й читає зі сховища на пристрої, а мережа стає фоновим синхронізатором. Користувач працює миттєво, незалежно від якості зв'язку, а зміни йдуть на сервер, коли канал з'явився.

Ціна — шар синхронізації, який потрібно спроєктувати: черга операцій, повторні спроби, порядок застосування.

Розв'язання конфліктів даних — головне, де ці два підходи розходяться за складністю. За прямих запитів до сервера конфлікту майже немає: сервер — єдине джерело правди, останній запис перемагає.

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

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

Вибір не бінарний: зазвичай беруть локальну базу для користувацьких даних і прямі запити для того, що зобов'язане бути свіжим — статуси, оплата, права доступу.

Кейс: як ми усунули розсинхронізацію даних у застосунку з тисячами активних користувачів

Клієнт — сервіс доставки із сотнями кур'єрів у зміні та десятками тисяч активних користувачів. Застосунок працював на REST-запитах: статус замовлення підтягувався опитуванням раз на кілька секунд, а зміни з різних пристроїв одного акаунта перетирали одна одну.

На пікових навантаженнях частка конфліктів сягала 18% від усіх змін статусу, а після втрати мережі клієнт показував застарілі дані до ручного перезапуску — відновлення займало хвилини й вимагало дій користувача.

Що переробили в шарі синхронізації

Ми перенесли обмін даними на керований GraphQL-шар із підписками: клієнт більше не опитує сервер, а отримує зміни по каналу.

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

Метрики до і після

Метрика До Після
Частка конфліктів змін до 18% нижче 1%
Відновлення після втрати мережі хвилини, вручну секунди, автоматично
Клас відмов «втрата правок» регулярний усунено
Навантаження на сервер від опитувань постійне лише фактичні зміни

Окремо налаштували офлайн-чергу: операції, зроблені без мережі, зберігаються локально й застосовуються під час відновлення з'єднання з перевіркою версії. Це закрило сценарій, коли кур'єр вносив статус у підвалі й втрачав його.

AWS AppSync дав керований шар підписок і резолверів без власної інфраструктури реального часу — команда не витрачала час на підтримку серверів з'єднань.

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

Технічні сумніви перед стартом: сумісність, міграція, відкат, доступи

Перед стартом інтеграції AppSync замовники найчастіше ставлять одне й те саме запитання: що буде з уже працюючим застосунком та його даними.

Відповідаємо предметно — інтеграція AppSync не вимагає переписувати клієнт повністю: наявні REST-виклики та локальний кеш продовжують працювати паралельно, а GraphQL-шар підключається зверху, у міру готовності екранів.

Міграція даних іде за схемою «подвійний запис → звірка → перемикання читання», тому на кожному кроці є точка повернення.

Що якщо після перемикання виявиться розбіжність у даних?

Відкат змін закладено в саму схему: читання повертається на попереднє джерело однією правкою конфігурації, без релізу застосунку. Подвійний запис при цьому зберігається, тому розбіжність закривається повторною звіркою, а не ручним відновленням.

Доступи та ролі описані окремими політиками — у кожного середовища свій набір прав, прод ізольований від тестових контурів.

Що якщо в команді немає досвіду з AppSync? Передаємо документацію щодо інтеграції: схему типів, приклади запитів і мутацій, розбір авторизації за ролями. Інженери замовника долучаються до роботи на етапі налаштування резолверів, а не після здачі.

Що якщо потрібно змінити провайдера авторизації? Шар доступу винесено окремо від бізнес-логіки — зміна провайдера зачіпає конфігурацію, а не код екранів.

На руки після здачі замовник отримує:

  • схему даних і опис типів із прикладами запитів;
  • конфігурації середовищ із розподілом прав доступу та ролей;
  • регламент міграції даних із точками звірки та умовами відкату;
  • інструкцію з відкату змін без релізу застосунку;
  • документацію щодо інтеграції для команди замовника;
  • набір перевірок для приймання — які сценарії та як тестувати.

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

Терміни етапів впровадження: що і в якій послідовності відбувається

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

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

Етапи 3–5 ідуть з частковим перекриттям: поки один інженер веде синхронізацію, другий готує переведення екранів — так загальний термін впровадження скорочується приблизно на третину без втрати контролю.

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

Окремо закладаємо етап навантаження та відмови: він показує, як застосунок поводиться при обриві зв'язку і поверненні в мережу, і часто виявляє конфлікти запису, які не видно на тестових даних. За підсумками цього етапу правки в схему вносяться до передачі, а не після виходу в продакшн.

AWS AppSync

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714