Java打造RPC框架(五):连接池化

本文介绍如何在Java RPC框架中引入连接池技术进行优化,讲解了连接池的基本概念,以及如何利用Commons-Pool库创建连接池。通过ConnectionPool类配置最大连接数,实现获取、释放和销毁连接的功能。文中还展示了如何将连接池接入RPC调用,以提高并发性能和资源利用率,确保在服务端IP不可用时能及时销毁对应的连接池。
摘要由CSDN通过智能技术生成

在上一篇的文章中https://blog.csdn.net/we_phone/article/details/79053472

我初步完成了整个RPC框架的搭建,从服务调用到服务发现再到负载均衡,这一篇开始进行的是一系列我所知的优化操作

这一篇我讲的是连接池,比较简单,详细代码已托管到github:https://github.com/wephone/MeiZhuoRPC

首先了解一下什么是连接池

连接池

在平时我们的数据库增删查改的业务中,应该绝大多数使用到了连接池技术,例如C3P0,Druid这类框架,帮我们完成了对数据库连接的池化。

当没有连接池时会遇到这样的问题:

要么每一次进行远程连接时都去创建一个连接,用完立即释放,也就是频繁的创建和销毁大量连接

或者各个调用共用一个单一连接,但在多线程的情况下,需要加锁来避免争抢的问题,这个方案的问题是效率低下且复杂性高

连接池的做法就是预先加载一定数量的连接放到资源池里,当需要连接时则从连接池中拿出一个来使用,用完则还回去,当并发量巨大,连接资源匮乏时,根据一定的策略来新建连接或者拒绝。

和jdk中的线程池类似,都是资源池化的思想。

在我前面的框架编写中,我采用的是单一连接的方式,并且用加锁来保证不会重复连接等等,其实在netty框架的一些版本中,有FixedChannelPool这个东西作为netty的连接池,但在我用的版本里没有发现这个,出于学习的目的,就自行用其他库写了一个来作为RPC框架的连接池。

Commons-Pool

在后续的开发中我引入了这个库,用来做连接池的基本手脚架,这个框架已经包含了对象池的基本处理,例如创建对象,回收对象,最大数量控制等等。

<dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-pool2</artifactId>
       <version>2.2</version>
<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值