中国软件杯 Archives - Frank's Weblog https://nyan.im/p/tag/中国软件杯 Wed, 07 Feb 2024 07:36:41 +0000 en-US hourly 1 202142309 记第六届中国软件杯决赛 https://nyan.im/p/china-software-cup https://nyan.im/p/china-software-cup#respond Tue, 19 Sep 2017 23:14:34 +0000 https://nyan.im/?p=3014 经过7月份的初赛,我们成功晋级了中国软件杯的决赛。9月4号,我们启程前往南京参加决赛。 关于比赛:大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办 我们的赛题:安全可靠赛题2:分布式爬虫系统 – 六届赛题 – 大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办 第一天 签到 9月4号,正好是学校开学第一天,我们一大早出发前往南京。第一周的课就先翘为敬了。 我们的车次是刚上线运行不久的复兴号,有车载WiFi,看了下IP应该是移动的4G,速度很良心。而且小桌板比和谐号更大,简直是为了车上赶代码量身定制的(误。 我们的题目是A10分布式爬虫系统。路上全程在做之前还没有完成的功能,还有写作品简介,参赛心得等等。 中午过后到了南京信息职业技术学院,我们住宿的学校。跟着志愿者去签到,办入住等等。 我们住的宿舍,条件算不上很好,不过也说得过去。主办方很良心,在宿舍里给我们准备了脸盆,热水瓶,衣架等生活用品。 主办方发的原谅色的参赛衣服。要求比赛期间必须要穿,但是这个颜色实在太丑了些。 南信院的食堂,伙食还不错。 突然撸猫。学校里有超多猫和狗,而且都不怕人。 晚上回到宿舍,部署了一下开发环境,然后开始继续赶代码。临近比赛的时候已经不想再动爬虫的架构了,做了一些像是数据可视化之类的展示性功能。我们用京东上面爬下来的1w多条数据做了商品分类图,还有各个手机品牌的评价和销量的散点图。图上最大的那个圆是小米= = 忙活到了晚上快两点,把代码、文档和一堆文件打包刻盘,然后睡觉。 第二天 设备调试、开幕式 第二天起了个大早,出发去位于南京国际博览中心的场地。我们住宿的学校和比赛场地分别在南京的西南角和东北角,单程大概一个半小时左右,真是头大。 到了我们的比赛场地 —— 南京国际博览中心5号馆。上午的安排是设备调试,但是因为场地上的电和网络直到将近11点才可用,整个现场一团糟。虽然我们受影响不算很大,但是有的队伍是涉及到网络的赛题,没有网络几乎没办法运行,还有的队伍用的是台式机,电时不时断一下就太要命了。 因为过于闲得无聊,我开始把我们的爬虫对新浪博客做适配。我们的爬虫是自己编写的框架,但是之前只对京东做了适配。因为比赛同时要求可以爬取电商和博客,就顺便把新浪博客也适配了,反正工作量也不大(FLAG)。 我新开了个experimental分支,开始做新浪博客的适配。结果一发不可收拾。我做了新浪博客的适配之后,发现需要新增一个Redis队列,但是原来的Redis配置都是写死在一个Python模块里的,所以需要把Redis的模块抽象成一个类;然后我发现原来的多线程的架构对于爬取新浪博客来说简直慢得不可思议,所以改成了单线程加多个celery worker的模式;再测试的时候,我发现新建任务时,任务只能分发到一个worker上,所以我需要使用celery的广播机制将任务发送到所有worker…一次改动牵出了一大堆的问题,直到在前往南航的车上我还一直在改,而且在评审前一天还在大改架构,多少显得有些作死。 下午是大赛开幕式,规格不小,来了一堆省部级的领导,还有倪光南院士。内容基本是各种领导致辞,还有南航学生演出的尬歌尬舞尬剧。 开幕式之后回到宿舍,继续处理上午没有处理完的问题。因为我也没有太大把握能够解决问题,我们商定如果到晚上11点半仍然不能解决,就停止开发,并回滚到一个能够运行的tag,然后开始测试和演练。 不过运气还不错,问题很快就解决了,比想象中顺利很多。celery广播任务的问题我通过将broker从Redis替换为RabbitMQ解决了,但是由此引发了使用revoke命令无法停止任务执行的问题,我通过在revoke函数的参数中添加signal='SIGKILL'解决(默认为SIGTERM)。 之后把剩下的工作收了个尾,简单计划了一下演示的内容,然后演练了几遍,睡觉。 第三天 第一轮评审 到了比赛场地之后,因为昨天的网络和电力问题,我们有了额外的一个半小时调试时间。 然而 因为赛场提供的WiFi网络实在太慢(在赛场提供的网络下,我们的爬虫爬取一个页面的时间大概是我们测试时的5-10倍),大家都纷纷用4G开WiFi热点,结果导致2.4G频段拥挤不堪,甚至移动的4G网络都几乎无法使用,比赛群里一篇哀嚎。在尝试几次之后,我们用联通4G手机开了个5GHz的热点,才终于得到了还算满意的网速。 上图是2.4GHz的车祸现场,拥挤到几乎没法使用。心疼做智能家居题目的队伍。 我们几乎是最先开始评审的。我们演示了单进程爬取京东,然后大致讲述了一下设计思路。之后了启动10个进程,演示分布式爬取京东和新浪博客。同时演示正文抽取的三种算法。最后展示了京东和新浪博客的抓取历史记录查询,及京东爬取到的数据的可视化。 演示期间评委似乎不太关心架构设计和技术细节,也不关心在赛题中着重强调的性能,调度算法等,而更多关注成品的功能如何。评审过程中几乎只有一个女老师在和我们互动,其他评委一直在边上默默地听。评委向我们提问了大概两个问题,一个是关于我们的作品中使用了哪些开源项目或工具,另一个是关于docker相关技术。 演示结束过后,其中一个女老师又折回来查我们的文档。翻了翻过后告诉我们文档还是有些问题。这确实是我的锅,因为我把设计和实现混杂了,在设计里面写了很多实现细节。而且自从初赛作品提交过后,我们的文档就没有更新过。 评审完过后,去围观了一下别的队伍 这个队伍的题目是商业大数据的WiFi探针,桌上是一个树莓派集群。 然后去隔壁的软博会转了转 人工智障机器人。我问他明天南京的天气怎么样,他回复我说明天见哦… 摩拜单车的展台。展示了摩拜的历代智能锁和几辆技术验证车。 第二天的答辩需要做ppt,而且因为我们的文档仍然是初赛时候写的文档,所以需要大改。由于晚上才能知道能否晋级,我们决定等知道结果之后再开始做ppt,到了宿舍开始摸鱼,然后不知不觉就睡着了。凌晨一点的时候被志愿者的电话叫醒得知晋级。我们到签到点去抽了签,回来开始整理文档,做ppt和演练,一直忙活到4点。 第四天 答辩 今天是最后一轮答辩,将会从中决出第二批二等奖和特等、一等奖。 我们抽到的是19号,基本上要排到下午了。上午一边赶讲稿,一边听其他组的答辩。答辩的模式是6分钟演讲+4分钟提问。6分钟的演讲时间实在很紧,能讲完的队伍是少数。在我们之前只有一组爬虫,队伍名字叫迷。这一组把自己的作品放到了github上,博客上也写了非常细致(你简直想象不到有多细致)的开发日志和文档。 我们的演讲分为项目背景、架构设计、技术难点、核心优势和总结几个部分,排练时将时间控制在5分半左右。但是答辩并不顺利,6分钟的时间实在太紧,而且我讲架构设计部分的时候卡了几次壳,耽误了一些时间,以至于最后一页ppt没有讲完。 评委提问的第一个问题是关于爬虫的判重和反反爬机制。判重的问题很好回答,只需要利用Redis的集合功能,将每一个网址计算hash之后添加进集合即可。关于反反爬问题,我回答的是在请求中使用随机UA以及通过分布式的多个IP来避免被爬取目标封禁。这个回答显然不够好,因为随机UA并不能为反反爬带来很好的效果,而且受条件所限,我们也没法实现真正的分布式部署。比较合适的方案是代理池,但是优质的代理资源并不好收集。第二个是关于持续部署的问题,但是由于音响问题,我们在台上完全听不清楚评委的提问,场面一度很尴尬。 第五天 […]

The post 记第六届中国软件杯决赛 appeared first on Frank's Weblog.

]]>
https://nyan.im/p/china-software-cup/feed 0 3014