【问题标题】:apache ignite cumpute service with affinityapache 以亲和力点燃 cumpute 服务
【发布时间】:2018-09-04 06:42:04
【问题描述】:

我想使用服务在 ignite 上运行服务/计算 jub,但在数据所在的位置运行作业。

我将在客户端调用计算或服务代理,但需要服务在缓存数据附近运行。

我注意到您可以使用计算作业中的服务:

compute.run(new IgniteRunnable() {
  @ServiceResource(serviceName = "myCounterService");
  private MyCounterService counterSvc;

如果我在集群中的每个节点上部署服务,我可以使用具有近缓存的计算来执行此操作吗?

 compute.affinityRun(CACHE_NAME, key, () -> { 
      // call my servie here...

也许有一种方法可以直接调用具有亲和力的服务代理以避免使用计算?

附言原因是服务会产生更多的缓存数据,我想避免在节点和客户端之间来回传输大数据。

【问题讨论】:

    标签: java microservices distributed ignite


    【解决方案1】:

    不幸的是,无法根据被调用方法的参数告诉 Ignite 使用哪个服务实例。

    当您需要在其中存储一些状态时,服务是很好的。否则,计算作业同样有效。此外,计算作业在内部用于调用服务的方法。

    因此,如果您没有任何状态,则只需使用计算作业。否则,您可以尝试将所需资源注入计算作业:https://apacheignite.readme.io/docs/resource-injection

    【讨论】:

    • 我主要关心的是每次我有一个新对象时传递一个大的计算代码,通过服务我可以使用服务器节点部署类并使用代理从客户端远程调用它。我将不得不以某种方式将计算和服务结合起来......
    • @Gadi 实际上,代码不会每次都通过网络发送。它只会部署一次,并且在连续调用期间将使用相同的类。只会发送数据。
    • 对于每次都持有新密钥的计算作业是否如此?我的计划是通过缓存 API 推送新的缓存条目,然后在此键上运行计算作业 -> 直接在服务器上生成更多缓存对象。你有这方面的代码示例吗?
    • @Gadi,是的,每次都会使用同一个类。只有数据会改变。您可以在文档中找到 affinityRun 的代码示例:apacheignite.readme.io/docs/…
    • 这仅适用于原语,如果您需要 POJO,那么无论如何您都需要在服务器上预先部署它们。 Ignite 无法序列化我的计算代码。
    【解决方案2】:

    【讨论】:

    • 不,这不是我想要的。我希望所有节点都包含服务,并且只有靠近数据的节点才能接受工作
    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 2015-09-07
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多