CN108234670B - 一种基于zookeeper和netty的分布式远程调用方法 - Google Patents
一种基于zookeeper和netty的分布式远程调用方法 Download PDFInfo
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling 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的分布式远程调用方法。
背景技术
随着互联网的快速发展,用户量迅速增长,随之互联网应用的并放访问量越来越高,所以我们开始采用分布式部署,但是新的问题出现了,当我们要修改某个业务时,需要对所有的应用服务进行升级,对用户体验和系统维护都造成很大影响。
由此发现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注册服务,能够将业务与业务进行解耦。
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 (21)
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 | 恒生电子股份有限公司 | 服务的调用方法及相关系统 |
CN109753370A (zh) * | 2018-12-28 | 2019-05-14 | 北京东方国信科技股份有限公司 | 一种低时延、高吞吐的远程过程调用方法 |
CN109710878A (zh) * | 2018-12-28 | 2019-05-03 | 北京百佑科技有限公司 | 数据交互方法及服务器 |
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 | 鲸灵科技股份有限公司 | 一种大数据技术体系下实现高态势感知能力的方法 |
CN112950370B (zh) * | 2021-02-25 | 2024-08-16 | 西藏纳柯电子科技有限公司 | 业务处理方法、装置、设备及存储介质 |
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的海量数据接入方法及系统 |
CN114238028A (zh) * | 2021-12-22 | 2022-03-25 | 中国建设银行股份有限公司大连市分行 | 一种前端数据收集系统及方法 |
CN114860399B (zh) * | 2022-04-24 | 2024-08-06 | 北京合思信息技术有限公司 | 任务处理方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103986748B (zh) * | 2014-04-22 | 2019-01-25 | 数贸科技(北京)有限公司 | 实现服务化的方法和装置 |
CN113037823B (zh) * | 2015-01-23 | 2024-03-22 | 电子湾有限公司 | 消息传递系统和方法 |
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通信中同向流信息的处理方法和服务器 |
-
2018
- 2018-01-31 CN CN201810093687.6A patent/CN108234670B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108234670A (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108234670B (zh) | 一种基于zookeeper和netty的分布式远程调用方法 | |
WO2022206229A1 (zh) | 数据处理方法、装置、设备和存储介质 | |
CN106131213B (zh) | 一种服务管理方法和系统 | |
CN110581893B (zh) | 数据传输方法、装置、路由设备、服务器及存储介质 | |
CN111147308B (zh) | 基于微服务架构的网络管理方法和系统 | |
WO2011130940A1 (zh) | 多业务统一处理方法及统一业务平台 | |
CN113821268B (zh) | 一种与OpenStack Neutron融合的Kubernetes网络插件方法 | |
CN102053860A (zh) | 基于CORBA的OSGi分布式扩展系统及方法 | |
CN112333017B (zh) | 一种服务配置方法、装置、设备及存储介质 | |
CN112398936B (zh) | 一种基于Kubernetes的多网卡容器实现方法及系统 | |
CN113794652B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN106790084A (zh) | 一种基于ice中间件的异构资源集成框架及其集成方法 | |
CN112612595A (zh) | 微服务调用关系建立方法、装置、计算机设备和存储介质 | |
CN1972276B (zh) | 一种协议访问管理方法和系统 | |
CN114244654B (zh) | 一种url的转发方法、装置、设备及计算机存储介质 | |
CN116708266A (zh) | 一种云服务拓扑图实时更新方法、装置、设备及介质 | |
CN117459444A (zh) | 微服务同城双活同中心优先路由方法、设备及存储介质 | |
CN101299186A (zh) | 一种调用portlet服务的方法和装置 | |
WO2008095369A1 (fr) | Système de communication à couche d'adaptation, procédé et dispositif d'obtention d'informations sur un élément de réseau | |
CN109151074B (zh) | 基于Redis的集中式缓存队列服务架构方法及网络结构 | |
CN111580998A (zh) | SaaS服务模式下多租户的RPC调用方法 | |
CN116647552A (zh) | 异构微服务集群中服务处理方法及系统、终端及存储介质 | |
CN115758334A (zh) | 云应用的访问方法、装置、电子设备及存储介质 | |
CN111935329B (zh) | 域名解析方法和装置 | |
CN113727138A (zh) | 一种hls内网回源方法 |
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 |