【问题标题】:Service discovery pattern服务发现模式
【发布时间】:2016-08-01 08:59:00
【问题描述】:

我实际上正在研究服务发现模式,但我并不真正了解它的工作原理。

我已经阅读了一篇文章,它使用了一个名为 etcd (http://lukebond.ghost.io/service-discovery-with-etcd-and-node-js/) 的带有 nodejs 的库,它似乎很容易使用,就像只设置一个模式 url lile /my/service。

然后我有一些问题:

  • 如何从另一个 nodejs 应用程序访问此服务?
  • 如果我想访问 /my/service/something,我知道它没有在服务注册表中定义并且我们承认我根本不知道 API,我该怎么办?

读完这篇文章,我试图了解zookeeper是如何工作的。有了这个,并使用标准库(https://github.com/yfinkelstein/node-zookeeper),我面临一个问题:

  • 我必须设置的值是多少?实际上对于zookeeper,似乎我们必须设置一个模式url和一个值。这个值是多少?
  • zookeeper 的服务孩子有哪些?这个概念的目的是什么?

谢谢大家提前

感谢提前

【问题讨论】:

    标签: java node.js apache-zookeeper


    【解决方案1】:

    Here 是一篇关于服务发现模式的好文章。 以下是一些基于标准模式的答案:

    如何从另一个 nodejs 应用程序访问此服务?

    像 etcd 这样的服务发现工具会返回你需要的服务的端点的列表。见例子here:

    {
        "action": "get",
        "node": {
            "key": "/",
            "dir": true,
            "nodes": [
                {
                    "key": "/foo_dir",
                    "dir": true,
                    "modifiedIndex": 2,
                    "createdIndex": 2
                },
                {
                    "key": "/foo",
                    "value": "two",
                    "modifiedIndex": 1,
                    "createdIndex": 1
                }
            ]
        }
    }
    

    如果我想访问 /my/service/something,我该怎么做? 它没有在服务注册表中定义,我们承认我不知道 在所有的 API 中?

    我认为您的意思是“如果 /my/service/something 未定义,我该怎么办”? 在这种情况下,这完全取决于您的应用程序的逻辑。如果您期望该值会在某个时候出现,我认为合理的方法是重试。

    我必须设置的值是多少?实际上与zookeeper,似乎 我们必须设置一个模式 url 和一个值。这个值是多少?

    价值是你希望它在那里的任何东西。使用 ZooKeeper,您可能希望为每个服务器节点使用 ephemeral nodes。您可以将连接到该节点所需的数据保留在内部,也可以不保留任何数据。

    zookeeper 的 service children 是什么?这样做的目的是什么 概念?

    我认为您指的是 ZooKeeper ZNodes 的层次结构。我认为在这种情况下,“孩子”将是属于某个父母的所有节点。例如,对于节点 /a/b/c 和 /a/b/d,它们的父节点是 /a/b,因此 /a/b 的子节点是 /a/b/c 和 /a/b/d。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 2012-11-14
      • 2016-09-28
      • 2021-10-05
      相关资源
      最近更新 更多