使用 Zookeeper 作为服务注册中心

认识 Zookeeper

Zookeeper

  • A Distributed Coordination Service for Distributed Applications
    一个面向分布式应用的分布式协调服务
  • 官网 : http://zookeeper.apache.org

设计目标

  • 简单
    用起来和文件系统类似
  • 多副本
    一般 使用的时候是3副本或者5副本 至少是3个节点 其中一个为leader节点 其他为follow节点
  • 有序
    操作是根据一个时间戳来排序的

  • 读多写少时 速度快

使用 Zookeeper 作为注册中心

Spring Cloud Zookeeper

  • 在maven中加入 spring-cloud-starter-zookeeper-discovery 依赖
  • 在 springcloud中 使用 Apache Curator 作为 Zookeeper 的客户端

简单配置

  • 在 application.properties 中配置 spring.cloud.zookeeper.connect-string=localhost:2181
    告诉它需要找到哪个 Zookeeper 注册上去 在生产环境中 最少要3副本 最好为5副本

提示

  • 需要注意是 Zookeeper 的版本
    • 3.5.x 是最新版本 但是还是 Beta(测试),但很多人在生产中使用它 3.4为稳定版本 两者都普遍被使用 根据实际情况进行使用

使用 Zookeeper 作为注册中心的问题

两篇文章值得阅读

  • 《阿里巴巴为什么不用 Zookeeper 做服务发现》
  • 《Eureka! Why You Shouldn’t Use ZooKeeper for Service Discovery》

核心思想

  • 在实践中,注册中心不能因为自身的任何原因破坏服务之间本身的可连通性
  • 注册中心需要的是 AP,而 Zookeeper 是 CP
    • CAP :一致性、可用性、分区容忍性

一致性:是指在同一时刻,分布式系统中的所有数据备份为相同值
可用性:指集群中的某一个节点故障宕机后,集群还能响应客户端请求。
分区容忍性:当分布式系统中因为一些原因导致无法通信而分成多个分区,系统还能正常对外服务。

通过 Docker 启动 Zookeeper

官方指引

  • https://hub.docker.com/_/zookeeper

获取镜像

  • docker pull zookeeper:3.5

运行 Zookeeper 镜像

  • docker run --name zookeeper -p 2181:2181 -d zookeeper:3.5

例子

分为两个模块 zk-customer-service 和 zk-waiter-service
目录
zk-customer-service
在这里插入图片描述
需要修改的代码
application.properties

server.port=0

management.endpoint.health.show-details=always

spring.cloud.zookeeper.connect-string=localhost:2181

bootstrap.properties

spring.application.name=customer-service

在pom文件中 将 Eureka 换为 zookeeper 增加zookeeper支持

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
		</dependency>

zk-waiter-service
在这里插入图片描述
需要修改的代码
application.properties

spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

info.app.author=hui
info.app.encoding=@project.build.sourceEncoding@

server.port=0

spring.cloud.zookeeper.connect-string=localhost:2181

bootstrap.properties

spring.application.name=waiter-service

在pom文件中 将 Eureka 换为 zookeeper 增加zookeeper支持

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
		</dependency>

结果

在控制台 我们可以看到 zk-customer-service 成功的通过 Zookeeper 访问到了 zk-waiter-service
在这里插入图片描述

同样 我们打开 docker 中的 Zookeeper 可以看到注册进去服务的信息

在这里插入图片描述

Zookeeper 命令

获取镜像:
docker pull zookeeper:3.5

运行:
docker run --name zookeeper -p 2181:2181 -d zookeeper:3.5

操作:
在docker中进入zookeeper命令行;
docker exec -it zookeeper bash

进入zookeeper的bin目录:
cd bin

使用zookeeper client访问zookeeper服务:
./zkCli.sh

查看
ls /

查看所有services:
ls /services

查看waiter-service的信息:
ls /services/waiter-service

根据[id]查看相关服务的详细信息(id是动态的):
ls /services/waiter-service/[id]
示例:
ls /services/waiter-service/51c51677-488c-431f-9566-ccbeec5bef04

获取相关服务的详细信息(id是动态的):
get /services/waiter-service/[id]
示例:
get /services/waiter-service/51c51677-488c-431f-9566-ccbeec5bef04

获取相关服务的详细信息(id是动态的):
get /services/customer-service/[id]
示例:
get /services/customer-service/fd56228b-9b90-4052-99ce-307dd78fe05a

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值