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

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

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

项目运行原理:

5f44669d9023f819b9cfa4031178418d.png

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

项目用法:

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

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

int hashCode = t.getId().hashCode();

IConcurrentReader[] readers = this.getReaders();

IConcurrentReader reader = readers[hashCode%this.getQueueSize()];

if(reader!=null){

return reader;

}

return null;

}

2.客户端实际落地类SkuHandlerextendsAbstractConcurrentWriter,实现具体落地的方法public void write(MemoryPage t) {

List 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.项目运行图

5f44669d9023f819b9cfa4031178418d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值