微服务 服务发现模式
服务发现角色
服务发现有三个角色,服务提供者、服务消费者和服务中介。
服务中介:联系服务提供者和服务消费者的桥梁。
服务提供者:将自己提供的服务地址注册到服务中介。
服务消费者:从服务中介那里查找自己想要的服务的地址,然后享受这个服务。
服务中介提供多个服务,每个服务对应多个服务提供者
服务1~4把当前自己的网络位置注册到服务发现模块,服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT。服务发现模块定时的轮询查看这些服务能不能访问的了(这就是健康检查)。客户端在调用服务1~4的时候,就访问服务发现模块得到服务提供者的网络位置,然后再调用它们的服务。
服务发现的模式
目前,服务发现主要存在有两种模式,客户端模式与服务端模式,两者的本质区别在于,客户端是否保存服务列表信息。下面用两个图来表示客户端模式与服务端模式。
客户端模式
在客户端模式下,如果要进行微服务调用,首先要周期性到服务注册中心获取服务列表(客户端维护这个这个服务列表),然后再根据调用端本地的负载均衡策略,进行服务调用。
服务端模式
在服务端模式下,调用方直接向服务注册中心进行请求,服务注册中心再通过自身负载均衡策略,对微服务进行调用。这个模式下,调用方不需要在自身节点维护服务发现逻辑以及服务注册信息,这个模式相对来说比较类似DNS模式。
客户端模式与服务端模式
总结服务端模式和客户端模式的区分
客户端模式:所有客户端需要维护服务列表信息,负载均衡策略而服务端模式下则无需这些额外的实现。
服务端模式:客户端每次请求都必须访问服务中介,获得服务列表,负载均衡策略等是服务端实现。
服务端模式下,更容易实现多语言的接入,更具有通用性,但是在客户端模式下,则具有了更快的响应时间以及更强的容灾能力。
refer:
https://blog.csdn.net/mr_seaturtle_/article/details/77618403
https://blog.csdn.net/shellquery/article/details/100892767