性能:如何步步拆解网络性能问题

网络的性能指标

在这里插入图片描述

(1)可用性

  • 网络不可用就是断网
  • 没有网络,那就什么也干不了
  • 所以,对于网络来讲,最重要的是网络是否可以正常联通

那,如何测试可用性呢?

  • 可以ping一下:
    • 这个命令其实就是向远端的机器发送ICMP的请求数据包,并等待接收对方的回复。
    • 通过请求和应答返回的对比,来判断远端的机器是否联通,也就是为网络是否正常工作

(2)响应时间

  • 端到端的数据一次往返所花费时间,就是响应时间
  • 响应时间受很多因素的影响,比如端到端的物理距离、所经过网络以及负荷、两端主机的负荷等

(3)网络带宽容量

  • 在网络的两个节点之间的最大可用带宽
  • 这一指标一般是设备和网络协议决定的,比如网卡、局域网和TCP/IP的特性。如果是向网络供应商购买的带宽,那么购买的数量就是网络的带宽容量

(4)网络吞吐量

  • 在某个时刻,在网络中的两个节点之间,端到端的实际传输速度
  • 网络吞吐量取决于当前的网络负载情况,而是是随着时间不同而变化的

(5)网络利用率

  • 网络被使用的时间占总时间的比例,一般以百分比来表示。
  • 因为数据传输的突发性,所以实际中的网络利用率一般不会太高,否则的话,响应时间就不能保证了

对于网络性能要求,简单来说就是能联通、响应快、带宽高;并且在部署大流量服务时,可以优化服务器的部署,来尽量减少外部网络流量;也可以使用 CDN 来加速数据传输。

单机的网络性能

了解了网络方面性能的指标后,我们接着讨论具体的网络性能。虽然网络传输需要两端进行,但是我们必须从单机开始,来清楚的了解网络的协议栈。

网络协议其实相当复杂,而且分很多层级。操作系统内核中,最大的一个子系统或许就是网络。网络子系统有多个协议组成,其中每个协议都在更原始的协议之上工作。当用户数据通过网络协议栈传递时,数据都会被封装在该协议的数据包中。

在考虑多层协议进行交互时,我们尽量把思路简化。其实它们之间的关系很简单,就是网络协议栈的每一层都有其职责,与其他底层或者高层协议无关。

举个例子,IP层

  • IP层是第三层的协议,它是通过路由器和网络发送端到端的数据报
  • 它的主要目的,就是在网络中的每一段找到路由路径,从而最终能够到底数据报的接收低
  • 但它不保证数据的有效性,也就是转发过程中几个数据报会重新排序
  • 同时也不保证整个数据的完整性和可靠性,比如丢失的数据报那就是丢失了,IP层不会重传

那么数据的可靠性是谁保证的呢?

  • 这就是需要更上层的TCP协议实现
  • TCP协议通过检测数据丢失并且重传,来保证数据的可靠性,也通过序列号来保证数据的有序性

但是,这两层协议:TCP层和IP层,都只能传输原始的数据;而对于数据是否被压缩过,这些数据表示什么,是在更高层的协议(比如HTTP和应用层)上实现的

我们接着具体到网络协议的程序实现。在Unix系统中,网络协议栈大体可以分为三层,从上到下:

  • 第一层是通过一系列的系统调用,实现BSD套接字的套接字层,比如sendmsg()函数
  • 第二次是中间协议的程序,比如TCP/IP/UDP
  • 第三层是底部的媒体访问控制层,提供对网络接口卡NIC本身的访问。

如下图所示:右边是发送端,左边是接收端。

  • 从右边看起,最上层是BDS套接字,它通过一系列的API调用,比如connect等,然后是TCP的发送,再到IP的发送 ,最后到网卡的发送缓冲区,并最终通过网卡发出
  • 接收端,也就是图的左边,就经过相反的顺序,逐层到达应用层
    在这里插入图片描述

数据中心的网络性能

说完单机的网络性能,我们接着讨论端到端的互联网数据传输。

一台服务器和互联网的远端服务器进行数据传输的时候,需要经过好几层交换器和不同的网络。数据从一台服务器的网卡发出来之后,下一步就是经过机柜上面的交换器,然后是数据中心内部的网络,再进入互联网骨干网络。接收端的情况正好相反。

对于这些中间的网络构建,我们一个个讨论一下。

在这里插入图片描述

机柜交换器(TOR, Top Of Rack; or RSW, Rack Switch)

  • 数据中心里面的服务器不是单独放置的,一般是几十台服务器组成了一个机柜,机柜上面会有机柜交换机。
  • 这个机柜交换机的作用,一方面让机柜内部的服务器直接互通;另一方面,机柜交换机会有外联线路,连接到数据中心的骨干网络

数据中心网络

数据中心网络里面也分了好几层,从TOR到集群交换器(cluster switch),再到集合交换器(aggregation switch)等,最后到数据中心路由器。

在这里插入图片描述
上图简单展示了机柜内部的网络和POD内部网络

  • TOR1是机柜交换器,负责机柜内部几十台服务器之间的数据交换。
  • POD1内部网络包含很多很多机柜

注意,这个多层次结果中,一般越是上层,总的带宽越少

  • 比如,服务的网卡带宽是25Gbps,即使这个机柜内有30台服务器,总带宽就是750Gbps
  • 机柜交换器TOR的外部带宽有多少呢?可能只有100Gbps。这个差距就叫做带宽超订
  • 同样的,POD交换器之间的带宽会继续变小。
  • 之所以允许带宽超订,是因为多数的数据交换是在内部进行的,不会全部都和外部进行交换

知道这一点是必要的,因为我们做网络方面和服务部署优化的时候,需要考虑这点,不要让高层的网络带宽成为性能瓶颈。比如假设两个服务分别用不同的服务器,它们之间的数据交换如果很多的话,就尽量让它们运行在同一个机柜的服务器里面;如果不能保证同一个机柜,就尽量是同一个POD内部

互联网的网络性能

讲完了数据中心内部的网络,我们继续往外扩展,讨论互联网的网络性能。互联网上运行的是TCP/IP协议。这两个协议本身比较复杂,有很多和性能相关的特性值得仔细学习。

一个常见的性能问题是丢包

  • TCP对丢包非常敏感,因为每次丢包,TCP都认为是网络发生了拥塞,因此就会降低传输速度,并且采用重传来回复,这就影响网络性能
  • 实际情况中,造成丢包的原因有很多,不一定就是网络拥塞,因此我们需要进行各种测试观察来做根因分析
  • 通常的丢包原因,是端对端的网络传输中的某一段发生了问题,或许是拥塞,或许是硬件问题,也或许是其他软件原因。我们需要一步步的逐层逐层的排除
  • 对于网络的每段,可以用工具(比如tracerouter)来发现每一段路由,然后逐段测试
  • 对于协议的每层,都可以用相关工具进行分析。
    • 比如TCP层,可以用netstat观察是不是套接字缓存不够
    • 对于操作系统,可以用softnet-stat,来判断CPU的查询队列
    • 对网卡驱动,可以用ethtool等进行分析

在这里插入图片描述

内容分发网络(CDN)的性能

在这里插入图片描述
当今互联网几乎普遍采用内容分发网络来提高网络性能。内容分发网络,也叫CDN(Content Delivery Network 或 Content Distribution Network,CDN),是一种分布式网络,它可以有效的将web内容交付给用户。

内容分发网络的基本原理是,利用最靠近每位用户的服务器,更快、更可靠的将文件发送给终端用户,而不是每次依赖于中心服务器。靠近用户的服务器,一般叫做边缘服务器,会把请求的内容最大限度的缓存,以尽量减少延迟。

工作方式:

  1. 用户A通过具有特殊域名的URL来请求文件。DNS将请求重定向到性能最佳的边缘服务器,该位置通常是地理位置上最接近用户的服务器
  2. 如果重定向的边缘服务器A中没有文件,则边缘服务器会向源服务器请求该文件。源服务器可以是任何公开或者非公开访问的web服务器
  3. 源服务器将文件返回给边缘服务器
  4. 边缘服务器先缓存文件,并将文件返回给原始请求者。该文件将保留在边缘服务器上,这样下次这个文件就可以快速返回请求的客户。这个文件会保存到什么时候呢?时间由其HTTP标头指定的生存时间(TTL)到期为止
  5. 如果用户B用相同 URL 请求相同的文件,也可能定向到相同的边缘服务器。
  6. :如果文件的 TTL 尚未过期,则边缘服务器直接从缓存中返回文件。这样的用户体验就更快。
    在这里插入图片描述
    内容分发网络的边缘服务器会在多个地点,多个不同的网络上摆放。这些节点之间通常会相互传输内容,对用户下载行为进行最优化,并借此改善用户的下载速度,提高系统的稳定性。同时,将边缘服务器放到不同地点,也可以减少网络互连的流量,进而降低带宽成本。

内容分发网络提供商往往有很大的规模,比如几十万台服务器。对服务的客户提供所需要的节点数量会随着需求而不同。

工具

在这里插入图片描述

  • Netperf 是一个很有用的网络性能的测量工具,主要针对基于 TCP 或 UDP 的传输。
    • Netperf 有两种操作模式:批量数据传输和请求 / 应答模式,根据应用的不同,可以进行
      不同模式的网络性能测试
    • Netperf 测试结果所反映的,是一个端到端的系统能够以多快的速度发送数据和接收数据。
  • Iperf 这个工具也以测试 TCP 和 UDP 带宽质量,比如最大 TCP 带宽,延迟抖动和数据包丢失等性能参数。
  • Netstat 这一命令可以显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,提供 TCP连接列表,TCP 和 UDP 监听,进程内存管理的相关报告,一般用于检验本机各端口的网络连接情况。
  • Traceroute 这一命令可以帮我们知道,数据包从我们的计算机到互联网远端的主机,是走的什么网络路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值