春節(jié)期間,電商網(wǎng)站爭相推出大波促銷,各大企業(yè)紛紛上線迎新活動(dòng)。對(duì)于網(wǎng)站運(yùn)維人員來說,隨之而來的春節(jié)流量峰值也會(huì)對(duì)系統(tǒng)造成致命攻擊,同時(shí)針對(duì)數(shù)據(jù)的攻擊層出不窮,有些難以察覺。對(duì)此,騰訊云在國內(nèi)率先提出,節(jié)前“黃金14天”這一概念,技術(shù)人員需要把握這14天,解決業(yè)務(wù)關(guān)鍵瓶頸。騰訊云究竟有何妙招幫助客戶度過這一關(guān)鍵時(shí)期?下面,就由騰訊云存儲(chǔ)和數(shù)據(jù)產(chǎn)品專家工程師胥彪、騰訊云專家業(yè)務(wù)架構(gòu)師祝海強(qiáng)為你一一解答:
騰訊云數(shù)據(jù)庫主要服務(wù)于哪些行業(yè)客戶?春節(jié)期間,如果數(shù)據(jù)庫發(fā)生故障,對(duì)企業(yè)的影響有多大?數(shù)據(jù)庫扮演著怎樣的角色?
胥彪:騰訊云數(shù)據(jù)庫服務(wù)了包括微眾銀行、安心保險(xiǎn)、三一重工、中廣核、嗶哩嗶哩、獵豹、暢游等眾多客戶。無論是金融、制造業(yè)、或是互聯(lián)網(wǎng)服務(wù)提供商,都可能考慮在春節(jié)期間做一些線上運(yùn)營活動(dòng),一來可以推廣企業(yè)品牌,二來提高產(chǎn)品、服務(wù)的售賣,三來可以維護(hù)與用戶(客戶)關(guān)系;如果此時(shí)業(yè)務(wù)出現(xiàn)故障,不僅無法達(dá)到預(yù)期目的,還會(huì)給企業(yè)帶來負(fù)面印象甚至經(jīng)濟(jì)損失。數(shù)據(jù)庫則是整個(gè)業(yè)務(wù)中關(guān)鍵一環(huán)之一,數(shù)據(jù)庫故障就意味著整個(gè)服務(wù)故障。
騰訊云數(shù)據(jù)庫產(chǎn)品矩陣
什么是節(jié)前黃金14天?這段時(shí)間,企業(yè)客戶的運(yùn)營團(tuán)隊(duì)需要做哪些準(zhǔn)備?對(duì)此,騰訊云有哪些建議?
胥彪:大多數(shù)團(tuán)隊(duì)會(huì)提前2個(gè)月開始準(zhǔn)備一次大型活動(dòng)。但根據(jù)我們經(jīng)驗(yàn),節(jié)前14天是團(tuán)隊(duì)做最后梳理的關(guān)鍵時(shí)間。在最后14天,公司的活動(dòng)內(nèi)容基本定型,同時(shí),競品情況、渠道、供應(yīng)商情況、內(nèi)部準(zhǔn)備、以及預(yù)熱效果都已經(jīng)清晰。此時(shí)的效果預(yù)估基本準(zhǔn)確,活動(dòng)開發(fā)和IT設(shè)施可以做到提前準(zhǔn)備到位。
根據(jù)騰訊多年經(jīng)驗(yàn),在最后這14天,有了效果、準(zhǔn)備情況和成本綜合評(píng)估,更加容易精準(zhǔn)的找到業(yè)務(wù)關(guān)鍵瓶頸的地方。而對(duì)大多數(shù)業(yè)務(wù)來講,數(shù)據(jù)庫是比較容易成為瓶頸的點(diǎn)。因此需要我們提前準(zhǔn)備。
準(zhǔn)備過程中,有哪些關(guān)鍵點(diǎn)?進(jìn)行這些測試時(shí),有哪些注意事項(xiàng)?
胥彪:在最后14天,團(tuán)隊(duì)?wèi)?yīng)該再次做好業(yè)務(wù)系統(tǒng)壓測,并聯(lián)合開發(fā)團(tuán)隊(duì)分析問題并解決。譬如,在壓測過程中,建議高于預(yù)估值20%~100%的量進(jìn)行壓測,以判斷數(shù)據(jù)庫在峰值時(shí)的承載能力。
一般來說,通過完善的測試,業(yè)務(wù)系統(tǒng)會(huì)暴露一些問題。此時(shí),企業(yè)還有時(shí)間,設(shè)計(jì)一些快速簡單的優(yōu)化策略,并做好災(zāi)難時(shí)的故障預(yù)案和演練,以保障順利的完成既定目標(biāo)。
上述準(zhǔn)備工作中,最容易出現(xiàn)的問題有哪些?
胥彪:為什么說數(shù)據(jù)庫比較容易成為瓶頸,我們團(tuán)隊(duì)專家業(yè)務(wù)架構(gòu)師祝海強(qiáng)做過專門的分享:
最后準(zhǔn)備階段,數(shù)據(jù)庫通常會(huì)發(fā)現(xiàn)這幾個(gè)問題:
l 業(yè)務(wù)邏輯和SQL導(dǎo)致的性能問題
l 瞬時(shí)峰值超過數(shù)據(jù)庫最大承載能力
l 數(shù)據(jù)庫已到單機(jī)性能最大上限,無法提升
最后,還需要考慮到,故障無法避免的情況下,如何減少損失。
春節(jié)活動(dòng)期間瞬時(shí)訪問峰值過大是常事兒,騰訊云建議如何應(yīng)對(duì)措施?
祝海強(qiáng):春節(jié)活動(dòng)前,一般我們需要配合業(yè)務(wù)做壓力預(yù)估,以及對(duì)應(yīng)的壓力測試,數(shù)據(jù)庫層以MySQL為例,可以使用tcpdump、pt-digest-query的獲取SQL訪問情況(例如top10,讀寫比等),根據(jù)不同的壓力場景制定不同的優(yōu)化方案,一般分架構(gòu)優(yōu)化、SQL優(yōu)化、內(nèi)核參數(shù)優(yōu)化、配置升級(jí)、過載保護(hù)、異地災(zāi)備等:
架構(gòu)優(yōu)化之緩存使用:在數(shù)據(jù)庫前端增加或擴(kuò)容讀寫Cache層(如redis),將訪問請(qǐng)求緩存下來,組件讀寫,當(dāng)然普通架構(gòu)下的業(yè)務(wù),通常1天可以完成cache。例如,QQ就通過了cache,有效的解決了在春節(jié)零點(diǎn),全國大量用戶修改說說、群發(fā)祝福消息等業(yè)務(wù)場景的業(yè)務(wù)瓶頸;
架構(gòu)優(yōu)化之讀寫分離:對(duì)于一些及時(shí)性要求不高的讀邏輯、離線邏輯、報(bào)表等服務(wù),可以嘗試使用只讀實(shí)例來降低主庫的壓力。例如,騰訊新聞一主多從,通過6個(gè)只讀實(shí)例來擴(kuò)展讀,保證在重大新聞時(shí),騰訊新聞仍然能正常運(yùn)行;
SQL優(yōu)化相關(guān):根據(jù)壓測期間抓包分析出的top10 SQL及對(duì)應(yīng)的慢查詢,去做相關(guān)的索引優(yōu)化、表結(jié)構(gòu)調(diào)整、子查詢優(yōu)化、隱式轉(zhuǎn)換、分頁優(yōu)化等操作;
內(nèi)核參數(shù)相關(guān):壓測期間可以做一些MySQL性能參數(shù)的調(diào)優(yōu),例如調(diào)整線程池、內(nèi)存、刷盤、open table等相關(guān)參數(shù),來提高實(shí)例的整體吞吐量;
配置升級(jí)相關(guān):如果我們上面的工作都做了,系統(tǒng)壓力還是扛不住,我們要做相關(guān)的擴(kuò)容計(jì)劃,來滿足預(yù)估的業(yè)務(wù)訪問量;
過載保護(hù)相關(guān):當(dāng)然春節(jié)期間真實(shí)訪問量會(huì)超過我們前期評(píng)估的訪問量,我們還需要有相應(yīng)過載保護(hù)的方案;與業(yè)務(wù)方一起制定過載保護(hù)措施:增加數(shù)據(jù)庫敏感指標(biāo)監(jiān)控,及時(shí)發(fā)現(xiàn)異常,譬如:監(jiān)控活動(dòng)連接數(shù)超過CPU核心數(shù)告警,及時(shí)排查原因,并通過程序啟動(dòng)提前預(yù)埋過載保護(hù)策略;
過載保護(hù)策略可能需要業(yè)務(wù)方一起參與:例如在連接失敗或超時(shí)情況下會(huì)有相應(yīng)提示或引導(dǎo)新用戶到其他流程中,減少用戶重復(fù)請(qǐng)求次數(shù)。在異常情況出現(xiàn)時(shí),采取減少請(qǐng)求數(shù),異步限流降低拆、分享請(qǐng)求速率等措施減輕數(shù)據(jù)庫端壓力。例如QQ紅包,能力業(yè)務(wù)峰值較大時(shí),就會(huì)引導(dǎo)用戶休息一會(huì)兒,或加入其它策略;
異地災(zāi)備:我們前面的工作做完,基本就能撐住業(yè)務(wù)的壓力了,但是考慮到活動(dòng)期間系統(tǒng)的容災(zāi)能力,這里也建議企業(yè)根據(jù)自身的業(yè)務(wù)特點(diǎn)來考慮是否需要異地災(zāi)備的方案。
擴(kuò)容數(shù)據(jù)庫。怎么快速擴(kuò)容?擴(kuò)容時(shí)需要注意哪些問題?
祝海強(qiáng):擴(kuò)容的目的是解決可能的數(shù)據(jù)庫性能和容量瓶頸。擴(kuò)容時(shí)需要注意以下幾點(diǎn):
根據(jù)業(yè)務(wù)架構(gòu)情況,采取不同的擴(kuò)容方式,譬如,研發(fā)在初期就設(shè)計(jì)好使用分布式數(shù)據(jù)庫,即分庫分表水平拆分,直接把不同的庫放到不同的實(shí)例上去,通過物理設(shè)備數(shù)量和規(guī)格的線性增長可以很順利的擴(kuò)展性能;
如果是資源有限的情況下,盡可能讓核心數(shù)據(jù)庫獨(dú)占物理設(shè)備性能,避免其他非核心影響到核心業(yè)務(wù)數(shù)據(jù)庫;
合理設(shè)置讀策略,讓備機(jī)承擔(dān)讀請(qǐng)求比例(并設(shè)置更靈活的讀策略,確保在數(shù)據(jù)一致性和性能之間的均衡)。
如果故障無法避免,有沒有備選方案將損失降到最低?
祝海強(qiáng):如果故障無法避免。我們應(yīng)該從兩個(gè)角度確保業(yè)務(wù)快速恢復(fù),降低損失:
一是從技術(shù)策略上,需要平衡系統(tǒng)性能和數(shù)據(jù)安全;例如某些涉及交易的核心數(shù)據(jù)庫故障后,數(shù)據(jù)庫需要花大量時(shí)間核對(duì)數(shù)據(jù)方能重新恢復(fù)數(shù)據(jù)庫,那么如果啟用了數(shù)據(jù)強(qiáng)一致的方案,就可以很容易恢復(fù)業(yè)務(wù)。
二是從管理策略上,讓故障恢復(fù)流程爛熟于心,每個(gè)步驟對(duì)應(yīng)責(zé)任人,銜接順利,并且做好嚴(yán)格的管控,避免越忙越亂導(dǎo)致誤操作。
如何從容應(yīng)對(duì)每一次挑戰(zhàn),騰訊云有沒有結(jié)合自身實(shí)踐經(jīng)驗(yàn)的分享?
根據(jù)業(yè)務(wù)的使用場景,如果業(yè)務(wù)的數(shù)據(jù)庫在云上,可以借用云上數(shù)據(jù)庫彈性擴(kuò)容縮容的特點(diǎn),將活動(dòng)期間數(shù)據(jù)庫的規(guī)格升級(jí)到大規(guī)格,活動(dòng)結(jié)束后,再縮容回來降低成本,這樣可以讓用戶的整體成本實(shí)現(xiàn)良性循環(huán)。
與其他公司的同類品相比,騰訊云數(shù)據(jù)庫的優(yōu)勢在哪?
祝海強(qiáng):首先是穩(wěn)定性,我們對(duì)外提供的數(shù)據(jù)庫達(dá)到99.95%的高可用性,這個(gè)是得到過工信部可信云認(rèn)證的,目前已經(jīng)有大量的企業(yè)運(yùn)行在騰訊云上。另外通過大量的軟硬件優(yōu)化,在同等配置下,我們的性能只高不低。而且我們支持基于MySQL、PostgreSQL、SQLServer等多種引擎數(shù)據(jù)庫,可以為不同業(yè)務(wù)提供不同的產(chǎn)品。最后,在春節(jié)期間,騰訊云將一如既往的提供7*24h人工值守服務(wù),協(xié)助云上的每個(gè)用戶順利過好春節(jié)。
數(shù)據(jù)庫行業(yè),還有哪些難以防范的攻擊,騰訊云有哪些心得?
祝海強(qiáng):安全是云數(shù)據(jù)庫的重中之重,我們內(nèi)部對(duì)安全的要求,一直擺在最優(yōu)先的位置。目前對(duì)于數(shù)據(jù)的攻擊層出不窮,有些容易預(yù)防,有些則難以察覺。
而對(duì)于數(shù)據(jù)庫本身來講,我們的建議是,對(duì)整個(gè)業(yè)務(wù)系統(tǒng)和數(shù)據(jù)庫,都要做到6個(gè)維度進(jìn)行數(shù)據(jù)安全保護(hù):攻擊者進(jìn)不去,非授權(quán)者信息拿不到,竊取保密信息看不懂,系統(tǒng)和信息篡改不了,系統(tǒng)工作癱不了。
攻擊者進(jìn)不去:至少需要從網(wǎng)絡(luò)層杜絕攻擊者接觸到數(shù)據(jù)庫;例如,應(yīng)該避免通過互聯(lián)網(wǎng)訪問管理數(shù)據(jù)庫,避免未經(jīng)授權(quán)內(nèi)網(wǎng)設(shè)備訪問數(shù)據(jù)庫;如果值班同事需要在家運(yùn)維,也應(yīng)選擇通過VPN訪問數(shù)據(jù)庫;條件差點(diǎn)兒至少應(yīng)該采用復(fù)雜密碼,使用不常見端口,且僅在必要的時(shí)間開放互聯(lián)網(wǎng)訪問數(shù)據(jù)庫。
非授權(quán)者信息拿不到:例如,梳理每一個(gè)數(shù)據(jù)庫帳號(hào)權(quán)限,最小粒度授權(quán),避免多人多系統(tǒng)共用一套帳號(hào);高權(quán)限帳號(hào)必須和物理設(shè)備綁定;移出非必要工具,及時(shí)升級(jí)數(shù)據(jù)庫,并在數(shù)據(jù)庫前端部署必要的安全設(shè)備。
竊取保密信息看不懂:我們需要讓核心數(shù)據(jù)庫加密,或讓核心字段加密存儲(chǔ),加密也建議采用雙重加密:例如用戶密碼字段等;另外,加密密鑰需存儲(chǔ)在更安全位置。
系統(tǒng)和信息篡改不了:例如,部署數(shù)據(jù)庫防火墻,數(shù)據(jù)庫安全審計(jì)系統(tǒng)都是放篡改的手段;如果節(jié)前來不及,先利用SQL注入漏洞掃描對(duì)系統(tǒng)做全面的檢查,保證接口透傳SQL時(shí)將特殊字符做轉(zhuǎn)義,避免透過SQL注入篡改數(shù)據(jù)。
系統(tǒng)工作癱不了:從網(wǎng)絡(luò)和業(yè)務(wù)方面,接入防DDOS攻擊系統(tǒng)或接入CDN是減少業(yè)務(wù)癱瘓的有效辦法。
這里的安全命題非常大,不僅僅部署幾臺(tái)防火墻,做些技術(shù)準(zhǔn)備就好;更需要每個(gè)企業(yè)從管理制度到技術(shù)方案都要嚴(yán)格要求。而騰訊把這些安全相關(guān)的經(jīng)驗(yàn)沉淀下來,并將整體安全解決方案開放到了騰訊云給企業(yè)來使用,包括防DDoS,放SQL注入,提供數(shù)據(jù)庫安全審計(jì)安全特性,也歡迎大家節(jié)后使用。
如何在數(shù)據(jù)庫順利部署海量服務(wù)?
胥彪:互聯(lián)網(wǎng)領(lǐng)域,應(yīng)對(duì)海量服務(wù)方案很多,比較成熟和具有性價(jià)比的方案是采用分布式數(shù)據(jù)庫。
例如,騰訊云兼容MySQL協(xié)議的分布式數(shù)據(jù)庫TDSQL,支撐了騰訊云90%的計(jì)費(fèi)業(yè)務(wù),兼容PostgreSQL協(xié)議的分布式數(shù)據(jù)庫PostgreSQL-XZ,支撐微信支付的核心模塊。而正是通過內(nèi)部海量業(yè)務(wù)和多年積累,騰訊云分布式數(shù)據(jù)庫也在業(yè)內(nèi)具有良好的口碑。這些在騰訊云官網(wǎng)和網(wǎng)絡(luò)上都有介紹,歡迎大家了解。
來源:中關(guān)村在線徐鵬