Aria2
Материал из Mandriva Russian Community Wiki
Содержание |
Введение
Программа aria2 была интегрирована в качестве менеджера закачек в urpmi по двум причинам:
- увеличение скорости закачки путём выбора наилучшего зеркала;
- откат при возникновении ошибок на зеркале (ошибки синхронизации, доступности и т. д.).
Представление
Преимущества
Актуальная версия программы aria2, находящаяся в svn, включает в себя новую возможность, которая позволяет хранить статистику о серверах загрузки. Эта статистика разбирается URI Selector, который предоставляет URL загрузочному движку aria2. Новый URI Selector, названный Adaptive, был разработан для улучшения работы загрузки небольших файлов таких, как RPM.
Отличия aria2 от классических менеджеров закачки
Прежде всего, отметим, что aria2 может скачивать файлы посегментно, что позволяет загружать один и тот же файл с нескольких серверов одновременно. Она также поддерживает файлы metalink, для файлов этого типа можно определять зеркала. Добавляя источники для каждого файла, aria2 может выбрать наиболее быстрое для пользователя зеркало и отступить, если на одном из них возникает ошибка.
Примеры
Когда вы работаете с традиционными менеджерами закачки (например, curl), вы определяете зеркало (например, ftp://ftp.free.fr). Каждый файл, необходимый urpmi, будет загружаться с этого сервера. Но в этом случае могут возникать следующие проблемы:
- зеркало может оказаться недоступным;
- зеркало может быть несинхронизированным;
- зеркало может работать медленно.
Для каждой из этих проблем у aria2 есть своё решение:
- если зеркало недоступно или несинхронизировано, aria2 автоматически попытается переключиться на следующий сервер;
- каждое зеркало тестируется, затем собирается статистика, которая позволяет выбрать наиболее выгодное зеркало при следующей закачке.
Определение зеркал
Для каждой закачки aria2 использует между 1 или 3 соединением определение размера файла. Как говорилось ранее, aria2 – сегментный менеджер закачек. Таким образом, каждый загружаемый файл разбивается на n частей. Каждая часть имеет размер 1 МБ. Количество соединений, используемых aria2 никогда не превышает количество сегментов файла.
Например, файл размер 2 МБ разбивается на 2 сегмента, таким образом, aria2 будет использовать не более 2 соединений.
- Размер файла <= 1 МБ: одно соединение.
- 1 МБ < размер файла <= 2 МБ: два соединения.
- 2 МБ < размер файла: три соединения.
Первое соединение использует одно из самых выгодных зеркал согласно статистике, хранящейся в файле на сервере aria2. Другие соединения (2 и 3) используются для тестирования зеркал, которые либо ещё не были протестированы, либо нуждаются в повторном тестировании. Эти соединения позволяют aria2 обновлять статистику к кэш-файле.
Как всё это работает?
Во-первых, в нашем случае aria2 для корректной работы нужны файлы metalink. Эту работу берёт на себя urpmi (нужная информация хранится в файле mirrorlist).
Urpmi
Файлы mirrorlist можно найти по URL следующего типа: http://api.mandriva.com/mirrors/basic.cooker.i586.list
continent=EU,zone=FR,country=France,city=Paris,latitude=48.87,longitude=2.33,version=cooker,arch=i586,type=distrib,url=ftp://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586 continent=EU,zone=FR,country=France,city=Paris,latitude=48.87,longitude=2.33,version=cooker,arch=i586,type=distrib,url=http://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586 ...
Видно, что здесь содержится некоторая информация, например координаты каждого зеркала. urpmi получает информацию о географическом местоположении пользователя по его часовому поясу и вычисляет, насколько близко находится пользователь по отношению к каждому из зеркал. Список зеркал сортируется и сохраняется с помощью программы urpmi в своём кэш-файле /var/cache/urpmi/mirrors.cache.
Каждый раз, когда urpmi нужно скачать какие-то файлы, она создаст файл metalink, используя информацию из файла mirrors.cache. Информация о близости к тому или иному зеркалу конвертируется в значения от «0» до «100» и используется в качестве предпочитаемого поля файла metalink.
<?xml version="1.0" encoding="utf-8"?>
<metalink version="3.0" generator="URPMI" xmlns="http://www.metalinker.org/">
<files>
<file name="drakxtools-curses-11.35-1mdv2009.0.i586.rpm">
<resources>
<url type="http" preference="99" location="fr">http://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
<url type="http" preference="98" location="fr">http://ftp.u-picardie.fr/mirror/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="97" location="fr">ftp://ftp.u-picardie.fr/mirror/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="96" location="fr">ftp://ftp.ciril.fr/pub/linux/mandrakelinux/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="95" location="fr">ftp://fr2.rpmfind.net/linux/Mandrakelinux/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="94" location="fr">ftp://ftp.u-strasbg.fr/pub/linux/distributions/Mandriva/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
<url type="http" preference="93" location="fr">http://fr2.rpmfind.net/linux/Mandrakelinux/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="92" location="nl">ftp://ftp.surfnet.nl/pub/os/Linux/distr/Mandrakelinux/devel/cooker/i586/media/main/release/drakxtools-curses-11.35-1mdv2009.0.i586.rpm</url>
</resources>
</file>
<file name="harddrake-11.35-1mdv2009.0.i586.rpm">
<resources>
<url type="http" preference="99" location="fr">http://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
<url type="http" preference="98" location="fr">http://ftp.u-picardie.fr/mirror/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="97" location="fr">ftp://ftp.u-picardie.fr/mirror/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="96" location="fr">ftp://ftp.ciril.fr/pub/linux/mandrakelinux/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="95" location="fr">ftp://fr2.rpmfind.net/linux/Mandrakelinux/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="94" location="fr">ftp://ftp.u-strasbg.fr/pub/linux/distributions/Mandriva/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
<url type="http" preference="93" location="fr">http://fr2.rpmfind.net/linux/Mandrakelinux/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
<url type="ftp" preference="92" location="nl">ftp://ftp.surfnet.nl/pub/os/Linux/distr/Mandrakelinux/devel/cooker/i586/media/main/release/harddrake-11.35-1mdv2009.0.i586.rpm</url>
</resources>
</file>
</files>
</metalink>
urpmi запускает aria2 с этим файлом metalink. Некоторые важные параметры aria2:
/usr/bin/aria2c --metalink-enable-unique-protocol=false --max-tries 1 --timeout 3 --metalink-servers 3 --uri-selector=adaptive --server-stat-of=/root/.aria2-adaptive-stats --server-stat-if=/root/.aria2-adaptive-stats --max-file-not-found 3 file.metalink
aria2
Версия aria2, используемая программой urpmi — актуальная версия svn, номер ревизии 685, с патчем, который добавляет URI Selector. Сначала, объясним каждый параметр, описанный выше:
- metalink-enable-unique-procotol=false позволяет aria2 скачивать с одного и того же сервера по нескольким протоколам, перечисленным в файле metalink.
- max-tries=1 разрешает только одну попытку для неудачного сервера.
- timeout=3 позволяет aria2 перейти к следующему зеркалу, если текущее не ответило в течение трёх секунд.
- metalink-servers 3 позволяет aria2 скачивать файл с не более чем с трёх серверов одновременно.
- uri-selector=adaptive сообщает aria2 использовать Adaptive URI Selector (более подробная информация представлена ниже).
- server-stat-if=/root/.aria2-adaptive-stats показывает, где aria2 может найти серверную статистику.
- server-stat-of=/root/.aria2-adaptive-stats показывает, где aria2 будет хранить обновлённую серверную статистику.
- max-file-not-found=3 прекращает загрузку после трёх неудачных попыток обнаружить файл на серверах.
Что такое URI Selector?
URI Selector является частью aria2, которая выбирает, какие зеркала файла metalink будут использоваться для закачки. В большинстве случаев, URI Selector делает выбор на основе серверной статистики.
Adaptive URI Selector
Этот URI Selector был написан после многочасового «мозгового штурма», и всё ещё нуждается в некоторых улучшениях. Первый кандидат в релизы Mandriva 2009.0 позволил оценить текущий алгоритм.
Отчёты о статистике
Каждый раз, когда aria2 скачивает что-то с зеркала, она записывает в файл серверной статистики информацию о производительности закачки. Целью этого является поддержание некоторой статистики о выборе наиболее выгодных зеркал при следующем запуске.

