使用nginx下面负载了三台logstash,用于接收udp。封装了DatagramSocket直接发送udp到nginx,压测时丢包情况比较严重,因为我是在windows下启的服务调用封装的jar包测试,并且有网络问题,但是10万条数据5个线程跑丢了一半
省略看心路历程可以直接看配置就行
一下午的时间优化了封装的jar包,有所好转,但明显不是根本问题,
所以修改IP直连单台logstash,不再通过nginx负载,测试7万条数据,丢了十几条,然后才去找nginx的问题
nginx了解的不多,主要看文档及网上的文章,最后加了一行配置成功解决,30万条数据在2000并发下丢了两条到八条,大于4000的并发30万丢了两万多。这种程度完全可以接受。
配置如下:
stream{
server{
proxy_responses 0;
}
}
这个配置之前已经做了子线程数代理超时那些配置了,只说这个配置
nginx默认是不限制来自被代理服务器的响应数据报数量的,所以在高并发大量访问过来时,当nginx在处理转发时会等着响应,而udp因为是广播方式,所以忙不过来时就丢了一部分包。设置为零,即不再等着响应,转发完就不管了,所以高并发下处理起来会好点。
当然更多详细配置,可以参考以下链接:
http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_responses