<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>BeeFog – 文档</title><link>https://queenbee.netlify.app/zh/docs/</link><description>Recent content in 文档 on BeeFog</description><generator>Hugo -- gohugo.io</generator><atom:link href="https://queenbee.netlify.app/zh/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: 开发计划</title><link>https://queenbee.netlify.app/zh/docs/6-contribute/roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/6-contribute/roadmap/</guid><description>
&lt;h3 id="v10">v1.0&lt;/h3>
&lt;h3 id="v11-next-release">v1.1 Next Release&lt;/h3>
&lt;h2 id="history">History&lt;/h2></description></item><item><title>Docs: 快速部署</title><link>https://queenbee.netlify.app/zh/docs/2-getting-start/quick-deploy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/2-getting-start/quick-deploy/</guid><description/></item><item><title>Docs: 服务端部署</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/server-deploy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/server-deploy/</guid><description/></item><item><title>Docs: 核心概念</title><link>https://queenbee.netlify.app/zh/docs/1-overview/concepts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/1-overview/concepts/</guid><description>
&lt;p>&lt;img src="https://queenbee.netlify.app/images/concepts.png" alt="概念示意图">&lt;/p>
&lt;h2 id="控制中心--queenbee-">控制中心 [ QueenBee ]&lt;/h2>
&lt;p>控制中心是一个区域的中枢节点，它管理着区域内所有的工作设备。&lt;br>
控制中心可以将计算任务分配给合适的工作节点，并收集任务的执行结果。&lt;br>
控制中心提供两类接口：&lt;br>
&lt;strong>工作设备接口:&lt;/strong> 一套供工作设备使用的 REST API&lt;br>
&lt;strong>用户接口:&lt;/strong> 一套供您（或您的业务系统）使用的 REST API，可以查看工作设备状态，可以管理和执行任务。&lt;/p>
&lt;h2 id="工作设备--workerbee-">工作设备 [ WorkerBee ]&lt;/h2>
&lt;p>工作设备是若干安装了 &lt;code>WorkerBee&lt;/code> 应用的终端，它的特点是分布广、数量大、类型多样。
&lt;code>WorkerBee&lt;/code> 会利用终端的空闲网络带宽和计算能力，从控制中心获取任务并在执行后报告结果。&lt;/p>
&lt;p>您可以在若干服务器或个人电脑上部署 &lt;code>WorkerBee CLI&lt;/code> 程序并运行。也可以在您的移动 APP 中集成 &lt;code>WorkerBee SDK&lt;/code>,
在取得最终用户的许可下，正在运行您的 APP 的移动设备就会成为一个工作设备。&lt;/p>
&lt;p>对于工作设备，还有一个 &lt;code>能力&lt;/code> 的概念。由于工作设备的多样性，不同的设备可能会有能力差别，
我们用一个标签列表来标识工作设备的所有特殊能力，比如可以在浏览器中执行任务，或者它可以用 GPU 进行计算。&lt;/p>
&lt;h2 id="任务--job-">任务 [ Job ]&lt;/h2>
&lt;p>任务是服务端分配给工作节点的基本计算单元，它由您通过接口定义和调用。关于任务还有几个衍生概念：&lt;/p>
&lt;p>&lt;strong>任务定义:&lt;/strong> 您可以通过接口定义任务，定义好的任务可以被多次调用。&lt;br>
&lt;strong>任务参数:&lt;/strong> 在任务定义中可以预留一些可变的参数，在调用时提供具体的值。比如访问中国天气网&lt;code>某个城市&lt;/code>的天气页面。&lt;br>
&lt;strong>任务步骤:&lt;/strong> 在一个任务定义中，可以有多个步骤，每个步骤完成一个相对独立的子任务。每个步骤还可以利用之前步骤的计算结果。&lt;br>
&lt;strong>任务结果:&lt;/strong> 在任务执行完成后会有任务结果记录任务执行是否成功，如果成功了可能还包含预期的结果数据，如果失败了一定会包含失败原因。&lt;br>
&lt;strong>任务触发器:&lt;/strong> 任务除了通过接口调用，还可以设置自动触发条件让控制中心自动触发。比如每天中午12点定时执行。&lt;/p>
&lt;p>本系统不做业务层面的任务编排或调度，比如业务上一个测试某网址在全国的访问延迟的任务，需要业务系统拆分成三十多个任务，&lt;/p></description></item><item><title>Docs: 技术架构</title><link>https://queenbee.netlify.app/zh/docs/6-contribute/arch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/6-contribute/arch/</guid><description>
&lt;p>在贡献代码前，您可能需要了解 BeeFog 的架构。总体架构在第一章简介中有介绍，
这里会详述控制中心 QueenBee 的系统架构。&lt;/p>
&lt;h2 id="queenbee-技术架构">QueenBee 技术架构&lt;/h2>
&lt;p>BeeFog 的系统模块架构如下图所示，其中方块为模块，连线为模块间调用关系。&lt;/p>
&lt;p>&lt;img src="https://queenbee.netlify.app/images/arch-zh.png" alt="架构图">&lt;/p>
&lt;h3 id="工作节点--worker-bees-">工作节点 [ Worker Bees ]&lt;/h3>
&lt;ul>
&lt;li>BeeFog 的工作节点可以部署在服务器，PC或手机等各种设备之上。&lt;/li>
&lt;li>有的独立 Worker 单纯的只完成 BeeFog 的工作。在 PC 和移动设备上，大多是集成 Worker SDK 的 APP，在用户使用时就可以进行工作。&lt;/li>
&lt;li>工作节点的行为是完全主动的，在自己有空闲时，会向控制中心请求任务。&lt;/li>
&lt;li>在完成任务后，会将结果状态报告给控制中心。报告时也可能根据任务配置携带结果数据。&lt;/li>
&lt;li>任务执行会有时间限制，在超时后，控制器会将任务分给别的节点执行，不再接收此次任务的结果报告。&lt;/li>
&lt;/ul>
&lt;h3 id="控制中心--queen-bee-">控制中心 [ Queen Bee ]&lt;/h3>
&lt;p>控制中心被分为多个模块。模块之间通过接口暴露的函数调用。有几个模块会开放 REST API 供用户使用。&lt;/p>
&lt;h4 id="工作设备管理器--worker-manager-">工作设备管理器 ( Worker Manager )&lt;/h4>
&lt;ol>
&lt;li>提供工作设备注册接口。工作设备每次上线通过提供 &lt;code>节点组 Code&lt;/code> 在管理器注册，换取 &lt;code>Token&lt;/code> 用以后续其他请求的认证。&lt;/li>
&lt;li>管理器可以通过 &lt;code>Token&lt;/code> 辨识来源设备并记录所有设备的状态。&lt;/li>
&lt;li>提供查看工作设备汇总状况的 REST API 供用户使用。&lt;/li>
&lt;/ol>
&lt;h4 id="任务定义管理器--job-manager-">任务定义管理器 ( Job Manager )&lt;/h4>
&lt;ol>
&lt;li>存储和管理任务定义&lt;/li>
&lt;li>提供查询、新增、修改和删除任务定义的 REST API 供用户使用。&lt;/li>
&lt;/ol>
&lt;h4 id="任务调度中心--job-dispatcher-">任务调度中心 ( Job Dispatcher )&lt;/h4>
&lt;ol>
&lt;li>提供调用任务和查看实例状态的 REST API 供用户使用。&lt;/li>
&lt;li>提供调用任务的接口供系统内部使用。&lt;/li>
&lt;li>工作设备请求任务和汇报任务结果的接口。&lt;/li>
&lt;li>任务每次被调用，都会产生一个运行实例(Run)。调度中心负责维护并保存实例整个生命周期的状态。&lt;/li>
&lt;li>任务在被调用后，未被分配给工作设备前，存储在一个任务池中。调度中心还要负责任务分配的匹配检验与优先逻辑。&lt;/li>
&lt;li>任务在工作设备完成并报告后，可能还有需要在调度中心执行的步骤，比如发送通知等。&lt;/li>
&lt;/ol>
&lt;h4 id="自动任务触发器--automation-trigger-">自动任务触发器 ( Automation Trigger )&lt;/h4>
&lt;p>任务除了使用接口直接调用，还可以预设一定的规则去触发，比如定时触发或根据云端的一个文件状态去触发等等。本模块管理触发规则并实施触发。&lt;/p>
&lt;ol>
&lt;li>监听任务定义中新增或修改了触发器的事件，在服务中维护触发器。&lt;/li>
&lt;li>实施自动触发任务。&lt;/li>
&lt;li>任务触发器如果想要支持分布式部署，开发难度极高，所以本模块为独立部署的一个单例服务。&lt;/li>
&lt;/ol>
&lt;h2 id="基础设施">基础设施&lt;/h2>
&lt;p>我们使用了以下基础设施：&lt;/p>
&lt;ul>
&lt;li>Mysql 用以数据存储&lt;/li>
&lt;li>Redis 用以缓存&lt;/li>
&lt;li>NSQ 用以事件发布和监听&lt;/li>
&lt;/ul></description></item><item><title>Docs: 服务端配置</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/server-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/server-config/</guid><description/></item><item><title>Docs: 运作方式</title><link>https://queenbee.netlify.app/zh/docs/1-overview/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/1-overview/how-it-works/</guid><description>
&lt;h2 id="工作设备和控制中心是怎么联系的">工作设备和控制中心是怎么联系的？&lt;/h2>
&lt;p>&lt;img src="https://queenbee.netlify.app/images/worker.png" alt="工作设备原理">&lt;/p>
&lt;ul>
&lt;li>由于工作设备数量巨大，WorkerBee 被安装到工作设备时一般是批量安装或用户自行安装的，
在安装时安装包内就预置了控制中心的地址和一个 &lt;code>分组 Token&lt;/code> 。&lt;/li>
&lt;li>WorkerBee 在每次启动时，都会用 &lt;code>分组 Token&lt;/code> 去调用登录接口，换取独属于自己的 &lt;code>Token&lt;/code> 。&lt;/li>
&lt;li>WorkerBee 会周期性的主动向控制中心请求任务，控制中心依靠 &lt;code>Token&lt;/code> 识别出工作设备后，分配给它合适的任务。&lt;/li>
&lt;li>在完成任务之后会向控制中心报告，并继续请求任务。&lt;/li>
&lt;li>WorkerBee 随时有可能因各种原因退出，不用担心未完成的任务，控制中心在任务超时后重新将任务分给别的工作设备。&lt;/li>
&lt;/ul>
&lt;h2 id="任务在控制中心内是怎么流转的">任务在控制中心内是怎么流转的？&lt;/h2>
&lt;p>&lt;img src="https://queenbee.netlify.app/images/lifecycle.png" alt="生命周期">&lt;/p>
&lt;ul>
&lt;li>图中黄色部分为任务较稳定的状态，有排队中 &lt;code>queuing&lt;/code> , 运行中 &lt;code>running&lt;/code> , 失败 &lt;code>failed&lt;/code> , 成功 &lt;code>successed&lt;/code> 几个状态。&lt;/li>
&lt;li>每个任务会有超时时限，工作设备如果发现任务到了超时时限会主动上报任务失败。此图中的超时含义其实为客户端失联，这种情况总是会重新排队。&lt;/li>
&lt;li>由于雾计算工作设备的不稳定性，在工作设备失败后还是会重新排队重试预定的次数。&lt;/li>
&lt;li>工作设备报告任务成功后，会在控制中心执行可能存在的一些步骤，控制中心比较稳定可控，这个环节如果失败了会直接认为任务失败。&lt;/li>
&lt;/ul>
&lt;h2 id="控制中心是如何把任务分配给工作设备的">控制中心是如何把任务分配给工作设备的？&lt;/h2>
&lt;ul>
&lt;li>工作设备提交任务请求后，控制中心查询工作设备的地理区域，网络运营商，能力范围。&lt;/li>
&lt;li>从排队最久的任务开始，顺次检查每个任务，如果任务的地理区域要求、网络运营商要求、能力范围要求全不能能被满足，则将任务分配给此工作设备。&lt;/li>
&lt;li>分配后任务会被标记为运行中 &lt;code>running&lt;/code>, 并从等待队列删除。&lt;/li>
&lt;li>重试的任务会被插入等待队列头部。&lt;/li>
&lt;/ul></description></item><item><title>Docs: Worker Manager</title><link>https://queenbee.netlify.app/zh/docs/6-contribute/worker-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/6-contribute/worker-manager/</guid><description>
&lt;h2 id="主要工作">主要工作&lt;/h2>
&lt;ul>
&lt;li>一个测速接口让节点可以测速决定连接哪个区域的 Queen&lt;/li>
&lt;li>一个注册接口让节点可以在启动是简单上报自己的情况&lt;/li>
&lt;/ul></description></item><item><title>Docs: 云端工作节点</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/cloud-worker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/cloud-worker/</guid><description/></item><item><title>Docs: 执行简单任务</title><link>https://queenbee.netlify.app/zh/docs/2-getting-start/simple-job/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/2-getting-start/simple-job/</guid><description/></item><item><title>Docs: PC工作节点</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/pc-worker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/pc-worker/</guid><description/></item><item><title>Docs: 数据模型</title><link>https://queenbee.netlify.app/zh/docs/6-contribute/data-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/6-contribute/data-model/</guid><description>
&lt;h2 id="任务定义--task-">任务定义 [ Task ]&lt;/h2>
&lt;p>任务是本系统中最重要的概念，它描述了一个任务的整个生命周期的配置。&lt;/p>
&lt;h4 id="元数据--meta-">元数据 ( Meta )&lt;/h4>
&lt;p>任务 ID，名称，创建时间等等各种管理信息。&lt;/p>
&lt;h4 id="节点要求--scope-">节点要求 ( Scope )&lt;/h4>
&lt;p>用一个字符串列表表示对于节点的能力要求。&lt;/p>
&lt;h4 id="输入--inputs-">输入 ( Inputs )&lt;/h4>
&lt;p>调用一个任务时的输入描述，分为必须提供的和可选提供的。&lt;/p>
&lt;h4 id="工作节点步骤--worker-steps-">工作节点步骤 ( Worker Steps )&lt;/h4>
&lt;p>工作节点将顺次执行每个步骤。&lt;/p>
&lt;p>所有支持的步骤详见步骤类型章节。&lt;/p>
&lt;h4 id="服务端步骤--queen-steps-">服务端步骤 ( Queen Steps )&lt;/h4>
&lt;p>在任务结果返回云端后，云端也可以选择执行一些步骤。&lt;/p>
&lt;h2 id="任务实例--instance-">任务实例 [ Instance ]&lt;/h2>
&lt;p>每当调用一个任务，就会生成一个任务实例。任务实例除了携带任务定义外，还会有以下内容。&lt;/p>
&lt;h4 id="输入--inputs--1">输入 ( Inputs )&lt;/h4>
&lt;p>任务所需的输入。&lt;/p>
&lt;h4 id="额外节点要求--extrascope-">额外节点要求 ( ExtraScope )&lt;/h4>
&lt;p>调用任务时可以提出对工作节点的额外要求，用以提供对任务进行编排的可能。&lt;/p>
&lt;p>额外要求会与任务定义内的要求取并集，当是节点 Scope 子集的时候才能成功匹配。
比如可以要求匹配一个地理位置必须在四川，要有执行浏览器任务的能力，今天还没有执行过这个任务的节点。&lt;/p>
&lt;h4 id="上下文--context-">上下文 ( Context )&lt;/h4>
&lt;p>上下文会携带任务发起方的一些信息。后面我们会知道，任务执行时也可以触发新的任务实例，所以 Context 有可能在任务中链式传递。&lt;/p>
&lt;h2 id="任务结果--result-">任务结果 [ Result ]&lt;/h2>
&lt;p>任务结果是任务在工作节点执行后生成的一个结果对象，它会被返回云端等待后续处理。&lt;/p>
&lt;p>结果默认状态下只有成功或失败的状态，若失败时可能携带错误信息。若任务定义中要求返回一些结果数据，也会返回。&lt;/p>
&lt;h2 id="任务触发器--trigger-">任务触发器 [ Trigger ]&lt;/h2>
&lt;p>除了利用接口调用任务，还可以配置多种自动触发并调用任务的触发器。
一个任务可以被配置多个触发器。&lt;/p>
&lt;p>目前支持如下类型的触发器：&lt;/p>
&lt;h4 id="计划任务--cron-">计划任务 ( Cron )&lt;/h4>
&lt;p>通过配置一个 Cron，并指定输入，可以配置一个定时执行的计划任务。&lt;/p></description></item><item><title>Docs: 手机工作节点</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/android-worker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/android-worker/</guid><description/></item><item><title>Docs: 任务配置</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/job-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/job-config/</guid><description/></item><item><title>Docs: 工作节点步骤配置</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/worker-steps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/worker-steps/</guid><description/></item><item><title>Docs: Queen Steps</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/queen-steps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/queen-steps/</guid><description/></item><item><title>Docs: 任务示例</title><link>https://queenbee.netlify.app/zh/docs/3-basic-usage/job-example/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://queenbee.netlify.app/zh/docs/3-basic-usage/job-example/</guid><description/></item></channel></rss>