12小时上线“新冠肺炎同程查询工具”,开发者这样狙击疫情

2020 年 6 月 20 日

12小时上线“新冠肺炎同程查询工具”,开发者这样狙击疫情

“扩散!急寻这 235 个车次、航班同行人”


“紧急寻人!急寻 Z264、Z265 列车同行人!”


“急寻同行旅客,这趟到琼海的动车发现确诊患者”


……


新型肺炎潜伏期长则 14 天,春运高峰大大增加了疫情防控难度。一条条跳动在新闻上的患者同行信息,就是一个个防控疫情的关键节点。


狙击疫情,必须分秒必争!


信息不断更新,来源多样繁杂,如何让人们快速确认是否与新型肺炎确诊患者同行,从而迅速进行诊断和隔离?1 月 27 日,一款由几位开发者从上午 11 点紧急开发,到晚上 11 点已在朋友圈传播的“新型肺炎同程查询工具”就已上线——输入日期、车次以及地区,即可查询是否与已披露的确诊患者同行。



网站:http://2019ncov.nosugartech.com/


“有人是医务人员,所以他们去了;有人是警察,所以他们去了。我们是工程师,我们可以用自己的技能做一些力所能及的小事,希望可以帮到大家”。今天,阿里妹采访到成都无糖信息技术有限公司联合创始人兼 CTO,也是工具的开发者童永鳌。在他的故事里,我们看到了中国开发者的力量。



童永鳌在办公


工具上线后,累计访问量已突破 3500 万次,并获得人民日报的点赞转发。



做力所能及的小事,帮助大家共度难关



阿里妹: 能否简单介绍新冠病毒确诊患者同程查询工具的开发初衷?


童永鳌: 最开始的原因很单纯,就我自己有查询需求。我们日常接触到的疫情信息里包含寻找患者的同程者这块内容一般就是以图片为载体,一张图罗列了患者曾经搭乘过的交通工具、车次、日期等信息。通过图片逐条查找信息,一来是有可能看漏信息,二来是查找起来确实不太方便,每次都要从头查找。



作为一个程序员,我比较“懒”,一条条的去翻历史记录很麻烦,于是就想到把数据抠下来,用搜索工具去查找更加方便。


阿里妹: 工具开发团队是如何在短时间内建立起来的,团队里都是志愿者吗?


童永鳌: 最初的团队成员都是我自己认识十多年的老网友。我们原本就在一个群里,平时会闲聊。我看到央视的新闻之后,就在群里说了想要做个工具的想法。他们也非常支持,就直接开始做。团队中还有一个人是我公司的,因为工具需要运行维护,我就把公司的运维主管拉进来。也考虑过志愿者,但如果一开始公开招募的话,整个周期会很长。


最开始我画了一张简单的布局图丢到群里,把前端、后端、数据收集的工作安排出去就立马开始干活了。其实是一种很简单、粗暴的方式。后面陆续加入一些志愿者,他们看到工具之后,通过邮件的方式联系,并加入我们。我们再把这些志愿者拉到群里,他们协助我们收集整理数据。



最初大家在群里讨论工具时手画的简单原型图


阿里妹: 能否分享一下查询工具最开始的设计思路?



童永鳌: 工具本身用到的技术比较简单。先把网上现有的图片和文字内容统一做信息整合,放到数据库中。然后再做一个检索工具,就成了现在大家看到的样子。


一开始并没有想太多,总体思路很直接。有想法之后就立刻开始动手搭建网页。先是在网上查找公开的信息,交通工具就包含:火车、飞机、公交车、出租车等。所以,初步设计数据库中可能用到的这些字段。


接下来就是考虑用户可能会用什么方式来查询,查询的关键词等。我就把自己当成用户,假设自己使用这个工具的话,我需要查些什么?我想到的第一点是日期,先查询我哪天乘坐交通工具。第二点就是贴合车次做具体检索。另外是地区搜索,如果用户在某个位置,那么这个地区的火车、飞机等是否存在已确诊患者。


前面两点是后台数据库设计,最后就是界面设计。考虑完这两个设计,就直接开始动手做了。


阿里妹: 从开始到工具上线过程大概用了多少时间?上线后有哪些工作要做?


童永鳌: 开发大概用了半天,1 月 27 日 上午 11 点左右有了这个想法,下午 5 点左右,功能上基本就已经做好了。后来又花了 6 个小时整理数据,晚上 11 点就发朋友圈了。


后期维护上花费的时间比较多,团队成员每天都会花 17 个小时甚至更久来维护,这几天大家基本上早上 9 点到晚上 2 点都在工作。刚开始确实没想到数据会突然增多,信息量大了之后我们就要做一些功能上的加强,比如:处理数据流畅机制、改动代码以及回复网友邮件等。事情多又相对比较杂,但是每一件事情都必须仔细对待。


阿里妹: 开发和维护的过程中遇到过哪些挑战?


童永鳌: 最大的挑战来自于数据整理。这个工具在初版的时候,用到的数据是央视整理过的,数据是现成的,整理起来相对容易些。后期信息量越来越大,整理信息的难度也越来越大。现在我们也会靠自己去筛选信息。一方面通过爬虫做信息初筛,另一方面靠网友给我们反馈信息。我们会要求网友提供链接,把链接批量爬虫回来后,从链接中做一些信息提取的工作。从目前的数据来看,爬虫来的信息和网友提供的信息大概是五五分。


另外一个挑战来自于访问量的暴涨,完全没想到访问量会这么大。第二天访问量开始暴增的时候,最开始的版本架构就扛不住了。


阿里妹:能简单说下访问量的增长过程吗?面对流量暴涨,是怎么扛过去的?


童永鳌: 1 月 28 号是上线第二天,访问总量是 450 万。第二天晚上八点开始就是一个几何级数的增长,从一个小时 10 万访问量跳到 300 万。29 号和 30 号总量在 2000 万左右。


最开始用的是的朋友的服务器,一兆带宽 1G 内存。上线第一天,因为配置太低,无法容纳 100 人同时在线的访问量。后来就直接调用第三方的 CDN,我们嵌入远程资源,就不用自己扛资源访问的这一块流量。但随着访问量越来越高,我们发现单台服务器要扛千万级的流量很难做。


于是我们取了个巧,把页面和数据文件生成静态的。相当于把库里的数据生成一个静态的文件,再把页面和数据都放到阿里云的 OSS 上面。让阿里云的 OSS 对象存储去扛住高并发、高流量,我们自己就不用担心流量压力了。


阿里妹: 需要录入的信息大概多少?如何确保数据的准确性?


童永鳌: 总量在 500-600 条左右。最早的信息是 100 多条,现在已录入 300 多条。后端还没录入的信息大概还有 250-300 条左右,待录入的信息中包括重复的。


数据确认是一个漏斗状的筛选过程。网上搜集来的信息经过验证、去重后会越来越少。数据量大的时候用自动化方式采集,数据量小就可以直接通过人工采集。在审核步骤上大概过程是:初始线索 -> 网友整理 -> 内部人员整理(核实纠正普遍性错误)-> 内部人员录入(核实单条错误)-> 提交(审核单条错误)-> 复查(有原文链接失效或新闻报道后续修改的情况)。


后来人民日报推送工具的时候,他们帮我们重新把数据认真地再审核一遍。


对于信息我们会逐层把关,越到后面关键的步骤,数据把关人越少越好。人越多的话,犯错的可能性也随着增大。而且中间涉及到一个信任问题,特别是后面的审核的这个步骤,除了我最信任的朋友和公司的制作人,没让其他人介入。


在时间上,现在录入速度没有之前那么快了。因为我们对数据的准确性要求越来越严格,需要花大量的时间去核实。对我们来说,及时性排第二位,准确性才是第一位。


阿里妹:对工具的性能会做什么改进吗?


童永鳌: 现阶段最主要的还是后端数据,首先是准确性,其次是及时性。功能上并没有打算把它复杂化。如果有些新想法,可能会单独去做尝试。


当然,还是希望疫情能够早点结束,就不用考虑这些啦。


阿里妹:接下来会迎来一个返程高峰,有没有大流量的预备方案?


童永鳌: 我们现在已经不太担心高并发、大流量的问题了,主要是对数据的准确性要求更高。我们自己现在录入做数据的时候,感觉已经有点强迫症了,精神高度紧张,生怕敲了一个数字,需要反复确认。


阿里妹:这次疫情来势凶猛,你认为开发者的参与对于阻止疫情的蔓延起到了哪些帮助?


童永鳌: 这个比较难判断。假设我是工具的使用者,我也只是做个查询确认而已。至于它对疫情起到多大的帮助,我感觉不出来。我觉得医生是最有帮助的,而工具能够给大家提供一定的参考意义,我觉得就足够了。


这两天也收到一些网友的邮件,有的很简单,就四个字:谢谢你们。看着其实很暖心。


阿里妹:作为一个老开发者,有没有什么建议可以分享给同行?


童永鳌: 这几天也没有时间、精力想太多。我想,对于程序员来说, 写代码不能当成一份工作,应该当它是一个工具 。从这个角度,很容易想到做疫情同乘者查询工具,因为我只是拿一个编程语言来解决我自己想解决的生活中的问题而已,并不是说我要做一个什么项目,从产品角度去考虑这件事。


对开发者来说,建议他们尝试把编程变成了解决日常生活需求的一个东西,而不是单纯地看成工作去对待,可能就会有更多的东西好出来。


共抗疫情,我们能赢


“能做事的做事,能发声的发声。有一分热,发一分光。”疫情没有旁观者。感谢开发者们用科技的力量点亮星光。


在新型肺炎同程查询工具之外,阿里妹还看到了,GitHub 上的「wuhan2020」防疫信息收集平台,以及目前还在征集开发者的外来人员登记系统、消毒检查登记系统、学生健康报备管理系统、违纪举报系统、物资管理系统等项目。


我们诚挚邀请所有开发者集思广益,如果你有能帮助到战胜疫情的小工具、好想法,欢迎在下方留言。共抗疫情,我们能赢!


2020 年 6 月 20 日 18:37124

评论

发布
暂无评论
发现更多内容

音画同步体验有多好,来看看即构的自研互动白板就知道啦

ZEGO即构

在线教育 SVG canvas

字节跳动想招什么样的技术人?

池建强

C++ 一篇搞懂多态的实现原理

小林coding

c++ 编程 封装、继承、多态

C++ 手把手教你实现可变长的数组

小林coding

c++ 编程 数组

Go语言专家测试,80%的人第一题就挂了!

博文视点Broadview

go 云原生 评测

全球移动服务生态的暗涌与新机

脑极体

C++ 深入浅出工厂模式(进阶篇)

小林coding

c++ 设计模式 工厂模式

C++ this指针的理解和作用

小林coding

c c++ 指针

SpreadJS 纯前端表格控件应用案例:铭天预算执行系统

Geek_Willie

SpreadJS 预算执行系统

C++ static 与 const 的认识

小林coding

c++ 编程 static关键字

C++ 深入浅出工厂模式(初识篇)

小林coding

c++ 设计模式 工厂模式

数字货币钱包开发方案,加密货币钱包搭建

WX13823153201

数字货币钱包开发

「C++ 篇」答应我,别再 if else 走天下了可以吗

小林coding

c++ 编程 设计模式 编程习惯 编程风格

修改系统时间,导致 sem_timedwait 一直阻塞的问题解决和分析

小林coding

Linux 编程 问题处理

第二次推荐笔记:wolai

申屠鹏会

HTTP协议-进阶

Jaykey

HTTP 前端进阶训练营

C++ 一篇搞懂继承的常见特性

小林coding

c++ 编程 继承

优化教育体验 智微智能高品质录播系统

InfoQ_967a83c6d0d7

HTTP协议-基础

Jaykey

HTTP 前端进阶训练营

大数据技术发展(一):大数据技术的起源

抖码算法

Java 大数据 hadoop 大数据处理 大数据技术

C++ 赋值运算符‘=‘的重载(浅拷贝、深拷贝)

小林coding

c++ 编程 浅拷贝和深拷贝

从根上学习Git

书旅

git 工具 版本控制 版本管理工具

国内首家 ABM 营销技术服务商火眼云完成5000万元A轮融资

人称T客

2020大厂web前端面试常见问题总结

华为云开发者社区

CSS 响应式 浏览器 面试题 web前端

C++ 运算符重载的基本概念

小林coding

c++ 编程

精美前端UI(VUE)界面,ASP.NET通用工作流开发分享

雯雯写代码

工作流 可视化

为什么直播系统不用RTP协议

soolaugust

WebRTC 直播 RTMP rtp

让类/进程/脚本「单身」的方法

小林coding

c c++ Shell 设计模式 单例模式

超超超全递归技巧讲解,这次带你拿下递归

多选参数

数据结构 算法 递归 数据结构与算法

C++ 流插入和流提取运算符的重载

小林coding

c++ 编程

Web 全栈开发利器: 强大的在线 Cloud IDE

华为云开发者社区

Web python3.x 全栈 编码 CloudIDE

12小时上线“新冠肺炎同程查询工具”,开发者这样狙击疫情-InfoQ