2021-07-20 17:07:54 版本 : 插件架构
作者: 姜天雨 于 2021年07月20日 发布在分类 / 区块链基础知识 / 底层框架资料 / GoQuorum 下,并于 2021年07月20日 编辑
 历史版本

修改日期 修改人 备注
2021-07-20 17:08:21[当前版本] 姜天雨 修改内容
2021-07-20 17:07:54 姜天雨 创建版本

插件架构


去插件

许创建插件(通过  plugin 构建模式)并在运行时使用这些插件(通过  plugin package )。为了利用这种架构,在开发插件方面有严格的要求。

通过使用网络 RPC 接口,插件独立构建和分发,无需重新构建 geth 。特别是使用 gRPC 接口,插件可以用不同的语言编写(参见我们的   examples )。这使您可以轻松构建原型功能或什至是组织内部使用的专有插件。

我们使用 HashiCorp go-plugin   库,因为它符合我们的要求,并且已经在许多基于插件的生产系统中得到验证。

好处

动态链接的二进制文件(使用插件时获得的)比静态编译的二进制文件小得多。

我们重视隔离故障的能力。例如:即使安全插件崩溃, GoQuorum 客户端也会继续挖掘 / 验证。

轻松支持以 Go 以外的语言编写的开源插件。

设计

粘贴图片

发现

GoQuorum 客户端读取插件   settings   文件以确定将要加载哪些插件并在插件 baseDir (默认为 <datadir>/plugins )中搜索已安装的插件( <name>-<version>.zip 文件)。如果路径中不存在所需的插件, GoQuorum 将尝试使用配置的  plugin central 来下载插件。

插件管理器

PluginManager  管理在  geth 中使用的插件。它读取 configuration 并构建插件注册表。 PluginManager  geth  中实现了标准的 Service 接口,因此被嵌入到 geth 服务生命周期中,即:暴露服务 API ,启动和停止。 PluginManager  服务在节点生命周期中尽早注册。这样做是为了保证在注册 PluginManager 时遇到问题,节点快速失效,不影响其他服务。

插件重装

PluginManager 公开了一个允许重新加载插件的 API admin_reloadPlugin) 。这会尝试重新启动当前的插件进程。

重新加载插件时,将应用初始节点启动后对插件配置的任何更改。这在 HelloWorld plugin example   中进行了演示。




 附件

附件类型

PNGPNG

历史版本-目录  [回到顶端]
    区块链服务网络发展联盟