介绍
最低要求
入门
联系我们
Emissary 是一种基于 P2P 的数据驱动工作流引擎,运行在异构的、可能广泛分散的多层 P2P 计算资源网络中。工作流行程并不像传统工作流引擎那样预先计划,而是随着有关数据的更多信息的发现而被发现。 Emissary 工作流程中通常没有用户交互,而是以面向目标的方式处理数据,直到达到完成状态。
Emissary 具有高度可配置性,但在此基本实现中几乎不执行任何操作。该框架的用户应提供扩展 emissary.place.ServiceProviderPlace 的类,以在 emissary.core.IBaseDataObject 有效负载上执行工作。
可以完成多种操作,并且工作流程可以分阶段进行管理,例如研究、ID、协调、转换、分析、IO、审核。
负责指导工作流的类是 emissary.core.MobileAgent 及其派生类,它们通过工作流管理一组相关有效负载对象的路径,而 emissary.directory.DirectoryPlace 则管理可用服务及其成本和信息。质量并保持 P2P 网络连接。
Linux 或 MacOSX 操作系统
JDK 11
阿帕奇Maven 3.5+
通读 DEVELOPING.md 指南,了解有关安装所需组件、提取源代码、构建和运行 Emissary 的信息。
运行mvn clean package
来编译、测试和打包 Emissary
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.132 s [INFO] Finished at: 2022-01-10T22:31:05Z [INFO] ------------------------------------------------------------------------
Emissary 中有一个 bash 脚本可以运行所有内容。 它位于顶级 Emissary 目录中。该脚本运行 emissary.Emissary 类,该类具有多个可用于处理不同功能的 Picocli 命令。
如果运行emissary脚本时不带任何参数,您将获得所有配置子命令的列表和简要说明。
./emissary
运行./emissary help
将为您提供与不带参数运行相同的输出。 如果您想查看某个命令的更详细信息,请在帮助后面添加命令名称。 例如,查看服务器命令的所有参数和描述,运行:
./emissary help server
其余命令都有可以设置的(-b 或 --projectBase)参数,但它必须与 PROJECT_BASE 匹配。
config 目录默认为 /config 但也可以使用(-c 或 --config)传入。 从 git checkout 运行时,您应该使用target作为项目库。 在开始之前,请随意修改 target/config 中的配置文件。
日志记录由 logback 处理。您可以使用--logbackConfig参数指向自定义文件。
请参阅每个命令的帮助 -c以获取更多信息。
此命令将启动 Emissary 服务器并初始化所有已配置的地点、接送地点和投递过滤器。 如果未指定-m 或 --mode ,它将以独立模式启动。 默认情况下,MobileAgent 的数量是根据计算机的规格计算的。 在现代计算机上,这个值可能很高。 您可以使用-a 或 --agents控制代理的数量。 这是一个运行示例。
./emissary server -a 2
无需进一步配置,它将在 http://localhost:8001 上启动。 如果您浏览到该网址,则需要输入 target/config/jetty-users.properties 中定义的用户名和密码,即 emissary 和 emissary123。
默认 PickUpPlace 配置为从target/data/InputData读取文件。 如果将文件复制到该目录中,您将看到 Emissary 正在处理它们。 请记住,仅配置了 toUpper 和 toLower,因此输出不会太有趣。
Agents 命令显示已配置主机的 MobileAgent 数量以及这些代理正在执行的操作。 默认情况下,端口为 9001,但您可以使用-p 或 --port来更改它。
假设您通过上面的服务器命令在 8001 上运行,请尝试:
./emissary agents -p 8001
池是节点代理的折叠视图。 它也默认为端口 9001。要为上面启动的独立服务器运行,请运行
./emissary pool -p 8001
此命令对于集群更有用,因为它是每个节点的更易于理解的视图。
Env 命令需要运行服务器。 它会向服务器询问一些配置值,例如 PROJECT_BASE 和 BIN_DIR。 如果没有参数,它将转储未格式化的 json 响应。
./emissary env
但您也可以转储适合在 bash 中获取的响应。
./emissary env --bashable
启动 Emissary 服务器实际上会调用此端点并使用配置的变量转储 $PROJECT_BASE}/env.sh 。 这样做是为了让 shell 脚本可以source $PROJECT_BASE}/env.sh
,然后使这些变量可用,而不必担心在其他地方配置它们。
config 命令允许您查看指定位置/服务/类的有效配置。由于 Emissary 使用风味,因此此命令将显示应用所有风味后类的最终配置。此命令可用于通过指定-h
表示主机(默认为 localhost)和-p
表示端口(默认为 8001)来连接到正在运行的 Emissary 节点。要连接到端口 8001 上本地运行的 Emissary,可以使用以下任意命令:
./emissary config --place emissary.place.sample.ToLowerPlace ./emissary config --place emissary.place.sample.ToLowerPlace -h localhost -p 8001
或者,您可以使用--offline
指定离线模式,以使用本地 CONFIG_DIR 中指定的配置文件:
./emissary config --place emissary.place.sample.ToLowerPlace --offline
在离线模式下,您可以提供flavor来查看配置的差异:
./emissary config --place emissary.place.sample.ToLowerPlace --offline --flavor STANDALONE,TESTING
这些对于查看有效配置很有用,但我们也可以在详细模式下运行来查看所有配置文件以及最终输出。这是通过--detailed
标志控制的:
./emissary config --place emissary.place.sample.ToLowerPlace --detailed
或在离线模式下:
./emissary config --place emissary.place.sample.ToLowerPlace --offline --detailed
Emissary 独立运行很有趣,但运行集群更适合实际工作。 集群运行的方式和独立运行类似,但是需要-m cluster来告诉节点连接到其他节点。 在集群模式下,Emissary 还将启动 PickUpClient 而不是 PickUpPlace,因此您需要启动 feeder。
查看 target/config/peers.cfg 以查看集合点。 在本例中,有 3 个。在端口 8001 和 9001 上运行的节点只是 Emissary 节点。 7001上运行的节点是馈线。 那么让我们在两个不同的终端中启动 8001 和 9001。
./emissary server -a 2 -m cluster ./emissary server -a 2 -m cluster -p 9001
由于这些节点都知道端口 8001、9001 和 7001,因此当它们继续尝试连接时,您将在日志中看到错误。
请注意,在实际部署中,我们不会在同一节点上运行多个 Emissary 进程。 您可以使用-h配置主机名。
在端口 8001 和 9001 上启动节点后,我们需要启动 feeder。 feed 命令默认使用端口 7001,但我们需要设置 feeder 从中读取的目录。 放入该目录的文件将可供工作节点获取,并且工作应该在集群之间分配。 启动 feed
mkdir ~/Desktop/feed1 ./emissary feed -i ~/Desktop/feed1/
您应该能够在浏览器中输入 http://localhost:8001、http://localhost:9001 和 http://localhost:7001 并查看配置的位置。 将一些文件放入 ~/Desktop/feed1 中,然后查看 2 个节点处理它们。 他们可能需要一分钟才能开始处理
集群模式下的代理再次显示有关移动代理的详细信息。 它从您配置的节点(默认情况下为 localhost:9001)开始,然后调用它知道的所有节点并获取相同的信息。 运行它:
./emissary agents --cluster
集群模式下的池也与独立模式下的池执行相同的操作。 默认情况下,它从节点 (locahost:9001) 开始,然后转到它知道的所有节点并聚合集群的折叠视图。 运行它
./emissary pool --cluster
拓扑与配置的节点(默认情况下为 localhost:8001)进行通信,并与它知道的每个节点进行通信。响应是所有这些节点都知道的,因此您可以构建集群的网络拓扑。运行它
./emissary topology
密钥库和密钥库密码位于 emissary.client.EmissaryClient-SSL.cfg 文件中。 默认情况下包含并配置的是一个示例密钥库,您可以使用它来测试此功能。我们不建议在生产环境中使用示例密钥库。 要使用您自己的密钥库,请更改 emissary.client.EmissaryClient-SSL.cfg 文件中的配置值。
独立式
./emissary server -p 8443 --ssl --disableSniHostCheck
簇状
./emissary server -p 8443 --ssl --disableSniHostCheck --mode cluster ./emissary server -p 9443 --ssl --disableSniHostCheck --mode cluster mkdir ~/Desktop/feed1 ./emissary feed -p 7443 --ssl --disableSniHostCheck -i ~/Desktop/feed1/
如果您对此项目有任何疑问或疑虑,可以通过以下方式联系我们:[email protected]
安全问题和漏洞报告请参考SECURITY.md