服务发现模式

时间:2015-04-13 19:22:09

标签: java node.js apache-zookeeper

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

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

然后我有一些问题:

  • 如何从其他nodejs app访问此服务?
  • 如果我想访问/ my / service / something,我知道它没有在服务注册表中定义,而且我们承认我根本不知道所有API,我该怎么办?

阅读本文后,我试着了解zookeeper的工作原理。有了这个,并使用标准库(https://github.com/yfinkelstein/node-zookeeper),我遇到了一个问题:

  • 我必须设定的价值是多少?实际上对于zookeeper,似乎我们必须设置模式url和值。这个值是什么?
  • 有什么是带有zookeeper的服务儿童?这个概念的目的是什么?

感谢所有人的进步

感谢您提前

1 个答案:

答案 0 :(得分:1)

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

  

如何从其他nodejs app访问此服务?

像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 is undefined我该怎么办?” 在这种情况下,完全取决于您的应用程序的逻辑。如果您希望该值在某个时刻出现,我认为合理的方式会重试。

  

我必须设定的价值是多少?事实上,与动物园管理员,似乎   我们必须设置模式URL和值。这个值是什么?

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

  

带有zookeeper的服务儿童是什么?这是什么目的   概念?

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

希望这有帮助。