Java web应用性能分析之服务端慢[网络慢]

news2024/9/28 19:27:28

        Java web应用性能分析之服务端慢,如果是网络原因引起的服务端慢,经常会被忽略,很多时候我们第一时间不会去排查网络原因。出现这种情况也很正常,因为应用的外部网络都是超100M的大宽带服务器,而内部则是千兆网卡或者万兆网卡;一般网络上不会出现性能瓶颈。

        一般我们说的100M带宽,是指上行下行速度100Mbit/s=12.5MByte/s。但是对于家庭而言100M带宽是指下载速度理论值12.5MB(一般是10MB左右),上传速度1MB。

        服务器带宽不足会导致网络拥堵,web应用访问变慢,以及访问报错(408 request timeout,504 gateway timeout),影响客户体验,最终会导致潜在客户流失。

        服务器网络慢的原因:

1、网络基础设施限制

        我们需要了解什么是带宽,带宽是指网络中传输数据的能力,通常以每秒传输的比特数(bps)或每秒传输的数据量(Mbps)来衡量,云服务器的带宽受到网络基础设施的限制,包括物理线路、交换机、路由器等设备的质量和性能,这些设备的性能决定了网络传输数据的速度,从而影响到云服务器的带宽。

2、网络拥堵

        云服务器的带宽还可能受到网络拥堵的影响,在网络高峰期,如上下班时间、节假日等,大量的用户同时访问网络,导致网络拥堵,这时,云服务器的带宽可能会被大量用户占用,从而导致用户体验下降,为了解决这个问题,云服务提供商通常会在网络高峰期增加带宽投入,以保证用户的正常使用。

        鉴于前面提到的DDos攻击,一般可以采用被动防御方式,通过分析入口的nginx日志,筛选出访问频率高的ip,将其添加到iptables或者nginx黑名单。

        分析脚本:筛选日志中访问大于30次的ip (这个有点粗,还容易误伤,因为很多小区或者公司,会共用一个公网ip)

#!/bin/bash
while true;do
    IP=(
        $(awk '{print $1}' /usr/local/nginx/logs/access.log | sort | uniq -c | awk '$1>30{print $2}')
    )

    for i in ${IP[@]}
    do
        iptables -L -n | grep '^DROP' | grep -q "$i"
        if [ $? -ne 0 ];then
            iptables -A INPUT -p tcp -s $i -j DROP
            echo $i 访问异常,已被拦截
        fi
    done
    sleep 1
done


1)统计日志中访问最多的10个IP
思路:对第一列进行去重,并输出出现的次数
方法1:
awk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
方法2:
awk '{print $1}' access.log |sort |uniq -c |sort -k1 -nr |head -n10
说明:a[$1]++ 创建数组a,以第一列作为下标,使用运算符++作为数组元素,元素初始值为0。处理一个IP时,下标是IP,元素加1,处理第二个IP时,下标是IP,元素加1,如果这个IP已经存在,则元素再加1,也就是这个IP出现了两次,元素结果是2,以此类推。因此可以实现去重,统计出现次数。
 
2)统计日志中访问大于100次的IP
方法1:awk '{a[$1]++}END{for(i in a){if(a[i]>100)print i,a[i]}}' access.log
方法2:awk '{a[$1]++;if(a[$1]>100){b[$1]++}}END{for(i in b){print i,a[i]}}' access.log
说明:方法1是将结果保存a数组后,输出时判断符合要求的IP。方法2是将结果保存a数组时,并判断符合要求的IP放到b数组,最后打印b数组的IP。
 
3)统计2019年3月14日一天内访问最多的10个IP
思路:先过滤出这个时间段的日志,然后去重,统计出现次数
方法1:awk '$4>="[14/Mar/2019:00:00:01" && $4<="[14/Mar/2019:23:59:59" {a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
方法2: sed -n '/\[14\/Mar\/2019:00:00:01/,/\[14\/Mar\/2019:23:59:59/p' access.log |sort |uniq -c |sort -k1 -nr |head -n10  #前提开始时间与结束时间日志中必须存在
 
4)统计访问最多的前10个页面($request)
awk '{a[$7]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
 
5)统计每个URL访问内容的总大小($body_bytes_sent)
awk  '{a[$7]++;size[$7]+=$10}END{for(i in a)print a[i],size[i],i}' access.log
 
6)统计每个IP访问状态码数量($status)
awk  '{a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log
 
7)统计访问状态码为404的IP及出现次数
awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log

        Nginx黑名单:不足的是需要重启Nginx才能生效

nginx 黑名单
要实现Nginx的IP黑名单功能,你可以使用Nginx的ngx_http_access_module模块。
以下是一个配置示例,它将拒绝位于黑名单内的IP地址访问服务器:
首先,在Nginx配置文件中(通常是

nginx.conf或者位于/etc/nginx/conf.d/目录下的某个文件),定义黑名单文件的位置。假设黑名单文件名为blacklist.conf,并且该文件位于/etc/nginx/目录下。


在需要应用黑名单的server块中,添加以下配置:
http {   
 ...     
 # 定义黑名单文件的位置    
 geo $blacklist {       
  default 0;        
  include blacklist.conf;    
  }     
  server {      
    ...        
     location / {        
         # 如果客户端IP地址在黑名单中,则返回403禁止访问        
             if ($blacklist) {             
                return 403;        
                    }         
                        ...       
                         }    
                         }}
在
blacklist.conf文件中,列出所有你想要拒绝访问的IP地址:
1.2.3.4;192.168.1.1;
每个IP一行。
重新加载Nginx配置以使更改生效:
sudo nginx -s reload
现在,所有在blacklist.conf中列出的IP地址都将被拒绝访问你的Nginx服务器。

        推荐方法: limit_req_zon 限制请求数,limit_conn_zone 限制连接数,开通白名单(特定接口、特定页面只对部分IP开放),关闭慢连接(默认值都是60s client_body_timeout 5s;client_header_timeout 5s;)。

        Nginx限流来防止DDos攻击:

1.DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。
一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。
2.应用层DDOS攻击的特征
应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。
例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无法接受新的连接请求达到DDOS的目的。
其他还有采用发送大量连接请求发送大数据包的请求进行攻击的形式。因为攻击是由木马程序发起,攻击者可以在很短时间内快速建立大量的连接,并发出大量的请求。
以下是一些DDOS的特证,我们可以据此特征来抵抗DDOS(包括但不限于):攻击经常来源于一些相对固定的IP或IP段,每个IP都有远大于真实用户的连接数和请求数。
备注:这并不表明这种请求都是代表着DDOS攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的IP地址访问公网资源。
但是,即便如此,这样的请求数和连接数也会远少于DDOS攻击。因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。
User-Agent通常是一个非标准的值Referer有时是一个容易联想到攻击的值

3.使用Nginx、Nginx Plus抵抗DDOS攻击
结合上面提到的DDOS攻击的特征,Nginx、Nginx Plus有很多的特性可以用来有效的防御DDOS攻击,可以从调整入口访问流量和控制反向代理到后端服务器的流量两个方面来达到抵御DDOS攻击的目的。
限制请求速度
    设置Nginx的连接请求在一个真实用户请求的合理范围内。
    比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {...
location /login.html {
limit_req zone=one;
...}}
`limit_req_zone`命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP($binary_remote_addr)。
location块中的`limit_req`通过引用one共享内存区来实现限制访问/login.html的目的。

4.限制连接数量
设置Nginx的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不可以超过10个。
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {...
location /store/ {
limit_conn addr 10;
...}}
`limit_conn_zone`命令设置了一个叫addr的共享内存区来存储特定键值的状态,在上面的例子中是客户端IP( $binary_remote_addr)。
location块中`limit_conn`通过引用addr共享内存区来限制到/store/的最大连接数为10。

5.关闭慢连接
有一些DDOS攻击,比如Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。
`client_body_timeout`命令用来定义读取客户端请求的超时时间,
`client_header_timeout`命令用来定于读取客户端请求头的超时时间。
这两个参数的默认值都是60s,我们可以通过下面的命令将他们设置为5s:
server {client_body_timeout 5s;client_header_timeout 5s;...}

6.设置IP黑名单
如果确定攻击来源于某些IP地址,我们可以将其加入黑名单,Nginx就不会再接受他们的请求。比如,你已经确定攻击来自于从123.123.123.1到123.123.123.16的一段IP地址,你可以这样设置:
location / {deny 123.123.123.0/28;...}
或者你确定攻击来源于123.123.123.3、123.123.123.5、123.123.123.7几个IP,可以这样设置:
location / {deny 123.123.123.3;deny 123.123.123.5;deny 123.123.123.7;...}
7.设置IP白名单
如果你的网站仅允许特定的IP或IP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:
location / {allow 192.168.1.0/24;deny all;...}

思考一下:Nginx(路由加前端)+springcloud;Nginx上限制请求数和连接数,那么springcloud gateway和内部服务上是否还要限流。
    需要。Nginx作为请求入口,既可以限制整个应用的请求和连接,也可以对单个页面/接口进行限制,这个限制可以挡掉DDos攻击产生的请求和连接,将恶意攻击的请求和连接挡在应用的最外层。
    内部服务存在异步或者多线程并发调用,所以内部服务间的调用也需要进行限流。
3、服务商限制

        云服务器的带宽还可能受到服务商的限制,一些小型云服务提供商可能由于资金、技术等方面的限制,无法提供足够高的带宽,这就导致了用户在使用云服务器时,可能会遇到带宽不足的问题,在选择云服务提供商时,用户需要根据自己的需求选择合适的服务商。

4、应用程序优化

        云服务器的带宽也可能受到应用程序本身的优化程度的影响,如果应用程序没有进行有效的优化,可能会导致大量的资源浪费,从而降低云服务器的带宽,用户在使用云服务器时,需要关注应用程序的优化情况,以提高云服务器的带宽利用率。

        云服务器的带宽之所以会如此之低,主要是受到网络基础设施限制、网络拥堵、服务商限制以及应用程序优化等多方面因素的影响,为了解决这个问题,用户需要在选择云服务提供商时注意其资质和实力,同时关注应用程序的优化情况,用户还可以关注云服务商发布的关于带宽扩容、网络优化等相关信息,以便及时了解和应对带宽问题。

5、操作系统优化和程序优化

        通过netstat等命令查看服务器的TCP状态,以及建立连接最多的ip,重点关注连接数最多的ip,排查是否是网络攻击;如果是ddos攻击,服务器上会有很多SYN-RECEIVED状态的连接,可以把这些状态的ip都记录下来,写入黑名单。

        5.1服务器上有大量的time_wait状态的连接
        1.产生大量time_wait的原因

        主要原因是服务器没有做内核参数优化的话。

        在TIME_WAIT状态,客户端连接要等待一段长为2ML(Maximum Segment LIfe,报文段最大生存时间)的时间,才能完全关闭。MSL是TCP报文段在网络中的最大生存时间。
        TIME_WAIT状态存在的原因有两点:

  • 可靠地终止TCP连接
  • 保证让迟来的TCP报文段有足够的时间被识别并丢弃
  1. 第一个原因:客户端需要停留在某个状态以处理重复收到的结束报文段(即向服务器发送确认报文段)
  2. 第二个原因:一个TCP端口不能被同时打开多次(两次及以上),当一个TCP连接处于TIME_WAIT状态时,我们无法立即使用该连接占用着的端口来建立一个新连接。

        TIME_WAIT状态要持续2MSL时间的原因(MSL通常为2分钟,现实中常用30秒或者1分钟):能够确保网络上两个传输方向上尚未被接收到的、迟到的TCP报文段都已经消失(被中转路由器丢弃)。一个连接的新的化身可以在2MSL时间之后安全地建立,而绝对不会收到属于原来连接的应用程序数据。

        直接原因可以看下面的TCP网络状态图。对于基于TCP的HTTP协议,关闭TCP连接的是Server端,这样,Server端会进入TIME_WAIT状态,可想而知,对于访问量大的Web Server,会存在大量的TIME_WAIT状态,假如Server一秒钟接收1000个请求,那么就会积压240*1000=240000个TIME_WAIT的记录,维护这些状态给Server带来负担。当然现代操作系统都会用快速的查找算法来管理这些TIME_WAIT,所以对于新的 TCP连接请求,判断是否hit中一个TIME_WAIT不会太费时间,但是有这么多状态要维护总是不好。
HTTP协议1.1版规定default行为是Keep-Alive,也就是会重用TCP连接传输多个 request/response,一个主要原因就是发现了这个问题。

        LInux下MSL默认值是60秒,2ML即是120秒后回收TIME_WAIT的连接。

        2.解决time_wait

        修改操作系统的内核参数,让其快速回收和使用那些time_wait状态的连接。

修改/etc/sysctl.conf文件:

#表示当keepalive启用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒
net.ipv4.tcp_keepalive_time=1200
#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数
net.ipv4.tcp_max_syn_backlog = 4096
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
#减少超时前的探测次数
net.ipv4.tcp_keepalive_probes=5

修改完之后执行/sbin/sysctl -p让参数生效。
TIME_WAIT状态可以通过优化服务器参数得到解决,因为发生TIME_WAIT的情况是服务器自己可控的,要么就是对方连接的异常,要么就是自己没有迅速回收资源,总之不是由于自己程序错误导致的。

        5.2服务器上有大量的close_wait状态的连接
        1.产生大量close_wait的原因

        如果一直保持在CLOSE_WAIT状态,那么只有一种情况,就是在客户端发出fin关闭连接之后服务器程序自己没有进一步发出ACK信号。

        也就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占着。个人觉得这种情况,通过服务器内核参数也没办法解决,服务器对于程序抢占的资源没有主动回收的权利,除非终止程序运行。大概率是服务器上的进程非正常关闭。

        2.解决close_wait
首先考虑程序是否有BUG,是否有socket泄露(遗漏close())。

查看当前系统中的tcp socket状态信息:

# netstat -n | awk '/^tcp/ {++X[$NF]} END {for(i in X) print i, X[i]}'?
另外一个命令:lsof

比如搜索系统中IP为192.168.1.120的远程链接所有打开的套接字:

# lsof -i@192.168.1.120
查代码是解决大量CLOSE_WAIT问题的主要思路。

TCP网络状态图

1)统计80端口连接数

netstat -nat | grep -i "80" | wc -l
2)统计httpd协议连接数

ps -ef | grep httpd | wc -l
3)统计已连接上的,状态为“established

netstat -anp | grep ESTABLISHED | grep 'tcp' |wc -l
4)查出哪个IP地址连接最多,将其封了

netstat -anp | grep ESTABLISHED | awk {print $5}|awk -F: {print $1} | sort | uniq -c | sort -r +0n
netstat -anp | grep SYN | awk {print $5}|awk -F: {print $1} | sort | uniq -c | sort -r +0n


5) 统计每个ip的连接数
netstat -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort -rn
ss -n | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c| sort -rn
参数说明:                    
netstat -n                  :以数字形式显示地址信息
awk '/^tcp/ {print $5}'     :筛选以tcp开头的行,并打印5th filed.
awk -F: '{print $1}'        :以冒号为字段分隔符,打印第一个字段(-F fs 指定行中分隔数据字段的字段分隔符)
uniq -c                     :去除重复项目,-c 进行计数
sort -rn                    :进行排序,-r 反向排序 -n 使用纯数字进行排序



6) 查看服务器的TCP状态

netstat -ant | awk 'NR>=3 {++State[$6]} END {for (key in State) print key,State[key]}'
ss -ant | awk 'NR>=2 {++State[$1]} END {for (key in State) print key,State[key]}'
netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}'

参数说明:
/^tcp/:滤出tcp开头的记录,屏蔽udp, socket等无关记录。
S[]:相当于定义了一个名叫S的数组
NF:The number of fields in the current input record.(表示输入数据的字段总数,如上所示的记录,NF等于6)
$NF:表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT
S[$NF]:表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数
++S[$NF]:表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一
END:表示在最后阶段要执行的命令
for(key in S):遍历数组

参数说明:
LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT: 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求
CLOSE-WAIT: 等待从本地用户发来的连接中断请求
CLOSING: 等待远程TCP对连接中断的确认
LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED: 没有任何连接状态
SYN_RECV表示正在等待处理的请求数;
ESTABLISHED表示正常数据传输状态;
TIME_WAIT表示处理完毕,等待超时结束的请求数。

如何计算网站服务器的带宽。

如何计算网站服务器的带宽。
1. 确定网站的访问量
网站的访问量是计算带宽大小的重要因素之一。为了确定访问量,我们需要知道网站每天或每月的独立访客数量以及总的页面浏览量。
这些数据可以通过Google Analytics或其他分析工具来获取。在获取数据后,我们需要将访问量转换为每秒钟的访问数量,这样才能更准确地计算带宽。
2. 确定每个页面的大小
每个网页的大小也是计算带宽大小的重要因素之一。通常情况下,网站的主页和其他页面的大小是不一样的。
为了计算每个页面的大小,我们可以使用Google PageSpeed Insights等在线工具来获取每个网页的大小。
在获取数据后,我们需要将每个网页的大小转换为每秒钟传输的数据大小,这样才能更准确地计算带宽。
3. 确定网络连接的类型
网络连接的类型也是计算带宽大小的重要因素之一。不同的网络连接类型提供不同的速度和带宽大小。
例如,ADSL网络提供的带宽大小通常是10Mbps,而光纤网络则可以提供高达1Gbps的带宽大小。因此,在计算带宽大小时,我们需要确定使用的网络连接类型,并根据其提供的带宽大小来计算。
4. 计算带宽大小
在确定以上三个因素后,我们可以开始计算网站服务器的带宽大小。计算公式如下:
带宽大小(Mbps)= (每秒钟的访问量 × 每个页面的平均大小)÷ 网络连接提供的带宽大小
例如,假设每秒钟的访问量为1000次,每个页面的平均大小为2MB,网络连接提供的带宽大小为10Mbps。我们可以使用上述公式来计算带宽大小:
带宽大小(Mbps)=(1000 × 2MB)÷ 10Mbps =2023÷10 =200Mbps
因此,计算出的带宽大小为200Mbps。

1、确定问题的原因
解决服务器带宽不足问题的第一步是确定问题的原因。有几个因素会导致服务器带宽不足,例如高流量、服务器配置或网络限制。一旦确定了问题的根本原因,就可以开始采取纠正措施。
2、优化网站资源
优化网站资源有助于减少需要在服务器和互联网之间传输的数据量。优化网站图像、视频和其他内容以在不影响质量的情况下减小它们的大小。此外,尽量减少可能增加网站加载时间和带宽使用的第三方脚本和插件的使用。
3、使用内容分发网络 (CDN)
内容分发网络 (CDN) 是位于世界各地的服务器网络,可以从最近的可用服务器向用户分发网站内容。使用 CDN 有助于减少服务器负载并缩短网站加载时间。反过来,这可以帮助减少服务器所需的带宽量。
https://roy.wang/blog-cdn-scheme/

4、升级服务器硬件
升级服务器硬件有助于提高服务器性能和增加带宽。考虑升级到具有更多 RAM、更快的处理器和更高带宽功能的更高端服务器。这有助于提高服务器性能并降低带宽限制的可能性。
5、使用流量管理工具
流量管理工具可以帮助管理和控制网站流量以防止带宽过载。这些工具可以根据预定义的规则限制并发连接数或限制用户带宽,从而帮助优化带宽使用。通过使用流量管理工具,您可以确保高效且有效地使用您的服务器带宽。
服务器带宽不足会对网站性能和用户体验产生重大影响。通过找出问题根源、优化网站资源、使用内容分发网络、升级服务器硬件、使用流量管理工具,可以解决服务器带宽不足的问题,提升网站性能和用户体验。

当主机带宽不足时,是选择OSS还是CDN?

当主机带宽不足时,是选择OSS还是CDN?
当主机带宽不足时,选择 OSS 还是 CDN 的决策主要取决于您的业务需求、成本和用户体验。以下是每个选项的解释:
OSS(对象存储):
概念:OSS 是一个对象存储服务,可以存放大量非结构化和半结构化数据,如图片、视频和日志文件等。
分类:属于对象存储服务。
优势:
低成本:OSS 按照存储容量和流量计费,相较于 CDN 的费率更低。
高性能:通过分布式的边缘节点进行数据存储,可提供低延迟的 HTTP/S 服务。
持久性:使用对象的生命周期策略,保证数据的长久保存和访问。
应用场景:OSS 适用于需要长期保存数据、对数据读取性能要求较高的业务,如内容分发、数据备份和数据分析等。
CDN(内容分发网络):
概念:CDN 是一种全球范围内的内容分发网络,可以将存储在 CDN 边缘站点的静态文件快速传输至用户终端设备,以减轻源服务器负载。
分类:属于内容分发网络服务。
优势:
高可用性:CDN 可以在多个节点上缓存静态文件,提供高性能的 HTTP/S 服务。
稳定性:可防止网络拥塞,确保用户获取到稳定的数据。
安全性:在 CDN 边缘站点上处理请求和静态文件的缓存,减少用户和源站点的网络攻击风险。
应用场景:CDN 适用于实时性要求高、带宽消耗大、低延迟的场景,如视频流加载、电子商务平台页面加载和网站加速等。
腾讯云相关产品:
腾讯云 OSS:https://console.cloud.tencent.com/cam/capi
腾讯云 CDN:https://console.cloud.tencent.com/cam/capi
总结:当主机带宽不足时,根据业务的访问模式和需求,您可能会选择 OSS 更低的成本和持久性,以确保您能够在数据访问高峰期间保持成本稳定。但是,如果您的数据是动态更新的,且需要实时传输到用户设备,则 CDN 将提供更低的延迟和安全功能。请确保在实际应用中为您的业务找到最佳解决方案。

下面是扯淡篇、无聊的时候可以看看。

        关于带宽扯点题外话,宽带费用。在云厂商出现前,我们的服务器都是托管在运营商机房(大厂自建机房除外),首选BGP机房,即互联网的骨干或者核心机房,亦或者是数据交换的中心枢纽(主干网)。因为只有BGP机房才会配备高性能服务器、路由器、交换机等网络设备,才能提供可靠的、稳定的网络服务和完善的网络安全防护措施。

        BGP机房的优势:

1、可以提供高速的互联网接入,一般包含移动/联通/电信,多条线路,主流的运营商,使用户可以快速、稳定地访问互联网。

2、BGP机房提供了强大的网络安全防护措施,可以有效地防范各种网络攻击和恶意行为。

3、BGP机房还具备高度可靠性和可扩展性,可以适应不同规模和需求的网络流量。

        BGP机房的特点

1、BGP机房需要位于地理位置优越的地方,以确保网络连接的稳定和速度的可靠。

2、BGP机房应该具备优质的设备和先进的技术支持,以保证网络的高效运转和安全性。

        回到费用上,托管费用主要包括机位费和宽带费,机位费一般IDC数据中心1U为200元/月,2U 400元/月,4U 500元/月;100M独享宽带费是1200元/月。

服务器带宽多少合适

        带宽会影响服务器的访问速度,网络带宽的大小对于访问量较大的网站或者应用尤其重要。根据不同业务情况,选择合适的带宽(毕竟是钱啊),游戏开发、视频直播、APP开发、门户网站、电商平台等不同的业务场景对带宽需求不同。

        很多网站实际上使用的带宽并不多,1000人同时在线,占用的带宽不到5Mbit,假设网站是视频业务,进行估算。一部高清电影4GB,时长160分钟,则播放速度4GB/160min=4*1024MB/160/60=0.43MB/S=0.43*8Mbit/S=3.3Mbit;1000人同时看3.3Mbit*1000=4Gbit;这是服务器上的带宽要4Gbit,客户端只需要5Mbit带宽即可观看。

在线播放4K视频需要多少兆宽带?🌱
先说结论,观看4K在线播放视频50兆的带宽已经足够了。具体如下:

一、4K技术参数
    4K显示屏对应的分辨率为:3840*2160
    通常4K分三个层级,入门级4K(4K,8bit),运营级4K(4K,10bit),极致级4K(4K,12bit)。
二、无压缩理论计算
    目前常用的4K标准,3860*2160的分辨率,8bit/color的数据位,每个像素3个子像素(红、蓝、绿),帧数为60fps。那么4K内容需要测传输速率为:3840*2160*8*3*60≈12 Gbps,而这个仅是图像,音轨流量大概占1/10,合计13G左右。结论:在无压缩情况下,传输一路4K视频需13Gbps带宽。
三、H.265压缩后的带宽
    H.265标准压缩比为350~1000,那么4K视频经过H.265压缩之后大概需要12~40Mbps的带宽,各国4K内容现场测试的传输速率在17.5~35Mbps之间。
综上所述,现在4K资源越来越多,观看4K视频内容,需要35M左右的稳定带宽。实时4K视频除了受到带宽制约外,对网络时延、抖动也有一定的要求,50M的稳定带宽已经足够了。

    那么问题来了,为什么视频网站的4K视频,码率才5Mbps左右呢?
这是因为,网站用户一般使用的设备大多是小屏,对分辨率其实并不敏感。看4K视频,如果使用的设备尺寸小于55寸,根本看不出跟1080P有多大差别。
由于视频流量较大,费用高,用于网络传输的视频内容,视频网站、包括宽带运营商,都在想方设法减小分辨率及码流。
    比如,广电运营商口里的"高清",用于有线电视频道里传输的,指的是1080i的分辨率;而在视频网站口里的"高清“,用于网络点播的,分辨率可能就只有1440*810,只比720P高那么一点点,并且码率也下降了N倍。
在使用HEVC编码,并优化各种参数后,视频网站压出来的5Mbps的4K视频,用户基本上也凑合看了。

    结论:如果平时只看看各大网站的在线4K视频,家里的带宽5Mbps就勉强够了,10Mbps的宽带已经很奢侈了。
    如果用宽带运营商的IPTV看4K节目,IPTV带宽默认是100Mbps,是独立的带宽,根本不用担心带宽的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

el-tree搜索父节点,父子节点一起展示

会2024.04.22今天我学习了如何对el-tree的:filter-node-method方法进行优化&#xff0c;如果我们有多层的节点数据&#xff0c; 比如我们有这样的数据&#xff0c;当我们输入水果的时候应该出现的是水果和特级水果这两个父节点以及对应底下的子节点数据&#xff0c; 用element里…

Vue3 Vite配置环境变量

Vue3 Vite配置环境变量 相关文档配置.env文件vite.config.jspackage.json 使用 相关文档 Vite 官方中文文档&#xff1a;https://cn.vitejs.dev/环境变量和模式&#xff1a;https://cn.vitejs.dev/guide/env-and-mode.html#env-file在配置中使用环境变量&#xff1a;https://c…

如何轻松实现多微信批量自动加好友?

当我们需要在添加大量的微信好友时&#xff0c;手动逐个添加难免会感到乏味枯燥&#xff0c;还很容易出错。这时候&#xff0c;微信管理系统就能帮助我们实现微信批量自动加好友的便利。 首先&#xff0c;在微信管理系统中&#xff0c;可以将待加好友的手机号码或微信号导入系…

全自动开箱机:从原理到应用,全面解析自动化装箱技术

随着科技的飞速发展&#xff0c;自动化技术在各行各业的应用越来越广泛。其中&#xff0c;全自动开箱机作为现代物流领域的重要设备&#xff0c;以其高效、精准的特点&#xff0c;受到了广大企业的青睐。与星派全面解析全自动开箱机的原理、应用领域以及它所带来的变革。 一、…

发现博客网站的热门前端主题也是跟随前端热点的一个渠道

今天又发现了一个可以关注前端热点的渠道 csdn平台的创作者中心会有相关专业最近有热度的文章话题&#xff0c;这些话题名称本身就代表着一部分该行业的热点 以前端为例&#xff1a;

股票K线图原来可以用Python画,收藏起来!

之前在一篇文章中提到Matplotlib可视化&#xff0c;甚至可以用来画股票K线图&#xff0c;许多同学也在问代码&#xff0c;这次来发个文回应下。 Python用matplotlib绘制K线图&#xff0c;需要配合talib、numpy、mpl_finance等第三方库来使用&#xff0c;具体展示如下&#xff…

宏基因组|使用CheckM2评估分箱质量

简介 CheckM2使用机器学习快速评估基因组bin质量 与CheckM1不同&#xff0c;CheckM2采用通用训练的机器学习模型&#xff0c;无论分类学谱系如何&#xff0c;均可用于预测基因组bin的完整性和污染情况。这使得它能够在训练集中纳入许多仅具有少数&#xff08;甚至只有一个&am…

Proxyman Premium for Mac:网络调试利器,开发者首选!

Proxyman Premium for Mac是一款功能强大的网络调试和分析工具&#xff0c;专为开发者和测试人员打造。这款软件以其出色的性能和丰富的功能&#xff0c;帮助用户在网络开发和调试过程中更有效地分析和拦截网络请求&#xff0c;进行必要的修改和重发&#xff0c;从而进行更深度…

局域网屏幕桌面监控哪个软件比较好

在企业、教育机构或其他组织中&#xff0c;出于提高工作效率、保障数据安全、规范员工行为等目的&#xff0c;对局域网内电脑屏幕进行实时监控的需求日益凸显。 面对市场上众多屏幕监控软件&#xff0c;选择一款功能全面、稳定可靠且符合法规要求的产品至关重要。 在局域网屏幕…

python 如何表示大写字母

upper() 方法将字符串中的小写字母转为大写字母。 语法 upper()方法语法&#xff1a; str.upper() 参数 NA。 返回值 返回小写字母转为大写字母的字符串。 实例 以下实例展示了 upper()函数的使用方法&#xff1a; #!/usr/bin/python str "this is string example…

【看不懂命令行、.yaml?】Hydra 库极速入门

Hydra 是一个开源的 Python 框架&#xff0c;可以简化研究和其他复杂应用程序的开发。其核心功能是通过组合动态创建层次化的配置&#xff0c;并可以通过配置文件和命令行进行覆盖。Hydra 的名字来源于它能够运行多个类似的作业 - 就像一个多头的水怪一样。 主要特性: 从多个…

LLM学习之自然语言处理简单叙述

自然语言处理基础 自然语言处理&#xff1a;让计算机读懂人所写好的这些文本&#xff0c;能够像人一样进行交互。 自然语言处理的任务和应用 任务&#xff1a; 词性标注 part of speech tagging 动词&#xff0c;名词&#xff0c;形容词&#xff1f; 命名实体的识别 name…

深度学习与神经网络入门

前言 人工智能&#xff08;AI&#xff09;与机器学习&#xff08;ML&#xff09;与深度学习&#xff08;DL&#xff09;的关系&#xff1a; DL包含于ML&#xff0c;ML包含于AI。 即深度学习是机器学习一部分&#xff0c;机器学习又是人工智能的一个分支。 那么深度学习到底有…

用Python自动化操作PPT,看完这篇文章就够了!

1.PPT自动化能干什么&#xff1f;有什么优势&#xff1f; 它可以代替你自动制作PPT它可以减少你调整用于调整PPT格式的时间它可以让数据报告风格一致总之就是&#xff1a;它能提高你的工作效率&#xff01;让你有更多时间去做其他事情&#xff01; 2.使用win32com操作ppt 官…

GDC 笔记

1 Title Diffusion Improves Graph Learning&#xff08;Johannes Gasteiger, Stefan Weienberger, Stephan Gnnemann&#xff09;【NeurIPS 2019】 2 Conclusion This study removes the restriction of using only the direct neighbors by introducing a powerful, yet spa…

【软件测试】Selenium实战技巧-多页面和Windows控件处理

01 多页面处理 做UI自动化的时候常常会遇到浏览器弹出新的Tab页&#xff0c;或者需要在多个网页服务之间来回取数据的情况。 比如在首页点击文章“Jmeter使用&#xff1f;”的链接&#xff0c;浏览器会弹出一个新的页面显示“Jmeter使用&#xff1f;”这篇文章的详情。此时如…

PySide6应用实践 | 在PyCharm配置和使用PySide6 QtDesinger

PySide6应用实践 | 在PyCharm配置和使用PySide6 QtDesinger 一、前言二、在PyCharm External Tools中配置PySide61.PyCharm External Tools的用途2.在Pycharm External Tools中配置PySide6 QtDesinger3.在Pycharm中使用PySide6 QtDesinger 一、前言 程序员缓解工作压力的小窍门…

JS -关于对象相关介绍

在JS中&#xff0c;除去基本的数据类型&#xff0c;还有包含对象这种复合数据类型&#xff0c;他可以储存多个键值对&#xff0c;并且每个键都是唯一的&#xff0c;并且在对象中可以包含各种数据类型的值&#xff0c;包括其他对象&#xff0c;数组&#xff0c;函数等。对象是Ja…

Android studio添加aidl文件时,添加按钮为黑色不可点击添加解决办法

在android studio添加aidl文件时出现下面这个情况只需要在模块的build.gradle.kts文件中的android中添加以下代码即可添加aidl android {// 设置 AIDL 支持buildFeatures {aidl true} }

pyenv-win管理windows上多个版本python

pyenv是一款管理多个python版本的工具&#xff0c;可以便捷的切换使用的python版本&#xff0c;但是不支持windows环境&#xff0c;在windows环境需要使用pyenv-win pyenv-win安装 官方介绍的安装方式比较多&#xff0c;在此主要记录一下我习惯的安装方式 下载pyenv-win,可以…