netty实现的http,tcp协议之后如何做负载均衡

ahdkk 发布于 2016/05/31 11:49
阅读 3K+
收藏 1

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

问题背景:

我们的服务是提供数据存储的,数据是硬件采集上报过来的,有的硬件使用tcp协议发送数据,有的是用mqtt协议,有的是用http协议,我们是用netty实现的,现在数据量太大,每秒钟大概有1万条数据上报并存储到我们的Hbase中,现在运行netty的服务器压力很大,我们想做负载均衡,但是真不知道怎么做?

现在的方案是:通过zookeeper去做,但是我完全不知道zookeeper怎么去做复杂均衡?是像ngnix+tomcat那种只要配置就好了 还是 需要自己二次开发借助zookeeper实现与netty的负载均衡?还有没有其他的处理这种情况的负载均衡的方案了?求大神赐教!

加载中
0
蜗牛pass
ngnix也可以做TCP的负载
ahdkk
ahdkk
回复 @ruben : 我不太熟悉网络,现在大概知道怎么做了
ruben
ruben
mqtt比tcp还底层?
ahdkk
ahdkk
主要我们还有一个协议是mqtt的,不仅是tcp,http两种,未来还有可能基于netty开发一些私有的协议,给物联网设备使用,so ngnix 坑定不可以用在我们这里
0
大萌王朝首席槽点师
大萌王朝首席槽点师

HAproxy 可以做tcp层面的负载均衡。

题外话,做负载均衡很容易。 难得是当时你做netty项目时候,如果没考虑负载均衡的, 现在才做,代码上可能要做一些改动

ahdkk
ahdkk
当时也没多想,就是觉得负载均衡很常见啊,不会难的,谁知道要实现这么多协议,不仅是tcp,还有mqtt,以后还可能会有自定义的一些私有协议,主要难在这里
0
testwork
testwork
用lvs,或者haproxy,或者nginx的tcp sream
0
红薯官方
红薯官方

私有协议,在Netty上基本上你脱离不了TCP(底层还是Socket)吧。


ahdkk
ahdkk
我对网络这一块不是特别了解,你的意思是说我从传输层把请求分发的不同主机之后,应用层的就不用再管了,其实他就已经做到了负载均衡,其实代码这一块也不需要修改。至于应用层是否需要再做负载均衡,就无关紧要了,是这样吧。
0
songtzu
songtzu

。。要简单可简单,要复杂可复杂。简单的,用nginx,nginx的io应该可以达到100k/tps。你们把io服务开多个服务进程处理,用nginx或其他的做分发。

复杂的,设计成分布式系统就可以了(一般涉及自定义的负载均衡和消息集群,在连接上面就做分发,每台服务器负载的请求在接入的时候就做均衡)。这种方案我做过两个项目了,小项目用这样的方式是很繁琐的。

ahdkk
ahdkk
我们准备使用lvs+keepalived,在请求到虚拟主机的时候(ip+端口号)做分发,分发做在tcp这个传输层。我们主机多,所以应用层协议暂时不做负载均衡
0
浪客Dandy
浪客Dandy

如果简单只做前端的负载均衡,用标准的4层负载均衡方案就可以了。比如LVS,或者云服务提供的。

像MQTT如果要在服务器之间互访,需要做成分布式的,可以参考我这个开源的例子:

https://github.com/longkerdandy/mithqtt

0
psc0606
psc0606
你说的那么多私有协议不过应用层的协议,真正需要写底层协议如ip/tcp/udp等协议是很复杂的,而且需要重写协议栈,一般只有最顶尖的公司才最这么底层的。大多数公司只是写定义应用层协议而已,应用层协议都是基于底层协议写,如http底层是tcp协议,相比你们公司写的私有协议,应该也是用tcp的协议,要么基于udp。你们要作负载均衡的话,可以在tcp层或者应用层做,nginx和tomcat都是在应用层做。你们私有协议很多的话,可以考虑tcp的负载均衡。但是这复杂点。
0
一一无念
一一无念
还是没有看到关于具体方法
0
村西埋个地雷
村西埋个地雷
亲 你们是怎么做的既能接收tcp协议的数据,又能接收http协议的数据呢?
ahdkk
ahdkk
基于netty实现的
0
mirsery
mirsery

请问楼主解决这个问题了吗?遇到了和楼主一样的问题

p
perterPan
回复 @ahdkk : 请问楼主这种方案的netty集群,是不是服务端只需要写netty的bossGroup,设备端只需要和haproxy建立连接就可以了?不需要zk和nginx等其他技术? netty服务在收到消息后是如何处理的?业务的处理是在handler里直接调用方法处理还是需要传到其他服务中处理?
ahdkk
ahdkk
我是这样解决的:haproxy+keepalived。从操作系统级别解决这个问题的
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部