资讯专栏INFORMATION COLUMN

RPC框架原理及从零实现系列博客(三):zookeeper注册中心原理

codergarden / 1260人阅读

摘要:每个都可以通过其路径唯一标识,同时每个节点还可以存储少量数据。监听机制,监听某个当该发生变化时,会回调该,但是这个是一次性的,下次需要监听时还得再注册一次。

前面的文章中 我用netty实现了一个简单的一对一的RPC

11个类实现简单java rpc

接下来的文章中 我将使用zookeeper作为rpc调用的分布式注册中心 从而实现多对多(多个调用者,多个提供者)的rpc调用,负载均衡及相应的分布式协调功能

首先简单介绍下zookeeper

zookeeper是hadoop中一个重要组件,其主要是作为分布式协调服务
zookeeper采用节点树的数据模型,类似linux文件系统,/,/app1,/app2 比较简单

每个节点称做一个ZNode。每个ZNode都可以通过其路径唯一标识,同时每个节点还可以存储少量数据。
节点可分为常规节点,临时节点和顺序节点
还有两个比较重要的东西 session和watcher

session:

每个zk客户端与zk连接时会创建一个session,在设置的sessionTimeOut内,客户端会与zk进行心跳包的定时发送,从而感知每个客户端是否宕机,如果创建某个临时Znode的对应session销毁时,相应的临时节点也会被zk删除

watcher:

监听机制,监听某个Znode 当该znode发生变化时,会回调该watcher,但是这个watcher是一次性的,下次需要监听时还得再注册一次。

当然 这几个只是zookeeper的各种特性之一,能实现注册中心的也不止zookeeper(例如redis),注册中心也只是zk的功能之一,还有互斥锁,乐观锁,命名服务等也是zk能实现的,本文只讲述rpc框架需要的3个重要内容
临时节点,session,watcher其余内容请读者自行查阅

这是dubbo框架的注册中心数据模型

zookeeper注册中心思路如下

(这是我的思路 可能没和dubbo框架一模一样)

服务名称作为次级znode,下层的znode为对应的类型,调用者还是提供者

对应的类型下面是他们的URL 即对应机器的IP地址 URL这个znode为临时节点

提供者服务启动后向zookeeper注册他有的services,并将自己的ip地址和端口作为路径,创建对应的URL临时节点
调用者调用相应服务时,找到对应的service节点,获得service所有的子节点,并且watch service节点,然后同样注册自己的znode节点
每个调用端需明确提供者和调用者的数量以及提供者相应的IP地址
之后调用端获得 service/providers的所有子节点 即获得所有的提供者的IP 使用对应负载均衡策略连接其中一个ip地址,进行rpc调度
当提供者或调用者出现宕机或者网络故障时,对应session的临时znode会被销毁,即哪个IP的机子宕机了,他对应的url节点在sessionTimeOut后,就会被销毁,此时由于service节点已发生了变化,所有可用调用者都会收到watcher的通知,此时重新获得所有的调用者提供者IP及其数量,并继续监听,从而悉知调用端和服务端的服务可用情况。

负载均衡

常见负载均衡策略有(权重)轮询,随机,最小连接数,一致性hash等等

后续文章会分析并选取其中一种进行实现

以上为rpc框架使用zookeeper作为注册中心的思路

下篇博客将是对上述思路的具体代码实现,并整合进RPC框架
http://blog.csdn.net/we_phone...
欢迎持续关注我的博客及我的github:MeiZhuoRPC

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68336.html

相关文章

  • RPC框架原理从零实现系列博客(一):思路篇

    摘要:等之所以支持跨语言,是因为他们自己定义了一套结构化数据存储格式,如的,用于编解码对象,作为各个语言通信的中间协议。 前段时间觉得自己一直用别人的框架,站在巨人的肩膀上,也该自己造造轮子了 一时兴起 就着手写起了RPC框架 这里写了系列博客拿给大家分享下 这篇是开篇的思路篇 项目最终的代码放在了我的github上https://github.com/wephone/Me... 欢迎sta...

    tracy 评论0 收藏0
  • RPC框架原理从零实现系列博客(二):11个类实现简单RPC框架

    摘要:项目版本源码在上一博文中跟大家讲了的实现思路思路毕竟只是思路那么这篇就带着源码给大家讲解下实现过程中的各个具体问题读懂本篇需要的基本知识若尚未清晰请自行了解后再阅读本文动态代理框架的基本使用的基本配置最终项目的使用如下调用端代码及配置测试类 项目1.0版本源码 https://github.com/wephone/Me... 在上一博文中 跟大家讲了RPC的实现思路 思路毕竟只是思路...

    you_De 评论0 收藏0
  • 2021 年最新基于 Spring Cloud 的微服务架构分析

    摘要:是一个相对比较新的微服务框架,年才推出的版本虽然时间最短但是相比等框架提供的全套的分布式系统解决方案。提供线程池不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务器雪崩的问题。通过互相注册的方式来进行消息同步和保证高可用。 Spring Cloud 是一个相对比较新的微服务框架,...

    cikenerd 评论0 收藏0
  • PowerDotNet平台化软件架构设计与实现系列(04):服务治理平台

    摘要:的服务治理平台发源于早期的个人项目。客户端发现模式要求客户端负责查询注册中心,获取服务提供者的列表信息,使用负载均衡算法选择一个合适的服务提供者,发起接口调用请求。系统和系统之间,少不了数据的互联互通。随着微服务的流行,一个系统内的不同应用进行互联互通也是常态。 PowerDotNet的服务治理平台发源于早期的个人项目Power.Apix。这个项目借鉴了工作过的公司的服务治理方案,站在...

    reclay 评论0 收藏0
  • dubbo源码解析(一)Hello,Dubbo

    摘要:英文全名为,也叫远程过程调用,其实就是一个计算机通信协议,它是一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议。 Hello,Dubbo 你好,dubbo,初次见面,我想和你交个朋友。 Dubbo你到底是什么? 先给出一套官方的说法:Apache Dubbo是一款高性能、轻量级基于Java的RPC开源框架。 那么什么是RPC? 文档地址:http://dubbo.a...

    evin2016 评论0 收藏0

发表评论

0条评论

codergarden

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<