目前在做的一个项目中有超大附件上传的需求,由于公司内网比较快,服务器的带宽经常会被几个人都打满,每次排查都会比较麻烦。于是我想是不是可以有什么方法给我进行一些预警提示,辟如超过 50Mbps 的时候,将当前操作的用户、接口地址、客户端 IP 啥的上报给我。或者是可以动态的限制网速,100Mbps 的内网,调用当前接口的人能动态分配一下各自的网速,留下一些带宽给其他服务。 GPT 给我讲了几个方案,可能是我问法不对,没有得到我想要的
1
ChovyChu 325 天前 1
nginx ?
|
2
fenglangjuxu 325 天前 1
如果知道接口地址 可以在 NGINX 上配置吧
|
3
iyiluo 325 天前 1
不是有路由器么,路由器后台加个网速限制,专业的事情还得专业的设备来干
|
5
luomao OP @fenglangjuxu #2 主要还想监控一下是哪个用户上传的
|
6
cslive 325 天前 2
多网卡,对其中一个限速,内网统一访问限速的网卡 ip ,这样你的服务带宽就不会打满了,想打满就用不限速的网卡 ip
|
7
c2const 325 天前 1
如果 Java 实现不了,用 C 和 C++呗 :)
最多就是 Java 调用写好的库就行了 :) |
8
datocp 325 天前 via Android 1
既然是内网服务器,
一般是网管交换机限速吧,没实施过。。。 如果是 linux 服务器,简单点可以用 iptable limit 专业点那就是 tc 吧,tc 是可以通过 shell 进行动态插值实现动态限速的。当然简单点可以根据 ip 实施 prio 优先极实行有优先极的避让实现。 |
9
huangzhiyia 325 天前 1
给你一段我正在用的,非常好用。
// $1 换成网卡接口名称 tc qdisc del dev $1 root tc qdisc add dev $1 root handle 1: htb default 20 // 限速 800 Mbs ,突发 4000 Mbs tc class add dev $1 parent 1:0 classid 1:1 htb rate 800mbit burst 4000mbit //使用随机公平队列 (sfq) 算法 tc qdisc add dev $1 parent 1:1 handle 10: sfq tc filter add dev $1 parent 1: protocol ip prio 16 u32 match ip dst 0.0.0.0/0 flowid 1:1 // 下面来自 AI 解释 这是在创建一个分层队列规则,并使用随机公平队列( Stochastic Fairness Queue ,SFQ )算法。SFQ 是一种公平调度算法,旨在确保每个流都能获得公平的带宽份额,以避免某个流占用过多带宽而影响其他流。 具体而言,这个命令在子类别 1:1 上创建了一个 SFQ 队列规则,其句柄为 10:。SFQ 会对数据包进行分类,然后按照一种随机的方式将它们放入队列中,以确保每个流获得相对均匀的带宽共享。 总体而言,这些命令和配置表明你正在设置一个带有分层令牌桶和 SFQ 调度算法的 QoS 策略,用于对网络流量进行管理和控制。这有助于确保在网络上不同的流之间实现公平的带宽分配。 |
10
991547436 325 天前 1
单用户网速怎么看不知道,有个其他思路,可以在上传接口获取上传的文件大小和对方 ip ,如果文件过大,可以调用 iptable 去限制该用户的速度,传完解除限速,前提是获取对方的真实 ip ,而不是 nginx 代理的 ip
|
11
28Sv0ngQfIE7Yloe 325 天前 1
舍本逐末了,直接从网卡着手就可以了
|
12
159526aa 325 天前 1
需求还挺多 只有自己用 netty 写逻辑了
|
13
fengpan567 325 天前 1
加个日志不就行了,打印上传的用户信息和文件大小
|
14
realrojeralone 325 天前 1
上传数据时是你代码接收的吗?是的话控制接收速度就可以了
|
15
zsj1029 325 天前 via iPhone
客户端做比较容易,或者用缓冲区流速控制
|
16
1194129822 325 天前 1
看你用的什么框架,想要做到什么程度,业务层面上一般很难实现。
4 层的 TCP 自带流量控制,只要控制 read 的速度,对面自然会降低发送的速度,nginx 和 netty 的流量控量就是基于此。 4 层流量控制是基于连接,如果对面使用多线程,TCP 想要实现单机流量控制就比较麻烦一些。这时候使用网关和防火墙的基于 IP 流量控制就能实现单机流量控制。 如果是分布式流量控制呢?基于用户,对接口限流,配合单机流量控制,等等。 |
17
Richared 325 天前 1
之前搞网关都是 openresty+lua 实现的,这些不用写在业务里吧。
|
18
salmon5 325 天前 1
java 这一层不准,(默认)每一层 nginx 都会缓冲流量。
比如用户上传了 1G 的文件,会缓存在 nginx 上,上传完成后,瞬间发给了 java 服务。 |
19
Lentin 324 天前 via iPhone
加块网卡加根网线做个端口聚合不行吗……
|