首页 > 其他分享 >混沌工程工具-阿里ChaosBlade的实现说明之三

混沌工程工具-阿里ChaosBlade的实现说明之三

时间:2024-12-16 09:41:59浏览次数:3  
标签:101.201 seq 之三 混沌 210.163 time icmp ChaosBlade response

今天描述下它是怎么实现的网络丢包和延时的。

丢包模拟

模拟丢包

[root@7dgroup2 chaosblade-0.2.0]# ./blade create network loss --interface eth0 --percent 50
{"code":200,"success":true,"result":"c29053229c16c839"}
[root@7dgroup2 chaosblade-0.2.0]#

丢包效果

(base) GaoLouMac:~ Zee$ ping 101.201.210.163
PING 101.201.210.163 (101.201.210.163): 56 data bytes
64 bytes from 101.201.210.163: icmp_seq=0 ttl=50 time=95.615 ms
64 bytes from 101.201.210.163: icmp_seq=1 ttl=50 time=78.823 ms
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
64 bytes from 101.201.210.163: icmp_seq=4 ttl=50 time=127.879 ms
64 bytes from 101.201.210.163: icmp_seq=5 ttl=50 time=123.282 ms
64 bytes from 101.201.210.163: icmp_seq=6 ttl=50 time=129.193 ms
Request timeout for icmp_seq 7
Request timeout for icmp_seq 8
64 bytes from 101.201.210.163: icmp_seq=9 ttl=50 time=123.712 ms
Request timeout for icmp_seq 10
64 bytes from 101.201.210.163: icmp_seq=11 ttl=50 time=36.746 ms
64 bytes from 101.201.210.163: icmp_seq=12 ttl=50 time=114.155 ms
Request timeout for icmp_seq 13
Request timeout for icmp_seq 14
64 bytes from 101.201.210.163: icmp_seq=15 ttl=50 time=91.469 ms
Request timeout for icmp_seq 16
64 bytes from 101.201.210.163: icmp_seq=17 ttl=50 time=56.911 ms
64 bytes from 101.201.210.163: icmp_seq=18 ttl=50 time=113.380 ms
Request timeout for icmp_seq 19

模拟丢包的代码实现

// addQdiscForLoss
func addQdiscForLoss(channel exec.Channel, ctx context.Context, netInterface string, percent string) *transport.Response {
// invoke tc qdisc add dev ${networkPort} root handle 1: prio bands 4
response := channel.Run(ctx, "tc", fmt.Sprintf(qdisc add dev %s root handle 1: prio bands 4, netInterface))
if !response.Success {
// invoke stop
stopLossNetFunc(netInterface)
bin.PrintErrAndExit(response.Err)
return response
}
response = channel.Run(ctx, "tc", fmt.Sprintf(qdisc add dev %s parent 1:4 handle 40: netem loss %s%%, netInterface, percent))
if !response.Success {
// invoke stop
stopLossNetFunc(netInterface)
bin.PrintErrAndExit(response.Err)
return response
}
return response
}
通过以上代码,可以看到ChaosBlade是通过traffic control添加过滤器队列、分类、过滤器来实现的。也就是tc的netem loss。

关于traffic control的原理和操作方法,可以参考《性能场景之网络模拟》。

模拟网络延时

模拟网络延时

[root@7dgroup2 chaosblade-0.2.0]# ./blade create network delay --interface eth0 --time 3000
{"code":200,"success":true,"result":"b9e568d93dcbb5cb"}
[root@7dgroup2 chaosblade-0.2.0]#

模拟效果

(base) GaoLouMac:~ Zee$ telnet 101.201.210.163 9100
Trying 101.201.210.163...

// 这里有三秒的延时

Connected to 101.201.210.163.
Escape character is '^]'.

模拟延时的代码实现

func startDelayNet(netInterface, time, offset, localPort, remotePort, excludePort string) {
ctx := context.Background()
// assert localPort and remotePort
if localPort == "" && remotePort == "" && excludePort == "" {
response := channel.Run(ctx, "tc", fmt.Sprintf(qdisc add dev %s root netem delay %sms %sms, netInterface, time, offset))
if !response.Success {
bin.PrintErrAndExit(response.Err)
}
bin.PrintOutputAndExit(response.Result.(string))
return
}
response := addQdiscForDelay(channel, ctx, netInterface, time, offset)
if localPort == "" && remotePort == "" && excludePort != "" {
response = addExcludePortFilterForDelay(excludePort, netInterface, response, channel, ctx)
bin.PrintOutputAndExit(response.Result.(string))
return
}
response = addLocalOrRemotePortForDelay(localPort, response, channel, ctx, netInterface, remotePort)
bin.PrintOutputAndExit(response.Result.(string))
}
通过以上代码,可以看到ChaosBlade是也是通过traffic control添加过滤器队列、分类、过滤器来实现的网络延时。也就是tc的netem delay。

也即是ChaosBalde是通过将tc来实现的模拟丢包和延时

标签:101.201,seq,之三,混沌,210.163,time,icmp,ChaosBlade,response
From: https://www.cnblogs.com/wyx321/p/18609277

相关文章

  • 混沌工程工具-阿里ChaoBlade的实现说明
    根据混沌工程的principles,里面这样定义了:ChaosEngineeringisthedisciplineofexperimentingonasysteminordertobuildconfidenceinthesystem’scapabilitytowithstandturbulentconditionsinproduction.中文翻译是这样的:混沌工程是在分布式系统上进行实验......
  • ChaosBlade-Operator使用之一模拟POD丢包场景
    ChaosBalde-Operator实现说明ChaosBlade-Operator是ChaosBlade的K8s平台场景的实现。将混沌实验通过Kubernetes标准的CRD方式定义,用户可以像定义Deployment或StatefulSet那样定义ChaosBlade实验,只要对kubectl和Kubernetes对象有所了解,就可以轻松的创建、更新和删除......
  • C语言之三种循环高级
    (1.)无限循环定义循环永远停不下来(注意点:无限循环因为永远停不下来,所以下面不能再写其他的代码了)(2.)跳转控制语句定义在循环的过程当中,跳到其他语句上执行break不能单独书写,只能写在switch,或者是循环中,表示结束,跳出的意思题目:在1-100之间,找第一个既能被3,又能被5整除的数......
  • 在STM32上运行KWS之三 模型搭建与训练测试
    此篇文章在2023年2月6日被记录搭建一个怎样的模型KWS模型结构属于比较简单的模型结构,但是为了少走弯路,我计划使用现成的结构,我从这个演示视频参考而来:点击我跳转,这个KWS项目运行在AT32F403上,其网络模型结构为一个64个特征的普通卷积层,然后重复四次的DS-CNN卷积,在每次卷积后都......
  • 神经网络入门之三 C环境部署
    此篇文章在2022年12月5日被记录入门神经网络三C环境部署为什么要部署到C环境上面两篇文章中,我们详细讲解了采集样本与样本训练,生成了一个模型文件,经过测试我们的模型成功率在90%以上,但是我们想将这个模型利用起来,实时检测我们的运动姿态,在ESP32上运行torch显然是不现实......
  • 基于改进自适应分段线性近似(IAPLA)的微分方程数值解法研究: 从简单动力系统到混沌系统的
    微分方程作为一种数学工具在物理学、金融学等诸多领域的动态系统建模中发挥着关键作用。对这类方程数值解的研究一直是学术界关注的重点。数值方法是一类用于求解难以或无法获得解析解的数学问题的算法集合。这类方法主要处理描述函数在时间或空间维度上演化的微分方程,采用逐步计......
  • 笔记:FHQ Treap 之三分裂
    小知识点,但是好像没什么人写,所以写一篇。在NOIP之前积攒一点rp。需要的知识平衡树(FHQTreap)前言一般在写FHQTreap的时候,都是按照某个值或排名\(k\),将Treap分成小于等于和大于\(k\)的两棵树,我们将其称为二分裂。那么,所谓三分裂,就是将Treap按照小于、等于、大于......
  • hadoop初学篇之三——公网全分布式部署主机IP导致的问题
    不管是内网集群,还是公网集群(当然一般情况不会这么做),建议这个步骤都不要忽略。内网不一定会出现这个问题,但是公网不做肯定有问题!前提:在阿里云公网部署三台ecs,都有公网IP,内网有通有不通(测试公网所以忽略);按照全分布模式部署,按照JDK(8)、Hadoop(2.10),各种配置完毕,namenode格式化成功后,s......
  • 浅谈如何处理大语言模型训练数据之三开源数据集介绍
    随着最近这些年来基于统计机器学习的自然语言处理的算法的发展,以及信息检索研究的需求,特别是近年来深度学习和预训练语言模型的研究以及国内国外许多大模型的开源,研究人员们构建了多种大规模开源数据集,涵盖了网页、图片、论文、百科等多个领域。在构建大语言模型时,数据的质量和多......
  • python服务器/客户模型代码 之三
    python服务器/客户模型代码之三python的struct格式字符串格式字符串的第一个字符格式字符packunpackstruct数据传输struct.Struct(format)packunpackserver代码client代码辅助代码python的struct多个struct函数(Struct的方法)采用缓冲区参数。这个对象实现缓冲区......