偷颗菜抱回家
2017-04-12 20:04:43
原精
高并发下java实现数据负载均衡落地的实例
这是一个去年根据线上问题而改编的项目。
在实际生产中,我们可能会经常遇到需要数据落地到DB或者其他存储介质。但是大量数据在高并发下需要落地,如果不做任何措施,将是高频率地访问DB(或其他存储介质)、占用网络IO。为了解决这个问题,这个项目横空出世了。批量异步数据输出。防止高频率访问DB,网络IO,有节操地使用资源。
项目运行原理:
(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.项目运行图
猜你喜欢
请下载代码后再发表评论
文件名:concurrent-sdk.zip,文件大小:18.721K
下载
- /
- /concurrent-sdk
- /concurrent-sdk/.classpath
- /concurrent-sdk/.gitignore
- /concurrent-sdk/.project
- /concurrent-sdk/README.md
- /concurrent-sdk/pom.xml
- /concurrent-sdk/src
- /concurrent-sdk/src/main
- /concurrent-sdk/src/main/java
- /concurrent-sdk/src/main/java/com
- /concurrent-sdk/src/main/java/com/concurrent
- /concurrent-sdk/src/main/java/com/concurrent/sdk
- /concurrent-sdk/src/main/java/com/concurrent/sdk/common
- /concurrent-sdk/src/main/java/com/concurrent/sdk/container
- /concurrent-sdk/src/main/java/com/concurrent/sdk/read
- /concurrent-sdk/src/main/java/com/concurrent/sdk
- /concurrent-sdk/src/main/java/com/concurrent
- /concurrent-sdk/src/main/java/com
- /concurrent-sdk/src/main/java
- /concurrent-sdk/src/main
- /concurrent-sdk
相关代码
最近下载
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日
最近浏览
黄小熙 LV7
11月12日
dapeng0011 LV15
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日
暂无贡献等级