SEO抓取工具DDOSing网站

时间:2018-03-20 22:56:09

标签: asp.net amazon-web-services elasticsearch caching ddos

我有一个客户在循环中运行36个网站(数千页),具有粘性亲和负载平衡的IIS服务器集 - 下面是完全基于AWS的(r3.2xl - 8 VCPU,60.5 GiB RAM)

为了直截了当,该网站已配置为在访问时缓存'使用ASP.NET 4.6中的标准内存缓存和通过Cloudfront使用静态资产。这个冷启动的网站'对内容进行SQL Server查询,并在运行时分离弹性搜索查询以确定hreflang备用语言标记 - 这基本上是出于SEO原因查询哪些版本的URL可用于不同语言。此查询已经过优化,可以从交叉索引通配符查询中查找单个索引。如上所述,一旦完成所有这些操作,整个结果将被缓存24小时。

在正常使用条件下,网站运行良好。由于在一个盒子上运行36个站点,随着越来越多的内容被缓存在内存中,私有集合空间随着时间的推移被分配到最大(99%)的物理RAM。我最终可以使用超过1.5GiB的App Pools,这不是理想的选择。在此之后,可能是.NET LRU缓存逐出算法正在加班。

我遇到的问题是,在对IIS登录进行一些事后审查之后,客户正在使用SEO机器人SEMrush,它实际上是因为同时请求而触发针对网站的拒绝服务攻击(雷鸣般的群体?)对于长尾巴#39;从未被用户查看的页面,因此不存储在高速缓存中。

最终结果是服务器瘫痪,整个地方的App Pool CPU使用率,以及Elasticsearch队列长度> 1000,巨大的ES堆增长,拒绝率 - 最终崩溃。

我已经考虑过但尚未实施的解决方案:

  1. Cloudfront所有网站 - 使用热身脚本(虽然我不认为这会有所帮助,因为当所有页面都过期时它是一个冷启动问题,除非我有一个MOST最近使用了缓存失效机制,它使请求数量的页面无效 - 比如> 100,并且其他所有内容都是持久的)

  2. AWS Shield / WAF提供某种速率限制

  3. 一起删除运行时ES查找并移动到最终一致的模型,该模型在单独的进程的其他位置计算hreflang查找表。 Hpwever,ES实例,虽然在旧的v1.3.1版本上,是一个3节点集群,具有大量的CPU能力,每个节点设置为16GiB最小/最大堆,所以应该能够采用该级别吞吐量是多少?

  4. 或全部3个!

    之前是否有人遇到此问题以及您的解决方案是什么?它必须是相当普遍的,特别是对于被SEO / DQM网络爬虫锤击的大型网站?

0 个答案:

没有答案