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

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

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

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

怎么设计后台架构?

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

10210 次点击
所在节点    程序员
79 条回复
krixaar
2022-02-18 10:43:11 +08:00
上面下文哪个小区哪栋楼哪个超市该黄了,先 update 社区登记居住在对应小区的 set 码 = 黄,然后 update 超市那个码几天内扫过的 set 码 = 黄,齐活。
运营商排查出来之后,把号码报过来,update 注册手机号码是这些的 set 码 = 黄。
错了?自己申诉,审核过了 set 码 = 绿。
上面下文了该绿了,set 码 = 绿。
谁敢做自动的,责任谁来承担?
jackmod
2022-02-18 10:51:33 +08:00
至少去过机关,去过家属院小区的手机必须是绿的
35qUgtm8i1i3tVZu
2022-02-18 10:57:38 +08:00
@murmur 是这样的 没毛病 还真以为是啥高科技呢。。 不扫=没去过
tabris17
2022-02-18 10:59:55 +08:00
你的问题里少了时间这个要素
documentzhangx66
2022-02-18 11:24:43 +08:00
1.某地崩掉不是技术问题,而是 kW 级别的总预算,最后分到设备与带宽上,只剩 xxW 。接任务的老板又不是傻子,不可能自己贴钱。落马那个 XX 也被没冤,收了 xxxW 回扣的。

2.这不是技术题,如果最初预算能全拿来堆设备,找个正经拿证的系统架构师来做设计,你就算用 Node.js 做也能扛下来。

3.B 站是在蹭流量。
mrgeneral
2022-02-18 11:24:43 +08:00
凡是提到「缓存」的**必须**解决延迟问题,想当然的说**延迟可以接受**的是不行的,万一有一个红码没及时更新,导致影响面扩大了,责任就是你的了。

这类工具要的是第一是**准确性**,第二是**稳定性**,最后才是性能优化。

如前面所说,这是一个社会题,技术特性反倒不是最重要的,大不了加机器。
caixiangyu17
2022-02-18 11:30:59 +08:00
这不是一个挺典型国外大厂的 system design 的题目么?为什么这么多人有疑问?挺好的结合实际项目的,按照 system design 面试的方法做就好了呀。除了任何一个 system design 都需要考虑的基础:数据库怎么选择 /设计,服务怎么分,api 怎么设计,各个组件如果有瓶颈了怎么 scale ,怎么做 data partitioning/sharding ,怎么做缓存,如果某个服务崩了怎么办,需不需要一些定时的 scheduler ,需不需要一些 message queue 配合 worker 来处理并发。还有一些特有的点,比如和地理位置相关的 geohashing 。挺好的一道题,被这么多人吐槽,话说国内面试没有 system desgin 轮么?
icyalala
2022-02-18 11:31:59 +08:00
"附近" 可以认为是手机基站,在相同时间区间连接的手机,不需要什么 geo
crackhopper
2022-02-18 11:34:00 +08:00
同意上面有有个人说的,考察快速检索两点距离。
我个人思路是:地图和时间分块。做一些过滤。
地图上,简单点可以四叉树;当然六边形网格更加适合。根据距离要求确定网格的粒度,这样可以快速排除掉无关的空间位置。
时间也是一样的,区间段。
通过时间和空间的快速过滤,可以避免大量无效的查询。另外上面的需要设计对应的数据结构,还要考虑边界。比如一个人正好出现在网格边界。所以检索的时候至少要找外圈一层的时空格子。这样过滤下来,剩下的数据量看看。如果还大再想办法过滤,如果不大随便就搞定了。

我理解标黄也不需要那么实时性,所以数据库读出来到内存,可以根据上面我说的数据结构分布式快速检索。检索做在内存里也 ok 了。

如果要实时性强,考虑缓存之类的。
hidemyself
2022-02-18 11:36:28 +08:00
@caixiangyu17 这才是正解,楼上在讨论什么运营商,什么国情,什么预算,路走偏了。
这种明显就是系统设计的题目,面试而已,又没让他们真的做
crackhopper
2022-02-18 11:36:30 +08:00
至于 HA 之类的,这种更类似个 batch job 。完成了刷入线上缓存或数据库。由展示端做对应的 HA 之类的考虑。
littiefish
2022-02-18 11:36:39 +08:00
学会压缩图片
murmur
2022-02-18 11:39:25 +08:00
@littiefish 人要学会分辨什么是段子
humpy
2022-02-18 11:42:08 +08:00
技术帖就聊技术,别说那些有的没的。

说说我之前做的类似一个项目的做法吧,查找指定时间指定区域内的经过的车辆。

原始数据是轨迹点(坐标、时间),因为数据量比较大,使用 hbase 存储,rowkey 设计为 reverse(yyyyMMddHH+geohash[8])。
查询时,计算出覆盖指定区域的 geohash[8] 集合,将查询时间段拆分为多条 yyyyMMddHH ,然后组合成查询 rowkey ,通过 hbase 前缀扫描,初步筛选出数据,然后再做精确匹配。

健康码这个也类似,拿到红码的轨迹点,然后挨个点定时定位查找轨迹区域内的其他轨迹点就行了。
murmur
2022-02-18 11:42:13 +08:00
@hidemyself ??所以这个面试有什么意义

gov 推送数据-健康码缓存-读取展示数据,中间有任何难度么

真正导致卡的原因
1 、他连缓存的 CDN 钱都不肯出
2 、地铁、写字楼等地方密集打开健康码,直接导致附近 4g 压力剧增
3 、健康码用途不单纯,带有其他功能吗,增加了数据量,比如核酸、口罩、还有对接种疫苗奖励的小花花
murmur
2022-02-18 11:46:55 +08:00
@humpy 是你们在对技术理想化,吹牛逼化,健康码从广州来看,就是谁扫谁黄,别人都打电话叫你核酸了,码还是绿的,就是最简单的证明

健康码说实在的就是个摆设,他都不去看这谁的码,是图片还是码,有意义么

除非全市全区大范围变色,没什么意义,你永远不要低估我国为了防疫在背后的行动

真正的防疫过程是

核酸第一次可疑-封闭相关场所-二次确诊-隔离你的亲朋好友还有同事、你去过的地方的工作员工-附近区域大范围核酸筛查-全区或者全市核酸筛查
wangyzj
2022-02-18 11:50:54 +08:00
我怎么感觉这不是一个技术问题
是一个产品问题
westoy
2022-02-18 11:52:44 +08:00
这问题就跟面试的时候问怎么设计电商系统 100%不发生超卖, 但是京东这种头部电商明明是会发生超卖然后通过市场机制解决的.....

真实案例. 我朋友, 俩口子开车路过市立医院门口那条路, 一个黄了, 一个还是绿的.........所以只要放下 100%的执念, 就能海阔天空.......
xuanbg
2022-02-18 12:03:26 +08:00
把所有红点范围内的记录找出来,再在找出来的记录中把人找出来,再把这些人的绿码变成黄码。
xuanbg
2022-02-18 12:04:37 +08:00
@westoy 电商不超卖是程序员的执念,老板根本就不同意好不好。

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

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

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

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

© 2021 V2EX