做者:MacTalk算法
之前過年發紅包,是紙包的,並且只發給還沒工做的晚輩就行了。自從有了移動支付,事情慢慢變得複雜起來。若是你在負責一個部門,過年要給部門員工發紅包。若是你在運營一個公司,你得給公司員工發紅包。給娃發了個紙紅包,她還會和你要移動紅包。因此呢,不少人過年在搶紅包,我基本上是在發紅包,以致於每一年各大互聯網公司的紅包戰事,我都少有參與。sql
不過支付寶的五福紅包我每一年都參與,倒不是我折騰,每次都被家人搶過手機,湊齊五福,到點提醒我,開。因而得了一塊多。我說爲啥要這麼作呢,畢竟發出去的比這多好幾千倍。家人說,過年啦,圖個吉祥熱鬧唄。數據庫
基於這個考慮,我估計全國有不少人會使用支付寶紅包。正好阿里發佈了相關的內容,咱們此次能夠聊聊支付寶紅包背後的故事。安全
2019 年新春是支付寶五福紅包活動第四次與全國人民見面。果不其然,參加的人數超過了 4.5 億。能夠說,三分之一的中國人都是這麼想的,當年的移動支付,也是這麼拉開帷幕的。服務器
中國人過年,圖的就是順遂、圓滿、喜慶。紅包的意義不只在於錢,更是年味的體現,支付寶的紅包更多象徵了祝福、好運等意味,正是所以,這一活動對於用戶體驗的要求很是苛刻:掃福、贈福、沾福……福氣須要手到擒來,對應到系統,響應必需要如絲般順滑;活動結束後開獎,紅包金額越快到帳越好,由於喜悅不容等待啊。同時,用戶之間的互動功能也須要充分保障,畢竟中國人的年是團圓的年,是人與人之間相互鏈接、分享祝福的節日。併發
要在數億用戶的規模上實現這樣的用戶體驗絕非易事。4.5 億人每點擊一次屏幕,海量的數據都會匯聚成潮水涌入系統。如何保證系統「不卡、不錯、不宕機」,讓每個用戶都能開開心心拿紅包呢?運維
爲了達到這樣的效果,螞蟻金服的各個技術團隊協力搭建起完整的鏈路,共同守護互聯網時代的新年味。機器學習
今年五福紅包活動中新增的玩法「沾沾卡」,讓用戶能夠「沾」取好友的福卡或「花花卡」(可代還整年花唄帳單的獎品卡),在使用「沾沾卡」的頁面上,用戶能夠看到一張好友排名榜,這份榜單按持有福卡總數的多少排列,用戶能夠很輕鬆地找到手握大量福卡的「土豪」,去沾沾他們的豪氣。分佈式
這一玩法互動性極強,獎品自己又足夠有吸引力,創意很好,但實現起來遠非那麼輕鬆。「好友福卡排名榜」看上去只須要計算每一個好友的福卡總數,再進行排列,是個很簡單的計算問題,但幾億用戶參與的狀況下,假設每人有10個好友,查詢量就會達到數十億級別;並且每一個人所持有的福卡總數都是實時更新的,這份榜單每時每刻都會波動,實時計算會對數據庫形成巨大的壓力。高併發
Oracle、Mysql 等普通的關係型數據庫,在面對這種問題時每每顯得力不從心。用關係型數據庫查詢「用戶的好友」,尚且能在毫秒級完成;但若是要查詢「好友的好友」,耗時就會指數級上升。隨着查詢深度的深刻,時延很快就會高到難以接受的程度:查詢深度達到三級時(好友的好友的好友),關係型數據庫的耗時將超過30秒;而當深度達到五級時,關係型數據庫就徹底「懵」了,沒法反饋查詢結果。
也就是說,假如用普通的關係型數據庫來支持「沾沾卡」的活動,用戶可能會遭遇點擊頁面後大半天沒反應,甚至頁面崩潰的狀況,根本談不上用戶體驗。
「關係型數據庫裏缺少關係。」螞蟻金服技術專家浩壹引用《Graph Databases》的觀點表示,爲了在海量數據裏完成高併發、低延時、毫秒級的查詢和分析,須要一種把關係做爲獨立實體進行存儲的數據庫 —— 也就是圖數據庫。「螞蟻金服自主研發的分佈式圖數據庫GeaBase,有很是多的場景應用,基本覆蓋了五福紅包全部應用場景」 。
因爲數據的存儲結構和查詢規則不一樣,查詢深度對於 Geabase 的速度幾乎沒有顯著影響,當關系型數據庫捉襟見肘地花上 30 秒才能給出反饋時,Geabase 只須要 0.168 秒;關係型數據庫難以給出結果的查詢,Geabase 也只需 2 秒便可完成。
這樣的數據庫,能夠實現幾億用戶的好友排行榜在毫秒級內實時更新,能夠支持「沾沾卡」這樣的活動,也爲以前那些由於系統性能限制的業務提供更大的想象空間。
另外一方面,藉助數據智能算法,決策效率也取得了飛速提高。之前,應對這樣大型的活動,要花大量時間對數據指標作實時分析,每次分析時間可能會長達 3 天。
螞蟻金服高級技術專家張榮華介紹說:
但今年,藉助螞蟻金服的金融級實時數據智能平臺的能力,不只能夠在分鐘級的尺度上掌握數據指標的異動,還能即時得到智能系統提供的決策建議。
在這個數據智能平臺還沒有成熟以前,用螞蟻金服數據平臺部資深總監周衛林的話來講,決策有如「在黑暗裏開車」。一項策略實施以後,須要一段時間才能監測到反饋,再根據反饋來分析和調整,中間耗時很長,就像是「開車時打了方向盤,車卻要隔很久才能轉彎,司機內心都沒底」;但如今有了金融級實時數據智能平臺,有了流批一體的計算能力,反饋、分析、決策建議的流程從幾天縮短到小時級,隨時調整隨時都能看到結果。
數據智能取代了「人工」智能,智能平臺的數據洞察取代了「人肉」的分析和決策,效率飛漲, 「之前紅包活動期間,時時刻刻都想着數據指標,連吃飯都沒心思,如今有了數據智能平臺的支持,就輕鬆多了」。
今年的五福紅包活動中,數據智能和 AI 還被運用於生成智能文案和個性推薦禮券。在數據智能的幫助下,「刮刮卡」禮券頁面也作到了千人千面,自動匹配用戶的需求特徵,讓用戶再也不會被那些「用不上」的禮券打擾。
5 億現金,即便不考慮花哨的玩法,要把這筆鉅款準確無誤地分發到中獎用戶的帳戶中,自己就是一場極大的考驗。每一筆金額雖不算大,但都是真金白銀,不容有誤;並且活動截止以後,錢要多久才能到帳,也是關係到用戶感覺的重要指標。
2018 年的五福紅包活動結束後,中獎用戶收到獎金廣泛是在大年初一的凌晨兩三點,也就是活動截止後四五個小時,紅包的金額纔到帳。「去年,每一筆單筆業務的稽覈須要 5-10 分鐘,海量數據的全量覈對要花一個半小時。」螞蟻金服技術專家鄭天壽表示。
到了 2019 年,等待的時間被縮短到了分鐘級。「今年整套體系已經實現了單筆業務的秒級稽覈,4.5 億用戶的數據全量覈對僅僅花了 5 分鐘。」絕大部分用戶在新年零點以前就收到了紅包。
「這纔是真正的拜年紅包。」周衛林表示,得益於交易稽覈速度的大幅提高,往年須要徹夜盯着系統以保障紅包安全入帳的運維團隊,今年剛過零點不久就能夠回家過年了,能夠說是皆大歡喜。
錢發得這麼爽快,安全如何保障?其實在正式「上崗」以前,這套體系已經在技術團隊內部的紅藍演習之中經歷過千錘百煉了。爲了模擬各類可能的突發狀況,不只「藍方」給「紅方」出難題,同時還經過機器識別能力,識別出線上系統弱點,生成了一系列攻擊方案,來考驗系統的總體識別能力和應急能力。
資金安全要有所保障,系統穩定也必須有所保障。和每一年的雙11同樣,五福紅包這樣全民參與的活動,洪峯流量對於服務器的承壓能力來講是一場大考。每一箇中獎邏輯後面都有數十條數據,總體來講就有幾十億的數據須要同步。這些數據須要在 2 分鐘內完成同步,併發數高達每秒上千萬。
經歷過歷年的雙 11,只要事先作好準備,承接這樣的瞬時流量壓力已經不算最難的事,但難就難在如何以更有效率,更節省成本的方式調配服務器資源。「服務器是大促類活動最主要的成本。」 螞蟻金服高級技術專家田啓傑表示,最重要的是,「須要從何時開始持有資源,從何時開始把資源還到大的池子裏去」。
螞蟻金服的高性能分佈式數據庫系統 OceanBase 在這場大考之中功勞卓著:「OB 可以在分鐘級別內把資源能力加上去,在活動以後把資源收回來,咱們把這個稱之爲極致的彈性。」
分鐘級別的彈性,意味着當流量的洪峯到來時,在極短的時間內,系統就能調度資源去承接流量,而在洪峯事後,系統也能迅速地返還資源,避免資源浪費,儘量地節省成本。
和雙 11同樣,支付寶五福紅包的系統也經歷過嚴苛的全鏈路壓測。但用田啓傑的話來講,在大促類的活動日益頻繁的今天,舉全體之力保障一次活動的順利進行已經不是最重要的問題了,更重要的是「在大促常態化狀況下,咱們的穩定性可以一如既往不出現任何問題」。由於無論舉辦什麼樣的活動,支付寶自己做爲一款已深刻社會生活方方面面的金融應用,都必須整年無休地安全平穩運行。
以往一年一度的「大考」,現在已日漸成爲每一個季度甚至每月都要面對的常態。這意味着,系統的彈性、穩定性和高可用性也須要成爲常態。以守護互聯網時代的新年味爲開端,螞蟻金服的技術團隊,其實每時每刻都在守護着與咱們每一個人的平常生活都息息相關的普惠金融系統。
數據顯示,在 2019 年 1 月 25 日至除夕的 11 天裏,超過 4.5 億人蔘與了集支付寶五福活動,至關於每 3 箇中國人就有1我的在參與集福和送福。和去年相比,今年參與集支付寶五福的人數同比增加 40%,其背後的技術挑戰也更加複雜。
技術人從業一輩子,可以參與這種規模的線上活動,能夠說是人生大考,也是至尊榮耀。
免費Java資料領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高併發分佈式、大數據、機器學習等技術。