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

发布于 2021-11-27 03:13:26 字数 322 浏览 681 评论 19

问题背景:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(19

泪冰清 2021-12-03 18:57:25

我是这样解决的:haproxy+keepalived。从操作系统级别解决这个问题的

韬韬不绝 2021-12-03 18:57:24

回复
@ahdkk : 请问楼主这种方案的netty集群,是不是服务端只需要写netty的bossGroup,设备端只需要和haproxy建立连接就可以了?不需要zk和nginx等其他技术? netty服务在收到消息后是如何处理的?业务的处理是在handler里直接调用方法处理还是需要传到其他服务中处理?

傾城如夢未必闌珊 2021-12-03 18:57:22

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

初见你 2021-12-03 18:57:21

亲 你们是怎么做的既能接收tcp协议的数据,又能接收http协议的数据呢?

彼岸花ソ最美的依靠 2021-12-03 18:57:21

基于netty实现的

如此安好 2021-12-03 18:57:20

还是没有看到关于具体方法

简单气质女生网名 2021-12-03 18:57:19

你说的那么多私有协议不过应用层的协议,真正需要写底层协议如ip/tcp/udp等协议是很复杂的,而且需要重写协议栈,一般只有最顶尖的公司才最这么底层的。大多数公司只是写定义应用层协议而已,应用层协议都是基于底层协议写,如http底层是tcp协议,相比你们公司写的私有协议,应该也是用tcp的协议,要么基于udp。你们要作负载均衡的话,可以在tcp层或者应用层做,nginx和tomcat都是在应用层做。你们私有协议很多的话,可以考虑tcp的负载均衡。但是这复杂点。

瀞厅☆埖开 2021-12-03 18:57:18

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

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

https://github.com/longkerdandy/mithqtt

如此安好 2021-12-03 18:57:15

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

眼泪淡了忧伤 2021-12-03 18:57:14

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

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

瑾兮 2021-12-03 18:57:11

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

策马西风 2021-12-03 18:56:57

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

琴流音 2021-12-03 18:55:12

用lvs,或者haproxy,或者nginx的tcp sream

左岸枫 2021-12-03 18:51:43

当时也没多想,就是觉得负载均衡很常见啊,不会难的,谁知道要实现这么多协议,不仅是tcp,还有mqtt,以后还可能会有自定义的一些私有协议,主要难在这里

够钟 2021-12-03 18:49:00

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

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

凡尘雨 2021-12-03 18:22:39

主要我们还有一个协议是mqtt的,不仅是tcp,http两种,未来还有可能基于netty开发一些私有的协议,给物联网设备使用,so ngnix 坑定不可以用在我们这里

2021-12-03 18:09:22

mqtt比tcp还底层?

飘然心甜 2021-12-03 17:32:03

回复
我不太熟悉网络,现在大概知道怎么做了

各自安好 2021-12-02 08:18:01

ngnix也可以做TCP的负载

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文