這段時間我們有個網站不斷更新内容,流量在不斷增長的同時,也引來了大量采集者,現在的采集者已經非常專業了,IP池不斷更換,User Agent也随機變化,甚至Referer也做了不同的僞裝,讓我們花了很多時間來分析Apache日志,不斷修改屏蔽條件,鬥智鬥勇。先以為是百度爬蟲太快,把百度爬蟲進行了專門的臨時503處理,360爬蟲幹脆全部屏蔽了,但發現還是不行,非正規搜索引擎的采集者帶來的麻煩依然不斷。🤔
為了不影響用戶訪問,下血本把阿裡雲服務器從8核16G升級為16核32G,基本可以解決ECS負載飙升的問題,但RDS數據庫服務器還是會遇到查詢語句堆積的情況,我們查看是某種索引條件下的查詢語句,進一步查看Drupal網站中對應的Views設置,把輸出結果進行了一些簡化不過還是沒解決,MySQL語句已經很簡單了,就是根據city索引,然後對date進行排序:
SELECT name AS name, date AS date FROM {table} table WHERE (( (city = 'XXX') )) ORDER BY date DESC LIMIT 16 OFFSET 0
在RDS不忙的情況下也需要50ms,檢查date、city都有索引,後來想到可能需要聯合索引(忘記用explain查看了,本來可以更快定位問題所在) ,然後添加了聯合索引,删除了原來單獨的兩個索引,再看查詢速度就非常快,隻要1-2ms左右了。👍
我們很多個子網站批量生成了聯合索引,花了幾個小時時間,然後昨晚到今天再也沒有發現ecs/rds被卡住的情況了,從根本上解決了MySQL查詢遇到的瓶頸。👌
我們其它Drupal網站肯定也有類似問題,因為流量不大、采集不多、數據量不大,沒有呈現出來,以後還要再專門檢查、必要時添加聯合索引。✌
對于有相當流量的網站來說,保證網站的可訪問性、提高浏覽速度就可以帶來更多流量和收入!😀
评论