封面图片

代码人生

分享我的健康码开发经历 - 探索并理解健康码技术

新冠爆发之后的春节,刚过完年,我还在出租屋隔离,突然接到了领导电话,需要马上设计一个四色码的高并发架构图,1个小时候后开会讨论。四色码就是后来的健康码。


战斗

我并没有高并发的开发经验,接到任务的时候我还以为只是提供一个架构图参考。然后我就想到了使用es集群做数据查询,用nginx做反向代理和负载均衡。之前没有使用过nginx的反向代理,就迅速在电脑上验证了一下反向代理,验证可以之后,就开会了。然后我就把方案说了一遍,有同事提出了不同意见,觉得es没法满足插入和修改的高并发要求,但他也找不到更好的办法。开会的结果就是基本同意我的方案,让我惊讶的是,我需要实现它!

第二天就去公司上班了,提前结束了隔离。需要公司人力跟小区管委会的人打保票之后,我才可以去公司上班。大概3天时间上线了第一版健康码后台程序。期间,每天大概睡4个小时。部署到线上环境之后,现场的同事做了压测,我去睡觉了。第一次压测的结果在1万TPS左右,然后就正式上线了。

上线之后还算平稳,没出现过什么意外,优化和功能在慢慢增加,增加了ELK日志分析。后来的压测中tps都能保持在1.7万以上。对于一个2000多万常驻人口的城市,事实证明已经够用了,即使在出现疫情的情况下,很多地方都需要亮码的时候,也没有出现过崩溃,不可用的情况。

从ES的日志中可以看出,查询基本在1ms左右,并发高了之后,请求处理不过来,应该是CPU核心数不够用了。当时使用了8台作为ES集群,16G内存和8核处理器,1T的SSD。如果增加CPU核心数,TPS应该还能再高些。后来又增加了8台服务器,拓展了集群,但是发现请求打到新的ES机器上的数量比原来的机器少很多,到现在都不知道是什么原因。

之后看到腾讯的技术团队发了一篇文章,写他们是如何在健康码应用中使用ES的。我当时想想也有点自豪,我的能力可能进不了腾讯,但在处理实际问题时,和他们想到一起去了。

常态

一个应用开发出来能被很多人用,应该是每个程序员最有成就感的事情。我也很庆幸有这么个机会能参与一个很多人用的应用的开发。但是随之而来的是,不管你在哪,几点,你都得随时响应。而且我的角色没人能够替代。

所以,在外面玩的时候,我得背着电脑,在游乐园的草坪上,在海底世界的台阶上,在购物中心的椅子上,打开电脑,连上热点,去处理线上情况。晚上经常凌晨3点4点被叫醒,去查看线上是否存在异常,配合现场做压测。这种状态持续了一年,直到市里的健康码被省里的健康码替代。

经历了健康码之后,我对互联网大厂的工作就没那么向往了,我觉得我没法像做健康码这样一直处于这种7*24小时待命的状态。

积累

去应聘互联网公司的同学,经常被问到是否有高并发经验。很多同学就会吐槽,我不在互联网公司,怎么可能有高并发经验。我之前也没有高并发经验,也没有去过互联网公司。但我接到这个任务的时候,我没有觉得我不能做这个事情。

在开发健康码之前,我用过ES,知道它是基于内存的查询,查询速度很快,可拓展。我看过阿里大牛出版的《大型网站技术架构》这本书,知道了反向代理和负载均衡,了解了一些大型网站的架构设计。当然还有基础的java知识,网络知识,服务器知识。服务器和web容器、nginx这块的高性能调优,都是现学现做。能完成健康码的开发上线,平时的积累和现学现做各占一半吧。

讲点鸡汤的话,完成工作和满足学业要求,都只是完成了第一步。如果想要更进一步,就要跨出社会给你划定的范围,去接触,了解,学习和实践更多的东西。当机会来临时,就可以对自己说“来吧!我已经准备好了”。我们经常听到“机会留给有准备的人”,这话都是那些有准备的人并成功抓住了机会的人说的。而那些不做准备的人,永远无法理解这句话。

放弃

如果你想全身心投入到一件事情中去的时候,你有没有想过,为做这件事你准备放弃什么?如果没有,那么大概率这件事干不成。一个人每天就24小时,吃饭、睡觉、刷剧、带娃等等,每件事情都耗费时间精力。如果说还要干一件厉害的事情,那就不得不从之前的事情中挤出时间来,而且是要大量的时间和精力,那就意味着势必要放弃一些东西,比如打游戏,比如照顾家庭。

为了开发健康码,并保证它平稳运行,我最喜欢的dota2在那年都不玩了。DotA2通过这种方式被戒掉,我也是没有想到的。

锻炼

我有几个同事去了阿里,都渐渐开始了健身,经常看到他们在朋友圈打卡。我当时想的是,他们健身是为了保命。开发健康码的时候,我才发现,健身不一定是为了保命,也有可能是为了更好的工作。

那时候经常熬夜工作,咖啡不能一直喝,就通过keep去蹦蹦跳跳。发现运动完之后就不困了,比喝咖啡效果还好。以后夜晚的工作都会做几组keep来保持兴奋度。渐渐地,我意识到锻炼的重要性,健康码的工作完结后,我会经常性的进行一些锻炼。比如走路上下班,骑车上下班,减少开车的次数,时不时的做做keep。

去年在健身房办了个卡,周末去跑跑步。最近还入手了一个apple watch,每天合上三个圈,运动的动力更足。

最后

福格行为模型认为,要使人们行动起来,三个要素必不可少。第一,充分的动机;第二,完成这一行为的能力;第三,促使人们付诸行动的触发。 希望我以自己的经历,能让一些人获得勇气,去改变一下。

2023年04月23日
在初学者眼中,世界充满了可能;专家眼中,世界大都已经既定。--铃木俊隆