Не ответ на весь ваш вопрос, но то, что я начал делать, это помогает с мобильной точки зрения поместить слой между логикой, которая отправляет данные синхронизации сервера и сам веб-сервер.
Я создал объект данных, который является просто универсальным объектом синхронизации, в котором хранится уникальный идентификатор, полезная нагрузка и дата последней попытки доставки. У меня есть еще одна логика, которая захватывает объекты синхронизации из основных данных и отправляет их. Если получен хороший ответ (т. Е. Ответ действительно вернулся, а текст ответа соответствует ожидаемому), этот объект синхронизации удаляется. Это помогает обеспечить правильную передачу данных синхронизации в пункт назначения, а не просто потеряться в море. Это также хорошая модель для работы в автономном режиме. Вы можете просто сохранить объекты синхронизации в автономном режиме и начать отправлять их по порядку, как только вернетесь в сеть.
С точки зрения Интернета, Rails Metal звучит так, как будто это подходит для такой ситуации. Я никогда не использовал его сам, но, судя по некоторым прочтениям, похоже, что Metal предназначен для ситуаций, когда возможен высокий трафик и быстрые ответы очень важны. Это в основном сокращает накладные расходы маршрутизатора Rails и тому подобное. Надеюсь, это поможет.