云开发如何帮助业务扛过大流量活动洪峰丨深度好文
在企業里,做活動是一種十分常見的需求,有面向C端用戶開展的活動,也有面向公司內部員工的活動。隨著互聯網技術的不斷發展和疫情等方面的原因,線上開展的活動也越來越多,常見的形式有:內容征集、評論彈幕、點贊投票、競猜答題、抽獎紅包、組隊分享、PK排行榜等,無論是單項活動還是多種玩法,其中不乏有會產生大量并發請求的活動。
活動期間,用戶在短時間內密集參與,像瓜分紅包、秒殺等活動,將引發用戶集中點擊,產生高并發請求,對系統產生一定的壓力。如果活動期間負載過高或系統崩潰,將會導致用戶無法參與活動,引起用戶吐槽和投訴。
然而,活動類系統很多時候僅是“一次性”的,所以大家在這類系統的開發上投入的人力物力將相對較少,甚至有些活動是研發人員利用空隙時間開發的。所以往往我們發現,如果不是進行細致的開發設計和上線前的壓測,一些大活動的系統在上線后出現問題的概率是非常高的。
一個能支撐大流量的活動系統是活動能夠成功的關鍵,接下來我們一起看下大流量的活動系統應該如何設計架構。
大流量活動系統的架構長啥樣?
大流量活動系統需要應對大量并發調用,在系統設計上就要求具備水平擴容的能力來滿足業務需求。通常會采用如下的分層的系統架構設計,因為活動系統功能通常比較簡單,模塊較少,所以系統架構不會很復雜。
通常在系統從0~1階段,為了讓系統快速上線,通常是不考慮分層的,但是在面對大流量活動系統時就不得不進行分層設計,分層架構可讓系統更容易進行橫向擴展,提升系統吞吐量,這也是大流量系統的核心需求。同時,分層架構也增加了系統的復雜度和工作量。
以上架構分為LB、業務接入層、業務邏輯層、數據存儲層等多個層次。
LB
用戶流量入口,對外屏蔽內部服務架構細節,對內提供反向代理流量轉發,提升整個系統的吞吐量。LB的核心作用是通過流量分發提升整個系統的吞吐量。
業務接入層
這層用來實現一些通用的業務邏輯處理,如數據編解碼、用戶身份校驗、訪問頻率控制、限流降級、數據緩存、微服務入口等功能。這層通常在業務邏輯層內部通過中間件的形式實現。開發需要實現該層的業務邏輯,還需要和底層資源進行交互。
該層實現的業務功能是很多系統所需要的,多個業務邏輯層服務共用該層服務。值得注意的是,該層通常是無狀態的,可以通過水平擴展增加系統吞吐能力。
業務邏輯層
業務邏輯實現的核心層,業務邏輯相關代碼基本都集中在這一層。該層需要開發人員花費大量的時間進行設計實現,開發時間的多少將直接影響業務邏輯是否能夠進行充分的進行設計和實現。業務性能問題,系統Bug常常光顧這一層。
開發者需要實現該層的業務邏輯,還需要和底層資源進行交互。該層通常是無狀態的,可以通過水平擴展增加系統吞吐能力。
數據存儲層
業務數據存儲層,幾乎所有的業務數據最終都需要持久化到數據庫中,這層通常是系統瓶頸所在。
所有的活動類業務都需要數據庫層,正常合理的使用數據庫對系統性能將會產生非常大的影響。
數據存儲層是有狀態的,較難通過水平擴展增加系統的吞吐能力。通常是通過縱向提升數據庫實例配置規格來提升數據庫性能,但是縱向配置是有物理上限的,不能無限提升的。這就需要開發人員在這一層進行充分的設計,提升這一層的服務能力。
如上的系統架構是最常見最基礎的分層系統架構,但在面臨大流量活動系統時,即使經驗豐富的開發人員,也不敢打保票說一定抗的住的。
實現大流量系統面臨的挑戰有哪些?
系統各層需要考慮的問題有:
當我們把架構中每一層需要考慮事項展開之后,系統的開發工作量就不會想前面看著少了,原本看著簡單的系統就不再簡單,需要考慮和解決的問題非常多。
流量入口LB層
安全防護:防止各類安全攻擊,破壞系統、盜取數據
接入質量:需要考慮使用各類網絡各個地域的用戶的接入質量,否則很可能有部分用戶因接入質量無法參與活動
LB配置維護:需要靠性能可靠性,負載均衡策略,RS更新維護與健康檢查、日志監控告警等多個方面的問題
撥測監控:監控系統是否正常提供服務
網絡帶寬:網絡帶寬是否足夠,帶寬問題通常比較隱蔽不易發現
業務核心層
基礎資源:涉及計算、網絡、存儲等資源的創建配置管理,涉及安全掃描、安全防護、監控告警、系統優化等多訪問的問題
業務部署:涉及服務的發布變更、頻控限流、容錯容災、性能優化、日志采集等諸多方面的問題
業務開發:業務邏輯設計實現,容錯、容災能力實現
數據存儲層
數據安全:防止密碼泄露數據被盜等問題
業務設計:數據庫分庫分表設計,數據庫索引設計
性能優化:提升系統吞吐能力
高性能高可用
高性能:系統各層的處理能力及性能瓶頸,如何排除鏈路中的性能瓶頸及優化,排除鏈路中的性能瓶頸可能需要進行大量的工作才能發現
高可用:全鏈路的容錯、容災設計,如何降低避免諸如網絡抖動、可用區故障等故障對系統造成的影響
除了圖中列舉的,業務上還需考慮如下問題:
如何對用戶身份進行校驗保證用戶身份的真實性?
如何防刷、防止羊毛黨薅羊毛?
如何對業務數據進行統計?
如何快速搭建開發、生產等多套環境?
如何快速處理線上問題?
如何進行活動運營?實現一套運營管理后臺系統?
如何進行活動開關控制?定時輪詢 or 活動推送?
當所有這些問題匯集到一起時,對開發人員產生了不小的挑戰。為了使活動萬無一失,我們都需充分考慮。研發團隊具備:
系統架構:需要進行整體性的技術架構設計規劃
系統運維:能夠對全鏈路業務資源進行運維管控
業務設計:實現業務邏輯,進行容錯、容災設計
性能優化:充分考慮系統可能存在性能瓶頸,并針對性的進行設計優化
容量設計:對系統容量進行評估,如何應對超出預估的大流量調用
監控告警:主動發現系統當中的各類問題,提早排除隱患
服務部署:相關業務資源的申請及部署,業務服務的部署
如此一來,開發團隊的精力可能會被分散到系統的各個方面,這將導致開發團隊沒有足夠的精力聚焦于業務邏輯,也沒有足夠的精力解決系統面臨的最核心問題:如何應對大量高并發的服務調用。
高性能高可用的架構設計原則和方案目前有很多,但要實現一個高性能高可用的系統卻并非易事,其背后有非常多的具體細致的工作要做:如系統容錯容災容量等問題。
基于Serverless模式的騰訊云·云開發(以下簡稱為“云開發”),可幫助開發者解決上述問題和挑戰。
Serverless 云開發:解題之法?
業務系統概括起來需要實現兩個能力:
業務邏輯:實現業務業務邏輯,包括前端、后端業務邏輯。部分業務邏輯為通用需求。
訪問鏈路:搭建高性能大容量的訪問鏈路,連通用戶側和業務邏輯層。這是通用需求。
騰訊云·云開發對通用的訪問鏈路以及部分通用的邏輯抽象出來進行統一的實現,幫助開發者解決通用問題。云開發提供安全、高可靠、高并發、高性能的通用后端能力基礎,為開發者提供高性能高并發大容量的訪問鏈路,讓開發者無需關心鏈路搭建涉及的一系列問題,讓業務方基于Serverless架構實現業務邏輯,為開發者屏蔽底層基礎架構,提供高效的彈性擴縮容能力,解決業務容量問題。云開發幫助業務解決通用性問題,讓開發者有更多精力專注于解決業務本身,降本增效。
傳統模式和云開發模式的對比如圖所示:
在云開發模式下,用戶僅需關注前后端的核心業務邏輯設計實現,無需關心底層基礎設施和訪問鏈路。
云開發服務架構
3.1 業務資源的彈性伸縮能力
開發者基于騰訊云·云開發提供的業務資源實現其業務邏輯,依托于云開發平臺底層資源的彈性擴縮容能力,用戶業務具備了彈性伸縮的能力,高效快速,避免了傳統模式下擴容所產生了資源和人力成本。業務服務按需使用資源,按量計費,節省項目成本。
云函數
云函數平臺架構
用戶請求經云函數接入層 Invoker 進入到用戶云函數運行時,觸發用戶邏輯邏輯,云函數是一種彈性的計算資源,能夠自動跟隨用戶的并發量進行彈性伸縮,如下圖所示:
每個并發的用戶請求都會對應一個云函數實例,當用戶請求上漲時,云函數實例自動進行擴容,當用戶請求量下降時,云函數實例逐步進行縮容。彈性伸縮的過程是系統自動進行的,方便快速,為用戶提供了強大的彈性伸縮能力,進而為用戶業務的高并發提供了強有力的能力支持。
云開發目前為開發者提供單個云函數上限 1000 并發的能力支持,如果云函數的平均執行時間為 100ms,那么單個云函數可以達到 10000 QPS,可滿足大部分用戶場景的需求,50個云函數的總QPS將可以達到 50W QPS。
云數據庫
騰訊云·云開發為用戶原生提供數據庫實例,用戶不需要購買維護數據庫實例,通過云開發SDK,開發者可以快速開始進行業務開發,節省時間。
云數據庫在接入層和數據庫底層也做了非常多的專項優化,同時也在部署方面進行了諸多方面的設計。
云開發數據庫架構
云數據庫接入層進行了分層設計并支持大規模的水平橫向擴容,用戶請求可在集群間進行靈活調度,應對可能出現的服務故障,提供更高的可用性和更短的恢復時間。用戶請求經數據接入層服務進入到數據庫引擎層,數據庫接入層部署多個跨AZ的集群進行。數據庫接入層幫助用戶實現了數據庫連接的維護與優化,用戶無需關心數據庫如何連接訪問,維護數據庫賬密,提升了數據庫的安全性。
騰訊云·云開發數據庫為用戶提供:
自動加索引:對用戶慢查詢請求進行分析,并針對性的進行自動索引優化,能夠在用戶無感知的情況下優化數據庫性能,提升系統吞吐量,提升并發能力。
自動彈性Cgroups按需提供計算資源:根據用戶數據庫負載按需調整數據庫運行所需要的計算資源。
自動進行在線熱遷移:當主機負載過較高時,自動在線熱遷移用戶實例到負載低的主機,此過程用戶幾乎是無感知的。熱遷移同時也能夠支持全局的數據庫主機間的負載均衡。
云開發通過以上措施,在降低用戶數據庫成本的同時,為用戶提供數據庫彈性能力,借助這些能力,開發者較少的關注數據庫。
云開發數據庫還為開發者提供實時數據庫推送能力,用戶基于此實現實時推送類業務,降低搭建推動服務的成本。
如前文所述,數據庫層是有狀態的,較難進行橫向擴縮容,云開發為用戶提供一定的縱向擴縮容能力與優化,提升數據庫性能。用戶自身也需要對數據進行一定的設計優化。
3.2 訪問鏈路的彈性伸縮能力及可靠性設計
云開發平臺為用戶搭建了直達業務邏輯的高性能大容量的訪問鏈路。用戶不需要搭建和維護訪問鏈上的一系列資源服務,降低了資源和人力成本。
云開發平臺的性能和可用性將直接影響到用戶業務的性能可用性。云開發作為一個公有云服務,在給開發者提供各類能力支持同時,更重要的是能為客戶業務提高性能高可靠的服務,為此,云開發服務對系統的可用性容量等方面進行大量的設計優化。
容錯:云開發服務通過鏈路優化、異常重試、多級緩存、緩存續期、失敗降級、故障剔除等多方面的優化,提升系統系統的容錯能力。
容量:云開發通過容器化的服務部署方式,實現訪問鏈路的彈性伸縮能力,具備了容器化所帶來的優勢,當用戶流量上漲時,訪問鏈路可隨著用戶流量自動的進行彈性擴縮容,避免了因訪問鏈路瓶頸導致等用戶業務受限的問題。
容災:基于容器化的部署方式,數據流接入層服務進行了多集群的服務部署,每個集群都進行了跨可用區部署,具備跨可用區的容災能力。當單機、單可用區出現故障時,能夠快速的通過集群切換進行容災。同時,數據流服務依賴的其他服務,都具備多集群的跨AZ的容災能力。
在騰訊云·云開發模式下,云開發搭建好從客戶端到業務邏輯的訪問鏈路,開發者無需關注用戶端到業務邏輯之間的鏈路搭建以及涉及的一系列問題。同時,云開發為用戶提供當前流行的Serverless架構能力,開發者基于輕量云函數、云托管來實現業務邏輯,無需關心基礎設施,具備Serverless所帶來的極簡運維、按量計費、彈性伸縮等方面的優勢。幫助開發者真正的做到了僅需關注業務邏輯層的實現,解放了開發者的生產力,讓開發者有更多的時間專注于業務設計。
除了,云開發在幫助用戶解決以上問題的同時,還為開發者提供了很多其他方面的能力,讓開發者可以獲得額外的服務能力支持。
降本增效,極簡運維,降低溝通成本,免去了很多繁瑣的事項,節省開發時間,在有限的開發時間中能夠有更充分的時間進行業務邏輯設計。
免架構設計,對大部分場景來說,可以直接進行業務開發,不需要太多架構設計
免除服務器搭建及運維
資源按需使用按量計費,降低成本
日志、監控告警能力支持
微信原生接入,借助微信原生能力
私有鏈路,接入優化,高安全性,防劫持、防攻擊、防刷、防薅羊毛
身份認證,原生免鑒權,可靠的用戶身份信息,防冒充,防惡意用戶
開放API,原生云調用能力,方便的進行微信開發API、微信支付API調用
實時數據推送,開發者搭建推送服務需要
活動開關:為開發者提供運營開關等能力支持
評論彈幕:為開發者提供評論彈幕等能力支持
CMS內容管理
活動運營:開發者可以通過CMS進行活動運營,如運營短信
后臺管理:為開發者提供免開發的后臺管理能力,節省開發成本
工具支持
小程序開發者工具
CLI命令行工具
Cloudbase Framework
VSCode插件
低碼平臺
高效的拖拽式低代碼開發平臺,通過行業化模板、拖放式組件和可視化配置快速構建多端應用
基于云開發底層能力支持,云開發原生能力支持
云開發團隊專家服務,幫助業務解決業務上遇到的各類問題,提供優化建議。
抗住 5億訪問,騰訊云·云開發為你保駕護航
當一種新的技術形態出現在人們面前,有人選擇先觀望,再決定是否嘗試接納,而有人則大膽嘗試。Serverless和騰訊云·云開發雖誕生僅兩年,不妨礙云開發受到一大批開發者的追捧。目前,云開發注冊賬戶數超過65萬,服務超過100萬開發者,云開發日均調用量近10億次,2021春節期間,日服務調用量超過了16億次。
云開發在騰訊游戲、微信支付、微信讀書、貓眼電影、深圳機場等多樣化活動上有較好的應用,幫助業務快速實現需求,平穩支持大流量洪峰。
如去年《創造營2020》決賽成團之夜,云開發保障業務穩定運行,實現了100%安全無死角的同時,還在投票“秒殺”場景下高性能地 hold 住全場,為節目的順利進行保駕護航。
上線兩周、訪問次數即破5億的四川省官方健康碼“四川天府健康通”小程序就是基于云開發底座完成開發的。前端采用WeApps云開發低碼的可視化、組件化、低碼化等能力,后端采用了云函數、云數據庫、云托管等云原生能力,充分發揮了云端低碼可視化開發的優勢及便利。在十余天內就高質量地完成了定制化開發工作。同時與傳統開發模式相比,交付效率提升一倍,人力成本卻能縮減一半。
今年春節,微信紅包封面再次引爆社交網絡,限時開放的個人紅包封面制作活動更是直接拉低門檻,讓更多人能夠便捷享受到定制紅包封面帶來的樂趣,這活動便是搭載在云開發上,在整個活動期間平臺抗住了上億流量洪峰,資源成本僅花費幾千元,有效地提高研發效率,極大降低人力成本。
總結
一個簡單的系統需充分的設計才能迎接大流量活動的挑戰,各種類型的系統都有一些通用的基礎性的工作,騰訊云·云開發將這類通用的工作從系統中抽象出來,以服務的方式提供給用戶,讓開發者無需關心這些基礎工作。
大流量的活動系統往往需要線上擴容的需求,云開發通過提供Serverless架構承載用戶業務,讓業務無需關系底層基礎設施的同時,具備自動化的彈性擴縮容能力,幫助系統抗住大流量訪問。
如此一來,云開發可幫助開發者從基礎性工作中解放出來,有更多時間做業務設計、數據庫設計、壓力測試等工作,讓系統更好地迎接大流量活動調用。
作者:劉艷杰,騰訊云·云開發高級研發工程師
- End -
? ? ? 點擊在看讓更多人發現精彩
總結
以上是生活随笔為你收集整理的云开发如何帮助业务扛过大流量活动洪峰丨深度好文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯 QQ 看点图文多目标推荐实践经验
- 下一篇: Nginx 架构浅析