Версия 1.2: виджет, AMOLED и четыре гигабайта трафика

Уже через несколько часов в Google Play появится версия 1.2 нашего приложения Цитаты Forismatic.

Обновление, скажем прямо, получилось немного сырым: не продуман дизайн новых элементов, не столь тщательно как всегда протестированы новые функции, однако мы были вынуждены поспешить: в ходе использования прежней версии на тестовом аппарате внезапно кончился мобильный интернет, а в статистике появилась такая вот картинка:

Четыре. ГИГАБАЙТА!!! Трафика!
Четыре. ГИГАБАЙТА!!! Трафика!

Как вам? Приложеньице, грузящее короткие отрывки текста и крошечные картиночки, вдруг употребляет ЧЕТЫРЕ ГИГАБАЙТА в одно рыльце!!!

Понятно, что нельзя было ждать когда это вылезет у реального пользователя, и мы немедленно приступили к поиску виновных. И нашли — надо сказать, довольно быстро. Кто же отличился таким аппетитом?

Впрочем, здесь мы сперва сделаем небольшое лирическое отступление и прочитаем краткий курс устройства сетей для самых маленьких, или же просто для непосвящённых.

Как идёт запрос к серверу?

Представьте, что нам нужно запросить некие данные по протоколу HTTP — тому самому, по которому ходит в сеть ваш браузер, по которому сейчас загрузилась эта самая страница и по которому работает в том числе наше приложение-цитатник.

Вы, что-то спрашивающий, называетесь клиентом. Ну, не лично вы, а обращающееся к сети приложение. Нужные данные хранит и передаёт по сети сервер — другое приложение на удалённом компьютере, доступное по некому адресу. Ну а стандартная методика обмена данными, которую они используют, как раз и есть HTTP — HyperText Transfer Protocol, названный так и-за своей изначально узкой специализации, но сейчас уже весьма универсальный.

Выглядеть это может так:

Клиент посылает запрос, сервер отдаёт ответ
Клиент посылает запрос, сервер отдаёт ответ

Может выглядеть, но… не выглядит! Вероятность соединения с сервером напрямую крайне мала, в реальности запрос почти всегда пойдёт по длинной цепочке посредников: маршрутизаторов, серверов интернет-провайдера и прочих-прочих. Вот так:

Цепочка узлов. В реальности там иногда десятки звеньев.
Цепочка узлов. В реальности там иногда десятки звеньев.

Каждый из узлов цепочки проксирует запрос (т.е. передаёт его далее, а затем так же пробрасывает назад полученный ответ), а потому называется прокси-сервером (proxy server) или просто прокси. Все прокси в цепочке «прозрачные» (transparent proxy), то есть клиент даже не знает как там шёл его запрос. Да и не нужно это знать: спросил — ответили, остальное лирика!

Однако же на схеме представлена идеальная ситуация с честной передачей запросов «как есть». В реальности прокси может хитрить: просто дополнять запросы своими ценными комментариями, или же вовсе никуда их больше не посылать, а сразу вернуть заранее известный ему ответ — тот, что пришёл на такой запрос в прошлый раз. Подобная схема называется кэширующий прокси:

Ой! А сервер-то так никто и не спросил!
Ой! А сервер-то так никто и не спросил!

Зачем используют кэширующие прокси? Здесь несколько причин: и ускорение ответа, и экономия владельца прокси на трафике, и просто старая добрая традиция. Ничего плохого в этой схеме нет, но только при одном условии: если прокси верно определяет условия кэширования! Иначе говоря, если запрошенные данные действительно должны оставаться неизменными раз от раза.

И вот здесь возникает проблема

Дело в том, что запросы к серверу Forismatic не слишком сильно отличаются друг от друга. Это один и тот же запрос: «а дай-ка мне ещё одну случайную цитату вот на таком языке!» (естественно, выраженный «по-машинному»).

Сервер при этом далеко не всегда отдаёт новую цитату: довольно часто она совпадает с предыдущей полученной. Согласитесь, это было бы странно: вы обновили цитату, всё вроде успешно — а текст не поменялся! Потому в подобном случае приложение идёт на маленькую безобидную хитрость: ждёт полсекунды и повторяет запрос случайной цитаты. Но иногда сервер возвращает тот же текст и в третий раз, а бывает что и в четвёртый. Потому запросы идут до тех пор, пока текст не изменится.

И тут на пути встаёт кэширующий прокси, который замечает один и тот же отправляемый запрос с одним и тем же ответом… Уже понимаете, да? Приложение упорно получает от прокси одинаковый текст, и его изменения не дождётся теперь никогда (ведь прокси считает, что раз данные запрашиваются с такой частотой, то их высокая ценность вне всяких сомнений). Вот по капле, по капле, и накапало четыре гигабайта… Четыре гигабайта одной и той же строчки с чьей-то умной мыслью!

Как мы это починили?

Разумеется, чинится это элементарно.

Мы добавили к запросу специальные заголовки, вежливо просящие все встретившиеся по пути прокси обойтись без самодеятельности. Для особо упорных прокси мы при этом подмешиваем немного яда в сам запрос: небольшой кусочек случайных данных, которые будут проигнорированы получателем, но делают запрос будто бы сильно отличающимся от предыдущего. Наконец, если прокси настраивали бессердечные садисты, мы ограничиваем общее количество запросов: даже в самом невероятном случае оно уже не будет бесконечно большим.

Срочно обновитесь!

Скажу честно: очень стыдно за такую «детскую» ошибку, из-за которой могли финансово пострадать простые любители афоризмов! Ведь знал же, что повторяющиеся запросы всегда нужно травить! Но увы… Потому, в порядке извинения, и была выпущена слегка сырая, но очень вкусная версия:

Что нового?

Во-первых, мы добавили тёмную тему, которую просили в отзывах к приложению. На данный момент она выглядит вот так:

Первая версия тёмной темы
Первая версия тёмной темы

К сожалению, дизайн ещё не согласован до конца, а потому (вероятнее всего) будет изменяться. Но это уже мелочи, а главное — сама функция — сделано! И мы собираем отзывы по её работе.

Во-вторых, мы сделали виджет для главного экрана телефона. Выглядит он пока что вот так:

Сплошное заимствование из нового дизайна погодного виджета Google!
Сплошное заимствование из нового дизайна погодного виджета Google!

Здесь всё ещё интереснее: не только не до конца проработан дизайн, но и сами функции виджета пока ещё сделаны примитивно — с дублированием функций основного приложения. Но и это уже может быть удобным для многих просивших виджет пользователей, а запросы новых функций — как всегда, активно принимаются! Где угодно, по любым каналам связи!

Стараемся для вас!

И, немного раскрывая карты: в новой версии постараемся что-то сделать с неудачными найденными портретами. А то сплошное безобразие: то Ницше с папиросой, то Шекспир с дакфейсом, а то и вовсе некие развратницы вместо достойных мужей!

Оставайтесь с нами!

QR-код для удобства
QR-код нашего приложения для удобства
Версия 1.2: виджет, AMOLED и четыре гигабайта трафика
5, голосов: 6


Комментарии:

Один комментарий на «“Версия 1.2: виджет, AMOLED и четыре гигабайта трафика”»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Капча (решите пример) *