自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

1分鐘出票5萬張!阿里電影節(jié)搶票技術(shù)揭秘

開發(fā) 開發(fā)工具
對于電影愛好者來說,每次的電影節(jié)、影展活動,都是搶票大戰(zhàn)的開啟,出票速度幾乎可以用“秒空”來形容,例如上海國際電影節(jié)線上開售的記錄是1分鐘售出5萬張。今天,阿里高級開發(fā)工程師念賢主要圍繞售票環(huán)節(jié),講述阿里文娛的云智系統(tǒng)是如何支撐高流量并發(fā),保障系統(tǒng)的穩(wěn)定,不出現(xiàn)重賣等實(shí)現(xiàn)方案背后的技術(shù)。

 ????阿里妹導(dǎo)讀:對于電影愛好者來說,每次的電影節(jié)、影展活動,都是搶票大戰(zhàn)的開啟,出票速度幾乎可以用“秒空”來形容,例如上海國際電影節(jié)線上開售的記錄是1分鐘售出5萬張。

今天,阿里高級開發(fā)工程師念賢主要圍繞售票環(huán)節(jié),講述阿里文娛的云智系統(tǒng)是如何支撐高流量并發(fā),保障系統(tǒng)的穩(wěn)定,不出現(xiàn)重賣等實(shí)現(xiàn)方案背后的技術(shù)。

一、背景介紹

先簡單分析一下電影節(jié)的搶票業(yè)務(wù),典型特征是在大流量搶購、高并發(fā)的場景下,讓用戶極快的鎖定座位然后出票,特別是熱門的影片,會異常的火爆。第一道壓力是查詢已售座位列表和鎖座,需要能快速的支撐用戶的鎖座請求,且實(shí)時查詢到已售賣的座位列表,避免發(fā)起無效的鎖座請求;第二道壓力是出票,如果鎖座成功,但一直出票失敗,會給用戶帶來很不好的體驗(yàn)。

二、架構(gòu)設(shè)計(jì)思考的方向

1.讓業(yè)務(wù)贏

在分層設(shè)計(jì)上,分成渠道接入層、業(yè)務(wù)層和服務(wù)層。在業(yè)務(wù)層,對外業(yè)務(wù)和管理后臺功能獨(dú)立,職責(zé)清晰,快速支撐業(yè)務(wù);服務(wù)層沉淀基礎(chǔ)服務(wù),構(gòu)成穩(wěn)定的業(yè)務(wù)和基礎(chǔ)服務(wù)。

??

??

圖2:業(yè)務(wù)技術(shù)大圖

2.讓系統(tǒng)穩(wěn)定

在架構(gòu)設(shè)計(jì)上,接入統(tǒng)一網(wǎng)關(guān)讓系統(tǒng)安全,有限流,對庫存中心和訂單中心進(jìn)行數(shù)據(jù)隔離,且加入多級緩存方案,讓系統(tǒng)穩(wěn)定。

??

??

圖3:技術(shù)架構(gòu)圖

三、實(shí)現(xiàn)方案與技術(shù)解析

1.高并發(fā)流量如何抗?

電影節(jié)的流量是非常典型的秒殺場景,瞬時流量非常高,對于系統(tǒng)的高性能要求就注定很高,在云智中,我們是如何抗高并發(fā)流量的?我們通過以下三點(diǎn)來進(jìn)行闡述:熱點(diǎn)數(shù)據(jù)隔離、流量削峰漏斗、多級緩存。

1)熱點(diǎn)數(shù)據(jù)隔離

在熱點(diǎn)隔離這塊,云智選擇的策略包括:數(shù)據(jù)隔離和業(yè)務(wù)隔離。

數(shù)據(jù)隔離:是把查詢已售賣座位和已鎖定座位等庫存相關(guān)的熱點(diǎn)數(shù)據(jù),隔離出來,單獨(dú)業(yè)務(wù)數(shù)據(jù)庫,且使用分庫分表,減少系統(tǒng)性能壓力,提高吞吐量。

業(yè)務(wù)隔離:電影節(jié)的業(yè)務(wù)數(shù)據(jù),獨(dú)立的業(yè)務(wù)數(shù)據(jù)生成能力,圈定參與活動的業(yè)務(wù)數(shù)據(jù),進(jìn)行緩存預(yù)熱,起到隔離的效果。

2)流量削峰漏斗

關(guān)鍵詞是“分層削峰”,漏斗式的減少請求流量,在業(yè)務(wù)鏈路的過程中,我們會進(jìn)行業(yè)務(wù)校驗(yàn),層層過濾,如用戶的賬號安全、購買資格,影院、影廳等基礎(chǔ)信息狀態(tài)是否正常,要購買的商品信息狀態(tài)是否正常、秒殺是否已經(jīng)結(jié)束等,每個層次都盡可能的過濾掉非法的請求,只在最后端處理真正有效的請求,最終減少請求到數(shù)據(jù)庫DB的寫操作流量,保證系統(tǒng)處理真正有效的請求。

以鎖座流程為例子:

??

??

圖4:流量削峰漏斗示例圖

3)多級緩存

在分層漏斗的前提下,云智采用分布式緩存和本地緩存LocalCache多級緩存的方案來抵抗高并發(fā)流量,以下簡要介紹一下在系統(tǒng)中使用的策略:

a)緩存預(yù)熱。在指定參加活動的場次后,會在限定時間內(nèi)停止變更,在開售前,會自動進(jìn)行預(yù)熱緩存,避免激增流量擊穿緩存;

b)緩存失效時長控制,對基礎(chǔ)數(shù)據(jù)實(shí)體的VO對象和DO對象采用失效時間長短的緩存控制,靜態(tài)數(shù)據(jù)和DO實(shí)體使用長失效時長的策略:不失效或24H;動態(tài)數(shù)據(jù)和實(shí)體Info使用比較短的失效時長策略:分鐘級,比如冪等性KEY的緩存時間為2min;

c)本地緩存LocalCache使用的緩存時長策略分3種:2s,60s,122s。優(yōu)先讀本地的緩存,其次讀遠(yuǎn)程分布式的緩存,使得系統(tǒng)可以抵抗瞬間的高并發(fā)流量。

示例圖如下所示:

??

??

圖5:多級緩存示例圖

將緩存分2層結(jié)構(gòu):

  • 第一層是本地緩存結(jié)構(gòu):用戶、權(quán)限、基礎(chǔ)信息等靜態(tài)數(shù)據(jù),我們優(yōu)先選擇本地緩存;
  • 第二層是全量的緩存實(shí)體信息的DO和VO信息,這層采用的是Tair分布式緩存。

2.系統(tǒng)的穩(wěn)定性、高可用性如何保證?

對于任何檔期或者活動,系統(tǒng)的穩(wěn)定性都是第一要素,針對電影節(jié)的活動場景,我們使用了很多設(shè)計(jì)上的穩(wěn)定性模式,其中比較核心的有:多輪全鏈路壓測、限流、降級、動態(tài)擴(kuò)容、流量調(diào)度、減少單點(diǎn)、依賴簡化等方式;除了以上幾點(diǎn),本節(jié)我們重點(diǎn)聊一聊我們在電影節(jié)過程中是如何保障備戰(zhàn)的?

1)保障備戰(zhàn)體系

??

??

圖6:保障備戰(zhàn)體系圖

a)在戰(zhàn)前階段

這個階段的工作會比較多,只有做到事前充分準(zhǔn)備,才能有更好的保障結(jié)果,主要包括以下幾個部分:

(1)梳理薄弱點(diǎn),包括系統(tǒng)架構(gòu)、系統(tǒng)薄弱點(diǎn)、核心主流程,識別出來后制定應(yīng)對策略;

(2)全鏈路壓測,對系統(tǒng)進(jìn)行全鏈路壓測,找出系統(tǒng)可以承載的最大QPS;

(3)限流配置,為系統(tǒng)配置安全的、符合業(yè)務(wù)需求的限流閥值;

(4)應(yīng)急預(yù)案,收集各個域的可能風(fēng)險(xiǎn)點(diǎn),制作應(yīng)急處理方案;

(5)安全保障,主要聚焦在賬號權(quán)限管控,以最小夠用原則為準(zhǔn),防止權(quán)限濫用,安全無小事;

(6)戰(zhàn)前演練,通過演練來檢驗(yàn)保障體系是否完善,演練開票現(xiàn)場,提高團(tuán)隊(duì)響應(yīng)和處理能力;

(7)作戰(zhàn)手冊,制定作戰(zhàn)手冊,明確作戰(zhàn)流程和關(guān)鍵點(diǎn)節(jié)點(diǎn)的任務(wù)以及溝通機(jī)制。

??

[[318160]]

??

第九屆北京國際電影節(jié)保障現(xiàn)場

b)在戰(zhàn)中階段

活動開售,我們也稱為戰(zhàn)中,整個項(xiàng)目組主要專注三件事情,即“監(jiān)控““響應(yīng)”和“記錄”。項(xiàng)目組的同學(xué)都必須要保持作戰(zhàn)狀態(tài),嚴(yán)格按照應(yīng)用owner機(jī)制,負(fù)責(zé)巡檢應(yīng)用情況,及時同步技術(shù)數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)是否有異常。同時,在戰(zhàn)中,我們臨時組建“保障虛擬小組”,用于應(yīng)對大促期間可能出現(xiàn)的緊急客訴等問題,及時做出決策,控制影響范圍,同時也能提高整體作戰(zhàn)能力。記錄,是在戰(zhàn)中過程中必須要記錄下各應(yīng)用的峰值,及時沉淀技術(shù)數(shù)據(jù),為后續(xù)系統(tǒng)建設(shè),流量評估等提供參考借鑒。

c)在戰(zhàn)后階段

這個階段的主要工作是項(xiàng)目復(fù)盤,復(fù)盤的內(nèi)容主要包括:項(xiàng)目結(jié)果、項(xiàng)目回顧、項(xiàng)目沉淀和改進(jìn),將項(xiàng)目過程中收集到的問題和故障進(jìn)行詳細(xì)分析,并將項(xiàng)目過程中沉淀出來的,關(guān)于系統(tǒng)穩(wěn)定性保障的經(jīng)驗(yàn)沉淀到日常,讓活動保障的常態(tài)化逐步落地。

2)優(yōu)秀實(shí)踐

a)精準(zhǔn)監(jiān)控

通過監(jiān)控,實(shí)時發(fā)現(xiàn)各個服務(wù)是否觸發(fā)限流值,及時進(jìn)行Review,調(diào)整限流值,保證業(yè)務(wù)成功率和系統(tǒng)穩(wěn)定。

對系統(tǒng)基礎(chǔ)值班和業(yè)務(wù)量指標(biāo)進(jìn)行精準(zhǔn)監(jiān)控,如load,內(nèi)存,PV,UV,錯誤量等,避免因內(nèi)存泄露或代碼的Bug對系統(tǒng)產(chǎn)生影響,精準(zhǔn)監(jiān)控,提前感知內(nèi)存泄露等問題。

b)數(shù)據(jù)大盤

通過數(shù)據(jù)大盤,實(shí)時匯總數(shù)據(jù),展示業(yè)務(wù)數(shù)據(jù),為系統(tǒng)、為業(yè)務(wù)提供更加直觀的業(yè)務(wù)支持,也可以更加有效的進(jìn)行業(yè)務(wù)備戰(zhàn)。

??

[[318161]]

??

第二十二屆上海國際電影節(jié)保障現(xiàn)場

3.如何保證不出現(xiàn)重賣?

在業(yè)務(wù)過程中,我們實(shí)現(xiàn)了很多業(yè)務(wù),解決了很多困難,我們重點(diǎn)闡述以下兩個痛點(diǎn),一個是惡意鎖座,一個是防止超賣。

1)如何解決惡意鎖座?

首先我們采用的扣減庫存方式是預(yù)扣庫存,用戶操作鎖定座位時即鎖定庫存,那我們?nèi)绾谓鉀Q惡意鎖座呢?

a)鎖座訂單中會生成一個“庫存失效時間”,超過該時間,鎖座訂單會失效釋放庫存;

b)限制用戶購買數(shù)量,一人最多只能購買6張票;

c)接入黃牛防控系統(tǒng);

2)如何防止庫存超賣?

電影票不同于電商業(yè)務(wù)普通的標(biāo)品,是不允許出現(xiàn)超賣的情況,否則會出現(xiàn)重票,從而引發(fā)客訴輿論問題,所以在庫存數(shù)據(jù)一致性上,需要保障在高并發(fā)情況下不出現(xiàn)重票,我們的解決方案是:

a)使用分布式緩存,在分布式緩存中預(yù)減庫存,減少數(shù)據(jù)庫訪問;

b)使用數(shù)據(jù)庫唯一鍵,在鎖座表中,設(shè)定場次Id和座位Id作為唯一鍵。鎖定座位時,如果座位已經(jīng)售賣,會報(bào)出數(shù)據(jù)庫異常,不允許某一個座位重復(fù)售賣。

四、總結(jié)

回顧電影節(jié)搶票,我們首先想到的是能抗高并發(fā)流量,能讓系統(tǒng)穩(wěn)定。通過上述章節(jié)我們揭開了高性能、高可用等背后的技術(shù),展示了一個典型搶票大戰(zhàn)的技術(shù)方案,核心技術(shù)包括:

  • 讓業(yè)務(wù)贏 = 完整的業(yè)務(wù)應(yīng)用 + 支撐核心業(yè)務(wù)
  • 高性能、高可用 = 流量削峰 + 限流降級 + 多級緩存
  • 平臺成熟化 = 完善的監(jiān)控 + 保障方案

在這個過程中,我們沿著讓系統(tǒng)穩(wěn)定、讓業(yè)務(wù)贏的設(shè)計(jì)思想,不斷的思考和落地這些技術(shù)細(xì)節(jié),沉淀核心技術(shù),以達(dá)到讓用戶體驗(yàn)流暢的搶票過程。

 

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2014-06-13 11:33:27

上海國際電影節(jié)

2021-07-26 07:47:37

前端自動搶票

2018-02-07 17:12:00

2013-01-22 09:31:33

2019-01-09 09:35:41

搶票Python軟件

2018-01-26 10:31:11

搶票軟件公平

2013-01-17 10:49:42

2018-01-10 15:23:09

2019-09-08 23:00:19

GitHub代碼開發(fā)者

2013-04-26 11:46:30

WWDC

2019-01-16 16:00:33

2013-01-28 14:16:59

2019-01-16 14:16:05

架構(gòu)技術(shù)棧微信半月刊

2012-09-19 14:31:44

獵豹瀏覽器搶票

2021-01-29 11:43:53

SSHLinux命令

2013-01-21 16:02:29

Chrome搶票

2019-12-30 07:00:51

技術(shù)研發(fā)系統(tǒng)

2013-01-22 17:10:42

瀏覽器技術(shù)解析

2009-12-03 08:55:12

Java EE 6

2019-12-25 10:29:59

GitHub代碼開發(fā)者
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號