一种基于Netty技术的远程过程调用方法
- 国知局
- 2024-07-31 23:13:00
本发明涉及分布式计算领域,具体为一种基于netty技术的远程过程调用方法。
背景技术:
1、描述电子器件发展的摩尔定律已经遇到物理极限挑战,随着电子元器件已经深入到纳米级别,物体大小已经开始从宏观尺度进入到微观尺度,量子效应开始显现。计算机高性能计算开始从单个强运算单元向多个计算单元联合的方式发展,超级计算机以并行、分布式计算结构做支撑。现有分布式计算最终要的问题就是计算机之间如何有效通信,协同完成计算任务。多个计算主体并行计算如何解决资源临界导致的死锁问题。
2、计算程序从顺序执行变成并行计算的时候,复杂度会急剧增加。现有的远程过程调用算法提供了客户端、服务器模式的远程过程调用。客户端提供了接口调用副本,服务器提供计算的具体实现。客户端和服务器在网络通信上通过网络模块提供一种抽象,需要用户根据需求具体设计实现。网络i/o和计算过程中的i/o占用了程序员大量的精力,使得分布式程序计算不能集中注意到具体的计算任务,而是陷入复杂的网络和i/o处理当中。这种程序的错误只是概率呈现,因此在调试阶段没有问题,上线之后才会偶尔发生,造成很大困扰。
3、通过程序员维护客户端和服务器的网络通信逻辑在大量客户端请求和多个服务器构成集群处理时,非常复杂不易维护,对程序开发造成较大挑战。程序的开发框架不易扩展,需要在客户端和服务器数量较为任意的情况下,都能够通过简易的配置和远程过程调用程序开发快速完成分布式计算任务。网络环境设计到大量i/o操作,需要在动态变化的网络环境中,通过服务发现来动态分布任务到服务器上,从而稳定的完成客户端请求,提高程序运行的稳定性。
4、针对上述问题,亟需一种简化计算的程序,可以解决上述困难问题,使其可以在网络环境中高效执行,使任务之间充分解耦。
技术实现思路
1、本发明为了解决程序员维护客户端和服务器的网络通信逻辑在大量客户端请求和多个服务器构成集群处理时,非常复杂不易维护以及在此情境下,分布式程序计算不能集中注意到具体的计算任务,而是陷入复杂的网络和i/o处理当中的问题,提供了一种基于netty技术的远程过程调用方法。
2、本发明是通过如下技术方案来实现的:一种基于netty技术的远程过程调用方法,通过设计远程过程调用负载均衡算法,实现多个客户端请求服务计算时,较为均匀的把任务分配到各个服务器上完成计算,从而在高并发场景中提高每个客户端的响应时间。通过服务注册和发现的机制,能够确保客户端和服务器灵活动态扩展,在任意的数量变化中,也能够在不修改代码的情况下健壮的执行任务并返回正确结果。通过反射注入能够使得后期服务器响应算法进行优化的时候可以不修改整个程序框架进行服务器端的升级迭代,客户端不需要做任何修改就可以优化执行。为提供程序的兼容机制,在相同客户端调用时候,通过版本来控制兼容性执行,使得老旧的一些代码任然能够在分布式计算中正确执行,具体对应服务通过版本控制实现不同版本的共存。具体包括如下步骤:
3、a:远程过程调用负载均衡算法,该算法在调用请求阶段工作,检索调用请求对应的服务节点信息,按照分组映射把可用调用服务添加到列表,建立调用和被调用进程的通信管道,维持该连接过程,直到会话结束。该算法实现了服务器响应过程调用请求的均衡功能,最大可能提高服务可用性,充分发挥现有服务资源的负载能力,提高响应速度。承担在调用服务之前的资源调度工作,并且把服务提供透明化,把请求和响应解耦,提高应用部署灵活性;具体如下:
4、a101:通过远程过程调用协议到远程过程调用持有者映射获得服务分组到远程过程调用协议映射,具体为:
5、a1011:循环提取连接到服务器节点的远程过程调用协议;
6、a1012:从协议对象中循环提取远程过程调用服务信息,把服务信息中的服务名称和服务版本编码为服务分组的标识,在服务映射结构中查找同一分组服务的远程过程调用协议列表;若所需调用的协议在相应的列表中不存在,则将该需要调用的协议添加到相应的列表中,并通过服务器分组标识路由到远程过程调用协议;
7、a1013:在远程过程调用协议列表中查找一个远程过程调用协议路由信息;
8、a1014:创建随机数发生器;
9、a1015:获取远程过程调用列表尺寸;
10、a1016:随机发生一个数字满足范围在0到尺寸减1之间;
11、a1017:把随机数对应的远程过程调用协议列表中的远程过程调用协议作为结果返回;
12、a102:更新连接管理,把可用服务列表循环更新连接到对应节点;
13、a1021:判断远程过程调用协议服务信息所在主机、端口号等;
14、a1022:远程过程调用协议列表添加该协议;
15、a1023:创建远程套接字地址对象;
16、a1024:在线程池中创建新线程,用以连接远程服务,具体操作为;
17、a10241:创建启动nio启动对象,设置该对象在事件循环组的分组,设置nio套接字信道、指定远程过程调用客户端作为持有者;
18、a10242:设置连接到服务器的结果处理信道对象;
19、a10243:设置对应的监听器,判断是否得到结果;如果成功,通过管道创建远程过程调用客户端持有者;
20、a10244:管理服务连接节点对象添加该远程过程调用协议到远程过程调用客户端持有者的映射;
21、a10245:远程过程调用客户端持有者也添加远程过程调用协议的引用;
22、a10246:为了确保多线程安全,通过加锁、条件对象通知等待队列中等待时间最长的节点调整到最先唤醒的位置,使它优先执行;然后释放锁,确保了该过程的原子操作,关闭和移除不可用的服务节点;
23、a10247:循环远程过程调用协议集合,判断服务集合是否包含该远程过程调用协议;
24、a10248:如果不包含,查找到远程过程调用客户端持有者,把它关闭;
25、a10249:否则管理连接服务节点集合移除该远程过程调用协议,远程过程调用协议集合移除该远程过程调用协议对象。
26、b:远程过程调用反射注入算法,远程过程调用需要在客户端有存根,在服务器有具体的方法实现,中间通过一定的网络机制完成必要的数据通信,包括客户端向服务器发送调用的方法和参数信息,服务器返回必要的计算结果。结合java虚拟机提供的内在机制共同完成远程过程调用对象在存根和存根实现上的具体构造。该算法在进程初始化阶段、进程临时关闭阶段和网络传输阶段工作,为程序计算提供跨语言跨平台支撑,在调用进程和被调用进程之间提供了格式化数据转换和恢复的机制,使得程序对象能够在网络间传输、在不同语言编译执行的进程中转换适配使用,并能够把对象持久化,为进程中对象的可重复执行提供支持。具体如下:
27、b101:通过接口的方式定义远程过程调用存根在java程序中的存在形式,以远程过程调用未来作为返回结果,参数包括了远程调用方法的具体名称,该步骤需要的多个参数,在0到编译器支持的方法参数栈尺寸范围内指定;
28、b102:远程过程调用未来内部通过远程过程调用请求来获得发起远程过程调用的客户端相关信息,内部有具体实现信息,包括请求标识、方法名称、注入类名称、指定参数列表、远程服务版本控制等;
29、b103:在多个远程过程调用客户端对同一个远程过程调用方法发出请求时,通过同步队列管理临界资源,按照先来后到的方式依次获得锁,通过该同步锁保证得到的结果对象和远程过程调用响应是合理的结果;
30、b104:通过非公平可重入锁为计算方法提供锁资源申请过程,尝试申请,会得到两种结果,申请成功,调用响应代码,否则加入到等待队列当中,释放锁,等待下次申请,具体操作如下:
31、b1041:在释放同步锁后,再尝试获得非公平可重入锁,循环执行挂起的线程,释放锁;
32、b1042:在创建远程调用初期,尝试获得非公平可重入锁,判断该方法是否执行完成,否则添加到挂起线程,释放锁;
33、b105:通过反射持有者和远程过程调用服务共同构建对象代理,指定具体服务实现类和版本来控制具体的远程调用行为,具体操作步骤如下:
34、b1051:如果传入对象是class对象,那么特殊处理对应相等、哈希、转字符串操作;
35、b1052:否则创建远程过程调用请求对象,指定请求类名、方法名称、参数名称列表、参数类型名称列表、指定执行版本;
36、b1053:通过服务类名称和参数生成服务标识,通过远程过程调用负载均衡算法选择合适的服务创建载体执行具体构造过程,远程过程调用客户端持有者获取到具体可用服务信息之后发送请求;
37、b1054:内部通过netty通信封装实现服务器具体的ip地址和通信端口,包装成信道上下文对象来维持通信调用,具体操作步骤如下:
38、b10541:在信道中有信道持有者处理器,在流水线上有序安排执行顺序,通过管道建立读写控制机制,内部有同步锁来维持缓存读写逻辑;
39、b10542:通过读操作入栈,通过写操作出栈,维持写读操作轮流进行;
40、b106:远程过程调用请求用来创建远程过程调用未来对象,添加到远程过程调用挂起列表中,信道对象为请求建立连接,并做写入操作,刷新缓存,并同步;检查通信过程的状态是否正常,并返回远程过程调用未来对象;
41、b107:远程过程调用未来对象执行远程过程调用尝试,通过获取同步锁的方式在多线程执行环境中竞争调用具体参见多个远程过程调用客户端对同一个远程过程调用方法,具体操作步骤如下:
42、b1071:调用过程中建立远程过程调用客户端,通过服务发现算法找到合适的服务;
43、b1072:通过代理对象创建能够创建远程过程调用的对象代理类实例,指定类名和类加载器完成代理注入过程;
44、b1073:线程池执行器负责多个线程的创建销毁等过程,把远程过程调用未来对象创建的线程提交给该执行器,通过内部调度机制完成执行过程。
45、c:远程过程调用服务注册与发现算法,该算法在稳定服务器上持续工作,为众多进程节点的服务调用提供中介作用。通过维护节点状态列表为服务调用提供查询数据,不断更新和维持可用服务的网络路由信息,为动态的服务节点发现和通信提供侦测功能,保证了服务在启动时可以及时增加,调用时网络可达,关闭时及时删除。具体如下:
46、c101:创建远程过程调用服务信息列表,通过远程过程调用服务到远程过程调用协议映射更新信息列表;
47、c102:创建远程过程调用协议对象,设置ip地址、端口号信息、指定信息列表;
48、c103:序列化远程过程调用协议,指定该服务信息对应的路径,把该键值对添加到发布订阅系统中;
49、c104:添加连接建立监听事件,如果有状态改变,就更新节点对应的路径信息;
50、c105:通过监护人框架创建连接发布订阅服务的客户端,维持消息发布订阅和连接维持等状态操作;
51、c106:创建节点路径缓存,打开侦听器开关,能够绑定侦听器事件,侦听器设定行为如下:
52、c1061:返回路径下的可用节点,获取节点对应的数据信息,将缓存信息序列化为远程过程调用协议,添加到远程过程调用协议列表中;
53、c1062:通过远程过程调用负载均衡算法更新连接信息。
54、本发明所设计的一种基于netty技术的远程过程调用方法,通过客户端请求对象和服务器端服务对象反射注入执行计算过程。而且远程过程调用负载均衡方法,采用服务名称和版本编码控制的方式映射到发布订阅服务路径用于存储序列化的服务对象信息,能够为远程过程调用过程提供路径查找的标识索引,另外一个方面,能够在不同系统和升级过程中提供兼容性的支持,可以让新旧版本服务同时存在,可以让不同时间段完成的程序设计可以兼容执行,降低企业开发成本,提高系统上线效率。该方法中属性权限计算方案、业务流程审批方案可以替换为其他技术实现,在本方法框架下实现动态扩展。而且本发明区别于现有远程过程调用实现,为了确保多线程安全,采用同步锁和非公平锁协调完成多线程池的临界资源访问,在满足多线程高并发场景中应用功能安全运行。
55、本发明所设计的调用方法,步骤a102更新连接管理能够将多线程复杂网络环境下,有序的协调客户端调用服务器端的远程过程调用,通过维持连接服务节点列表和远程过程调用协议集合来管理连接情况。通过事件循环组来维持netty网络部署情况,线程池执行对象来维持可服务线程的创建销毁情况和任务分配情况。在非公平锁和同步锁的配合协调下,完成临界资源的互斥访问,能够确保多线程安全。
56、本发明所设计的调用方法,步骤b105在继承调用持有者类和远程过程调用类的基础上,封装客户端发起请求和获得相应的网络通信机制。通过该代理能够充分的结合java虚拟机提供的对象载入机制,把对象作为网络中可以传输构建和调用的媒介,对于程序员确是透明。结合远程过程调用请求和远程过程调用未来将远程过程调用中的对象能够以易于理解和阅读的方式书写过程代码,通过服务端持有类代码实现和类代码接口的方式可以让客户端仅持有接口就可以调用,简化了编程过程,解耦了业务逻辑,可以让开发者集中精力关注接口构建具体业务算法的过程。
57、与现有技术相比本发明具有以下有益效果:本发明所提供的一种基于netty技术的远程过程调用方法:①不仅提供了远程过程调用实现的具体通信机制,还简化了远程过程调用开发步骤,提高了程序员开发效率;②本发明中使用的负载均衡方案,在该算分流程中可以做不同商业产品的替换,能够在不同场景中构建符合性价比的组合方案,提高不同应用场景的适配性;③本发明中远程过程调用反射注入算法在分布式计算领域的远程过程调用是结合jvm特性构造的,和已有的远程过程调用方案不同,可以广泛推广使用。
本文地址:https://www.jishuxx.com/zhuanli/20240730/196471.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表