分布式RPC框架的设计与实现
发布时间:2020-08-22 17:57
【摘要】:随着互联网技术的不断突破,互联网应用所具备的功能也日益增多。互联网企业为了能够吸引更多的用户群体,不断的完善并扩展自己的系统,给用户提供更多元的服务。伴随着系统的不断完善,业务规模不断壮大,系统也将变得庞大且复杂。这将大大的提高了系统的交互、版本迭代以及后期维护提的成本。而将系统本身按业务功能进行拆分,拆分后的各个模块通过服务发布和服务调用的形式协同工作,则可以在保证系统的性能前提下,大幅度降低上述所需要的成本。分布式RPC(Remote Procedure Call)框架则是工作在系统拆分后的各个模块之间的中间件,协同各个模块之间的通信,保证系统的正常运行。传统的远程过程调用方式通常采用HTTP协议进行通信,需为每一个调用建立一个TCP连接,且每次请求和响应都会携带部分无效字段,影响服务调用效率。本文所设计的RPC框架通过自定义通信数据格式来减少无效字段的传输,同时本框架底层网络通信采用了异步通信框架。本框架按功能可分为数据处理模块、服务发布模块、服务调用模块。数据处理模块用于请求数据和响应数据的收发以及它们的编码和解码。服务发布模块通过服务注册、服务发布实现了该框架高性能和高可用行性,同时还支持服务水平扩张。服务调用模块是将经过数据处理模块后的数据作为服务调用的参数,对相应服务进行调用。其中服务调用模块为RPC框架的核心功能模块,服务的调用采用了负载均衡策略,有效的提高硬件资源的利用率。本框架与传统远程调用过程方式相比,在数据的传输格式上进行了自定义,提高了系统有效吞吐量。在信息交互层面采用了异步通信框架Netty,让服务调用方在发起请求后能够较快的得到响应。服务的发布采用了注册+发布的形式,提高了框架的可用性和扩展性,能够有效的预防单点故障,且很好的支持服务的水平扩展。本框架工作在业务复杂的系统中时,在保证服务请求响应速度的前提下,对系统的业务模块起到了很好的解耦作用。
【学位授予单位】:华中科技大学
【学位级别】:硕士
【学位授予年份】:2018
【分类号】:TP311.52
【图文】:
BIO 编程是同步阻塞开发模型,其模型结构图2-1 所示:图 2-1 同步阻塞 IO 模型Java BIO 通信模型是最为经典的客户端/服务器通信模型,其中服务端的运行依赖于主机的 IP 地址和端口号,服务端通过对它们进行绑定,提供唯一的地址信息,开放访问。客户端则通过向与服务器所对应的地址信息发起连接请求,连接建立完毕后,双方便可通过套接字(Socket)进行网络通信。Java BIO 通信过程如下:首先服务端开启一个单独的线程 Acceptor,用于监听与服务器绑定的端口是否有来自客户端的连接建立的请求,若有请求,则直接对该请求进行接收。Acceptor 每次接收到来自客户端的请求后,都会为此次连接开启一个新的线程,用于处理客户端的请求[25]。随着请求的处理完成,伴随此次连接建立的线程也随之被销毁。Java BIO 的服务端通信模型为一客户端一线程,模型如图 2-2 所示:
图 2-2 Java BIO 服务端通信模型该模型缺乏弹性伸缩能力,服务端线程个数与客户端并发访问数呈 1:1 的正比关系,随着用户访问不断增加,线程数会不断膨胀,线程会因此而被不断的创建,服务器会对运行中的线程上下文进行频繁的切换,消耗大量资源的同时使得系统性能急剧下降,最终会出现线程堆栈溢出、创建新线程失败等异常,从而导致服务端宕机。上述模型面对大量用户并发访问时,会产生大量线程,严重影响系统的性能。针对这种不足可以采用线程池对上述模型加以改善。线程池的引入可以避免线程无休止的创建,用户可以根据主机性能对线程池中的线程数进行配置。当用户并发量过大,系统无法正常处理时,也可以通过配置线程池的拒绝策略[26],对不能处理的请求进行相应处理。带线程池的 Java BIO 服务端通信模型如图 2-3 所示:
图 2-2 Java BIO 服务端通信模型该模型缺乏弹性伸缩能力,服务端线程个数与客户端并发访问数呈 1:1 的正比关系,随着用户访问不断增加,线程数会不断膨胀,线程会因此而被不断的创建,服务器会对运行中的线程上下文进行频繁的切换,消耗大量资源的同时使得系统性能急剧下降,最终会出现线程堆栈溢出、创建新线程失败等异常,从而导致服务端宕机。上述模型面对大量用户并发访问时,会产生大量线程,严重影响系统的性能。针对这种不足可以采用线程池对上述模型加以改善。线程池的引入可以避免线程无休止的创建,用户可以根据主机性能对线程池中的线程数进行配置。当用户并发量过大,系统无法正常处理时,也可以通过配置线程池的拒绝策略[26],对不能处理的请求进行相应处理。带线程池的 Java BIO 服务端通信模型如图 2-3 所示:
本文编号:2800974
【学位授予单位】:华中科技大学
【学位级别】:硕士
【学位授予年份】:2018
【分类号】:TP311.52
【图文】:
BIO 编程是同步阻塞开发模型,其模型结构图2-1 所示:图 2-1 同步阻塞 IO 模型Java BIO 通信模型是最为经典的客户端/服务器通信模型,其中服务端的运行依赖于主机的 IP 地址和端口号,服务端通过对它们进行绑定,提供唯一的地址信息,开放访问。客户端则通过向与服务器所对应的地址信息发起连接请求,连接建立完毕后,双方便可通过套接字(Socket)进行网络通信。Java BIO 通信过程如下:首先服务端开启一个单独的线程 Acceptor,用于监听与服务器绑定的端口是否有来自客户端的连接建立的请求,若有请求,则直接对该请求进行接收。Acceptor 每次接收到来自客户端的请求后,都会为此次连接开启一个新的线程,用于处理客户端的请求[25]。随着请求的处理完成,伴随此次连接建立的线程也随之被销毁。Java BIO 的服务端通信模型为一客户端一线程,模型如图 2-2 所示:
图 2-2 Java BIO 服务端通信模型该模型缺乏弹性伸缩能力,服务端线程个数与客户端并发访问数呈 1:1 的正比关系,随着用户访问不断增加,线程数会不断膨胀,线程会因此而被不断的创建,服务器会对运行中的线程上下文进行频繁的切换,消耗大量资源的同时使得系统性能急剧下降,最终会出现线程堆栈溢出、创建新线程失败等异常,从而导致服务端宕机。上述模型面对大量用户并发访问时,会产生大量线程,严重影响系统的性能。针对这种不足可以采用线程池对上述模型加以改善。线程池的引入可以避免线程无休止的创建,用户可以根据主机性能对线程池中的线程数进行配置。当用户并发量过大,系统无法正常处理时,也可以通过配置线程池的拒绝策略[26],对不能处理的请求进行相应处理。带线程池的 Java BIO 服务端通信模型如图 2-3 所示:
图 2-2 Java BIO 服务端通信模型该模型缺乏弹性伸缩能力,服务端线程个数与客户端并发访问数呈 1:1 的正比关系,随着用户访问不断增加,线程数会不断膨胀,线程会因此而被不断的创建,服务器会对运行中的线程上下文进行频繁的切换,消耗大量资源的同时使得系统性能急剧下降,最终会出现线程堆栈溢出、创建新线程失败等异常,从而导致服务端宕机。上述模型面对大量用户并发访问时,会产生大量线程,严重影响系统的性能。针对这种不足可以采用线程池对上述模型加以改善。线程池的引入可以避免线程无休止的创建,用户可以根据主机性能对线程池中的线程数进行配置。当用户并发量过大,系统无法正常处理时,也可以通过配置线程池的拒绝策略[26],对不能处理的请求进行相应处理。带线程池的 Java BIO 服务端通信模型如图 2-3 所示:
【参考文献】
相关期刊论文 前9条
1 秦方钰;刘冬梅;徐栋;;一种面向SOA架构的数据业务总线应用研究[J];电子技术与软件工程;2015年09期
2 周康;李觊;董科军;南凯;;一种基于Thrift的日志收集分析系统[J];科研信息化技术与应用;2015年02期
3 刘芬;王芳;田昊;;基于Zookeeper的分布式锁服务及性能优化[J];计算机研究与发展;2014年S1期
4 解志君;;代理模式在Java中的应用[J];软件;2014年05期
5 程龙;李冶;;应用ASM修改JAVA字节码[J];信息与电脑(理论版);2011年05期
6 周岚;;基于Spring框架的IOC模式的设计和实现[J];合肥学院学报(自然科学版);2011年01期
7 冯新扬;沈建京;;REST和RPC:两种Web服务架构风格比较分析[J];小型微型计算机系统;2010年07期
8 李昊,刘志镜;线程池技术的研究[J];现代电子技术;2004年03期
9 李俭兵;何登平;;SOAP技术及其应用[J];计算机科学;2003年04期
本文编号:2800974
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/2800974.html