Java 有办法监控上传接口的网速么,或者能做一些策略进行网速控制么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
luomao
V2EX    程序员

Java 有办法监控上传接口的网速么,或者能做一些策略进行网速控制么

  •  1
     
  •   luomao 2024-02-01 09:33:11 +08:00 2752 次点击
    这是一个创建于 627 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前在做的一个项目中有超大附件上传的需求,由于公司内网比较快,服务器的带宽经常会被几个人都打满,每次排查都会比较麻烦。于是我想是不是可以有什么方法给我进行一些预警提示,辟如超过 50Mbps 的时候,将当前操作的用户、接口地址、客户端 IP 啥的上报给我。或者是可以动态的限制网速,100Mbps 的内网,调用当前接口的人能动态分配一下各自的网速,留下一些带宽给其他服务。 GPT 给我讲了几个方案,可能是我问法不对,没有得到我想要的

    20 条回复    2024-02-02 10:26:45 +08:00
    ChovyChu
        1
    ChovyChu  
       2024-02-01 09:36:01 +08:00   1
    nginx ?
    keepfun
        2
    keepfun  
       2024-02-01 09:36:04 +08:00   1
    如果知道接口地址 可以在 NGINX 上配置吧
    iyiluo
        3
    iyiluo  
       2024-02-01 09:39:16 +08:00   1
    不是有路由器么,路由器后台加个网速限制,专业的事情还得专业的设备来干
    lomao
        4
    luomao  
    OP
       2024-02-01 09:44:57 +08:00
    @iyiluo #3 因为公司内走内网,外部访问走负载均衡,所以还是想直接在程序中监控和控制最好
    luomao
        5
    luomao  
    OP
       2024-02-01 09:45:50 +08:00
    @fenglangjuxu #2 主要还想监控一下是哪个用户上传的
    cslive
        6
    cslive  
       2024-02-01 10:02:00 +08:00   2
    多网卡,对其中一个限速,内网统一访问限速的网卡 ip ,这样你的服务带宽就不会打满了,想打满就用不限速的网卡 ip
    c2const
        7
    c2const  
       2024-02-01 10:03:05 +08:00   1
    如果 Java 实现不了,用 C 和 C++呗 :)
    最多就是 Java 调用写好的库就行了 :)
    datocp
        8
    datocp  
       2024-02-01 10:10:40 +08:00 via Android   1
    既然是内网服务器,
    一般是网管交换机限速吧,没实施过。。。
    如果是 linux 服务器,简单点可以用 iptable limit
    专业点那就是 tc 吧,tc 是可以通过 shell 进行动态插值实现动态限速的。当然简单点可以根据 ip 实施 prio 优先极实行有优先极的避让实现。
    huangzhiyia
        9
    huangzhiyia  
       2024-02-01 10:34:09 +08:00   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 策略,用于对网络流量进行管理和控制。这有助于确保在网络上不同的流之间实现公平的带宽分配。
    991547436
        10
    991547436  
       2024-02-01 10:39:35 +08:00   1
    单用户网速怎么看不知道,有个其他思路,可以在上传接口获取上传的文件大小和对方 ip ,如果文件过大,可以调用 iptable 去限制该用户的速度,传完解除限速,前提是获取对方的真实 ip ,而不是 nginx 代理的 ip
    28Sv0ngQfIE7Yloe
        11
    28Sv0ngQfIE7Yloe  
       2024-02-01 10:46:34 +08:00   1
    舍本逐末了,直接从网卡着手就可以了
    159526aa
        12
    159526aa  
       2024-02-01 10:50:30 +08:00   1
    需求还挺多 只有自己用 netty 写逻辑了
    fengpan567
        13
    fengpan567  
       2024-02-01 10:54:44 +08:00   1
    加个日志不就行了,打印上传的用户信息和文件大小
    realrojeralone
        14
    realrojeralone  
       2024-02-01 11:26:39 +08:00   1
    上传数据时是你代码接收的吗?是的话控制接收速度就可以了
    zsj1029
        15
    zsj1029  
       2024-02-01 12:28:32 +08:00 via iPhone
    客户端做比较容易,或者用缓冲区流速控制
    1194129822
        16
    1194129822  
       2024-02-01 13:58:52 +08:00   1
    看你用的什么框架,想要做到什么程度,业务层面上一般很难实现。
    4 层的 TCP 自带流量控制,只要控制 read 的速度,对面自然会降低发送的速度,nginx 和 netty 的流量控量就是基于此。
    4 层流量控制是基于连接,如果对面使用多线程,TCP 想要实现单机流量控制就比较麻烦一些。这时候使用网关和防火墙的基于 IP 流量控制就能实现单机流量控制。
    如果是分布式流量控制呢?基于用户,对接口限流,配合单机流量控制,等等。
    Cruzz
        17
    Cruzz  
       2024-02-01 14:46:19 +08:00   1
    之前搞网关都是 openresty+lua 实现的,这些不用写在业务里吧。
    salmon5
        18
    salmon5  
       2024-02-01 16:53:07 +08:00   1
    java 这一层不准,(默认)每一层 nginx 都会缓冲流量。
    比如用户上传了 1G 的文件,会缓存在 nginx 上,上传完成后,瞬间发给了 java 服务。
    Lentin
        19
    Lentin  
       2024-02-02 09:03:36 +08:00 via iPhone
    加块网卡加根网线做个端口聚合不行吗……
    zliea
        20
    zliea  
       2024-02-02 10:26:45 +08:00   2
    @salmon5 如果时大文件,ng 一般上会增加下边配置,不做缓存。
    proxy_buffering off;
    proxy_request_buffering off;
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     958 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 22:15 PVG 06:15 LAX 15:15 JFK 18:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86