高并发系统设计之开放平台API接口调用频率控制系统
先描述下基本场景: 系统API接口日均调用次数预计1亿次,提供5台服务器。 需要做两种层面的控制: > 单IP、单应用每小时调用次数不超过10000次 > 单应用、单用户、单接口每小时调用次数不超过1000次 要求每次对频控系统的调用的响应时间在20ms内。 此外,应用开发者和开放平台所属公司关心调用次数统计数据,如当天某应用所有接口被调用总次数、当天某应用某接口被调用次数、当天某应用用户使用数等。 根据上面,我们可以直接得到系统响应度要求和计算得到系统吞吐量要求,计算公式如下: 1 2 频控系统吞吐量(系统每秒能够处理的请求数) = 80% * 1亿 / (24小时 * 60分钟 * 60秒 * 40% * 5) = 4630tps 80%、40%是指一天中有80%的请求发生在40%的时间内,是粗略的估算值。5是服务器数量。所以得到吞吐量要求为4630tps。前期设计系统时必须参考 这些性能指标 ,后期压测系统时必须根据这些指标设计测试计划。 总结下系统设计需要达成的目标: 请求的响应足够快 能支撑4630tps 占用的CPU、内存等硬件资源不能太夸张(隐性设计目标) A、数据结构设计 计数是典型的key-value数据结构。 可能想到的最简单最自然的方式是下面这样的: 1 2 K(app_id, ip) => V(count, startTime, lastTime) K