偷颗菜抱回家的gravatar头像
偷颗菜抱回家 2017-04-12 20:04:43

高并发下java实现数据负载均衡落地的实例

这是一个去年根据线上问题而改编的项目。

在实际生产中,我们可能会经常遇到需要数据落地到DB或者其他存储介质。但是大量数据在高并发下需要落地,如果不做任何措施,将是高频率地访问DB(或其他存储介质)、占用网络IO。为了解决这个问题,这个项目横空出世了。批量异步数据输出。防止高频率访问DB,网络IO,有节操地使用资源。

项目运行原理:

高并发下java实现数据负载均衡落地的实例

(SkuTemplate是客户端实现的读取数据模板,自定义的ConcurrentWriter对应项目中的客户端实现的SkuHandler)

项目用法:

整个项目框架通过配置文件配置,客户端需要继承AbstractConcurrentWriter类,实现自己的落地方案。

1.异步输出模板类SkuTemplate继承这个抽象类AbstractConcurrentTemplate,实现其hash分片的算法(getReader(T t)方法,也可以使用其他分片方法,起到负载均衡作用)

public IConcurrentReader<Sku> getReader(Sku t) {
		int hashCode = t.getId().hashCode();
		IConcurrentReader<Sku>[] readers =  this.getReaders();
		IConcurrentReader<Sku> reader = readers[hashCode%this.getQueueSize()];
		if(reader!=null){
			return reader;
		}
		return null;
	}

2.客户端实际落地类SkuHandler extends AbstractConcurrentWriter<T>,实现具体落地的方法

public void write(MemoryPage<Sku> t) {
		List<Sku> skuList = t.getContent();
		if(skuList!=null && skuList.size()>0){
			for(Sku sku : skuList){
				logger.debug("write sku info|{}", sku);
			}
			logger.info("write {} skuList", t.size());
		}
	}

3.main 函数入口

public static void main(String[] args) {
		logger.info("read start..........");
		TestMain main = new TestMain(2);
		main.testRead();
	}

4.配置文件 concurrentWrite.properties

#初始化线程池线程数
write.thread.size=3
#写入落地的线程数
writer.size=3
#最大内存页数
memory.max.size=100
#单位s
memory.timeout=5

#客户端实现类

concurrent.writer.class=com.cuncurrent.sdk.test.SkuHandler

5.项目运行图

高并发下java实现数据负载均衡落地的实例


打赏

文件名:concurrent-sdk.zip,文件大小:18.721K 下载
最代码最近下载分享源代码列表最近下载
zwbshuai  LV13 2020年12月18日
不打不相识  LV12 2020年8月26日
soplha  LV10 2020年3月24日
13232875251  LV14 2019年4月19日
mkl123456  LV7 2019年2月25日
汤圆儿  LV3 2019年2月12日
wodearong  LV2 2018年9月14日
zhos0212  LV19 2018年8月3日
ADOBE4D  LV2 2018年7月17日
1292022734  LV4 2018年5月16日
最代码最近浏览分享源代码列表最近浏览
dapeng0011  LV12 2月25日
123暖壶别炸  LV7 2023年4月14日
林间听风  LV10 2023年3月16日
UzumakiHL 2023年2月22日
暂无贡献等级
mylzdy  LV12 2022年3月22日
w769177475 2022年3月14日
暂无贡献等级
moneyla  LV5 2022年3月11日
sunnshinee  LV1 2021年11月27日
对方正在输入... 2021年9月23日
暂无贡献等级
q766656302  LV7 2021年5月12日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友