疫情之下,如何快速搭建部署口罩预约系统

avatar
产品与技术团队 @UCloud

​抗击新型冠状病毒肺炎的形势依然严峻且复杂,对于普通民众而言,口罩作为最基础的第一道防线,可谓是一“罩”难求。为了降低人员流动和聚集带来的交叉感染风险,保障口罩的供应秩序,各地政府部门相继推出了线上预约登记购买口罩的措施。口罩预约系统虽然看似功能简单,但由于上线时间紧迫、用户体量大、各地区的流程不统一等问题,如何在短时间内快速上线一套能够应对大规模并发、响应及时且支持弹性扩容的线上预约系统,成为各地政府部门面临的技术难题。

2月上旬,UCloud先后承接了宁波市余姚、北仑、海曙地方政府的线上口罩预约系统的上线。我们首先和余姚大数据局合作,在短短4个小时内完成了系统的部署上线。然后在余姚落地案例的经验基础上,帮助海曙区和北仑区部署了他们的预约系统,其中北仑区还采用了UCloud自行研发的口罩预约解决方案,目前三个系统均取得了很好的效果。本文介绍这次三个系统设计、开发、部署、上线的实战经验,供所有抗疫的有志之士参考。

UCloud公有云快速响应

传统IT模式下,开发部署一个业务,不仅初期服务器成本投入大,且设备采购部署周期冗长、不支持快速扩容。在紧张的疫情期间,形势不允许政府部门将太多的时间浪费在底层IT基础设施的搭建和业务的开发上。

2月5日,余姚市政府同意“口罩线上预约”方案后,该市大数据局联合UCloud一起迅速组织技术团队,连夜进行技术方案的商讨,经过12小时的共同努力,顺利完成了平台部署联调。测试通过后,于2月6日下午2:00开启了余姚市民口罩网上预约通道,并通过短信验证码等手段来确保合理发放。2月6日至9日共计发放12.5万个口罩,有效避免了人员的聚集。随后,余姚市政府于2月13日开展第二批申领口罩线上申领,通过UCloud和余姚大数据局合作进行的进一步优化,系统运行更为稳定高效、性能提升了十多倍。

同时,为了给宁波市北仑区提供完整的口罩预约解决方案,从2月5日接到其口罩预约系统需求开始,UCloud在第一时间快速组织了志愿者团队,承担了所有的开发、运维和监控工作。并结合当地政府的官方疫情通知,以及各区居委会、街道的具体需求进行开发。在经历了多次的线上沟通、数十个版本的更新和流量考验,整个口罩预约系统于2月6日完成开发,且经过一个晚上的紧急部署,就完成了整个口罩预约平台的上线,2月7日起向市民提供服务。全程只用了3天时间,响应速度之快得到了该区政府的充分认可。

思路:公有云成熟组件,加快开发部署

由于志愿者团队人数有限,在讨论清楚了业务需求和流程后,我们将系统分为前端、后端、数据库等诸多模块,分别进行模块化开发。

考虑到开发周期紧迫,而数天之内很有可能根据实际需求进行多次调整和迭代,我们决定充分贯彻DevOps理念,运用CI/CD流水线加强开发部署一体化,提升效率。

此过程中,UCloud公有云成熟的技术组件,帮我们节省了大量时间,例如运用UK8S产品,可以快速部署管理一套Kubernetes集群,而UDB和UES等,也令我们获得了触手可得的数据库和大数据分析组件,可以直接投入应用。

署管理一套Kubernetes集群,而UDB和UES等,也令我们获得了触手可得的数据库和大数据分析组件,可以直接投入应用。

这些举措最终帮我们在三天内迭代了50多个版本,如期完成了开发任务。

DevOps:简单系统也五脏俱全

我们先来看一下这个系统的部署流程图:

由图可见,此次口罩预约系统的部署包括了UCloud公有云服务中的UHost、UES、UK8S、MySQL UDB等:1. UK8S:3个Master, 4个Node以及由UK8S管理2个ULB ,分别对应了两个不同的域名,作为业务入口,并提供集群管理;2. UDB:MySQL 高配进程和低配进程各一,作为业务数据库;3. UES:负责收集日志;4. UHost:安装了Gitlab,负责代码管理。 由于整个系统的核心开发人员只有一个,为了节省开发成本,这里的代码开发全部在Master上进行,然后在Master节点上打tag进行集成和部署。数据库则拆分成两个实例和三个库,一个实例为最小配置,供开发用;另一个实例配了两个库,一个库对应生产环境,一个库对应性能测试环境。

口罩预约系统应用直接作为 Deployment部署到了 UK8S里,UK8S里分配了三个namespace,分别为preproduction、production和performance test。在 preproduction、production 两个命名空间里分别配置了LoadBalance类型的Service对外提供服务。而性能测试本身也是在集群内进行,所以performance test 的namespace只配置了Cluster IP类型的的Service。

另外还直接部署了ELK组件来收集UK8S系统的日志,这样部署完成之后,就可以直接在console上看到所有的UK8S系统日志。应用的日志则和UK8S系统日志分开,采用了单独部署的filebeat和sidecar的方式来收集。整个系统部署下来,基本上“五脏俱全”,且只用了短短的三天时间完成。

CI/CD:提升开发运维效率

本次口罩预约系统,我们还基于Gitlab/Gitlab Runner搭建了一整套的CI/CD。与UK8S里的环境相对应,最终流程为单元测试=》commit=》push=》tag,然后简单的在预发环境里自测一下,如果通过就在Gitlab Runner 里执行手工部署到生产环境的操作。

由于该系统的需求不固定,因此前端每改一个字都需要后端升级一个版本来进行修改。同时,为了紧跟相关部门的决策变化,业务调整的频率也很高。例如从用户购买口罩的逻辑来设计,有些地方按户来发放,就需要规范地址格式, 按地址唯一性来进行排重;而有些地方则以身份证作为唯一性来发放。因此,这套系统需要具备随时迭代发布的能力,而CI/CD流程的采纳设计正好解决了该问题。

最后,UCloud开发人员在三天时间里,且不需要运维支持的情况下,总共在三套环境里升级了50多个版本,持续部署了近百次,大大提升了开发运维效率。

公有云运营经验,确保系统平稳运行

从系统上线前夜至预约结束,UCloud技术团队全程提供技术支持服务,以确保该系统的稳定运行。具体措施包括:1. 系统运行数据全程监控,及时预警;2. 运营经验积累,科学规划容量;3. 公有云弹性扩容能力,实时无缝升级。

据了解,宁波市北仑区人口近70余万,网上预约开放前一晚,官方公众号正式发布预约通告。在2月7至9日早9:00,UCloud后台监控数据显示每天都有高达十余万人线上准时守候,等待进行口罩购买预约。且当天的1万只口罩在最快30秒内,就可全部被预约完毕。

经UCloud监控平台显示,该口罩预约系统高峰期时的流量超过了200Mbps(余姚市则超过800 Mbps),系统面临的业务压力超过了小型互联网公司的业务。UCloud公有云的海量带宽和弹性扩容能力在口罩预约系统高峰期时也得到了较好的验证。如下图所示:

得益于UCloud公有云服务的快速响应能力、海量带宽资源的弹性扩容能力以及完备的后台监控运维能力,宁波市北仑区顺利于2月7日至9日完成了第一批线上预约发放的3万只口罩。

总结

当下疫情的防控工作依然刻不容缓,各地政府、学校和企业为了进一步避免人群聚集的交叉感染风险,推动了在线城市管理、线上教育、远程办公等线上业务的大规模增长。UCloud将充分利用云计算技术做好底层IT支撑,快速响应用户的需求,保障疫情期间线上业务的快速构建和稳定运行。而技术团队此次实战,也证明了小团队可以利用UK8S等公有云成熟组件,快速形成战斗力,获得大收益。