项目总结,也是梳理思路,也是收获

大三开学的第一周,星期一结束了mini项目,总结一下mini项目吧

mini项目真的不错!

首先,之前几乎没有项目经验。对项目的看法,只能说相见恨晚。

题目是流量复制及回放

可以说这个题目除了跟学校的课程算法部分有重叠之外,其余很少有能够直接现用的知识。也就相当于这个题目只能通过自己去网上查找一些知识去了解和掌握这部分与之相关的内容。

非常感谢我们的导师能够提供给我们大致的调研思路和方向。在暑假期间就能掌握一部分与之相关的知识,不至于在4+期间过于“捉襟见肘”。

我们要实现的是:运维人员想要把机器B1,B2,...,Bn上的流量复制下来给到压测平台,让压测平台能够用这部分流量去更好的贴近用户请求地去执行压测任务。

我们的思路是:用一台机器A去控制B1,...,Bn。运维人员只需要控制A并且下发指令即可完成对应的操作。

经过调研后,我们发现了可以使用Goreplay。本事Go现在就是非常流行的语言,原生实现高并发,并且goreplay本身使用并不困难。--input和--output的使用,并且支持限流,流量放大和缩小、过滤(白名单和黑名单过滤),以及多地址重放等等。

一开始我们以为只需要实现复制并且回放成功就可以,结果后来增加了提取信息并且转换为csv格式的任务,于是压力就来到了提取信息和api的编写上。

我们api主要实现的是通信接口和前端的接口实现,主要使用的是Go语言的一些语法和gin框架搭建。api上可以实现基本的复制重放功能,并且支持一些额外功能,比如多地址重放,过滤作用等。

对于信息处理的部分,我们主要拿到的是一个gor文件(流量文件),http报文格式,规整非常。

而我们需要把里面的参数的信息提取出来,一开始感觉方法在模棱两可的边缘,差不多可以过得来。由于参数的值是不定长的:

比如:name:CloudyTenderness  也可能 name:millonsOfGender 长度不定。

 那我需要这个参数的值怎么办?

之前的算法中到没有接触过,之后了解了一下正则表达式,其实也恰好发现goreplay白名单的方法实现就是用的正则表达式过滤。主要其实也是因为http报文的格式规整,参数之间有一些特殊符号,部分有唯一性。用正则表达式进行大范围的筛取,然后进行修剪(因为golang不支持正向的零宽断言,无法直接获value)。后来发现引入修剪函数不单单为了剔除掉参数头,发现有些特殊情况http报文中的特殊符号不一定能够支持我们筛选成功。

具体这里就不展开了,但是思路就是用compile之后,拿到字符串按照要选取的规则进行摒弃或者保留,这里就只能具体情况具体分析了。正则表达式虽然强大,但是他的结果可能并不是我们需要的最终产品。在答辩的时候有位导师也说过,使用过正则表达式后,会带来另一个问题。这个部分我也发现了,在前期不断的测试、掌握正则表达式语法的时候,发现误取字符串时有发生,而且有时候结果是个不定数。另外关于错误匹配的问题,我其实想说:在不一样的东西(文本)条件下,可能会用不一样的方法去提取,但是关于流量文件,正是因为http报文,所以考虑正则表达式,由于有一定的误判性,引入了修剪函数,从整体的大块中去获取到需求资源,然后引入我们的判断逻辑,去把我们需要的部分留下,这是我对参数提取的思考。

另外关于这部分的方法目前除了正则貌似其他的算法不是很多,难点就在于我们在一个整体未知情况的报文中去获取一些小有规则的信息,比如整体的一个请求信息不定,不知道有多长,无法直接拿平常的算法去匹配。最后我们按照这个思路实现了功能,能够提取csv格式

之后我们进行了性能优化,读和写的速度均得到了提升和优化,分别大概提高了6倍、11倍。

最后,做项目可能感觉挺累,要耐下心来学东西,了解一些关于这个问题点的知识。但是正的学到东西,因为不去学就不会用,更别说要做成效果。所以整体上思路和语法知识是收获了不少。比如golang、并发、api的编写、正则等。难受之后才有成长,同时在项目的过程中也暴露了很多的问题,比如自己对哪方面的知识还比较薄弱和不了解不清晰。

越了解新的知识就越发现自己知道的少,这次经历对我启发帮助很大,希望今后能够多了解,而专精一部分知识。磨刀不误砍柴工,有些知识也都是相通的。

打算接下来抽时间再深入的看下操作系统和linux方面的知识,并且基于此再扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值