Netflix的支付生態(tài)系統(tǒng)遷移到AWS的實(shí)踐

責(zé)任編輯:editor004

作者:netflix

2016-07-08 11:47:42

摘自:INFOQ

在2016年1月4號(hào),Netflix完成了它的全球化服務(wù),同時(shí)新增加了130個(gè)國(guó)家。在這之前,Netflix的支付生態(tài)系統(tǒng)已經(jīng)100%遷移到AWS云服務(wù)。

在2016年1月4號(hào),Netflix完成了它的全球化服務(wù),同時(shí)新增加了130個(gè)國(guó)家。在這之前,Netflix的支付生態(tài)系統(tǒng)已經(jīng)100%遷移到AWS云服務(wù)。Netflix的支付架構(gòu)從Netflix數(shù)據(jù)中心(DC)遷移到AWS云服務(wù)只是Netflix入云之旅中的一部分。“關(guān)于具體的Netflix遷移到AWS云服務(wù)的目的和方向”可參見以前的文章。

對(duì)于一家公司來說,支付是其的金融生命線。同時(shí)也折射出公司對(duì)顧客的態(tài)度。好的用戶體驗(yàn)是Netflix核心價(jià)值觀之一。支付的天性是直接影響會(huì)員和Netflix的財(cái)務(wù)關(guān)系,所以這種支付系統(tǒng)的遷移要盡可能優(yōu)雅地完成。首要目標(biāo)是建立一個(gè)安全、彈性和細(xì)粒度的遷移到云服務(wù)上的方案,而且不能影響用戶體驗(yàn)。

本文討論Netflix從數(shù)據(jù)中心(DC)遷移復(fù)雜的支付生態(tài)系統(tǒng)到AWS云服務(wù)的方法。

支付系統(tǒng)架構(gòu)

支付架構(gòu)是負(fù)責(zé)管理Netflix會(huì)員支付狀態(tài)的。這包括跟蹤打開/付費(fèi)付費(fèi)周期,會(huì)員賬號(hào)信用卡數(shù)量,會(huì)員付費(fèi)狀態(tài),付費(fèi)初始化請(qǐng)求,會(huì)員付費(fèi)的日期。除此之外,付費(fèi)數(shù)據(jù)需要灌入金融系統(tǒng)來計(jì)算Netflix公司賬戶的財(cái)報(bào)和稅費(fèi)報(bào)告。為了完成這些工作,支付開發(fā)的工程師需要做到以下幾點(diǎn):

批量作業(yè)生成Netflix全球會(huì)員的續(xù)費(fèi)訂單,按天聚合所有付費(fèi)方式(包括,禮品卡,稅收等)的數(shù)據(jù)流進(jìn)入分類總賬(General Ledger(GL))來計(jì)算收益。消息事件和DVD事件的生成都是依賴于客戶的支付狀態(tài); 支付API為用戶服務(wù)平臺(tái)和網(wǎng)站提供支付信息和禮品卡信息。除此之外,支付API也是處理用戶行為(會(huì)員注冊(cè),撤單,地址更新,退款等)的工作流初始化的一部分; 整合不同的服務(wù),比如,會(huì)員帳戶服務(wù),付款處理,客戶服務(wù),客戶消息,DVD網(wǎng)站和運(yùn)費(fèi)。

支付原有生態(tài)系統(tǒng)結(jié)合Netflix數(shù)據(jù)中心(DC)和云服務(wù)。更高層次上來說,Netflix預(yù)遷移的架構(gòu)抽象如下: 

考慮到和Oracle交互的代碼和數(shù)據(jù)太多,Netflix接下來的目標(biāo)是分解原有基于Oracle的臃腫方案為微服務(wù)架構(gòu)。一些API需要跨區(qū)域和高可用。所以Netflix決定把數(shù)據(jù)分割成多數(shù)據(jù)存儲(chǔ)。用戶數(shù)據(jù)遷移到Cassandra存儲(chǔ)。Netflix的付費(fèi)數(shù)據(jù)處理需要支持ACID事物,因此所有相關(guān)的數(shù)據(jù)遷移到MySQL。下面的架構(gòu)圖是遷移之后的架構(gòu): 

面臨的挑戰(zhàn)

前面提到的龐大的遷移任務(wù)是非常大的挑戰(zhàn)。

理想情況下,遷移過程對(duì)用戶體驗(yàn)是無宕機(jī)的; AWS上的新支付架構(gòu)對(duì)會(huì)員的快速增長(zhǎng)是可擴(kuò)展的; Netflix從1997年開始的億萬行歷史數(shù)據(jù)在不斷的變化。這些數(shù)據(jù)在分庫的Oracle中每分鐘都在增長(zhǎng)。為了遷移所有的數(shù)據(jù)到AWS,Netflix工程師需要首先遷移2 TB RDBMS數(shù)據(jù)到云服務(wù)并做實(shí)時(shí)同步; 作為SOX系統(tǒng),增加另外一個(gè)復(fù)雜層,所有的遷移和工具都要支持SOX過程; Netflix已經(jīng)開啟許多新國(guó)家市場(chǎng),迅速邁向全球化; 支付系統(tǒng)的遷移對(duì)其他著手全球化拓展的團(tuán)隊(duì)要做到無感知。

解決方案

Netflix采用如下簡(jiǎn)單的原則來輔助定義前進(jìn)的路程:

化繁為簡(jiǎn):接受固有的復(fù)雜遺留系統(tǒng)容易但改造起來就異常艱巨。當(dāng)你暢游在大量數(shù)據(jù)和代碼中,簡(jiǎn)單化變得很重要。經(jīng)過幾天的梳理才慢慢得以清晰理解,并進(jìn)行簡(jiǎn)化;  

清理代碼:將現(xiàn)有代碼分解為更小、更高效的模塊,率先把一些關(guān)鍵依賴移動(dòng)到云服務(wù)上。Netflix首先把稅務(wù)方案移到AWS;

緊接著,從Oracle大表里移除會(huì)員支付歷史,許多不同的代碼直接訪問這些表?,F(xiàn)在僅僅遷移必要的數(shù)據(jù)到新的Cassandra數(shù)據(jù)庫,建立新的應(yīng)用來捕獲支付事件,并開始在AWS云服務(wù)上提供全球的支付歷史信息;Netflix工程師花了大量時(shí)間開發(fā)數(shù)據(jù)遷移工具。原有會(huì)員支付屬性分布在Oracle的多張表,遷移到簡(jiǎn)單的Cassandra數(shù)據(jù)結(jié)構(gòu)中;

清洗數(shù)據(jù):確保只遷移每個(gè)表中真正需要的數(shù)據(jù),其它數(shù)據(jù)留下不用處理。歷史支付數(shù)據(jù)對(duì)客戶服務(wù)團(tuán)隊(duì)價(jià)值很大。因此,積極與各相關(guān)團(tuán)隊(duì)溝通找到他們實(shí)際需要的歷史數(shù)據(jù),然后將相應(yīng)的數(shù)據(jù)提取出來進(jìn)行存儲(chǔ)。

構(gòu)建工具是彈性的和一致的:遷移應(yīng)用的目標(biāo)是增量無宕機(jī)。Netflix工程師通過構(gòu)建代理,然后將數(shù)據(jù)管道重定向回?cái)?shù)據(jù)中心(DC)。這會(huì)保持應(yīng)用一直在讀取DC,并不會(huì)因?yàn)楦淖兌艿接绊懀恢钡綌?shù)據(jù)遷移完再處理應(yīng)用。

構(gòu)建工具需支持具備SQX的支付云架構(gòu)。為了符合SQX,需要規(guī)避開發(fā)者行為的異常和審核。

云發(fā)布工具Spinnaker能夠加強(qiáng)細(xì)節(jié)的捕捉,比如軟件發(fā)布和管道事件的日志記錄到Chronos以及大數(shù)據(jù)平臺(tái)的審計(jì)。更進(jìn)一步,Cassandra客戶端需要加強(qiáng)認(rèn)證和審計(jì)。Netflix使用 Atlas開發(fā)新警報(bào)系統(tǒng)來監(jiān)控云服務(wù)上的應(yīng)用和數(shù)據(jù)。

為了幫助數(shù)據(jù)分析團(tuán)隊(duì),開發(fā)了一個(gè)比較器來排除Cassandra數(shù)據(jù)庫存儲(chǔ)與Oracle中數(shù)據(jù)的異同。使用Netflix大數(shù)據(jù)平臺(tái)來獲取發(fā)布事件,使用sqoop從Oracle數(shù)據(jù)庫和Cassandra集群遷移數(shù)據(jù)到Hive。寫Hive查詢和MapReduce作業(yè)來生成報(bào)告并做成儀表板展示。

拿干凈、有限的數(shù)據(jù)集先測(cè)試:Netflix新開拓了一些國(guó)家市場(chǎng),這帶來了巨大的挑戰(zhàn),同時(shí)也為測(cè)試支付云架構(gòu)提供了新的、干凈的數(shù)據(jù)。所以,在云服務(wù)上搭建一套微型支付架構(gòu)來測(cè)試?yán)m(xù)費(fèi)批量處理,與數(shù)據(jù)中心的應(yīng)用整合,完成支付工作流。一旦能夠在云服務(wù)中成功處理新加入國(guó)家的數(shù)據(jù),這將會(huì)為推廣新的支付系統(tǒng)應(yīng)用到大量原有的國(guó)家?guī)硇判?,特別是美國(guó)。

盡量減少宕機(jī)或者其它遷移的影響,保證客戶體驗(yàn):現(xiàn)有的會(huì)員數(shù)據(jù)遷移到Cassandra數(shù)據(jù)庫時(shí)需要停機(jī),同時(shí)從Oracle數(shù)據(jù)庫遷移訂閱數(shù)據(jù)到Cassandra,為云服務(wù)上的支付API模塊和續(xù)費(fèi)模塊服務(wù)。每個(gè)構(gòu)建工具要保證處理失敗后能恢復(fù),提供會(huì)員狀態(tài)管理確保遷移終止時(shí)會(huì)員數(shù)據(jù)可用。通過前面的準(zhǔn)備,Netflix從DC的Oracle數(shù)據(jù)庫中遷移成千上萬行數(shù)據(jù)到AWS云服務(wù)的Cassandra中,并且對(duì)用戶未產(chǎn)生明顯的影響。

數(shù)據(jù)庫遷移要按計(jì)劃有序進(jìn)行:數(shù)據(jù)庫移動(dòng)要按事先的計(jì)劃操作,并對(duì)最后的結(jié)果可預(yù)見,否則會(huì)出錯(cuò)。保證數(shù)據(jù)庫架構(gòu)能夠解決數(shù)據(jù)的可擴(kuò)展、可使用和可靠性,制定災(zāi)難性恢復(fù)計(jì)劃,盡可能減小遷移停機(jī)時(shí)間。作者決定從商業(yè)的Oracle數(shù)據(jù)庫遷移到開源的MySQL數(shù)據(jù)庫,其運(yùn)行在Netflix管理的亞馬遜彈性計(jì)算云(EC2)實(shí)例上。

訂閱數(shù)據(jù)存儲(chǔ)在Cassandra數(shù)據(jù)庫。支付數(shù)據(jù)存儲(chǔ)在RDBMS,支持ACID,可以處理付費(fèi)事物。因?yàn)锳WS的RDS有TB量級(jí)的限制,但Netflix有數(shù)據(jù)庫超過TB限制,因此,在Netflix核心平臺(tái)和數(shù)據(jù)庫工程師的幫助下,Netflix使用分布式塊設(shè)備復(fù)制(DRBD copy)為MySQL master構(gòu)建了一個(gè)多區(qū)域、可擴(kuò)展的架構(gòu),在不同的區(qū)域可以讀到合適的副本。所有的ETL處理都在副本進(jìn)行,為了避免Master的資源連接。數(shù)據(jù)庫云工程師開發(fā)工具監(jiān)控MySQL實(shí)例報(bào)警,在必要時(shí)能恢復(fù)。

思考

Netflix的支付生態(tài)系統(tǒng)遷移到AWS上可謂相當(dāng)順利,但現(xiàn)在回過頭來再看,仍然有些事情可以做得更好。作者低估了自動(dòng)測(cè)試的需要,并未很好的進(jìn)行端對(duì)端的測(cè)試。在這些方面如果足夠努力,可以更好的提高開發(fā)的速度。

遷移一些像支付這樣大規(guī)模的、關(guān)鍵的遺留系統(tǒng),需要做很多工作。遷移和簡(jiǎn)單化使Netflix獲得了無數(shù)的好處。遷移之后的軟件架構(gòu)更加高效、更加輕便,Netflix平臺(tái)服務(wù)提供的工具、警報(bào)和監(jiān)控能夠完全利用云服務(wù)能力。Netflix的應(yīng)用能按需橫向擴(kuò)展,這能很好的匹配現(xiàn)在訂閱者高速增長(zhǎng)的趨勢(shì)。

最后總結(jié),支付系統(tǒng)的遷移是所有相關(guān)部門工程師共同的努力。使用AWS云服務(wù)會(huì)進(jìn)一步加強(qiáng)Netflix的服務(wù)。

譯者介紹:俠天,專注于大數(shù)據(jù)、機(jī)器學(xué)習(xí)和數(shù)學(xué)相關(guān)的內(nèi)容,并有個(gè)人公眾號(hào):bigdata_ny分享相關(guān)技術(shù)文章。

英文原文:Netflix Billing Migration to AWS

AWS

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)