CN108234670B - 一种基于zookeeper和netty的分布式远程调用方法 - Google Patents

一种基于zookeeper和netty的分布式远程调用方法 Download PDF

Info

Publication number
CN108234670B
CN108234670B CN201810093687.6A CN201810093687A CN108234670B CN 108234670 B CN108234670 B CN 108234670B CN 201810093687 A CN201810093687 A CN 201810093687A CN 108234670 B CN108234670 B CN 108234670B
Authority
CN
China
Prior art keywords
service
client
request
calling
zookeeper
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810093687.6A
Other languages
English (en)
Other versions
CN108234670A (zh
Inventor
付君辉
李宏伟
代宏伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zhongan Zhida Technology Co ltd
Original Assignee
Beijing Zhongan Zhida Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Zhongan Zhida Technology Co ltd filed Critical Beijing Zhongan Zhida Technology Co ltd
Priority to CN201810093687.6A priority Critical patent/CN108234670B/zh
Publication of CN108234670A publication Critical patent/CN108234670A/zh
Application granted granted Critical
Publication of CN108234670B publication Critical patent/CN108234670B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/133Protocols for remote procedure calls [RPC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明提供一种基于zookeeper和netty的分布式远程调用方法,包括用于提供远程服务并供客户端调用的服务端模块,以及对本地调用进行封装的客户端模块,所述服务端模块包括服务封装,对服务进行封装,提供唯一的访问点,并且进行服务发布和服务注册;所述客户端模块包括动态代理,通过调用代理类获取服务端的业务实现;包括服务查找,通过请求调用的接口及方法从Zookeeper中获取注册服务的IP和端口,选择权重值最小的服务,同时将该权重设置成相同服务集群中的最大值;还包括服务调用,通过Netty发起客户端请求,绑定处理类流水线,封装请求对象并序列化后发给服务端模块,服务端模块响应数据反序列化后传给业务逻辑。

Description

一种基于zookeeper和netty的分布式远程调用方法
技术领域
本发明属于互联网应用技术领域,涉及一种远程调用方法,特别涉及一种基于zookeeper和netty的分布式远程调用方法。
背景技术
随着互联网的快速发展,用户量迅速增长,随之互联网应用的并放访问量越来越高,所以我们开始采用分布式部署,但是新的问题出现了,当我们要修改某个业务时,需要对所有的应用服务进行升级,对用户体验和系统维护都造成很大影响。
由此发现Web(网络)容器的垂直架构已经无法满足需求,需要拆分应用进行服务化,以提高开发和维护效率。垂直的架构拆分之后,应用系统和服务端之间需要通过远程接口调用进行通信,高性能的RPC(远程过程调用)框架必不可少,传统的Socket(网络通信接口)通信框架会有线程阻塞问题,Netty(异步通信框架)是一个异步高性能的线程非阻塞性通信框架,往往作为基础通信组件被这些RPC(远程过程调用)框架使用。
为了满足高并发需求,服务端也要进行分布式部署,但是应用系统要和哪一个服务端进行通信,需要有一个中间代理程序,对服务进行协调管理。Zookeeper是一种为分布式应用所设计的高可用、高性能的开源协调服务,被广泛应用于大型的、分布式的系统当中。
发明内容
本发明提供了一种基于zookeeper和netty的分布式远程调用方法,用于解决互联网应用并发访问量大、系统维护困难的问题,服务端根据业务进行分类,向Zookeeper注册服务,保证服务的分布式调用,并可以将业务与业务进行解耦;采用Netty搭建通信框架,保证远程调用线程的非阻塞性;采用动态代理和反射技术,保证远程调用的简易性。其技术方案如下所述:
本发明提供了以下技术方案:
服务端模块,主要包括服务封装、服务发布、服务注册。
客户端模块,主要包括动态代理、服务查找、服务调用。
请求过程,主要包括客户端与服务端的交互过程。
其中,服务端模块包括:
A1.服务封装,主要是采用工厂模式,将所有的服务封装到一个Map集合中,并采用单例模式,提供唯一的服务访问点,节省系统内存。
A2.服务发布,主要是通过Netty发布服务,启动Netty服务,开启select轮询机制,监听accept(接收)、read(读)、write(写)事件,并处理流水线业务,具体包括(1)接收请求数据进行反序列化得到请求对象;(2)根据请求中的参数,从服务封装程序中找到对应的业务实现类,采用反射技术调用指定方法,获取返回结果;(3)将业务调用结果封装到响应对象中并序列化后发往客户端。
A3.服务注册,主要包括(1)根据业务不同,在Zookeeper中注册不同的目录结构;(2)每个业务下注册节点,创建临时自动编号节点,并对服务启动监听,如果服务挂掉,客户端不再调用此服务,同时新增和修改节点时客户端也能发现;(3)每个节点包含提供相同服务的集群信息,其中包括每个服务的ip、端口及权重等,客户端查找服务时,要返回权重值最小的节点,当节点被调用时,权重设置成相同服务集群中的最大值。
客户端模块包括:
B1.动态代理,客户端可以通过调用代理类来获取服务端的业务实现,代理类能够获取客户端发起请求调用的接口、方法、及参数。
B2.服务查找,主要是通过请求调用的接口及方法从Zookeeper中获取注册服务的IP和端口,选择权重值最小的服务,同时权重权重设置成相同服务集群中的最大值。
B3.服务调用,主要是通过Netty发起客户端请求,绑定处理类流水线,其中包括封装请求对象并序列化后发给服务端;服务端响应数据反序列化后传给业务逻辑。
请求过程包括:
C1.请求类发起请求,调用客户端代理类获取服务,并调用服务提供的方法。
C2.客户端封装请求对象,通过动态代理机制,我们可以获取到调用的服务、方法及参数信息,并将其封装成请求对象。
C3.获取服务地址,通过C2中获取的服务信息,从Zookeeper集群中获取注册服务的IP、端口及权重值,如果服务端是一个集群,Zookeeper返回的注册服务地址应该也有多个,所以返回一个服务地址集合。
C4.客户端接收服务器地址集合。
C5.获取权重值最小的服务,将C3中获取服务的权重值进行比较,获取值最小的服务。
C6.修改服务的权重值,修改Zookeeper集群中的服务(C4中获取的权重值最小的服务)信息,将其权重值加上C3中服务地址集合的大小,目的是将其权重设置成提供相同服务集群中的最大值。
C7.向服务端发起请求,从C4获取到服务端IP和端口后,通过Netty发送客户端封装的请求对象。
C8.服务端获取请求对象,接收请求数据进行反序列化得到请求对象。
C9.调用服务及方法,根据请求中的参数,进行反射,调用对应服务及方法,获取返回结果。
C10.封装响应对象,将业务调用结果封装到响应对象中并序列化后发往客户端。
C11.反序列化响应对象,客户端将服务端响应的数据反序列化,获取响应对象。
C12.将响应数据返回给请求类。
所述基于zookeeper和netty的分布式远程调用方法支持多用户高并发操作,并且具有良好的扩展性。
附图说明
图1是系统的主流程图;
图2是服务注册目录结构图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
以下实施例仅用于说明本发明而不是限制,并且在应用上可以延伸到其它的修改、变化、应用和实施例,同时认为所有这样的修改、变化、应用和实施例都在本发明的范围内。
本发明主要涉及服务端模块、客户端模块、及请求过程。
服务端模块,主要是提供远程服务,供客户端调用,并可以分布式部署。
A1.服务封装,主要是对服务进行封装,提供唯一的访问点,节省系统内存。
A2.服务发布,主要是通过Netty发布服务,启动Netty服务,开启select轮询机制,监听accept、read、write事件,并处理流水线业务。
A3.服务注册,主要是根据业务的不同,向zookeeper注册服务,创建临时自动编号节点,并对服务启动监听,如果服务挂掉,客户端不再调用此服务。
其中对于步骤A1中服务封装,可以具体描述为:
A11.采用工厂模式,将所有的服务封装到一个Map集合中。
A12.采用单例模式,提供唯一的服务访问点,节省系统内存。
其中对于步骤A2中服务发布需要绑定处理类流水线,可以具体描述为:
A21.接收请求数据进行反序列化得到请求对象。
A22.根据请求中的参数,从服务封装程序中找到对应的业务实现类,采用反射技术调用指定方法,获取返回结果。
A23.将业务调用结果封装到响应对象中并序列化后发往客户端。
其中对于步骤A3中服务注册,如附图2,可以具体描述为:
A31.根据业务不同,在Zookeeper中注册不同的目录结构。
A32.每个业务下注册节点,创建临时自动编号节点,并对服务启动监听,如果服务挂掉,客户端不再调用此服务,同时新增和修改节点时客户端也能发现。
A33.每个节点包含提供相同服务的集群信息,其中包括每个服务的ip、端口及权重等,客户端查找服务时,要返回权重值最小的节点,当节点被调用时,权重设置成相同服务集群中的最大值。
客户端模块,主要是对本地调用的封装。
具体如下:
B1.动态代理,客户端可以通过调用代理类来获取服务端的业务实现,代理类能够获取客户端发起请求调用的接口、方法、及参数。
B2.服务查找,主要是通过请求调用的接口及方法从Zookeeper中获取注册服务的IP和端口,选择权重值最小的服务,同时权重权重设置成相同服务集群中的最大值。
B3.服务调用,主要是通过Netty发起客户端请求,绑定处理类流水线,其中包括封装请求对象并序列化后发给服务端;服务端响应数据反序列化后传给业务逻辑。
请求过程,如附图1,具体包括:
C1.请求类发起请求,调用客户端代理类获取服务,并调用服务提供的方法。
C2.封装请求对象,通过动态代理机制,我们可以获取到调用的服务、方法及参数信息,并将其封装成请求对象。
C3.获取服务地址,通过C2中获取的服务信息,从Zookeeper集群中获取注册服务的IP、端口及权重值,如果服务端是一个集群,Zookeeper返回的注册服务地址应该也有多个,所以返回一个服务地址集合。
C4.客户端接收服务器地址集合。
C5.获取权重值最小的服务,将C3中获取服务的权重值进行比较,获取值最小的服务。
C6.修改服务的权重值,修改Zookeeper集群中的服务(C4中获取的权重值最小的服务)信息,将其权重值加上C3中服务地址集合的大小,目的是将其权重设置成提供相同服务集群中的最大值。
C7.向服务端发起请求,从C4获取到服务端IP和端口后,通过Netty发送客户端封装的请求对象。
C8.服务端获取请求对象,接收请求数据进行反序列化得到请求对象。
C9.调用服务及方法,根据请求中的参数,进行反射,调用对应服务及方法,获取返回结果。
C10.封装响应对象,将业务调用结果封装到响应对象中并序列化后发往客户端。
C11.反序列化响应对象,客户端将服务端响应的数据反序列化,获取响应对象。
C12.将响应数据返回给请求类。
所述基于zookeeper和netty的分布式远程调用方法支持多用户高并发操作,并且具有良好的扩展性。

Claims (4)

1.一种基于zookeeper和netty的分布式远程调用方法,其特征在于:包括用于提供远程服务并供客户端调用的服务端模块,以及对本地调用进行封装的客户端模块,所述服务端模块包括服务封装,对服务进行封装,提供唯一的访问点,并且进行服务发布和服务注册;
所述客户端模块包括动态代理,通过调用代理类获取服务端的业务实现;包括服务查找,通过请求调用的接口及方法从Zookeeper中获取注册服务的IP和端口,选择权重值最小的服务,同时将该权重设置成相同服务集群中的最大值;还包括服务调用,通过Netty发起客户端请求,绑定处理类流水线,封装请求对象并序列化后发给服务端模块,服务端模块响应数据反序列化后传给业务逻辑;
服务发布是通过Netty发布服务,启动Netty服务,开启select轮询机制,监听接收、读、写事件,并处理流水线业务;包括(1)接收请求数据进行反序列化得到请求对象;(2)根据请求中的参数,从服务封装程序中找到对应的业务实现类,采用反射技术调用指定方法,获取返回结果;(3)将业务调用结果封装到响应对象中并序列化后发往客户端;
集群信息包括每个服务的ip、端口及权重;
所述客户端模块向服务端模块的请求过程包括以下步骤,
C1.请求类发起请求,调用客户端代理类获取服务,并调用服务提供的方法;
C2.客户端封装请求对象,通过动态代理机制,获取到调用的服务、方法及参数信息,并将其封装成请求对象;
C3.获取服务地址,通过C2中获取的服务信息,从Zookeeper集群中获取注册服务的IP、端口及权重值,如果服务端是一个集群,Zookeeper返回的注册服务地址应该也有多个,所以返回一个服务地址集合;
C4.客户端接收服务器地址集合;
C5.获取权重值最小的服务,将C3中获取服务的权重值进行比较,获取值最小的服务;
C6.修改服务的权重值,修改Zookeeper集群中的服务,即C4中获取的权重值最小的服务信息,将其权重值加上C3中服务地址集合的大小,将其权重设置成提供相同服务集群中的最大值;
C7.向服务端发起请求,从C4获取到服务端IP和端口后,通过Netty发送客户端封装的请求对象;
C8.服务端获取请求对象,接收请求数据进行反序列化得到请求对象;
C9.调用服务及方法,根据请求中的参数,进行反射,调用对应服务及方法,获取返回结果;
C10.封装响应对象,将业务调用结果封装到响应对象中并序列化后发往客户端;
C11.反序列化响应对象,客户端将服务端响应的数据反序列化,获取响应对象;
C12.将响应数据返回给请求类。
2.根据权利要求1所述的基于zookeeper和netty的分布式远程调用方法,其特征在于:所述服务端模块的服务封装,采用工厂模式,将所有的服务封装到一个Map集合中,并采用单例模式,提供唯一的服务访问点。
3.根据权利要求1所述的基于zookeeper和netty的分布式远程调用方法,其特征在于:服务注册包括(1)根据业务不同,在Zookeeper中注册不同的目录结构;(2)每个业务下注册节点,创建临时自动编号节点,并对服务启动监听,如果服务挂掉,客户端不再调用此服务,同时新增和修改节点时客户端也能发现;(3)每个节点包含提供相同服务的集群信息,客户端查找服务时,要返回权重值最小的节点,当节点被调用时,权重设置成相同服务集群中的最大值。
4.根据权利要求1所述的基于zookeeper和netty的分布式远程调用方法,其特征在于:所述服务端模块根据业务进行分类向Zookeeper注册服务,能够将业务与业务进行解耦。
CN201810093687.6A 2018-01-31 2018-01-31 一种基于zookeeper和netty的分布式远程调用方法 Active CN108234670B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810093687.6A CN108234670B (zh) 2018-01-31 2018-01-31 一种基于zookeeper和netty的分布式远程调用方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810093687.6A CN108234670B (zh) 2018-01-31 2018-01-31 一种基于zookeeper和netty的分布式远程调用方法

Publications (2)

Publication Number Publication Date
CN108234670A CN108234670A (zh) 2018-06-29
CN108234670B true CN108234670B (zh) 2021-01-15

Family

ID=62670127

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810093687.6A Active CN108234670B (zh) 2018-01-31 2018-01-31 一种基于zookeeper和netty的分布式远程调用方法

Country Status (1)

Country Link
CN (1) CN108234670B (zh)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109254808A (zh) * 2018-07-18 2019-01-22 平安科技(深圳)有限公司 接口调用方法、装置及计算机可读存储介质
CN110798411A (zh) * 2018-08-03 2020-02-14 阿里巴巴集团控股有限公司 服务调用方法、流量调度方法及装置
CN109298958A (zh) * 2018-10-26 2019-02-01 恒生电子股份有限公司 服务的调用方法及相关系统
CN109710878A (zh) * 2018-12-28 2019-05-03 北京百佑科技有限公司 数据交互方法及服务器
CN109753370A (zh) * 2018-12-28 2019-05-14 北京东方国信科技股份有限公司 一种低时延、高吞吐的远程过程调用方法
CN109726014B (zh) * 2018-12-29 2023-07-11 深圳市力豪信息技术服务有限公司 基于Netty的Rpc客户端在性能测试平台中的实现方法、系统、服务器及存储介质
CN110032451A (zh) * 2019-04-18 2019-07-19 成都四方伟业软件股份有限公司 分布式多语言消息实现方法、装置及服务器
CN110177118B (zh) * 2019-06-13 2022-03-29 上海海事大学 一种基于rdma的rpc通信方法
CN110287040B (zh) * 2019-06-26 2021-06-18 苏宁消费金融有限公司 一种远程调用服务框架的实现系统
CN111147605B (zh) * 2019-12-31 2022-06-10 中国银行股份有限公司 服务注册方法、装置和设备
CN113342540B (zh) * 2020-03-02 2023-04-28 中国移动通信集团山东有限公司 终端用户缴费开机方法、系统、计算机设备和存储介质
CN112230987B (zh) * 2020-10-29 2023-12-01 电信科学技术第五研究所有限公司 一种分布式模块化插件框架实现系统及方法
CN112437148B (zh) * 2020-11-20 2023-03-07 北京奇艺世纪科技有限公司 业务请求的处理方法、装置、业务服务器及系统
CN112650706A (zh) * 2020-12-31 2021-04-13 鲸灵科技股份有限公司 一种大数据技术体系下实现高态势感知能力的方法
CN112950370A (zh) * 2021-02-25 2021-06-11 未鲲(上海)科技服务有限公司 业务处理方法、装置、设备及存储介质
CN112965763B (zh) * 2021-03-30 2023-08-22 建信金融科技有限责任公司 一种业务处理系统、方法、装置和存储介质
CN113194150B (zh) * 2021-05-12 2023-04-07 湖南快乐阳光互动娱乐传媒有限公司 一种长连接推送服务处理系统
CN113485717A (zh) * 2021-05-17 2021-10-08 江苏航天七零六信息科技有限公司 一种高效的跨语言远程调用(rfc)方法
CN114095537B (zh) * 2021-11-18 2023-07-14 重庆邮电大学 一种物联网应用中基于Netty的海量数据接入方法及系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103986748B (zh) * 2014-04-22 2019-01-25 数贸科技(北京)有限公司 实现服务化的方法和装置
CN107431664B (zh) * 2015-01-23 2021-03-12 电子湾有限公司 消息传递系统和方法
CN104994145B (zh) * 2015-06-23 2018-08-10 山东大学 一种基于kvm虚拟化集群的负载均衡方法
CN105391804A (zh) * 2015-12-16 2016-03-09 炫彩互动网络科技有限公司 一种可减少传输流量的远程调用方法
CN106250247A (zh) * 2016-07-26 2016-12-21 浪潮电子信息产业股份有限公司 一种基于RMI和ZooKeeper实现远程调用框架的方法
CN106453112B (zh) * 2016-08-10 2019-11-08 广州市香港科大霍英东研究院 Rpc通信中同向流信息的处理方法和服务器

Also Published As

Publication number Publication date
CN108234670A (zh) 2018-06-29

Similar Documents

Publication Publication Date Title
CN108234670B (zh) 一种基于zookeeper和netty的分布式远程调用方法
CN106131213B (zh) 一种服务管理方法和系统
CN110581893B (zh) 数据传输方法、装置、路由设备、服务器及存储介质
CN113596110A (zh) 一种面向异构云的云原生微服务平台
WO2011130940A1 (zh) 多业务统一处理方法及统一业务平台
CN113821268B (zh) 一种与OpenStack Neutron融合的Kubernetes网络插件方法
CN112333017B (zh) 一种服务配置方法、装置、设备及存储介质
CN111147308B (zh) 基于微服务架构的网络管理方法和系统
CN106790084A (zh) 一种基于ice中间件的异构资源集成框架及其集成方法
CN112612595A (zh) 微服务调用关系建立方法、装置、计算机设备和存储介质
CN112398936A (zh) 一种基于Kubernetes的多网卡容器实现方法及系统
CN114244654B (zh) 一种url的转发方法、装置、设备及计算机存储介质
CN1972276B (zh) 一种协议访问管理方法和系统
CN112966833B (zh) 基于Kubernetes集群的机器学习模型平台
WO2008095369A1 (fr) Système de communication à couche d'adaptation, procédé et dispositif d'obtention d'informations sur un élément de réseau
WO2021093671A1 (zh) 任务处理方法、系统、装置、设备及计算机可读存储介质
CN116708266A (zh) 一种云服务拓扑图实时更新方法、装置、设备及介质
CN116647552A (zh) 异构微服务集群中服务处理方法及系统、终端及存储介质
CN111935329B (zh) 域名解析方法和装置
CN109151074B (zh) 基于Redis的集中式缓存队列服务架构方法及网络结构
CN113727138A (zh) 一种hls内网回源方法
CN114500646B (zh) 一种去中心化的esb云平台系统及其服务调用方法
CN111580998A (zh) SaaS服务模式下多租户的RPC调用方法
CN111552737A (zh) 一种基于zookeeper的多源数据广域访问系统及方法
CN115174687B (zh) 服务调用方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant