我有一个庞大的链接数据库,它们都以特定的方式排序,并附加到其他信息,这对某些人来说很有价值.
目前我的设置(似乎工作)只是调用一个像link.php?id = 123的php文件,它将带有时间戳的请求记录到数据库中.在它吐出链接之前,它会检查在过去5分钟内从该IP发出的请求数.如果它大于x,则会将您重定向到验证码页面.
这一切工作正常和花花公子,但该网站已经变得非常受欢迎(以及已经获得DDOsed大约6周),所以PHP已经被淘汰,所以我试图最小化我必须要打php的时间一些东西.我想以纯文本显示链接而不是通过link.php?id =并且有一个onclick函数来简单地将1加到视图计数中.我仍在点击php,但至少如果它滞后,它会在后台执行,用户可以立即看到他们请求的链接.
问题是,这使网站真的可以废弃.有什么我可以做的,以防止这种情况,但仍然不依靠PHP进行检查,然后吐出链接?
看来瓶颈是在数据库上。每个请求执行插入(记录请求),然后执行选择(确定过去 5 分钟内来自 IP 的请求数量),然后执行执行应用程序核心功能所需的任何数据库操作。
考虑在服务器内存中维护请求限制数据(IP、请求时间)而不是给数据库增加负担。两种解决方案是 memcache ( http://www.php.net/manual/en/book.memcache.php ) 和 memcached ( http://php.net/manual/en/book.memcached.php )。
正如其他人所指出的,请确保查询的任何键(例如链接 id 等字段)都存在索引。如果索引已到位并且数据库仍然承受负载,请尝试使用 HTTP 加速器,例如 Varnish ( http://varnish-cache.org/ )。
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |