本文 的 原文 地址
原始的内容,请参考 本文 的 原文 地址
尼恩说在前面:
最近大厂机会多了, 在45岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、shopee、百度、网易的面试资格,遇到很多很重要的面试题:
京东场景题:100Wqps 亿级用户的社交关系如何设计?如何查看我的关注,关注我的?
京东场景题: 美国总统选举,要设计一个选票系统,要求 100w tps,1000w qps,选票不可篡改,不可重复,获取我的选票结果,获取最终投票结果。问:接口怎么设计,系统怎么设计
前几天 小伙伴面试 京东,遇到了上面 两个场景题 。
但是由于 没有回答好,导致面试挂了。
第一题的答案如下:
京东场景题:100Wqps 亿级用户的社交关系如何设计?如何查看我的关注,关注我的?
今天尼恩给大家梳理一下第二题:
美国总统选举,要设计一个选票系统,要求 100w tps,1000w qps,选票不可篡改,不可重复,获取我的选票结果,获取最终投票结果。 怎么设计
通过此文,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。
当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典》V175版本PDF集群,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
美国总统选举,要设计一个选票系统,要求 100w tps,1000w qps,选票不可篡改,不可重复,获取我的选票结果,获取最终投票结果。
问:接口怎么设计,系统怎么设计
首先,尼恩给大家列三个 业界同规模案例对照
- 微博 Star 投票(春晚 2 亿用户):RedisBloom 布隆抗 80 W TPS,DB 仅 3 k QPS 二次确认;
- 支付宝春节红包(7 亿账户):分片布隆 + 异步 DB,峰值 120 W TPS;
- Google Safe Browsing(30 亿 URL):布隆 + 布谷鸟混合,只读场景用布隆,需更新场景用布谷鸟。
一、选票系统业务分析
1、业务场景与性能挑战
美国总统选举投票及结果查询具有显著的高并发与瞬时峰值特征,集中体现在以下两方面:
100万 TPS 高并发写(最后一分钟高峰) :
大量选民倾向于在投票截止前的最后时刻完成投票,形成典型的**“最后一分钟高峰”**。
假设约有5000万选民在最后一分钟内提交选票,基础计算如下:
峰值TPS = 50,000,000 votes / 60 seconds ≈ 833,333 votes/second
叠加网络延迟、系统重试及跨时区投票等因素,将设计目标定为100万 TPS 具备合理冗余,可应对极端情况下的洪峰压力。
1000万 QPS 极高 并发读(出票后集中查询) :
投票截止后,全球范围内的选民、媒体与机构会同时发起结果查询。
若有1000万用户同时刷新页面,且平均每个页面产生多个请求(总体结果、分州数据、图表等),系统总QPS将轻松达到千万级别。
此外,各类新闻客户端与数据平台的自动抓取行为会进一步加剧读取压力。
下图概括了投票与结果查询的核心流程及系统所面临的高并发场景:

2、核心接口与功能
系统需提供以下三个核心接口以满足基本业务需求:
| 接口名称 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 提交投票 | POST | /api/v1/vote |
处理选票提交,确保数据正确性与合法性,是系统最核心的写入接口。 |
| 查询个人投票结果 | GET | /api/v1/votes/{voter_id} |
允许选民通过身份标识查询自己的投票记录,确保投票透明性与个人可追溯性。 |
| 查询选举结果(实时统计) | GET | /api/v1/results |
向授权用户或系统提供实时统计结果,支持按地域、候选人等多种维度进行聚合查询。 |
3、关键业务要求
系统设计必须满足以下四项关键业务要求:
(1) 不可篡改:选票一旦提交并确认,其内容应成为只读状态,任何个体(包括系统管理员)均无法修改。
(2) 不可重复:必须通过业务与技术手段严格保证“一人一票”,彻底杜绝任何形式的重复投票。
(3) 选票可追溯:每位选民都应能查询到自身的投票记录,系统需提供清晰、可验证的审计链路。
<

最低0.47元/天 解锁文章
10万+

被折叠的 条评论
为什么被折叠?



