Библиотека сайта rus-linux.net
Секреты производительности сетевых приложений для мобильных устройств
Глава 10 из книги "Производительность приложений с открытым исходным кодом".
Оригинал: Secrets of Mobile Network Performance
Автор: Bryce Howard
Дата публикации: 21 Сентября 2012 г.
Перевод: А.Панин
Дата перевода: 10 Января 2014 г.
Введение
В течение последних лет производительность сетевых приложений для мобильных устройств значительно увеличилась. Но многие приложения для мобильных устройств все так же не могут воспользоваться преимуществами выполненных оптимизаций из-за завышенных задержек при передаче данных по сети.
Задержки при передаче данных в течение длительного промежутка времени связывались с мобильным сетевым стеком. Благодаря прогрессивному развитию технологий в течение последних лет темп сокращения задержек при передаче данных не успевал за увеличением скорости передачи данных. Результат такого неравномерного развития заключается в том, что наиболее часто встречающимся фактором, ограничивающим производительность сетевых транзакций являются задержки при передаче данных, а не пропускная способность канала.
В рамках данной главы можно выделить два логических раздела. В первом разделе мы рассмотрим особенности осуществления сетевого взаимодействия приложениями для мобильных устройств, которые приводят к проблемам с задержками при передаче данных. Во втором разделе будут представлены программные техники, предназначенные для минимизации снижения производительности сетевых приложений в условиях повышенных задержек при передаче данных по сети.
Чего же вы ждете?
Задержка (latency) является временем, которое требуется для передачи пакета данных по сети или по множеству сетей. Мобильные сети увеличивают периоды задержек, которые и без того появляются при работе с большинством сервисов в Интернет ввиду множества факторов, включая тип используемой сети (т.е., HSPA+ или LTE), мобильного оператора (т.е., AT&T или Verizon) или другие обстоятельства (т.е., находится ли человек с мобильным устройством в одной точке или движется на автомобиле, географические координаты, время дня, и.т.д.). Достаточно сложно установить точные значения задержек при передаче данных по мобильной сети, но можно с уверенностью сказать о том, что они будут варьироваться от десятков до сотен миллисекунд.
Время обращения (Round-trip time - RTT) является мерой задержки, представленной временем доставки пакета данных из источника к точке назначения и назад. Время обращения имеет значительное влияние на производительность многих сетевых протоколов. Причины описанного влияния могут быть разъяснены на примере известной игры пинг-понг.
В игре пинг-понг время, требуемое для перемещения мяча от одного игрока к другому достаточно сложно оценить. Однако, участники турнира в ходе игры замечают, что тратят больше времени на ожидание мяча, чем на что-либо другое. Обычная пятиминутная игра в пинг-понг на обычной дистанции может растянуться на часы в том случае, если игроки будут находиться на расстоянии в тысячу футов друг от друга, как бы нелепо это не выглядело. Замените двух игроков на клиент и сервер, а дистанцию между игроками на время обращения и вы начнете понимать суть проблемы.
Большая часть протоколов использует приемы из пинг-понга в стандартном процессе своей работы. Эти передачи, если вам угодно, являются обращениями сообщений, необходимыми для установления и обслуживания логической сетевой сессии (т.е., соединения на уровне протокола TCP) или передачи сервисного запроса (т.е., запроса по протоколу HTTP). В ходе этого процесса обмена сообщениями передается малый объем данных или они вообще не передаются, поэтому пропускная способность сети практически не используется. Задержка значительно усугубляет масштабы этого недостаточного использования пропускной способности канала; каждый обмен сообщениями приводит к возникновению задержки, длящейся, как минимум, в течение времени обращения данных в сети. Это обстоятельство оказывает совокупное заметное влияние на производительность приложения.
Рассмотрим HTTP-запрос на скачивание объекта размером в 10 Кб, который предусматривает выполнение 4 обменов сообщениями. Теперь предположим, что время обращения равно 100 мс (довольно типичное время для мобильной сети). Принимая во внимание оба предположения, мы приходим к эффективной пропускной способности канала в 10 Кб в 400 мс или в 25 Кб в секунду.
Следует учесть, что пропускная способность канала вообще не рассматривается в приведенном примере - не имеет значения, как быстро работает сеть, ведь результат выполнения запроса остается все тем же, 25 Кб/с. Производительность предыдущей операции или любой аналогичной ей может быть улучшена исключительно путем использования четкой стратегии: необходимо предотвращать взаимный обмен сообщениями между клиентом и сервером в сети.
Продолжение статьи: Мобильные сотовые сети.