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

        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,是独立的带宽,根本不用担心带宽的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud 与 Dubbo 的区别详解

一、Spring Cloud 和 Dubbo 的概述 1.1 SpringCloud 简介 SpringCloud 是一个用于构建云原生应用的框架集合&#xff0c;它为开发者提供了一套完整的工具链&#xff0c;用于快速搭建分布式系统。SpringCloud 基于 SpringBoot 开发&#xff0c;具有如下特点&#xff1a; 提供…

mysql常见语法操作笔记

1. 数据库的基本操作 1.1. MYSQL登录与退出 D:\phpstudy_pro\Extensions\MySQL5.7.26\bin 输入 mysql -uroot -proot -h127.0.0.1 退出的三种方法 mysql > exit; mysql > quit; mysql > \q; 1.2. MYSQL数据库的一些解释 注意&#xff1a;数据库就相当于文件夹 …

类和对象(2)——封装(封装的概念、包、staic)

前言 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。何为封装呢&#xff1f;简单来说就是套壳屏蔽细节。 一、什么是封装 1.1 概念 将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&…

CXL论文阅读笔记整理(持续更新)

CXL 介绍 An Introduction to the Compute Express LinkTM (CXLTM) Interconnect arXiv Paper 对CXL技术进行介绍&#xff0c;包括CXL 1.0、CXL 2.0、CXL 3.0&#xff0c;对各规范的提升做介绍。整理了现有的CXL实现方法&#xff0c;延迟测试结果&#xff0c;对未来发展进行…

三分钟带你读懂面向对象的三大特征:封装,继承,多态

很多小伙伴在学面向对象的时候觉得非常抽象&#xff0c;尤其是对于面向对象的三大特征&#xff1a;封装&#xff0c;继承&#xff0c;多态不理解&#xff0c;那这期文章呢&#xff0c;九九就给大家安排&#xff0c;三分种带你迅速掌握封装&#xff0c;继承&#xff0c;多态。 …

17.基础乐理-调式、自然大调式(C大调、D大调。。。)

调式&#xff1a; 若干个音&#xff0c;按照某种规则排列起来&#xff0c;就是调式&#xff0c;调式是一个非常大&#xff0c;非常抽象的概念&#xff0c;调式这两个字是一个统称&#xff0c;当明确了 若干个音 到底有几个音&#xff0c;某种规则到底是什么规则之后&#xff0c…

刚拿到的《HarmonyOS应用开发者高级认证》,全网整理的题目,将近300题,100%通过

刚拿到《HarmonyOS应用开发者高级认证》&#xff0c;现在把题目和答案分享一下&#xff0c;这些题目是我根据其他网站整理的&#xff0c;宁滥勿缺&#xff0c;有个别题目是重复的&#xff0c;抽半天时间看一下&#xff0c;应该是稳过的。当然建议还是先跟着文档学一下鸿蒙或者看…

【UE5.1】使用MySQL and MariaDB Integration插件——(4)修改、插入、删除数据

目录 效果 步骤 一、修改 二、插入、删除 在上一篇博客&#xff08;【UE5.1】使用MySQL and MariaDB Integration插件——&#xff08;3&#xff09;表格形式显示数据&#xff09;基础上继续实现修改、插入和删除数据库数据的功能 效果 修改数据&#xff1a; 插入数据&…

【YOLO系列PR、F1绘图】更改v5、v7、v8(附v8训练、验证方式),实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

目录 1. 前提 效果图2. 更改步骤2.1 得到PR_curve.csv和F1_curve.csv2.1.1 YOLOv7的更改2.1.1.1 得到PR_curve.csv2.2.1.2 得到F1_curve.csv 2.1.2 YOLOv5的更改&#xff08;v6.1版本&#xff09;2.1.3 YOLOv8的更改&#xff08;附训练、验证方式&#xff09; 2.2 绘制PR曲线 …

在CSDN创作了6个月,我收获了什么?文末送书~

作者主页&#xff1a;阿玥的小东东主页&#xff01; 正在学习&#xff1a;python和C/C 期待大家的关注哦 目录 一次很好的机会&#xff0c;让我开始了CSDN之旅 首先来看看我的几位领路人 创作动力 1W粉丝 在CSDN我收获了什么&#xff1f; 很高的展现量 认证创作者身份 社…

Linux 网络操作命令FTP

FTP命令 引言 文件传输协议&#xff08;FTP&#xff09;是一种用于在网络上进行文件传输的协议。在Linux系统中&#xff0c;FTP可以作为一个非常有用的工具来上传、下载和管理文件。本文将介绍如何在Linux系统中安装FTP服务器&#xff0c;以及如何使用FTP客户端进行文件传输。…

RabbitMQ进阶学习

在之前的练习作业中&#xff0c;我们改造了余额支付功能&#xff0c;在支付成功后利用RabbitMQ通知交易服务&#xff0c;更新业务订单状态为已支付。 但是大家思考一下&#xff0c;如果这里MQ通知失败&#xff0c;支付服务中支付流水显示支付成功&#xff0c;而交易服务中的订…

充电器进阶,原边恒流,单片机控制小电流(预充电)的方案

前言 很多充电器&#xff0c;为了能控制电流输出&#xff0c;也就是充电时需要有小电流、大电流的情况&#xff0c;都会用副边及单片机进行控制&#xff0c;但因为是副边控制&#xff0c;需要一个比较器、一个二极管、若干电阻、若干电容&#xff0c;整体BOM成本可能多了三毛钱…

VUE 项目 自动按需导入

你是否有这样的苦恼&#xff0c;每个.vue都需要导入所需的vue各个方法 unplugin-auto-import 库 Vite、Webpack和Rollup的按需自动导入API 本章提供Vite、Webpack中使用说明 1. 安装 npm i -D unplugin-auto-import 2. config.js 配置文件内追加配置 2.1 Vite // vite.conf…

用Nest实现对数据库的增删改查~

概述 为了与 SQL和 NoSQL 数据库集成&#xff0c;Nest 提供了 nestjs/typeorm 包。Nest 使用TypeORM是因为它是 TypeScript 中最成熟的对象关系映射器( ORM )。因为它是用 TypeScript 编写的&#xff0c;所以可以很好地与 Nest 框架集成。 TypeORM 提供了对许多关系数据库的支…

问题总结笔记

1.向量旋转 问题&#xff1a; 将一个向量旋转90 方法&#xff1a;旋转矩阵 FVector FrontDir EndMousePoint - Point; FrontDir.Normalize(); FVector Left FVector(-FrontDir.Y, FrontDir.X, 0); Verties.Add(Point Left * (WallWedith / 2)); Verties.Add(FVector(Vertie…

C语言 | Leetcode C语言题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; int searchInsert(int* nums, int numsSize, int target) {int left 0, right numsSize - 1, ans numsSize;while (left < right) {int mid ((right - left) >> 1) left;if (target < nums[mid]) {ans mid;right mid - …

Ubuntu Server 20.04 LTS 64bit安装ftp服务

1.安装vsftpd sudo apt install vsftpd2.配置vsftpd sudo vim /etc/vsftpd.conf write_enableYES # 启用任何形式的FTP写入命令&#xff0c;即可以修改文件local_umask022 # 本地用户创建文件的 umask 值&#xff0c;默认是被注释的connect_from_port_20YES # 针对 PORT 类型…

01_Nginx

文章目录 NginxNginx的核心功能Nginx的优势Nginx常用指令Nginx配置文件Nginx的核心功能&#xff1a;反向代理 Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子…

《大话西游2》本人收集的十二个单机版游戏,有详细的视频架设教程,云盘下载

《大话西游2》是一款经典的大型多人在线角色扮演游戏&#xff0c;也是一款国风经典的游戏。 有能力的可以架设个外网&#xff0c;让大家一起玩。 《大话西游2》本人收集的十二个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1a; 链接&…