微服务的服务发现机制

1. 为什么要服务发现

当我们需要远程访问REST API或者Thrift API时,我们必须得知道服务的网络地址(IP Address和port)。

传统的应用程序都是运行在固定的物理机器上,IP Address和端口号都是相对固定的。可以通过配置文件方式来实现不定期更新的Ip Address和端口号。

在基于云的微服务应用中,服务实例的网络地址(IP Address和Port)是动态分配的,并且由于系统的auto-scaling, failures 和 upgrades等因数,一些服务运行的实例数量也是动态变化的。因此,客户端代码需要使用一个非常精细和准确的服务发现机制。

2. 服务发现方式

服务发现主要有两种方式:客户端发现和服务端发现

2.1 客户端发现

2.1.1 发现过程

  • 服务端:服务启动的时候,向服务注册中心注册服务;在服务停止的时候,向服务注册中心注销服务。
  • 客户端:客户发现方式时,客户端通过查询服务注册中心,获取可用的服务的实际网络地址(IP和端口),然后通过负载均衡算法来选择一个可用的服务实例,并将请求发送至该服务。

2.1.2 应用举例:Netflix OSS

Netflix OSS就是使用客户端发现方式的一个很好的例子。 

  • 服务注册中心:Netflix Eureka是服务注册中心,它提供了一个管理和查询可用服务的 REST API。
  • 负载均衡功能:通过Netflix Ribbon(是一个IPC客户端)和Eureka一起共同实现的。

2.1.3 优缺点

  • 优点:由于客户端知道所有可用的服务的实际网络地址,所以可以非常方便的实现负载均衡功能(比如:一致性哈希)
  • 缺点:具有非常强的耦合性,针对不同的语言,每个服务的客户端都得实现一套服务发现的功能。

2.2 服务端发现

2.2.1 发现过程

服务端:和客户端发现一样,服务启动的时候,向服务注册中心注册服务;在服务停止的时候,向服务注册中心注销服务。

客户端:客户端向load balancer 发送请求,load balancer 查询服务注册中心找到可用的服务,然后转发请求到该服务上。

2.2.2 应用举例:Kubernetes

Kubernetes集群中每个节点都运行一个代理来实现服务发现的功能的,代理的角色就是server-side discovery,客户端通过使用主机的IP Address和Port向Proxy发送请求,Proxy再将请求转发到集群中任何一个可用的服务上。

2.2.2 优缺点

  • 优点:服务的发现逻辑对客户端是透明的,客户只需简单的向load balancer发送请求就可以了,这就避免了为每种不同语言的客户端实现一套发现的逻辑。此外,许多软件都内置实现了这种功能
  • 缺点:你必须得关心该组件的高可用性

3. 服务注册中心

3.1 服务注册中心

服务注册中心是服务发现的核心,它保存了各个可用服务实例的网络地址(IP Address和Port)。服务注册中心必须要有高可用性和实时更新功能。

3.2 服务注册和注销

服务注册和注销有两种方式:Self-Registration和Third-Party Registration

  • Self-Registration:服务实例必须自己主动的到注册中心注册和注销,代表:Netflix OSS Eureka client
    • 优点:非常简单,不需要任何其它辅助组件
    • 缺点:使得各个服务和注册中心的耦合度比较高,服务的不同语言的客户端都得实现注册和注销的逻辑。
  • Third-Party Registration:服务本身不必关心注册和注销功能,而是通过其他组件(service registrarhandles)来实现服务注册功能,可以通过如事件订阅等方式来监控服务的状态,如果发现一个新的服务实例运行,就向注册中心注册该服务,如果监控到某一服务停止了,就向注册中心注销该服务
    • 优点:使服务和注册中心解耦,不用为每种语言实现服务注册的逻辑
    • 缺点:必须得考虑该组件的高可用性。

3.3 应用举例

  • Netflix Eureka——提供了服务注册和查询服务信息的REST API,服务通过使用POST请求注册自己的IP Address和Port
  • etcd —– 高可用,分布式,强一致性的,key-value,Kubernetes和Cloud Foundry都是使用了etcd
  • consul —–一个用于discovering和 configuring的工具。它提供了允许客户端注册和发现服务的API。Consul可以进行服务健康检查,以确定服务的可用性
  • zookeeper —— 在分布式应用中被广泛使用,高性能的协调服务。 Apache Zookeeper 最初为Hadoop的一个子项目,但现在是一个顶级项目

 

参考

https://blog.youkuaiyun.com/welcomeem/article/details/51893797

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值