优化健康码读写速度的面试题

2022-02-18 09:21:33 +08:00
 fyooo

对于一个地区海量用户,有 3 种状态:红码 /黄码 /绿码。

  1. 如果特定地方出现红码,会根据地理位置把附近用户状态设置成黄码
  2. 经过一段时间,清零后,黄码变成绿码

怎么设计后台架构?

昨天在 B 站刷到的推荐,有点意思,跟同行探讨一下

10237 次点击
所在节点    程序员
79 条回复
gps949
2022-02-18 12:26:17 +08:00
一个参考方案 [ [官方双语] 接触者追踪一定会牺牲隐私么?-哔哩哔哩] https://b23.tv/leo5niI

四点原则:
0 、健康码只是尽可能降低传播风险的辅助手段,目的不是 100%消除风险;
1 、健康码状态不应是实时的,应该存在“有效期”、“窗口期”;(类似数字证书 CRL )
2 、数据尽可能本地处理、点对点处理;
3 、验证、扫码尽可能点对点处理,尽可能核验方单点、稳定、安全的网络连服务,而不是被核验方多点、不稳定、不安全的网络连服务;
murmur
2022-02-18 12:31:20 +08:00
@xuanbg 没事的,可以砍单,所以有了 pdd
hidemyself
2022-02-18 12:40:56 +08:00
@murmur
面试是用来筛选候选人的不是吗?
候选人给出方案,面试官针对提出问题,候选人给出后续的想法,面试官根据候选人的方案,思考方式,思路来评估这个候选人是不是要的人,这就是意义。

正如国内很多公司会问,如何设计一个秒杀系统,如何设计一个排名系统,如何设计一个抽奖系统,如何设计一个健康码系统?

他关心的是方案和解决问题的方式,你列举的卡的原因,怎么去解决,如果出现别的问题,怎么去解决,这些都是可以用来考验或者说区分候选人的。

至于怎么防疫,行政层面怎么操作,这些和主楼的问题有关系吗?
主楼只是提出“怎么设计后台架构”这样一个问题,方案是方案,跟你的实际操作其实并没有多大关系
sobigfish
2022-02-18 12:50:25 +08:00
geohash 了解一下
一个 query 就能搞定
zliea
2022-02-18 13:13:19 +08:00
数据来源:
1. 运营商的时空轨迹数据:运营商负责大数据筛查,定时发到大数据局
2. 交通数据:交通部门定时发到大数据局
3. 扫码数据:大数据局人工手动设置
4. 宾馆住宿的民政数据:民政部门定时发到大数据局
这些数据全部都是进行跑批异步的去设置人员状态。

加速:
1. 短时间(比如 30 分钟)人员状态缓存,防止多次重复查询
2. 传输是不要传图片,传值和颜色,图片由前端生成
3. 小程序都是静态资源存到腾讯 /阿里里,一般不用考虑 cdn
Felldeadbird
2022-02-18 13:14:35 +08:00
1. 后台计算。
2. 后台录入。

所以健康码读写速度,这个不是解决并发问题吗? 提高带宽、解决 IO 读写,优化结构,本地和线下缓存。
disk
2022-02-18 13:40:35 +08:00
我这核酸登记的入口今天卡了好几次,感觉就是数据库扛不住了
wangxin13g
2022-02-18 14:03:43 +08:00
皇帝家的锄头一定是金的

管你多少人加缓存加队列这种 "加一层"o r 改异步的思路都够解决大部分问题了。你能想到的,稍微有点经验的外包会想不到?
murmur
2022-02-18 14:06:33 +08:00
@wangxin13g 技术就这么简单

但是真的是舍不得给钱买带宽

广州现在也就地铁查码比较严格,其余的地方都睁一只眼闭一只眼,有时候医院的保安去休息也是随便进,只查门诊不查住院部,口子大开

然后有人就问了,艹就这一个破码为什么这么卡

以广州健康码为例,这 app 包括了

健康码、口罩预约、核酸监测、疫苗预约、自查上报、购药、公积金、社保、医保......
murmur
2022-02-18 14:07:17 +08:00
也就是说平时这个码的流量真不大,只有疫情严重严查才会有巨大并发
wangxin13g
2022-02-18 14:08:39 +08:00
@murmur 是 我目前知道的几起问题都是因为带宽 负载,实际上软件层面的问题并不多。
cybird
2022-02-18 14:14:47 +08:00
@murmur 人家在问这种面试题如何回答、system design 如何做比较可行,你搁这一口一个瞎胡闹,一口一个啥意义,那你可以选择不回答这个问题,或者是 block 楼主,而不是在这说一些毫无意义的话
encro
2022-02-18 14:19:19 +08:00
想知道红 A 遇到绿 B ,
绿 B 再遇到绿 C ,
最后 C 会不会黄呢?
murmur
2022-02-18 14:21:41 +08:00
@cybird 他提供的视频本身就是个广告,既然带广告性质,参考性不大,而且哪里说设计后台架构不考虑业务纯纸上谈兵的
tairan2006
2022-02-18 14:28:23 +08:00
这个题目确实不难…服务端峰值状态用 k8s 自动扩容就行;当然基站过载的问题软件解决不了。。

人员轨迹如果有时序日志数据的话(估计有多数据源综合的问题),用地理位置配合计算即可。历史数据跑个批处理,实时数据直接流处理出结果。

至于只说 geohash 的…在系统设计题目里,估计拿不到什么分。
rizon
2022-02-18 14:43:02 +08:00
1. 传染
点:一定空间范围内的人构成一个点。

传染:一旦一个人变色会创造一个感染体,这个人所在的点会被感染。该点会开始向周围一级路径上的其他点进行传染。
每次传染,感染体的传染能力会下降。
传染源不会再被同一个感染体传染。

2. 空间移动
由运营商定期上报更新,个人的位置从一个点转移到另一个点之后,会根据所在的点更新自己的状态,进行同化

3. 自愈
如果一个点在一段时间内不被感染,该点会进行自愈。

4. 投石子
一旦有确认的情况,这个人会导致自己所在的点变色,于是湖里扔下了一颗石子。
rizon
2022-02-18 14:48:13 +08:00
@rizon #56 我跑题了。
但是去掉我上面说的怎么计算感染这个逻辑之后。
健康码就是一个纯粹的高并发读操作查询问题,而且还不需要做全国范围的。。。
banmuyutian
2022-02-18 15:06:06 +08:00
@murmur
面试官想考察你的系统设计能力,你去跟面试官扯社会问题吗
marcong95
2022-02-18 15:19:31 +08:00
考虑到题目是「优化」健康码,而不是「设计」健康码,如果你是在广州的话,所有谈到地理信息的目测都可以挂掉了。

粤康码、穗康码都没有收集定位信息,哪里来的地理位置你算。在这个系统里面,真的 LBS 的估计就只有通信行程卡。
h82258652
2022-02-18 15:20:48 +08:00
就是系统设计,你能把你的方案说出来说服面试官就行了。
上面说 k8s 的,那是运维层面了。
之前我面试也被面过哈里发塔电梯系统设计,当时也是想到什么说什么,后来一查,有个屁标准答案,电梯算法到现在都是个难题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/834691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX