> ## Documentation Index
> Fetch the complete documentation index at: https://www.bazhuayu.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 云采集任务启动优化

> 介绍八爪鱼采集器高版本功能：云采集任务启动优化。

### **一、优化目的**

充分利用账号内的云节点，减少节点的闲置时间，提高采集效率，采集更多的数据。

 

### **二、云节点分配原则**

1、优先级相同

先启动的任务，优先进行第一批次的节点分配，其剩余子任务和后启动任务的子任务一起随机分配。

 

2、启动时间相同

优先级越高的任务，越先分配到节点。

 

**场景举例：**

假设账号内有5个节点，并行任务数为5。

同时启动了10个优先级相同的任务，任务在云端会先进行拆分（假设都可以拆分）。

任务A可拆分成子任务a1,a2,a3,...,an;

任务B可拆分成子任务b1,b2,b3,...,bn;

任务C可拆分成子任务c1,c2,c3,...,cn;

......

任务J可拆分成子任务j1,j2,j3,...,jn。

此时服务端集群内有10\*n个子任务\{a1,a2,...,an,b1,b2,...,bn,……,j1,j2,...,jn}

 

分配节点进行采集时，

节点1执行任务A的某个子任务ax;

节点2执行任务B的某个子任务bx;

......

节点5执行任务E的某个子任务ex。

 

剩余5个任务暂时会进行等待。

此时服务端集群内有10\*n-5个子任务\{a2,...,an,b2,...,bn,……,j1,j2,...,jn}

 

当节点1完成子任务ax的采集，该节点1执行的下一个子任务是集群内的任意一个。即从10\*n-5个子任务\{a1,a2,...,an,b1,b2,...,bn,……,j1,j2,...,jn}任意抽一个子任务出来执行，可能是任务A的子任务a2，也可能是任务J的子任务jn。其余节点的执行逻辑同理。

 

故运行一段时间后会出现，任务A完成了m个子任务的采集，但还有n-m个子任务未完成，整个任务显示运行中，但暂时没有数据增加，一直空耗时间，看起来采集极慢。此时已分不出节点来执行B任务，全部的云节点都在执行其他任务中。此外节点在不同任务之间切换也会耗费大量时间。

 

### **三、启动优化**

要想采集更快，节点利用率更高，主体思路是减少节点的空闲时间和在不同任务之前的切换时间。在运行中的任务不要太多，应控制同时启动的任务数。

 

1、分批次运行，目前软件内最多可以分成24个批次，每个批次间隔1小时。每个批次内启动的全部任务应在1小时内可以全部完成采集。如果不能完成采集，则下一个批次的任务又启动了，依旧会造成任务积压，引起在运行中的任务太多，降低采集效率。

 

2、同一个批次内的任务还可设置优先级，以调整这批任务每个任务的采集顺序。如该批次内有20个任务，可分成4种优先级，每5个为1组（每组内多少个任务最好根据云采集同时运行的任务数来设置，建议等于或略大）。 每个组任务子任务数总和与云占有量总和都最好大于账号节点数。

每个任务分配的云占有量，可根据任务的子任务数和数据量以及需要的紧急程度来分配。一般子任务数多的、数据量大的、急着需要数据的任务，云占有量设置大些。当然，如果这个任务不能拆分，或拆分后子任务很少，如就是3。那么即使其云占有量设置为5，它也用不了那么多云节点，因为它最多只能占用3个云节点。如果希望它能占用更多，则应该去优化规则。

 

3、此外还应配合调整云采集同时运行的任务数来控制，如调整为5个。调整云采集同时运行的任务数，可能会遇到一个问题：同时在运行的这几个任务都是不可拆分，造成大量节点空闲。如设置同时运行的任务数为5，而此时在运行的5个任务均是不可拆分，则此时只会使用到5个节点，其余节点都在空闲中，且不会分配给新任务。所以在设计启动时应该让5个任务的子任务数总和大于账号节点数。可拆分的任务和不可拆分的任务要搭配好，不要让某个批次某个组内的任务均是不可拆分的。

 

如果能比较清楚的了解每个任务云采集的完成时间，则根据完成时间来设置定时，尽量将相同耗时的任务放在同一个批次内进行启动。
