当前位置: 首页 > 知识库问答 >
问题:

前端服务如何知道cadence中历史服务的变化?

衡翰藻
2023-03-14

对于cadence来说,历史服务是一个响铃,因此如果一个新的历史服务被添加到历史服务中,每个历史服务将知道一个新的历史服务要加入。但是前端服务需要将请求路由到历史服务。前端服务如何知道还有一个历史服务要加入?

共有1个答案

赫连秦迟
2023-03-14

这一切都是通过环形流行音乐完成的。Cadence将环流行语库用于所有服务,包括历史记录和前端。

https://github.com/uber/ringpop-go

Ringpop为切分、请求路由和主机发现提供了一致的哈希环。

在Cadence集群中,所有服务将使用相同的ringpop引导配置,如

https://github.com/banzaicloud/banzai-charts/blob/031c49f4f1f542f60a88bb9f5fc56c22a518d773/cadence/templates/server-configmap.yaml#L72

这样,所有服务都使用相同的一致散列环,它们可以到达任何服务的任何主机。

如果您使用admin cluster describe命令,您可以看到如下内容:


cadence --address `hostname`:7933 adm cl d
{
  "supportedClientVersions": {
    "goSdk": "1.5.0",
    "javaSdk": "1.5.0"
  },
  "membershipInfo": {
    "currentHost": {
      "Identity": "10.42.13.242:7933"
    },
    "reachableMembers": [
      "10.42.13.254:7935",
      "10.42.26.5:7939",
      "10.42.18.213:7934",
      "10.42.13.242:7933",
      "10.42.27.210:7939",
      "10.42.18.48:7933",
      "10.42.18.153:7935"
    ],
    "rings": [
      {
        "role": "cadence-frontend",
        "memberCount": 2,
        "members": [
          {
            "Identity": "10.42.18.48:7933"
          },
          {
            "Identity": "10.42.13.242:7933"
          }
        ]
      },
      {
        "role": "cadence-history",
        "memberCount": 1,
        "members": [
          {
            "Identity": "10.42.18.213:7934"
          }
        ]
      },
      {
        "role": "cadence-matching",
        "memberCount": 2,
        "members": [
          {
            "Identity": "10.42.13.254:7935"
          },
          {
            "Identity": "10.42.18.153:7935"
          }
        ]
      },
      {
        "role": "cadence-worker",
        "memberCount": 2,
        "members": [
          {
            "Identity": "10.42.27.210:7939"
          },
          {
            "Identity": "10.42.26.5:7939"
          }
        ]
      }
    ]
  }
}

每个主机可能为不同的服务工作,但他们都互相认识。

如果您有兴趣,可以在此处找到实现代码路径 https://github.com/uber/cadence/blob/deb0caf06577be007046e5f96ef40bdf3c0bc728/client/history/client.go#L1178

 类似资料:
  • 这一完整代码可从以下网址获得:https://github . com/Naresh-Chaurasia/API-micro services-Kafka/tree/master/micro services-CQRS-SAGA-Kafka/discovery service 我有以下Spring引导设置。 客户端/邮递员正在调用 API 网关(它也充当负载均衡器)。 API 网关和产品是 Spr

  • 该文档展示了Cadence工作流服务的基本架构:它有三个不同的微服务:FE、MS和HS。那么它们是什么以及它们是如何一起工作的呢?

  • 如果我使用mysql作为数据库的节奏,我知道如果分片是100,有100个表绑定到节奏中的历史服务。我的问题是,在这种情况下,匹配服务中的所有tastList,只会使用一个表?如何为匹配服务分片数据库? 如果所有的taskList都写入同一个表,就足够了吗?

  • 在 Cadence 中部署代码期间,服务器重新启动功能如何工作?将重新启动哪些内容?它会仅重新启动 Cadence 服务,还是也会重新启动工作线程?如果重新启动工作人员,活动和工作流是否会从头开始重新启动?

  • 但是当你点击它,你会看到它实际上已经完成了: 与此同时,这种情况开始发生,我们注意到几个工作流需要很长时间才能完成,其中几个工作流会卡在“计划”状态下,并且永远不会从那里进一步发展。检查日志后,我们看到的唯一错误是这样的: 有人知道为什么会这样吗?

  • 问题内容: 目前,我正在研究基于Java RMI构建的聊天服务器- 客户端程序。为了使客户端能够检测到其连接的服务器已失效,我只能想到两种可能的解决方案,但是在我的情况下,它们都无法很好地工作。 1.等到客户端需要调用服务器的某些方法后,这种方法无法正常工作,因为如果聊天客户端不调用服务器的任何方法,它将不会知道服务器已死,因此聊天客户端无法接收那时再没有任何新的聊天消息。 2.通过每隔几秒钟调用