Zookeeper作为服务注册与发现的解决方案,它有如下优点:

1. 它提供的简单API

2. 已有互联网公司(例如:Pinterest,Airbnb)使用它来进行服务注册与发现

3. 支持多语言的客户端

4. 通过Watcher机制实现Push模型,服务注册信息的变更能够及时通知服务消费方

缺点是:

1. 引入新的Zookeeper组件,带来新的复杂性和运维问题

2. 需自己通过它提供的API来实现服务注册与发现逻辑(包含Python与Java版本)

我们对上述几个方案的优缺点权衡之后,决定采用了基于Zookeeper实现自己的服务注册与发现。

基于Zookeeper的服务注册与发现架构

服务提供者

服务提供者作为服务的提供方将自身的服务信息注册到服务注册中心中。服务信息包含:

▪ 隶属于哪个系统

▪ 服务的IP,端口

▪ 服务的请求URL

▪ 服务的权重等等

服务注册中心

服务注册中心主要提供所有服务注册信息的中心存储,同时负责将服务注册信息的更新通知实时的Push给服务消费者(主要是通过Zookeeper的Watcher机制来实现的)。

服务消费者

服务消费者主要职责如下:

1. 服务消费者在启动时从服务注册中心获取需要的服务注册信息

2. 将服务注册信息缓存在本地

3. 监听服务注册信息的变更,如接收到服务注册中心的服务变更通知,则在本地缓存中更新服务的注册信息

4. 根据本地缓存中的服务注册信息构建服务调用请求,并根据负载均衡策略(随机负载均衡,Round-Robin负载均衡等)来转发请求

5. 对服务提供方的存活进行检测,如果出现服务不可用的服务提供方,将从本地缓存中剔除

服务消费者只在自己初始化以及服务变更时会依赖服务注册中心,在此阶段的单点故障通过Zookeeper集群来进行保障。在整个服务调用过程中,服务消费者不依赖于任何第三方服务。

实现机制介绍

Zookeeper数据模型介绍

在整个服务注册与发现的设计中,最重要是如何来存储服务的注册信息。

在设计基于Zookeeper的服务注册结构之前,我们先来看一下Zookeeper的数据模型。Zookeeper的数据模型如下图所示:

Zookeeper数据模型结构与Unix文件系统很类似,是一个树状层次结构。每个节点叫做Znode,节点可以拥有子节点,同时允许将少量数据存储在该节点下。客户端可以通过监听节点的数据变更和子节点变更来实时获取Znode的变更(Wather机制)。

Zookeeper服务注册与发现相关推荐

  1. SpringBoot系列:9. 分布式系统,Dubbo,Zookeeper服务注册与发现

    前言 本章主要对分布式系统,RPC的实现方式和Zookeeper实现做一个详细的概述并通过实战代码加深对他们的了解. 1. 分布式 什么是分布式系统? :"分布式系统是若干独立计算机的集合, ...

  2. 8、Zookeeper服务注册与发现原理浅析

    了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下Zookeeper是如何实现服务的注册与 ...

  3. Zookeeper 服务注册与发现01——服务提供者

    <!-- SpringBoot整合zookeeper客户端 --><dependency><groupId>org.springframework.cloud< ...

  4. Zookeeper 服务注册与发现02——服务消费者

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  5. Web Api 基于Zookeeper的服务注册与发现

    差异 基于Nginx的服务提供和消费 基于zookeeper的服务注册和发现 zk的负载均衡是可以调控,nginx只是能调权重,其他需要可控的都需要自己写插件:但是nginx的吞吐量比zk大很多,可以 ...

  6. Eureka的初理解【服务注册与发现、高可用集群、自我保护机制、与Zookeeper的比较】

    Eureka的初理解 什么是Eureka? Eureka[读音要知道怎么读] Netflix 在设计 Eureka 时,遵循的就是AP原则(CAP文章下面有介绍). Eureka是Netflix的一个 ...

  7. zookeeper实现服务注册与发现

    在分布式架构的系统中,系统经常被暴露为服务以供其他系统调用,这也是SOA或微服务架构常用的模式. 为了使服务之间能够互相通信,需要有一个协调系统来管理这些服务,以便这些服务能够互相找到对方,这就是服务 ...

  8. zookeeper与grpc集成实现服务注册与发现

    Zookeeper介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...

  9. Dubbo学习笔记001---分布式服务调用_Dubbo简介_依赖zookeeper做为注册中心进行服务注册与发现

    JAVA技术交流QQ群:170933152 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员 ...

最新文章

  1. 干货|深度学习实现零件的缺陷检测
  2. 信息化项目管理制度_华为内部几近满分的项目管理PPT,收走!
  3. 按照左右半区的方式重新组合单链表
  4. 优化数据库大幅度提高Oracle的性能
  5. NHibernate部分错误
  6. IOS中的XML解析方式
  7. [论文阅读] (03) 清华张超老师 - GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
  8. Linux nginx 会话保持(session)
  9. 表达式_关系式_关系表达式_比较表达式
  10. 11 个非常受欢迎的 JavaScript 动画库
  11. 错误RuntimeError: Invalid DISPLAY variable
  12. ENVI:There are no available ROls or EVFs associated with this input file.
  13. angular-route 和soket注意细节点
  14. 推荐一份Web 工程师的前端书单
  15. 计算机光驱启动设置,光驱启动怎么设置
  16. 华为云webSDK说明文档
  17. bable.js是什么
  18. 京东云 - 增值税发票识别
  19. QT基础学习笔记 Demo01
  20. RDKit | 计算拓扑极性表面积TPSA

热门文章

  1. java---集合---初级学习笔记
  2. C++ 内存分配与内存对齐
  3. HITSZ智能证券投资报告(3-19)
  4. 金旭亮博客之“Web开发技术”资源主页
  5. 单细胞测序GSVA及下游limma差异分析
  6. AutoCAD与.NET的对应版本关系
  7. 观海微Crosstalk Introduction
  8. iptable 详解_iptable命令详解1
  9. 从勒索软件攻击中恢复 sql server 数据库 mdf文件
  10. My97DatePicker无权限问题