【廉環(huán)話特輯】此錦囊請(qǐng)?jiān)陔p十一前一周打開
原創(chuàng)【51CTO.com原創(chuàng)稿件】又是一年剁手節(jié),
流量訂單齊迸發(fā)。
電商賣家大比拼,
幾家歡喜幾家愁。
開場(chǎng)給大家來了首打油詩。是的,今年雙十一大促的號(hào)角又吹響了,廣告鋪天蓋地,血拼族們對(duì)這個(gè)節(jié)日已經(jīng)是摩拳擦掌了。我們用腳趾頭都能預(yù)測(cè)到今年又將出現(xiàn)“許三多”,即:許多促銷,許多圍觀和許多訂單的景象。但是這些巨大的無形沖擊的匯集,實(shí)際上無論對(duì)電商平臺(tái)的支撐能力還是賣家的處理能力都是全方位的考驗(yàn)。同時(shí),現(xiàn)在網(wǎng)絡(luò)流氓不但有了文化,也伴隨著年年雙十一節(jié)逐漸成長并磨練攻擊技能,而且已經(jīng)形成了一套完整的攻擊協(xié)作的生態(tài)鏈??梢姡绱藝?yán)峻的形式已讓電商賣家務(wù)必愛恨交織了。他們?cè)诨孟胫艽筚嵰还P的同時(shí),也倍感壓力山大。沒辦法,自己創(chuàng)造的節(jié)日,無論是哭著還是笑著都要跑到終點(diǎn)。
電商平臺(tái),看這里
兵法曰:故知戰(zhàn)之地,知戰(zhàn)之日,則可千里而會(huì)戰(zhàn)。
有個(gè)電商平臺(tái)運(yùn)維的朋友曾坦言:每到十月底,一想到各種爆款、爆買、爆單、爆倉…就有些肉疼,生怕哪個(gè)環(huán)節(jié)出了故障,被賣家們齊聲指責(zé):“原來你是這樣的電商平臺(tái)…”。那么如何才能沉著應(yīng)對(duì)流量的井噴、處理海量的訂單、保障整個(gè)網(wǎng)站系統(tǒng)的安全和穩(wěn)定呢?讓我來給您慢慢撥開這個(gè)“洋蔥”看看吧。
本人認(rèn)為安全穩(wěn)定無非是兩個(gè)方面:網(wǎng)站系統(tǒng)的平穩(wěn)運(yùn)行和攻擊發(fā)生時(shí)的應(yīng)對(duì)。我們先來看看:網(wǎng)站系統(tǒng)平穩(wěn)運(yùn)行,它主要依賴于如下方面的綜合支撐:
· 穩(wěn)定的機(jī)房物理環(huán)境和完備的基礎(chǔ)設(shè)施保障。無論是自建的還是外包出去的,大家都可以參考類似于GB50174《數(shù)據(jù)中心設(shè)計(jì)規(guī)范》之類的要求進(jìn)行自查或要求外包中心提供出詳檢報(bào)告。另外,對(duì)于一些要求高且實(shí)力雄厚的土豪可自行腦補(bǔ)“同城一主三從”的模式。
· 齊備的網(wǎng)絡(luò)防護(hù)硬件設(shè)備和統(tǒng)一且細(xì)粒度的網(wǎng)絡(luò)監(jiān)控平臺(tái)。特別是分布式網(wǎng)絡(luò)環(huán)境中,全鏈路的網(wǎng)絡(luò)狀態(tài)監(jiān)控與分析可以有助于及時(shí)發(fā)現(xiàn)問題點(diǎn)和瓶頸點(diǎn),提升問題的定位效率。適當(dāng)?shù)臅r(shí)候,可以通過人工干預(yù)等方式靈活進(jìn)行網(wǎng)絡(luò)資源調(diào)配。還記得糾正前些時(shí)的10月21日,美國東部大面積網(wǎng)絡(luò)癱瘓事件嗎?一天之內(nèi),美國主要域名服務(wù)器供應(yīng)商Dyn遭到了三波DDoS的網(wǎng)絡(luò)攻擊,什么Facebook、twitter、spotify、CNN都登錄不上去了。簡(jiǎn)單反思一下,這說明如果你有一個(gè)配置好了異地的備用DNS服務(wù)器是多么的重要啊!當(dāng)然,如果您想了解更多網(wǎng)絡(luò)方面的加固經(jīng)驗(yàn),請(qǐng)出門左轉(zhuǎn),參考一下本網(wǎng)站每周連載的《廉環(huán)話--漫談信息安全設(shè)計(jì)與治理》,那里有很多實(shí)際經(jīng)驗(yàn)方面的小貼士。
· 大促當(dāng)天,各種數(shù)據(jù)勢(shì)必會(huì)雪崩式的猛增,因此硬件方面的擴(kuò)容、升級(jí),是越早準(zhǔn)備越好。當(dāng)然也要有合理的預(yù)估,盡量避免僅僅為了應(yīng)對(duì)這次單次峰值的批量機(jī)器采購現(xiàn)象的發(fā)生。特別是在存儲(chǔ)方面,在云平臺(tái)服務(wù)盛行的今天,可以通過自我容量的現(xiàn)狀評(píng)估,提前購買和簽訂云資源的彈性擴(kuò)容協(xié)議。
· 在我們技術(shù)中人看來,雙十一大促就是一個(gè)時(shí)間緊、任務(wù)急、要求高的IT項(xiàng)目。所以諸如:?jiǎn)栴}管理、變更管理、發(fā)布管理、配置管理等日常項(xiàng)目的管控是統(tǒng)統(tǒng)可以適用的。值得特別注意的是,任何對(duì)平臺(tái)硬件配置和軟件程序上的修改都要事先做兩輪以上的測(cè)試而且是壓力測(cè)試。具體方法可以借鑒日志收集式的線下壓力測(cè)試與流量導(dǎo)出式的線上壓力測(cè)試相結(jié)合來實(shí)施。正如華為總裁任正非最近說道的“自己做的狗食要自己先吃”那樣,通過接近于真實(shí)場(chǎng)景的壓力測(cè)試,很多細(xì)節(jié)問題會(huì)自行暴露出來的。
· 人員支持方面,如果不想讓您和您的團(tuán)隊(duì)當(dāng)天有種“感覺身體背掏空”的感覺的話,請(qǐng)務(wù)必分配好專人專崗?fù)ㄟ^監(jiān)控軟件去獲取數(shù)據(jù)量,并掌握趨勢(shì)曲線,以及必要的時(shí)候采取的人工干預(yù)限流、鏈路切換等措施都。整個(gè)團(tuán)隊(duì)中一起,通過brainstorm或是參考他山之石等方式,提前申請(qǐng)好必要的資源,比如說事先準(zhǔn)備一個(gè)war room等。
· 結(jié)合平時(shí)的BCP和DRP制定當(dāng)天的應(yīng)急預(yù)案,多用“if then, else if then”這樣的程序化模式和言簡(jiǎn)意賅的流程圖的表現(xiàn)方式,不要忽略了call tree的定義。當(dāng)出現(xiàn)事故的時(shí)候,人員的應(yīng)變能力和判斷能力可能會(huì)現(xiàn)場(chǎng)受限,因此需要人手一份的嚴(yán)格按步驟執(zhí)行,井然有序的提前先做幾次沙盤演習(xí),并查缺補(bǔ)漏排除盲點(diǎn)。
· 在程序代碼開發(fā)方面,一般做法都是前端只做展示,不進(jìn)行邏輯處理。因此頁面上的一次鏈接點(diǎn)擊,在后端可能會(huì)產(chǎn)生幾十次的RPC調(diào)用,Web、服務(wù)化、緩存、消息隊(duì)列、DB…因此任何一個(gè)環(huán)節(jié)出了故障都可能導(dǎo)致剁手黨們用腳投票,從而轉(zhuǎn)投它商。有過開發(fā)經(jīng)驗(yàn)的小伙伴都知道在開發(fā)高并發(fā)系統(tǒng)時(shí),可用“三寶”來保護(hù)系統(tǒng),即:緩存、限流和降級(jí)。一般順序是:先有緩存這個(gè)常態(tài)機(jī)制,后有限流來應(yīng)對(duì)高并發(fā)和瞬間流量對(duì)系統(tǒng)的強(qiáng)大沖擊,與此同時(shí),按需降級(jí)來實(shí)現(xiàn)網(wǎng)站的有損服務(wù)而不是不提供服務(wù)哦。
◆ 緩存:可以利用瀏覽器的緩存、CDN緩存、服務(wù)端應(yīng)用的本地緩存、緩存服務(wù)器集群的一致性哈希以及服務(wù)端分布式緩存的多級(jí)緩存化機(jī)制來提高緩存的命中率,并減少帶寬消耗。
◆ 限流:可以限制瞬時(shí)并發(fā)數(shù)、限制總的并發(fā)數(shù)(比如數(shù)據(jù)庫連接池、線程池)、限制時(shí)間窗口內(nèi)(如每秒)的平均速率、限制遠(yuǎn)程接口調(diào)用速率、限制消息隊(duì)列的消費(fèi)速率等。另外還可以根據(jù)網(wǎng)絡(luò)總連接數(shù)和流量、服務(wù)器CPU或內(nèi)存的負(fù)載等方面來進(jìn)行限流。
◆ 降級(jí):可以根據(jù)系統(tǒng)日志里規(guī)定的級(jí)別,如一般、警告、錯(cuò)誤、嚴(yán)重錯(cuò)誤等來定義,自動(dòng)或人工的相關(guān)設(shè)置,實(shí)現(xiàn)對(duì)頁面、讀操作、寫操作的降級(jí)。畢竟是雙十一的搶購當(dāng)天,很多用戶實(shí)際上都已經(jīng)把貨品放入了購物車,所以在真實(shí)情況下一般不會(huì)再去花時(shí)間瀏覽商品的詳情頁上的推薦內(nèi)容甚至是評(píng)價(jià)之類的信息,所以完全可以把商品詳情內(nèi)容以及評(píng)價(jià)暫時(shí)不予加載和展示給買家,所以這對(duì)購物流程是不會(huì)產(chǎn)生明顯影響的。
針對(duì)不同種類的限流和降級(jí),頁面顯示也可有所不同??梢允菍①I家導(dǎo)流到排隊(duì)頁面、等一會(huì)重試的排隊(duì)頁面;也可以直接告知買家沒貨了;亦或?yàn)?ldquo;活動(dòng)太火爆了,稍后重試”的錯(cuò)誤頁面??傊瑏G卒保車總要好過全軍覆沒。
常言道:“上醫(yī)治未病”,我們?cè)賮砜纯垂舭l(fā)生時(shí)的應(yīng)對(duì),這里主要著眼的是網(wǎng)站程序代碼的方面。
· 入境檢測(cè)
◆ 對(duì)輸入的網(wǎng)站請(qǐng)求進(jìn)行實(shí)時(shí)分析(包括各個(gè)特征字段,post-process分析等)。
◆ 檢測(cè)在用戶填寫并提交到網(wǎng)站上的信息內(nèi)容里是否包含惡意的鏈接(掛馬)。
◆ 打開HTTP審計(jì)日志并分門別類寫到不同的文件中。
◆ 只記錄有意義的請(qǐng)求,也就是說可以適當(dāng)忽略如圖片文件之類,被攻擊的危險(xiǎn)性相對(duì)較低且沒有參數(shù)的請(qǐng)求。另外,在日志中應(yīng)屏蔽掉如登錄密碼、信用卡等敏感數(shù)據(jù),并集中到中央日志服務(wù)器上,以免被非法獲取。
· 分析請(qǐng)求
◆ 對(duì)請(qǐng)求體里的類型(Content-Type)進(jìn)行勘察,識(shí)別出畸形請(qǐng)求體(特別是XML類型)。
◆ 別請(qǐng)求是否進(jìn)行過多次編碼,甚至是為了增加偽裝性的畸形編碼。
◆ 檢測(cè)是否有異常的瀏覽器請(qǐng)求頭部(如host,user-agent,accept)信息和順序(比如不同瀏覽器的host位置不同)。
◆ 檢測(cè)是否有多余的參數(shù),丟失的參數(shù),重復(fù)的參數(shù)名,異常的參數(shù)長度和參數(shù)字符集等。
◆ 借用現(xiàn)成的或是構(gòu)建自己的黑名單(RBL)來識(shí)別惡意IP地址。
· 請(qǐng)君入甕
◆ 添加蜜罐端口,來檢測(cè)是否有可疑的流量。
◆ 在頁面上添加假的HTML注釋、假的表單隱藏字段、以及假的cookie,這樣既可誤導(dǎo)攻擊者也可在這些數(shù)據(jù)被修改時(shí)聯(lián)動(dòng)報(bào)警。
◆ 針對(duì)網(wǎng)絡(luò)爬蟲,添加虛假的robot.txt的Disallow條目,以誘惑訪問disallow的目錄,并記錄以便分析。如果有時(shí)間和經(jīng)歷的話,甚至可以制作一些假的認(rèn)證機(jī)制和頁面。
· 出境檢查
◆對(duì)輸出的頁面數(shù)據(jù)添加額外的哈希值,以避免被中間人篡改。
◆ 檢測(cè)異常的響應(yīng)頭部。比如:網(wǎng)站響應(yīng)的網(wǎng)頁面上頻繁出現(xiàn)HTTP 4XX或5XX的錯(cuò)誤,則可能是攻擊者通過發(fā)來的有問題請(qǐng)求或處理來對(duì)網(wǎng)站進(jìn)行掃描和偵查。另外,攻擊者通過操縱Apache的.htaccess文件,以HTTP 3XX的響應(yīng),把請(qǐng)求重定向到惡意網(wǎng)站。
◆ 檢測(cè)響應(yīng)頭部和響應(yīng)體是否信息泄露,這一點(diǎn)技術(shù)上有必要,但實(shí)際上對(duì)于雙十一請(qǐng)求量大的時(shí)候就要做好檢測(cè)的優(yōu)化了,不然會(huì)影響響應(yīng)速度。另外,這種檢測(cè)多適用于文本內(nèi)容,而對(duì)于MIME類型的二進(jìn)制格式也可能會(huì)有誤報(bào)或漏報(bào)。
◆ 檢測(cè)頁面標(biāo)題是否被變更,頁面大小是否有偏差。因?yàn)楫?dāng)Web頁面被篡改時(shí),最終的頁面可能比正常小得多;而當(dāng)攻擊者成功進(jìn)行了SQL注入攻擊并對(duì)數(shù)據(jù)進(jìn)行大量拉取時(shí),頁面則又會(huì)大很多。所以可以設(shè)置上限和下限的閾值。當(dāng)然,此檢測(cè)也可能會(huì)誤報(bào),比如有商品的詳情頁面隨著評(píng)論的迅速增加而遞增。還是上述觀點(diǎn):雙十一當(dāng)天應(yīng)該不會(huì)出現(xiàn)該情況,因?yàn)榇蠹覔屬忂€來不及何談評(píng)論?
◆ 檢測(cè)動(dòng)態(tài)內(nèi)容是否被變更,主要監(jiān)控頁面上javascript,iframe,image以及超級(jí)鏈接的標(biāo)簽數(shù)量。
◆ 檢測(cè)是否存在源代碼的泄露,比如:用戶在網(wǎng)址后面添加入?-s之類特殊字符,是否會(huì)反饋網(wǎng)頁的源代碼?
◆ 檢測(cè)網(wǎng)址返回的錯(cuò)誤信息提示里所包含的網(wǎng)址結(jié)構(gòu)等信息。
當(dāng)然還能列舉更多,但相信如果能切實(shí)做到上述對(duì)程序的管控,效果就已經(jīng)是杠杠的了。其實(shí)有“業(yè)界良心”的電商平臺(tái)都已經(jīng)做到了。所以說,并不存在什么“人無我有,人有我精”的大技,您要做到的就是“跟緊了,別掉隊(duì)”,不要成為攻擊者眼中的“肉雞”。最后提醒一點(diǎn)的是:萬一真的出了故障,信息公開方面要及時(shí)。在這個(gè)迅速傳播發(fā)酵的時(shí)代,如果你還想遮遮掩掩的話,那就基本上可以狗帶了。
若是賣家,往下看:
兵法曰:善守者,敵不知其所攻!兵者詭道也!
您也許會(huì)說:“我只是一個(gè)在平臺(tái)上開小網(wǎng)店的賣家,別跟我整那些詩和遠(yuǎn)方,告訴我一些眼前能達(dá)到的小目標(biāo)吧。”好,切克鬧!在你開啟節(jié)日自嗨模式之前,請(qǐng)先認(rèn)真閱讀如下幾點(diǎn):
· 凡事預(yù)則立,是的,賣家也需要有應(yīng)急預(yù)案,不用太復(fù)雜,主要是確定發(fā)生各種可能事件優(yōu)先級(jí),自己和小伙伴們多演練演練。還是那句話,“能動(dòng)手就別吵吵”。
· 雙十一當(dāng)天你可以全天不吃不喝,但是如果突然停電or跳閘,那就再多的訂單也你也處理不了,所以為了防止哭暈在廁所的情況發(fā)生,給自己的筆記本電腦的電池充滿電是必要的(對(duì),首先你要有個(gè)筆記本)。愿意自備UPS的土豪朋友請(qǐng)自便。
· 另外一個(gè)“萬萬沒想到”的事情就是突然斷網(wǎng)了。所以你需要準(zhǔn)備一個(gè)有充足流量套餐的無線MIFI,當(dāng)然如果能插入電腦的USB,那就更完美了。
· 人常說:“華佗無奈小蟲何”,如果出現(xiàn)買家在地址欄內(nèi)填寫一個(gè)QQ號(hào)、微信號(hào)、或是電話空號(hào)、甚至是敲詐商家等這些很low的伎倆時(shí),只要符合上述惡意場(chǎng)景的特征,作為商家的你就可以在訂單管理頁面直接關(guān)閉付款訂單,對(duì),就這么簡(jiǎn)單直接粗暴!
· 正所謂林子大了什么鳥都有是事實(shí)那樣,如果你的小店在遇到惡意張貼小廣告的評(píng)價(jià),請(qǐng)及時(shí)選中廣告評(píng)價(jià),到評(píng)價(jià)管理頁面迅速點(diǎn)擊屏蔽哦。
· 常言道:防火防盜防同行,防盜圖工具。還有些買家一言不合就跟你玩重復(fù)訂單和惡意退款。所以在全程監(jiān)控各個(gè)訂單的支付狀態(tài)的同時(shí),也要多留意電商平臺(tái)以及自己的管理端,查看是否有預(yù)警消息,及時(shí)處理,以免后續(xù)帶來一系列的損失。
· 如果你還是個(gè)圖樣圖森破的菜鳥的話,老司機(jī)有時(shí)候會(huì)玩出 “訂單分組,聚類訂單”之類的花樣,以及關(guān)閉庫存回寫功能,以避免商品在多平臺(tái)上超賣的“特效”。過節(jié)前,你好好研究一下吧。
騷年,哥嘮嘮叨叨說了這么多,就是希望您在即將到來的非常時(shí)期,在為剁手黨們提供美好的網(wǎng)購體驗(yàn)的同時(shí),能從容應(yīng)對(duì)各種可能性突發(fā)事件。上面是從電商平臺(tái)和賣家兩個(gè)視角出發(fā),列出了的大促之前的各種技術(shù)準(zhǔn)備以及當(dāng)天的各種應(yīng)對(duì)策略。雖然談不上值得“熟讀并背誦全文”,但有道是“技不壓身”,希望您能get到大概要點(diǎn)。也許您會(huì)說這些全是套路。對(duì)的,正所謂“知易行難”,關(guān)鍵還是在于您是不是認(rèn)真的去做到了。最后希望用盡洪荒之力的你,能在11月12日傲嬌的哼出那首“我得意的笑”,而不是去翻唱那首新歌《藍(lán)瘦,香菇》。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】