buffer-slayer简介

buffer-slayer是github上的一个开源项目,当有批量插入的需求时可以引入这个开源组件,可以大大的提高性能。
github地址:https://github.com/sxhyljava/buffer-slayer
下面是根据github中简介翻译过来的,翻译的不好,大家可以留言指正。

buffer-slayer是一个缓冲请求并批量发送请求的工具,比如Spring JdbcTemplate(batchUpdate)、Redis(pipeline)。

它有一个队列,允许多个生产者发送到该队列,并对其进行限制,以防止应用程序溢出。

此外,还有一个固定大小的缓冲区来规范数据传输。缓冲区的数据将在其已满或达到特定超时(以先到者为准)时发送。

这个项目的灵感来自 zipkin-reporter-java
作用

  • 比起一个一个处理,批量的处理性能会更好。
  • 消费者比生产者慢很多的时候,注意不要内存溢出。
  • 如果大量请求即将到来,请降低对备份存储(DB、redis等)的影响。
  • 异步发送返回一个响应。即使消息是成批发送的,也可以从响应结果中得到一对一的响应。
    JdbcTemplate
    bufferslayer-spring-jdbc是spring的JdbcTemplate的缓冲实现。
    查询被转发到委托的JdbcTemplate并被阻塞地执行。
    更新直接发送给记者并立即返回一个响应。

快速启动
引入如下maven

<dependency>
  <groupId>io.github.tramchamploo</groupId>
  <artifactId>bufferslayer-spring-jdbc</artifactId>
  <version>2.0.4</version>
</dependency>
<dependency>
  <groupId>io.github.tramchamploo</groupId>
  <artifactId>bufferslayer-boundedqueue</artifactId>
  <version>2.0.4</version>
</dependency>

可以直接新建一个springboot项目
写如下代码

AsyncReporterProperties reporterProperties = new AsyncReporterProperties()
        .setFlushThreads(5)
        .setSharedSenderThreads(10)
        .setBufferedMaxMessages(500)
        .setPendingMaxMessages(10000)
        .setMetrics("inmemory")
        .setMetricsExporter("http");

BatchJdbcTemplate template = new BatchJdbcTemplate(yourFormerJdbcTemplate, reporterProperties);

MessageFuture<Integer> future = template.update(...);
future.addListener(f -> {
  // Your callback
});

ReporterProperties参数详解

  • sender 发送者。用户不需要配置。
  • sharedSenderThreads 发送者执行的线程数。
  • timerThreads 调度执行器中的线程数,以固定速率刷新消息。
  • flushThreads 将消息刷新到发件者的线程数。一直等到缓冲区满了。
  • metrics 记录已发送、已丢弃、已排队消息的num的度量。
  • metricsExporter (http,log)exporter,让用户知道度量的数据。
  • bufferedMaxMessages 缓冲的最大消息数。
  • messageTimeoutNanos 如果未达到缓冲区大小,则在此超时之后将调用刷新。
  • pendingMaxMessages 在触发OverflowStrategy之前要缓冲的最大消息大小。
  • pendingKeepaliveNanos 如果在其keepalive期间没有消息排队进入,则挂起队列应终止。
  • overflowStrategy (DropHead,DropTail,DropBuffer,DropNew,Fail)到达pendingMaxMessages后,触发策略。
  • singleKey 如果该值为true,则不同类型的消息将暂存在同一SizeBoundedQueue中。
    Benchmark
    直接贴图了
    在这里插入图片描述
    组件
  • Reporter 发送请求到队列,发送给消费者。
  • Sender 批量发送缓冲区消息
  • SizeBoundedQueue 以特定大小为界限的队列。同时支持多个生产者。它支持下列的溢出策略:
    DropHead: drops the oldest element 去除最老的
    DropTail: drops the youngest element 去除最新的
    DropBuffer: drops all the buffered elements 去除所有缓冲的元素
    DropNew: drops the new element 去除新的元素
    Block: block offer thread, this can be used as a simple back-pressure strategy
    Fail: throws an exception 报错
  • QueueManager 管理SizeBoundedQueue的生命周期。负责队列的创建和销毁。
  • Buffer 具有固定大小的列表,只有在达到超时或已满时才能排出。

英文不好,翻译的不准确大家可以看看英文。
欢迎捐赠

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值