我们已经实现了对Netty事件循环队列的监控,以便了解我们的一些Netty模块的问题.监视器使用的io.netty.util.concurrent.SingleThreadEventExecutor#pendingTasks方法适用于大多数模块,但对于每秒处理几千个HTTP请求的模块,它似乎挂起或非常慢.我现在意识到文档严格规定这可能是一个问题,我觉得很蹩脚......所以我正在寻找另一种方法来实现这个监视器.
你可以在这里看到旧代码:https: //github.com/outbrain/ob1k/blob/6364187b30cab5b79d64835131d9168c754f3c09/ob1k-core/src/main/java/com/outbrain/ob1k/common/metrics/NettyQueuesGaugeBuilder.java
public static void registerQueueGauges(final MetricFactory factory, final EventLoopGroup elg, final String componentName) {
int index = 0;
for (final EventExecutor eventExecutor : elg) {
if (eventExecutor instanceof SingleThreadEventExecutor) {
final SingleThreadEventExecutor singleExecutor = (SingleThreadEventExecutor) eventExecutor;
factory.registerGauge("EventLoopGroup-" + componentName, "EventLoop-" + index, new Gauge<Integer>() {
@Override
public Integer getValue() {
return singleExecutor.pendingTasks();
}
});
index++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否有更好的方法来监控队列大小?
这可能是一个非常有用的指标,因为它可用于理解延迟,并且在某些情况下也可用于施加背压.
我正在为大负载(~1M HTTP请求)评估AsyncHttpClient.对于每个请求,我想使用AsyncCompletionHandler调用一个回调,它只会将结果插入阻塞队列
我的问题是:如果我在紧密循环中发送异步请求,AsyncHttpClient将使用多少个线程?(我知道你可以设置最大值,但显然你冒了丢失请求的风险,我在这里看到了)
我目前正在使用这些版本的Netty实现:
如果在以后的版本中有任何优化,我不介意使用其他版本
编辑:
我读到Netty使用reactor模式来响应HTTP响应,这意味着它分配了很少的线程来充当选择器.这也意味着分配的线程数不会随着请求量的增加而增加.但是,这与设置最大连接数的需要相矛盾.
谁能解释我错过的东西?
提前致谢
我正在考虑更换一堆Python ETL脚本,这些脚本执行大量数据的夜间/小时数据汇总和统计数据收集.
我想要实现的是
当前脚本执行以下操作:
我的想法是用spring-batch替换脚本.我也研究过Scriptella,但我认为这种情况太简单了.
因为我在Spring-Batch上看到了一些不好的共鸣(大多是老帖子),我希望在这里得到一些输入.我还没有看到很多关于spring-batch和Hive集成,这很麻烦.
我有兴趣从一台机器执行大约50个HTTP请求/秒.我不太关心延迟,但我确实关心吞吐量.
我正在尝试决定是使用Apache HttpAsyncClient还是使用Netty.有人能否解释一下每个人对我的问题的好处?
我已经找到了这个比较,但我希望能更详细地解释哪一个更好,哪个用例更好.此外,比较是否意味着使用具有200个线程的同步apache HTTP客户端比其他选项更好?不是200个线程有点太多(假设我使用的是具有4个内核的普通计算机,每个内核2个线程和12GB内存)?
提前致谢
java multithreading performance-testing netty apache-httpasyncclient
java ×3
netty ×3
etl ×1
event-loop ×1
hadoop ×1
hive ×1
http ×1
monitoring ×1
mysql ×1
spring-batch ×1