两道系统设计题:
1. API rate Limiting
系统有模块A、B、C、D各模块的处理能力不同,A模块只能支撑100QPS,B能支撑200QPS,C能支撑300QPS,D能支撑400QPS。
设计一个通用限流模块支持A、B、C、D的并发能力。
2. 短链服务
微博或者短信都有单条发送字数的限制,如果需要分享一个长网址,很容易越出限制,短链服务可以将长网址变成短网址,方便传播。
请设计一个短链服务,要求短网址尽可能短,且保证系统安全和并发能力。
这种系统设计题第一次很认真的写了,之前遇到类似的系统设计题是在CVTE,那个时候没什么思路,但今天我感觉写的也不一定好,我从接口的参数、返回值、逻辑,以及使用的技术栈进行考虑。
第一题我的思路:
参考Java中线程池的思想,我在接口参数中,允许开发者传入最大QPS,公平策略,拒绝策略,队列
使用Redis、MySQL、Quartz以及Zookeeper作为技术栈
具体的使用逻辑:因为计算QPS需要根据访问量以及时间快速计算,所以使用Redis
模块的QPS以及一些日志需要使用MySQL持久化到硬盘中,方便复盘
Quartz跟Zookeeper用来做分布式定时任务的,定时将Redis的数据存入到MySQL中
当QPS达到最大允许QPS时,启动公平策略、拒绝策略即限流
第二题,
没有思路。。。。随便写了写
全部评论
(2) 回帖