Ignite如何定义一个数据节点

61次阅读
没有评论

共计 3265 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章主要讲解了“Ignite 如何定义一个数据节点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“Ignite 如何定义一个数据节点”吧!

作为一个系统,一个可能的架构由如下层次组成:

Ignite 集群层

持久化存储层

外部应用层

本文中会关注第一层(Ignite 集群层),可以参考一个 GitHub 项目,他包含了日常中实现拟议的微服务架构所必须的构建块,尤其是要覆盖如下部分:

配置和启动数据节点;

使用 Ignite 的服务 API 的典型服务实现;

配置和启动驻有 Ignite 服务的服务节点;

一个连接到集群并且触发服务执行的虚拟应用。

微服务位于内存数据网格架构之上时的数据节点

数据节点是持有数据集一部分数据的服务端节点,应用逻辑端会在这个数据集上执行查询和计算。通常来说,这种类型的节点对应用逻辑是透明的,因为这些节点只是简单地存储数据集,然后当应用访问数据时高效地进行处理就可以了。

可以下载这个 GitHub 项目然后找到 data-node-config.xml,它会用于创建一个新的数据节点,这个配置包含了一组与数据节点有关的段落和参数。

首先,需要为每一个要部署到集群中的 Ignite 缓存配置一个特定的节点过滤器。这个过滤器会在缓存启动时被调用,它会定义一个要存储缓存数据的集群节点的子集 – 数据节点。同样的过滤器在网络拓扑发生变化时也会被调用,比如新节点加入集群或者旧节点离开集群。过滤器的实现需要加入每个节点的类路径中,不管该节点是否会成为数据节点。

bean  >

第二,实现过滤器,在本例中,使用了一个非常明确的实现,DataNodeFilter,它通过检查 data.node 参数来确定一个节点是否会被视为数据节点。如果一个节点在属性映射中配置了这个参数,那么他会成为一个数据节点然后数据会驻留于此,否则该节点会被忽略。

 public boolean apply(ClusterNode node) {
 Boolean dataNode = node.attribute( data.node 
 return dataNode != null   dataNode;
}

第三,data-node-config.xml 为每个使用这个配置启动的节点的属性映射添加了 data.node 属性,就像下面这样:

property name= userAttributes 
  map key-type= java.lang.String  value-type= java.lang.Boolean 
  entry key= data.node  value= true / 
  /map 
 /property

最后,通过使用示例中的 DataNodeStartup 文件,或者将 data-node-config.xml 传递给 Ignite 的 ignite.sh/bat 脚本来启动一个数据节点的实例。如果选择了后者,那么一定要将 java/app/common 目录中的所有类文件构建成一个 jar 包,然后还要将这个 jar 文件加入到每个数据节点的类路径中。

微服务位于内存数据网格架构之上时的服务节点

在实现层次上服务节点的定义与前述数据节点的用法没有什么大的不同。基本上,需要建立一个方式,即指定一个特定的微服务将要部署在哪些节点上,它们会是整个集群的一个子集。

最初,需要使用服务网格 API 实现一个微服务,为后文起见,可以回顾一下那个 GitHub 示例中的已有服务实现,即 Maintenance Service。

这个服务可以调度一个车辆维护的服务,并且可以查看已做保养的清单,它实现了所有服务网格的必要方法,包括 init(...),execute(...) 以及 cancel(...),并且在这个接口中增加了新的方法:

 public interface MaintenanceService extends Service { public Date scheduleVehicleMaintenance(int vehicleId);
 public List Maintenance  getMaintenanceRecords(int vehicleId);
}

将这个维护服务配置并且部署到特定的 Ignite 节点(服务节点)上有几种方式。在本例中,通过 maintenance-service-node-config.xml 启动的每个节点,都可以考虑进行维护服务的部署,下面可以看一下配置。

首先,确保维护服务的实例只会被部署到指定了节点过滤器的节点上:

bean  >

第二,维护服务使用的过滤器,只会被部署到在属性映射中配置了 maintenance.service.node 的节点上:

 public boolean apply(ClusterNode node) {
 Boolean dataNode = node.attribute( maintenance.service.node 
 return dataNode != null   dataNode;
}

最后,通过如下的 XML 片段,使用 maintenance-service-node-config.xml 启动的每个节点在映射中都会包含这个属性:

property name= userAttributes 
  map key-type= java.lang.String  value-type= java.lang.Boolean 
  entry key= maintenance.service.node  value= true / 
  /map 
 /property

就这些了,使用 MaintenanceServiceNodeStartup 文件,或者将 maintenance-service-node-config.xml 传递给 Ignite 的 ignite.sh/bat 脚本,就可以启动维护服务节点的一个或者多个实例,如果选择了后者,一定要确保将 java/app/common 和 java/services/maintenance 目录中的所有文件打包成一个 jar 文件,然后将这个 jar 文件添加到每个服务将要被部署的节点的类路径上。

示例中包含了另一个与车辆管理有关的 Ignite 服务,使用 VehicleServiceNodeStartup 文件或者使用经过 vehicle-service-node-config.xml 配置的 ignite.sh/bat,可以启动至少一个部署有该服务的服务节点,如果选择了 ignite.sh/bat 方式,不要忘了组装一个 jar 文件然后将其加入相关节点的类路径上。

在内存数据网格之上运行微服务的示例应用

一旦准备好了数据节点,维护服务和车辆服务节点也都启动运行了,那么就可以运行第一个示例应用来访问这个分布式微服务了。

在示例中找到并且启动 TestAppStartup,这个应用会接入集群,往预定义的缓存中注入虚拟数据,然后与服务进行交互。

MaintenanceService maintenanceService = ignite.services().serviceProxy(MaintenanceService.SERVICE_NAME,
MaintenanceService.class, false);
int vehicleId = rand.nextInt(maxVehicles);
Date date = maintenanceService.scheduleVehicleMaintenance(vehicleId);

如果注意了,应用会使用服务代理来与服务进行交互,代理的好处就是,启动应用的节点不需要在本地类路径中持有服务的实现,也不需要在本地部署一个服务。

感谢各位的阅读,以上就是“Ignite 如何定义一个数据节点”的内容了,经过本文的学习后,相信大家对 Ignite 如何定义一个数据节点这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3265字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)