+----------------+
+----->| Узел консоли 1 |
| +----------------+
|
+--------------+ +---------+ | +----------------+
| Scheduler.NET|<------HTTP------>| Брокер |<--SignalR-|----->| Веб-узел 1 |
+--------------+ +----^----+ | +----------------+
| |
SignalR | +----------------+
| +----->| Веб-узел 2 |
+-------+---------+ +----------------+
| |
+-----v----+ +------v---+
| Рабочий 1| | Рабочий 2|
+----------+ +----------+
Узел отправляет пульсацию сердца брокеру и получает сообщения от брокера через WebSocket.
Тип узла: консоль, веб```markdown +--------------------------------------------------------+ | Узел | +------------------------+--------------+----------------+ | + Id | GUID | PRIMARY | +------------------------+--------------+----------------+ | + Тип узла | STRING(50) | | +------------------------+--------------+----------------+ | + IP-адрес | STRING(50) | | +------------------------+--------------+----------------+ | + Количество процессоров | INT | | +------------------------+--------------+----------------+ | + Группа | STRING(50) | | +------------------------+--------------+----------------+ | + Операционная система | STRING(50) | | +------------------------+--------------+----------------+ | + Память | INT | | +------------------------+--------------+----------------+ | + Включен | BOOL | | +------------------------+--------------+----------------+ | + Время создания | DATETIME | | +------------------------+--------------+----------------+
+---------------------------------------------------+
| NodeStatus |
+-------------------+--------------+----------------+
| + Id | INT | PRIMARY, AI |
+-------------------+--------------+----------------+
| + NodeId | GUID | |
+-------------------+--------------+----------------+
| + ProcessCount | INT | |
+-------------------+--------------+----------------+
| + Cpu | INT | |
+-------------------+--------------+----------------+
| + FreeMemory | INT | |
+-------------------+--------------+----------------+
| + CreationTime | DATETIME | |
+-------------------+--------------+----------------+
```### Broker
+---------------------------------------------------+ | Job | +-------------------+--------------+----------------+ | + Id | GUID | PRIMARY | +-------------------+--------------+----------------+ | + Name | STRING(50) | | +-------------------+--------------+----------------+ | + JobType | ENUM | | +-------------------+--------------+----------------+ | + Cron | STRING(50) | | +-------------------+--------------+----------------+ | + Description | STRING(500) | | +-------------------+--------------+----------------+ | + IsEnabled | BOOL | | +-------------------+--------------+----------------+ | + IsDeleted | BOOL | | +-------------------+--------------+----------------+
JobType: Block | Application
Узел используется как распределённый загрузчик для задачи типа Block, запускает построителя запросов, обработчика и конвейера, который является рабочим процессом, используется как агент для задач типа Application.
| JobProperty |
+-------------------+--------------+----------------+
| + Id | INT | PRIMARY, AI |
+-------------------+--------------+----------------+
| + JobId | GUID | |
+-------------------+--------------+----------------+
| + Key | STRING(50) | |
+-------------------+--------------+----------------+
| + Value | STRING(500) | |
+-------------------+--------------+----------------+
Блоковая задача: FullClassName, Аргументы
Задача приложения: Package, Application, Аргументы, NodeCount, NodeGroup, Os
---------------------------------------------------------------------------------------------------------------
```+---------------------------------------------------+
| Worker |
+-------------------+--------------+----------------+
| + Id | INT | PRIMARY, AI |
+-------------------+--------------+----------------+
| + FullClassName | STRING(100) | |
+-------------------+--------------+----------------+
| + ConnectionId | STRING(50) | |
+-------------------+--------------+----------------+
| + ConnectTime | DATETIME | |
+-------------------+--------------+----------------+
| + DisconnectTime | DATETIME | |
+-------------------+--------------+----------------+---------------------------------------------------------------------------------------------------------------
+---------------------------------------------------+
| Block |
+-------------------+--------------+----------------+
| + Id | GUID | PRIMARY |
+-------------------+--------------+----------------+
| + Identity | GUID | INDEX_IDENTITY |
+-------------------+--------------+----------------+
| + State | ENUM | |
+-------------------+--------------+----------------+
| + CreationTime | DATETIME | |
+-------------------+--------------+----------------+
Состояние блока: готов (1), используется (2), успешен (4), неуспешен (8)
---------------------------------------------------------------------------------------------------------------
+---------------------------------------------------+
| Запуск |
+-------------------+--------------+-----------------+
| + JobId | GUID | PRIMARY |
+-------------------+--------------+-----------------+
| + Identity | GUID | INDEX_IDENTITY |
+-------------------+--------------+-----------------+
| + Consuming | INT | |
+-------------------+--------------+-----------------+
| + Priority | INT | |
+-------------------+--------------+-----------------+
| + CreationTime | DATETIME | |
+-------------------+--------------+-----------------+---------------------------------------------------------------------------------------------------------------+---------------------------------------------------+
| JobStatus |
+-------------------+--------------+----------------+
| + JobId | GUID | PRIMARY |
+-------------------+--------------+----------------+
| + Identity | GUID | PRIMARY |
+-------------------+--------------+----------------+
| + NodeId | GUID | |
+-------------------+--------------+----------------+
| + Status | ENUM | |
+-------------------+--------------+----------------+
| + Left | INT | |
+-------------------+--------------+----------------+
| + Success | INT | |
+-------------------+--------------+----------------+
| + Error | INT | |
+-------------------+--------------+----------------+
| + Total | INT | |
+-------------------+--------------+----------------+
| + UpdateTime | DATETIME | |
+-------------------+--------------+----------------+```
### Задача приложения
#### Создание задачи
1. Добавить в Scheduler.NET
2. Сохранить в базе данных
#### Удаление задачи
1. Установить IsDeleted задачи в true
#### Обновление задачи
1. Обновить cron в Scheduler.NET, если необходимо
2. Обновить в базе данных
#### Триггер задачи
1. Scheduler.NET вызывает обратный вызов, аргументом является id задачи
2. Проверить наличие задачи по id задачи
3. Проверить, включен ли задача
4. Получить доступного агента
5. Вызвать агента для выполнения задачи через SignalR
### Блокировка задачи
#### Создание & Удаление & Обновление задачи аналогичны задаче приложения
#### Регистрация работника
1. Работник подключается к брокеру через SignalR
2. Сохранить работника в базе данных
#### Триггер задачи
1. Scheduler.NET вызывает обратный вызов, аргументом является id задачи
2. Проверить наличие задачи по id задачи
3. Проверить, включен ли задача
4. Проверить, если какой-либо работник наблюдает за этой задачей
5. Вызвать работника через SignalR
### Брокер
#### OnConnected
1. Добавить в таблицу узлов, если не существует, обновить, если существует
#### Heartbeat: BlockDto Heartbeat(AddNodeStatusDto dto)
+----------------------------------+ | AddNodeStatusDto | +-------------------+--------------+ | + ProcessCount | INT | +-------------------+--------------+ | + Cpu | INT | +-------------------+--------------+ | + FreeMemory | INT | +-------------------+--------------+
1. Добавить в таблицу nodeheartbeat
```#### Очередь
1. Push(string identity, Request[] requests)
2. IEnumable<Request> Poll(string identity)
### Конфигурация агента
+ maxProcessCount: 5
+ broker: http://localhost:55626/
+ token: 1234
+ heartbeat: 30
+ retryDownload: 3
#### Подключение к брокеру
1. Подключиться к брокеру по URL http://localhost:55626/?nodeid={guid}&operationsystem=windows&proccessorcount=4&memory=1600&nodetype=console&group=default&sign={guid}
#### Управление сердцебиением
1. Отправить сердцебиение каждые 5 секунд и вернуть запросы: Heartbeat(HeartbeatDto dto)
2. Скачать все запросы и отправить ответы брокеру: SaveBlockResponse(BlockResponse response), для каждого сайта и идентификатора используется один HttpClient, и устанавливаются cookies, если это необходимо (используются одинаковые cookies или устанавливаются cookies перед первым запросом), сохраняются скачанные байты в брокере.
+--------------------------------------+ | BlockDto | +-------------------+------------------+ | + BlockId | STRING | +-------------------+------------------+ | + Identity | STRING | +-------------------+------------------+ | + ThreadNum | INT | +-------------------+------------------+ | + ChangeIpPattern | STRING | +-------------------+------------------+ | + Content | Site | +-------------------+------------------+ | + Cookies | STRING | +-------------------+------------------+
#### Запуск задачи агента
1. Брокер вызывает агента для запуска задачи: RunApplication(string package, string application, string arguments)
#### Управление задачей агента
+ Exit(string identity)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )