1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lingfengx-x-downloader

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

x-downloader распределённый многонаборный загрузчик

Описание

x-downloader — это распределённый загрузчик, поддерживающий загрузку файлов по протоколам HTTP и FTP (включая поддержку загрузки m3u8 файлов).

Загрузчики имеют несколько веток:

biz_rpc_dev ветка: распределённый загрузчик на основе Netty с RPC (в процессе разработки)

nacos_mq ветка: распределённый загрузчик на основе Nacos и RabbitMQ (завершена)

Этот загрузчик использует стратегии планирования и распределения, объединённые с моделью производителя-потребителя, что позволяет естественно поддерживать следующие возможности:

динамическое изменение скорости загрузки (количество одновременно загружаемых файлов), просмотр прогресса загрузки, приоритетная загрузка (через MQ и внутреннюю очередь с приоритетами), возможность возобновления загрузки с пропущенного места, динамическое горизонтальное масштабирование (добавление новых узлов загрузки).

Архитектура

Описание архитектуры

Версия RPC

Ссылка на онлайн-схему архитектуры: https://www.processon.com/view/link/61e5236563768906b3e9a052

Последние обновления

Вызов удалённых сервисов достаточно прост (похоже на Feign)#### Реализация подробностей:

  • Интерфейсы, помеченные аннотацией @RpcClient, генерируются через динамическое прокси-соединение, создающее объекты, способные автоматически передавать данные через Netty, и внедряющиеся в контейнер Spring IOC
  • При получении объекта и выполнении его метода, активируется усиленное прокси-соединение, которое отправляет имя метода и его параметры через Netty целевому узлу
  • Целевой класс получает информацию RPC, использует рефлексию для поиска и вызова целевого метода в контейнере```java // Пример: Сервис A вызывает метод register сервиса B // Сервис A // Удалённый сервисный интерфейс @RpcClient("ServiceB") public interface ServiceB { void register(BasicFrame frame); }

class Test { // Или через @Autowired @Autowired private ServiceB serviceb;

// Использование удалённого сервиса
public void test() {
  serviceb.register(new BasicFrame());
}

} // Сервис B // Целевой метод @RpcComponent("ServiceB") public class ServiceB { @RpcHandler("register") public void register(BasicFrame frame) { // Вывод данных BasicFrame log.info(frame); } }


#### Технологические особенности

##### 8. Модель планирования задач
![](./readme/image/dispatcher.png)

##### 7. Модель обработки множества задач
![](./readme/image/multiply_task_thread_group_handler.png)

##### 6. Группа клиентов
![](./readme/image/clientGroup.png)

##### 5. Три модели архитектуры
![](./readme/image/модели_архитектуры.png)

##### 4. Схема обеспечения высокой доступности серверной части
![](./readme/image/схема_обеспечения_высокой_доступности_серверной_части.png)

##### 3. Быстрая и медленная буферные очереди
![](./readme/image/быстрая_и_медленная_буферная_очередь.png)

##### 2. Очередь временной и пространственной обработки
![](./readme/image/очередь_временной_и_пространственной_обработки.png)
##### 1. Распределение таблицы маршрутизации
![](./readme/image/распределение_таблицы_маршрутизации.png)

### Версия Nacos + RabbitMQ
![](./readme/image/x-downloader_архитектурный_чертёг.png)

#### Инструкция по использованию

Описание параметров задачи```json
{
    "timestamp": 1600000000, // отметка времени  
    "task": { // задача скачивания
        "id": 1001, // идентификатор задачи   
        "retryCount": 0, // количество попыток повторной отправки   
        "sourceFtpUrl": "ftp://xxx", // исходный адрес FTP   
        "targetFtpUrl": "ftp://ttt", // целевой адрес FTP   
        "fileType": 1, // тип файла   
        "priority": 10, // приоритет   
        "notifyUrl": "http://servername/callback/xxx", // адрес уведомления   
        "fileCode": "BDNxxx", // код файла   
        "status": 1, // состояние задачи скачивания   
        "startTime": 160000, // время начала скачивания   
        "finishTime": 160000, // время завершения скачивания   
        "duration": 10000, // продолжительность выполнения задачи   
        "taskServerInstanceId": "ip + port + xx" // уникальный идентификатор компонента nacos 
    }
}
```#### Участие в развитии


#### Проблемы, решаемые в следующей версии
1. [downloader] При возникновении ошибок у узлов скачивания отсутствует автоматическое распределение оставшихся задач в очередь.
2. [dispatcher] При возникновении ошибок у узлов скачивания отсутствует автоматическое распределение повторных задач в очередь.
3. [dispatcher] В случае независимости от xxljob текущий подход недостаточно совершенен.
4. Отсутствие визуализированного процесса отслеживания всего цикла задач.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Java
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lingfengx-x-downloader.git
git@api.gitlife.ru:oschina-mirror/lingfengx-x-downloader.git
oschina-mirror
lingfengx-x-downloader
lingfengx-x-downloader
biz_rpc_dev_1.0.0