大用户并发系统API设计心得

所谓的大并发,是指QPS,大于1000,日活跃用户量在千万级别的业务系统。
缓存就是其中的重中之重,没有缓存,分分钟数据库无法抗住系统压力,直接挂了,从而影响别的业务响应。
1、把这个API接口的所有数据库请求结果都缓存起来,当然缓存需要设计过期时间,在缓存存在的情况下,数据库的请求就大大减少,只有当过期的时候才会去请求一遍数据库,采用异步缓存,缓存结果是定期更新的,不会出现在过期临界点上的响应波动。
1、内存缓存,实际上就是一个map,封装过后可以设置有效期,首先尝试从cache中获取数据,如果获取的数据为空,则从数据库中查询结果,并放到缓存中去。这种策略非常简单,也非常有效。这种容易去出现的问题就是,缓存刚好过期时的并发请求都会集中请求数据库,这段时间API的响应会发生波动。
2、可以采用更复杂的多层次的缓存,如Redis缓存,本地缓存,文件缓存相结合的缓存策略。如每次接口返回的数据,做一个hash,使用一个内存缓存来根据接口传入的参数组合 ---->hash, 再通过hash ---->去获取相应的数据。这一层数据都存放在Memcache中。为了避免在Memcache中key的冲突,需要在统一的入口为不同的key,加上唯一的前缀,原理与java的包名体系类似。
取数时,首先参数组合,获取hash值,然后到内存缓存中获取结果,如果获取失败,则前往Memcache中查找结果,如果成功,更新本地缓存,如果依然失败,则只好去查询数据库了,查询数据库,得到结果后返回。如果仍然失败,读取本地文件内容返回。但是,将API结果写入文件有一定讲究,仅在API周期性更新时才写入。


2、时刻考虑性能问题
从接口请求,到接口访问结束,所有执行的代码都需要考虑能否进一步精简,减少代码的执行时间消耗。同时结合1的策略,多做一些防御措施,即使在各种出错,失败后,接口还是尽可能能返回结果。

3、与第三方系统交互的的优化,必须考虑到第三方的http请求是否会超时并hold请求,此时需要给对方的请求设置连接超时时间,读写超时时间,保护自己的程序。

4、API接口中的贴心设计,如何在移动环境下省流量
可以使用压缩格式传输数据。
还可以,如果此次返回的接口数据与上次相同,则可以和接收方约定,每次请求时带上上次返回数据的hash,服务端将接口的计算结果与上次相同,则不返回数据,直接返回请求的hash,这对于返回配置信息的接口非常的有用,告诉请求方接口数据没有发生变化,客户端无需更新,用户也省了流量。

5、与巨量用户相关的接口,监控是必不可少的,加上性能统计模块,有问题第一时间处理。

你可能感兴趣的:(API设计)