请问php程序如何避免超过亚马逊商品api每秒1次和每分钟2000次的限制呢?

2013-06-29 10:52:23 +08:00
 lusin
访客的请求可能瞬间增加,如何不超过api的限制呢?
6370 次点击
所在节点    PHP
15 条回复
dndx
2013-06-29 11:01:07 +08:00
如果大多数访客会访问重复的商品,缓存。

否则只能找亚马逊提高限额。
msg7086
2013-06-29 12:24:45 +08:00
每秒1次,每分钟2000次,1分钟多少秒来着

每秒1次,一天就能有几万次。商品才多少个……重复数据当然直接缓存。

另外可以通过多个apikey和多个源IP来绕开限额
lusin
2013-06-29 13:13:30 +08:00
@msg7086 不是一天几万不够用,是担心超限引起其它不必要的麻烦

想知道,一秒内比如有五个访问,如何通过程序限定每秒调用一次,比如每次调用的时候设定一个时间戳,下次调用的时候如果未超过一秒就不调用
zorceta
2013-06-29 13:18:50 +08:00
@lusin 存队列 每隔一秒取队列执行
jackyz
2013-06-29 14:20:23 +08:00
比如,不用api?
horsley
2013-06-29 14:31:09 +08:00
sleep 消息队列
msg7086
2013-06-29 14:32:55 +08:00
@lusin 考虑多买个IP来做balancing。另外超过的话应该就是返回错误代码吧,4xx或者5xx之类,应该不会有其他什么大问题。
013231
2013-06-29 14:36:18 +08:00
我不瞭解亞馬遜商品API, 不過我很好奇為什麼有每秒1次和每分鐘2000次這兩個限制. 有了每秒1次限制, 每分鐘限制應該<=60呀.
yfdyh000
2013-06-29 15:25:58 +08:00
存队列,延迟、合并请求。没用过,猜测楼主想说每分钟2000项。
suren1986
2013-06-29 16:00:50 +08:00
用redis实现一个锁,抓页面之前加锁,过期时间为1s。
kepeng
2013-06-29 16:47:17 +08:00
22
otakustay
2013-06-30 00:52:08 +08:00
如果只是单个页面,且不访问amazon接口这页面对用户来说没价值的话,外面nginx上做个throttle就搞定了

如果是多个页面都用上amazon API,且没连上API这页面用户还是要看的话,在API级别上自己做throttle,这个比较麻烦,所以干脆再把这个API代理一下做成一个http service,再上nginx做throttle- -
skydiver
2013-06-30 04:47:35 +08:00
一天2000次吧……
RelativeLayout
2013-06-30 09:52:21 +08:00
挂个goag……或者bae代理,然后模拟百度或者谷歌的爬虫。很多爬取问题迎刃而解。。
jasontse
2013-06-30 15:18:05 +08:00
@lusin 加个并发锁然后缓存

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

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

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

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

© 2021 V2EX