一、前言
最近涉及到了秒殺這一塊的需求,然後就詳細了解了一下秒殺的策略。
二、介紹
1. 秒殺,通俗的說就是在乙個特定的時間點,有一定數量的商品,大家都來搶,拼的是速度,拼的就是鍵盤手。下面就從我自己的角度整體描述一下秒殺的過程。
整體分為3層,ui層、service層、db層;
1.1 ui層最為和使用者直接互動層,分為api和mis,api是秒殺的介面,mis為秒殺活動詳細資訊的配置介面;
1.2 service層,連線ui和db,作為中間資料處理;
1.3 db層,儲存;
2.策略
對於策略,我們著重於service層,因為ui層主要是提供介面化服務,db主要做儲存;
service,包括csrf防攻擊,驗證碼校驗,ip防刷,以及秒殺;關於csrf防攻擊,驗證碼校驗,ip防刷後面再做介紹,這裡說說秒殺。如下圖所示,「活動開始與否」以及「檢視商品數量num」,這一塊的查詢量會很大,所以我們使用cache(使用redis),一方面減輕db壓力,另一方面由於這塊資料變化也很快,沒必要固態化,直接存在記憶體中更好。當使用者秒到商品之後,在「更新資料並返回」這一步,我們及時把資料寫進redis 。
3.細節
問題1:在同乙個時間點,可能有成千上萬的使用者來秒殺(比如小公尺定時開放搶手機,某一秒的時間內會有大量使用者),這個時候如何做併發處理,保證整個秒殺順利進行而伺服器不掛掉。這裡就是剛才說的redis中的佇列來幫我們實現了,在redis中儲存乙個商品數量(比如100),秒中減一,等到返回數量結果等於0,就沒有了;redis是原子操作,就能很好解決這種併發問題了。
問題2:反作弊,如下圖,是我們一整套防作弊策略
第一步,把使用者的唯一標識(還有其他的一些資訊)通過一定的演算法生成加密串,然後由瀏覽器傳送過來,在伺服器端校驗;
第二步,驗證碼校驗(這裡為了防止使用者提前刷驗證碼),我對每乙個驗證碼加了生成時間,然後在驗證的時候同時檢驗這個驗證碼的生成時間戳;
第三步,ip防刷,對每乙個來秒殺的使用者ip,都做乙個cache,限制在一定時間內這個相同的ip不能再來秒殺;
第四步,ip黑名單,對於有作弊嫌疑的使用者,直接將ip加入黑名單;
最後,我們為了防止有的使用者確實是手比較快而經常秒中,那麼就再根據使用者的唯一標示id,對這個使用者在多少天內不能再秒中做限制(哈哈,這個有些殘忍^-^);
Google Hacking 的實現以及應用 轉
前言 google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非...
google hacking的實現以及應用
google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名 的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非如此...
Google Hacking的實現以及應用
google hacking其實並算不上什麼新東西,在早幾年我在一些國外站點上就看見過相關的介紹,但是由於當時並沒有重視這種技術,認為最多就只是用來找找未改名的mdb或者別人留下的webshell什麼的,並無太大實際用途.但是前段時間仔細啃了些資料才猛然發覺google hacking其實並非如此簡...