java curator_使用zookeeper和curator实现微服务的负载平衡

使用zookeeper和curator实现微服务的负载平衡

Apache ZooKeeper是一个可以注册 管理和服务发现工具,能够在不同服务器上发现可用的服务, Apache Curator 能够是对ZooKeeper封装,更加容易使用,只需要更少的代码。

We are accustomed to situation when there is a load balancer deployed in front of our application. Its role is to make sure that every single node gets more or less same amount of traffic.

微服务架构能让我们关注更小的模块,随着系统的复杂增加,将会拥有很多微服务,它们的调用需要负载平衡,现在我们使用ZooKeeper作为服务的指挥家和发现工具。

让我们从一个简单案例开始,监听一个端口然后返回一些结果,这里我们使用 Groovy, Undertow 和 ZooKeeper 以及 Curator.本案例的源码下载。

假设已经有一个Restful微服务代码如下:

@Path("/")

class Main {

@GET

@Path("/work")

public String work() {

String response = "Work done by $workerName"

println response

return response

}

}

这是一个简单的worker,直接响应一些字符串给客户端。下面我们将这个worker注册到ooKeeper中:

private static void registerInZookeeper(int port) {

CuratorFramework curatorFramework =

CuratorFrameworkFactory.newClient("localhost:2181",

new RetryNTimes(5, 1000))

curatorFramework.start()

ServiceInstance serviceInstance = ServiceInstance.builder()

.uriSpec(new UriSpec("{scheme}://{address}:{port}"))

.address('localhost')

.port(port)

.name("worker")

.build()

ServiceDiscoveryBuilder.builder(Void)

.basePath("load-balancing-example")

.client(curatorFramework)

.thisInstance(serviceInstance)

.build()

.start()

}

首先我们创建和启动 CuratorFramework 客户端包装我们所有想在Zookeeper上的操作,这里使用localhost作为缺省,通常应该是运行ZooKeeper的实例服务器的URL。

然后创建ServiceInstance代表我们的worker. 我们传递所有从其他微服务调用这个worker的合约细节。

最后将我们的实例注册到ZooKeeper,这是通过CuratorFramework client.

现在Worker已经准备完成,我们创建fat jar (使用 Gradle fatJar task),然后使用下面命令加载:

java -jar simple-worker/build/libs/simple-worker-1.0-shadow.jar Worker_1 18005

在启动worker之前,你必须有ZKr运行在2181上。

为了验证运行正常,在浏览器键入http://localhost:18005/work,应该看到响应:"Work done by Worker_1". 通过下面命令可以验证worker已经注册到ZK中:

cd /bin

./zkCli.sh

然后在 /load-balancing-example/worker 运行ls:

[zk: localhost:2181(CONNECTED) 1] ls /load-balancing-example/worker

[f69545e8-8466-40c0-93e9-f493eb7496b4]

通过下面命令可以加入更多worker:

java -jar simple-worker/build/libs/simple-worker-1.0-shadow.jar Worker_1 18005 &

java -jar simple-worker/build/libs/simple-worker-1.0-shadow.jar Worker_2 18006 &

java -jar simple-worker/build/libs/simple-worker-1.0-shadow.jar Worker_3 18007 &

java -jar simple-worker/build/libs/simple-worker-1.0-shadow.jar Worker_4 18008 &

通过ls可以查看:

[zk: localhost:2181(CONNECTED) 0] ls /load-balancing-example/worker

[d5bc4eb9-8ebb-4b7c-813e-966a25fdd843, 13de9196-bfeb-4c1a-b632-b8b9969b9c0b, 85cd1387-2be8-4c08-977a-0798017379b1, 9e07bd1d-c615-430c-8dcb-bf228e9b56fc]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值