Occ*_*cam 3 python google-app-engine webapp2
我正在开发一个Google App Engine项目(python/webapp2),我有点担心滥用/垃圾邮件我正在创建的服务有大量请求.为了克服这种潜力,我的想法是限制应用程序某些部分在任何给定时间内每个IP地址允许的请求数.我目前的计划如下:
在每个请求我将:
我的问题是:
这是最好的方法吗?我在这里只是一个初学者,我想这样做会有相当多的开销,这可能是一个可能有更好解决方案的常见任务.有没有更好的方法来做这个资源密集度较低的方法?
Jes*_*sak 10
在过去,我用memcache做了这个,速度要快得多,特别是因为你只关心近似限制(近似因为memcache可以被系统刷新,可能不会被所有实例共享等等).您甚至可以使用它来为您过期密钥.像这样的东西(假设self是一个webapp2请求处理程序,你已经导入了GAE的memcache库):
memcache_key = 'request-count-' + self.request.remote_addr
count = memcache.get(memcache_key)
if count is not None and count > MAX_REQUESTS:
logging.warning("Remote user has %d requests; rejecting." % (count))
self.error(503)
return
count = memcache.incr(memcache_key)
if count is None:
# key didn't exist yet
memcache.add(memcache_key, 1, time=WINDOW_IN_SECONDS)
Run Code Online (Sandbox Code Playgroud)
这将创建一个密钥,在WINDOW_IN_SECONDS时间内关于MAX_REQUESTS后拒绝用户,将每个WINDOW_IN_SECONDS的计数重新归零.(即它不是一个滑动窗口;它在每个时间段重置为零.)
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |