背景
公司采用B/S微服务架构进行部署服务, 终端用户分布在五湖四海,甚至国内外.
不同客户端的网络状况千差万别, 需要验证功能在不同网络情况下的展现.以及是否存在严重问题.
本次测试,暂时针对客户端情况, 后台调用其实是类似的.也可以相类似的进行处理.
网络参数简单说明
网络带宽
网络带宽 一般指代网络传输速率, 常见的带宽有 100MBit/S 1GBit/S 10GBit/S
现在数据中心网络有400GBit/S 以及最高800Gbit/S的超高传输速率.
网络带宽一般指的是理论值, 大多数情况下无法达到.
TCP协议里面有 segment的概念, payload是有限的. 可能不能超过 1500bytes.
物理层的设备都有包转发率的限制. 一般的需要算 payload*pps 来计算
最高的带宽上线一般是有较大的TCP包在一定的包转发率下来获得. 常见应用很多都是琐碎的小包
总体流量可能不是那么高.
带宽与包转发率 像极了 磁盘的带宽和IOPS
在4k随机读写的情况下 6GBit带宽的SATA3协议的HDD 吞吐量可能到不了1MByte/S
只有大Block的顺序读写能够填满带宽.
网络参数简单说明
网络延迟
Latency
又称之为 时延或者是延迟.
一般情况下 一个TCP数据包从发送到目的地,目的地再反馈给发送方收到的过程就称之为 RTT
也就是一般意识的网络延迟.
延迟是无处不在的.
核心在于光速是有限的.
一个客户端的操作发送到服务器端,是需要多种处理的
有客户端机器的中断延迟, CPU计算内存访存的延迟, 然后需要将需要发送的数据从用户态发送到网络栈网卡进行发送到的过程.
如果中间有光纤, 还有光电信号转换, 以及交换机的背板延迟.
这些时间一部分是 纳秒级别 很大部分是微秒级别的.
如果是长距离传输, 传输时延就占比很大了.
光在光纤中的传输是不停的反射传输的,不是直线传输, 加上一定距离就需要有信号放大器 而且大部分光纤都不是直线的也需要弯弯绕绕.
所以一般计算物理传输层时延, 是将光信号在光纤中的传输速度按照不足20万公里每小时来计算. (光在真空中最快,玻璃种会降速)
北京广州的直线距离大约2k公里. 访问是4k公里, 那么最快的延迟一般也得20毫秒 也就是 0.02秒.
中国与美国的平均直线距离大约是1.4万公里. 因为海底光纤可能需要走香港节点,或者是走日本东京等的节点, 实际光纤距离可能2万公里左右.
所以中国和美国的网络延时一般为4/20=0.2秒, 也就是至少200ms.
网络参数简单说明
丢包,重复,慢启动,滑动窗口
TCP虽然是面向连接,而且是保证传输准确性的
但是依旧会出现丢包等的现象.
一般情况下网络模拟丢包,需要加随机数, 不能每几个包必定丢某几个.这样会导致服务永远不可用.
重复发包是由于网络震荡导致的, 但是对端接收时是可以将重复的包过滤掉. 只是会降低实际带宽,和网络延迟, 危害性不是很大.
慢启动和滑动窗口, 是TCP防止网络阻塞的一大优秀机制.
但是在延迟比较高的情况下慢启动会导致带宽利用率的提升非常缓慢. 可能需要很多个RTT 才能够达到网络的极限速度.
这一块是网络带宽与时延合并生效的场景了.
测试思路
网络带宽与延迟存在于方方面面
最适当与完整的策略是现场模拟.
但是一般情况下因为时间和成本无法做到此类场景.
所以可以在网络层,如交换机,或者是路由器层进行处理.
但是这一块需要切入到基础设施层. 需要协调的部分比较多一些.
还一种比较简单的方式是模拟 chaos-mesh 进行网络模拟时使用的 tc (traffic control) 进行模式的方式来处理
可以通过在服务器端添加限制. 模拟服务器的网络带宽和延迟的情况. 实现低带宽高延迟的产品功能表现.
具体明显可以在下面体现
设置命令
tc 命令在linux服务器里面基本上都已经正常安装.
一般的命令如下:
注意 ens192 需要通过命令获取网卡具体的信息.
tc qdisc del dev ens192 root
tc qdisc add dev ens192 root handle 1:0 htb default 1
tc class add dev ens192 parent 1:0 classid 1:1 htb rate 50Mbps
tc qdisc add dev ens192 parent 1:1 handle 2:0 netem delay 300ms 30ms
tc简介
tc 是 traffic control 的简称,用于对进出网卡的数据包进行控制,
在分布式系统实验中常用来模拟网络延时和带宽。
作为一款功能强大的网络流量控制工具,TC可以控制网络带宽、丢包率、延时等网络参数,
使我们能够在网络环境良好的局域网中模拟出各种复杂的网络场景。
tc 的流量控制机制通过 qdisc、class、filter 的组合,形成树结构,
根节点是 root qdisc,叶子节点是其它 qdisc,中间的节点用于细分流量到子节点。
1: root qdisc
|
1:1 child class
| \
| \
| \
| \
1:10 1:11 1:12 child classes
| | |
| 11: | leaf class
| |
10: 12: qdisc
\ \
10:1 10:2 12:1 12:2 leaf classes
每个 class 和 classful qdisc 都需要指定一个唯一的标识符,称为 handle,
该标识符包含两部分,分别是 major number 和 minor number,使用冒号连接。
major number 可以任意选择,通常从 1 开始。
兄弟节点必须使用相同的 major number。
minor number 如果是 0 (可以省略),代表是 qdisc,其它代表是 class。
兄弟节点必须使用不同的 minor number。
tc简介
工作原理
操作系统处理网络数据的基本流程如下:
报文分组从网卡输入口处接收进来,操作系统通过查看报文目的IP,以确定是发给本机的,还是需要转发的。
如果是发给本机的,就直接向上递交给上层的协议,
比如TCP,如果是转发的,则会由网卡输出口发出,网络流量的控制通常就发生在此处。
TC正是基于配置Linux内核流量控制,通过设置不同类型的网络接口队列,
改变数据包发送的速率和优先级,从而达到流量控制的目的。
因此,TC比较适用于需要对指定主机的输出流量进行控制的应用场景。
注意这里先给出恢复脚本和查看情况的脚本
tc qdisc del dev ens192 root
查看命令
tc qdisc ls
tc的部分例子
常用例子
下面是一些常用的例子,有需求基于这个改就行了。
tc -s qdisc ls dev ens192 # 查看添加的 tc 规则
tc qdisc delete dev ens192 root # 删除添加的 tc 规则
设置延时
tc qdisc add dev ens192 root netem delay 100ms # 延迟100ms
tc qdisc add dev ens192 root netem delay 100ms 10ms # 延迟 90ms 到 110ms
tc qdisc add dev ens192 root netem loss 20% # 丢包率 20%
tc qdisc add dev ens192 root netem loss 5% 10% # 丢包率 5% 到 10%
限制带宽和延时
tc qdisc add dev ens192 root handle 1:0 htb default 1 # 默认发往 minor=1 的 class
tc class add dev ens192 parent 1:0 classid 1:1 htb rate 1000Mbps # 添加 htb class,限制带宽是 100Mbps,默认 qdisc 是 fifo
tc qdisc add dev ens192 parent 1:1 handle 2:0 netem delay 20ms # 为 htb class 设置 netem 的 qdisc,添加 20ms 延迟
tc的部分例子
模拟集群
tc qdisc add dev ens192 root handle 1:0 htb default 2
# 挂载于同一个 qdisc 的 filter 优先级越低越早进行匹配
tc filter add dev ens192 parent 1:0 prior 2 protocol ip u32 match ip dst 10.66.1.1/24 classid 1:1
# 发往 10.66.1.1/24 的消息走 10Gbit、100ms 的 qdisc
tc filter add dev ens192 parent 1:0 prior 3 protocol ip u32 match ip dst 10.66.1.1/16 classid 1:2
#发往 10.66.1.1/16 的消息走 20Gbit、50ms 的 qdisc
tc class add dev ens192 parent 1:0 classid 1:1 htb rate 10Gbit
tc class add dev ens192 parent 1:0 classid 1:2 htb rate 20Gbit
tc qdisc add dev ens192 parent 1:1 handle 2:0 netem delay 100ms
tc qdisc add dev ens192 parent 1:2 handle 3:0 netem delay 50ms
文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




