“旧城改造”的背后——银泰新零售阿里云解决方案(上)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
相關(guān)免費(fèi)課程《銀泰新零售上云解決方案精講》上線中
立足實(shí)戰(zhàn) 講透經(jīng)典案例 助你快速理解新零售
第一節(jié)學(xué)習(xí)地址
第二節(jié)學(xué)習(xí)地址
傳統(tǒng)線下商業(yè)體上云的案例
與其說(shuō)銀泰上云,倒不如說(shuō)銀泰“舊城改造”,銀泰線下商業(yè)體擁有一座龐大的IDC,這個(gè)十年的“老”IDC已經(jīng)無(wú)法支撐現(xiàn)有銀泰如此龐大的業(yè)務(wù)規(guī)模,目前銀泰IDC最大的痛點(diǎn)在于穩(wěn)定性和效率都無(wú)法得到很好的保障,IDC無(wú)API,人工操作場(chǎng)景多,這個(gè)從運(yùn)維角度以及整個(gè)研發(fā)效能上來(lái)看,都是非常低效的。而如果在IDC中構(gòu)建私有云,這個(gè)成本也會(huì)非常大,主要是構(gòu)建和維護(hù)私有云的成本,綜合上面的情況,公有云是我們最佳的選擇。銀泰新零售業(yè)務(wù)全部云化,銀泰IDC老業(yè)務(wù)逐步上云,這就是銀泰整體上云的思路和節(jié)奏。
“舊城改造”是一個(gè)從-1到0的階段,銀泰IDC有著支撐商場(chǎng)運(yùn)行的各種系統(tǒng),以及Oracle數(shù)據(jù)庫(kù),今天的IDC已經(jīng)無(wú)法滿足我們整體運(yùn)維和穩(wěn)定性的要求,選擇上云是個(gè)明智的抉擇。阿里云目前支撐著銀泰所有新零售核心業(yè)務(wù)以及IDC上云的所有應(yīng)用,我們可以很好的利用云上的彈性來(lái)面對(duì)每一場(chǎng)大促。EDAS提供了很好的靈活性,以及豐富的中間件,對(duì)于運(yùn)維也是非常友好,我們無(wú)需觸摸任何一臺(tái)服務(wù)器,整個(gè)Provision階段是非常簡(jiǎn)單和高效的,結(jié)合云監(jiān)控自動(dòng)監(jiān)控每一個(gè)節(jié)點(diǎn)。這一切都是上云的好處。
目前我們已經(jīng)將銀泰IDC里的所有應(yīng)用全部云化,整個(gè)“舊城改造”最難的不是應(yīng)用上云,而是Oracle上云,我們目前正在將Oracle逐步弱化,將整個(gè)數(shù)據(jù)轉(zhuǎn)移到云上的RDS,這個(gè)過程主要的難點(diǎn)在于銀泰Oracle有著上萬(wàn)條的存儲(chǔ)過程,而去除存儲(chǔ)過程是去除Oracle的核心。可能其他行業(yè)也會(huì)存在去Oracle的難題,銀泰零售行業(yè)最早開始的時(shí)候選擇的是Oracle,這是一個(gè)歷史原因,但是今天的業(yè)務(wù)量Oracle已經(jīng)無(wú)法再繼續(xù)擴(kuò)展(基于成本和穩(wěn)定性考慮),云上的RDS天然支持高可用,我們無(wú)需太多關(guān)心它的底層架構(gòu),然后IDC里的數(shù)據(jù)庫(kù)我們需要考慮他的高可用,才能達(dá)到一定的穩(wěn)定性級(jí)別。銀泰各商場(chǎng)將POS機(jī)收到的交易寫到該商場(chǎng)的前置機(jī)Oracle數(shù)據(jù)庫(kù),然后利用DTS將全國(guó)所有門店的的交易數(shù)據(jù)匯總到IDC里的Oracle數(shù)據(jù)庫(kù),IDC的Oracle數(shù)據(jù)庫(kù)通過內(nèi)部大量的存儲(chǔ)過程對(duì)交易數(shù)據(jù)進(jìn)行各種加工(如交易分?jǐn)偟?#xff09;,數(shù)據(jù)加工完成后再通過DTS傳輸?shù)桨⒗镌频腞DS。因?yàn)榻灰讛?shù)據(jù)量龐大,為了提升云上數(shù)據(jù)庫(kù)處理能力,我們?cè)赗DS的基礎(chǔ)上使用了DRDS,通過分庫(kù)分表的方式,將數(shù)據(jù)計(jì)算的壓力進(jìn)行分散,大幅度地提高了云上數(shù)據(jù)庫(kù)的計(jì)算能力。如果這部分單純?cè)贗DC中進(jìn)行的話,會(huì)給我們帶來(lái)相當(dāng)大的難度和一定的維護(hù)成本。
新零售場(chǎng)景下混合云的使用
銀泰上云后,門店、IDC(現(xiàn)階段Oracle還在持續(xù)上云)、阿里云組成了一個(gè)混合云網(wǎng)絡(luò),全國(guó)門店互聯(lián)銀泰IDC,銀泰IDC互聯(lián)阿里云VPC。IDC和阿里云之間通過DTS傳輸所有交易數(shù)據(jù),銀泰全國(guó)各門店端有著我們大量的POS、IoT設(shè)備等,這些交易數(shù)據(jù)完全通過阿里云的DTS來(lái)傳輸數(shù)據(jù),將交易數(shù)據(jù)同步至IDC的Oracle(完全上云后就是RDS了),Oracle會(huì)加工這部分?jǐn)?shù)據(jù),然后同樣通過DTS同步到云端的RDS。因?yàn)槲覀兊腛racle還沒完全去除完,所以這個(gè)架構(gòu)圖里還會(huì)有IDC的身影存在,阿里云到IDC的專線主要承載DTS數(shù)據(jù),以及部分云上應(yīng)用使用Oracle的場(chǎng)景,這部分是通過高速通道實(shí)現(xiàn),云到IDC建立了兩條專線承載這部分流量。而每家門店同樣存在到IDC的專線,這里的專線也是承載DTS的數(shù)據(jù)同步。從而,DTS成為了銀泰整個(gè)中樞神經(jīng),貫穿線下和線上。
數(shù)據(jù)傳輸線上線下數(shù)據(jù)融合的實(shí)操
對(duì)于整體的數(shù)據(jù)流向,剛剛提到各門店將POS機(jī)收到的交易寫到該門店的前置機(jī)Oracle數(shù)據(jù)庫(kù),然后利用DTS將全國(guó)所有門店的的交易數(shù)據(jù)匯總到IDC里的Oracle數(shù)據(jù)庫(kù),IDC的Oracle數(shù)據(jù)庫(kù)通過內(nèi)部大量的存儲(chǔ)過程對(duì)交易數(shù)據(jù)進(jìn)行各種加工(如交易分?jǐn)偟?#xff09;,數(shù)據(jù)加工完成后再通過DTS傳輸?shù)桨⒗镌频腞DS。因?yàn)榻灰讛?shù)據(jù)量龐大,為了提升云上數(shù)據(jù)庫(kù)處理能力,我們?cè)赗DS的基礎(chǔ)上使用了DRDS,通過分庫(kù)分表的方式,將數(shù)據(jù)計(jì)算的壓力進(jìn)行分散,大幅度地提高了云上數(shù)據(jù)庫(kù)的計(jì)算能力。另外,阿里云RDS及DRDS里的數(shù)據(jù)我們利用阿里云的API,進(jìn)行數(shù)據(jù)處理后存放在阿里巴巴IDC的ODPS、自有Mysql、OSS等處,用來(lái)做BI處理、生產(chǎn)業(yè)務(wù)調(diào)用等。下面是新商場(chǎng)的總體數(shù)據(jù)流向圖:
? 門店前置機(jī)。商場(chǎng)POS機(jī)收到的最初小票數(shù)據(jù)直接存到門店的前置機(jī)數(shù)據(jù)庫(kù),之所以目前還保留前置機(jī),是因?yàn)槿绻虉?chǎng)的所有網(wǎng)絡(luò)出口中斷,前置機(jī)可以作為離線兜底方案。
? 門店與IDC之間的DTS傳輸。
o 全國(guó)所有門店收到的初始交易數(shù)據(jù)通過DTS匯總到IDC機(jī)房里的Oralce數(shù)據(jù)庫(kù),然后通過Oracle數(shù)據(jù)庫(kù)中大量的存儲(chǔ)過程對(duì)交易數(shù)據(jù)進(jìn)行處理,生成我們想要的對(duì)小票數(shù)據(jù)進(jìn)行分?jǐn)偤蟮慕灰讛?shù)據(jù)。
o IDC將離線交易所需要的配置及商品數(shù)據(jù)通過DTS反向下發(fā)到全國(guó)所有的門店。
o 傳輸鏈路。原來(lái)全國(guó)所有門店與IDC之間的DTS是通過專線進(jìn)行傳輸?shù)?#xff0c;但是偶爾會(huì)出現(xiàn)專線因各種原因中斷的情況(如市政施工等),而且專線一旦出現(xiàn)中斷,運(yùn)營(yíng)商修復(fù)專線的時(shí)間一般都是按小時(shí)來(lái)計(jì)的。為了解決這個(gè)問題,新商場(chǎng)運(yùn)維團(tuán)隊(duì)基于開源工具在全國(guó)所有門店部署了通過公網(wǎng)傳輸Site to Site的VPN,一旦專線中斷,VPN會(huì)自動(dòng)啟動(dòng)并接管DTS傳輸鏈路,而且對(duì)DTS任務(wù)是透明的,DTS不用修改任何配置。
? IDC機(jī)房。IDC機(jī)房部署了多套Oracle,用來(lái)做交易小票的處理、財(cái)務(wù)結(jié)算、OA、報(bào)表等業(yè)務(wù)。由于歷史原因,各個(gè)庫(kù)需要彼此之間調(diào)用相互的數(shù)據(jù),原來(lái)這些業(yè)務(wù)調(diào)用多通過DBLINK來(lái)實(shí)現(xiàn)。對(duì)于報(bào)表來(lái)說(shuō),如果每次計(jì)算都通過DBLINK去讀取別的庫(kù)的數(shù)據(jù),會(huì)消耗大量的網(wǎng)絡(luò)帶寬,另外也會(huì)降低大量的計(jì)算能力。為了解決這個(gè)問題,我們利用DTS將各個(gè)庫(kù)之間的數(shù)據(jù)進(jìn)行同步,這樣既能保證數(shù)據(jù)一致性,又可以在最小化網(wǎng)絡(luò)資源消耗的前提下保證原有的計(jì)算能力。
? IDC與阿里云rds之間的DTS傳輸。這里要給DTS對(duì)異構(gòu)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步點(diǎn)個(gè)贊。
o 我們將線下Oracle處理后的數(shù)據(jù)通過DTS傳輸?shù)桨⒗镌频腞DS,部署在阿里云的數(shù)據(jù)直接調(diào)用RDS里的數(shù)據(jù)。此外,將Oracle里的數(shù)據(jù)同步到RDS,也是我們后期去O的一種手段。
o 阿里云RDS生成的部分生產(chǎn)數(shù)據(jù)也通過DTS反向傳輸?shù)絀DC的Oracle數(shù)據(jù)庫(kù),用來(lái)做財(cái)務(wù)結(jié)算、報(bào)表等業(yè)務(wù)。此外,這個(gè)鏈路也可以作為我們后期去O的回退方法。
? 阿里云。數(shù)據(jù)同步到阿里云的RDS之后,為了提高阿里云上的數(shù)據(jù)計(jì)算能力,我們?cè)赗DS的基礎(chǔ)上使用了DRDS,通過分庫(kù)分表的方式,將數(shù)據(jù)計(jì)算的壓力進(jìn)行分散。
? 阿里云數(shù)據(jù)同步到阿里巴巴IDC。我們利用阿里云提供的各種API接口,從接口拿到RDS的數(shù)據(jù)后,經(jīng)過一些處理,存放到了阿里巴巴IDC的ODPS、自建Mysql、OSS等處,方便阿里巴巴IDC應(yīng)用架構(gòu)的調(diào)用。
銀泰通過DTS作為整個(gè)數(shù)據(jù)同步的中樞神經(jīng),我們目前擁有一個(gè)線上線下數(shù)據(jù)同步體系,實(shí)現(xiàn)線上線下數(shù)據(jù)融合。但是這里會(huì)產(chǎn)生一個(gè)問題,Oracle到Oracle,以及Oracle到RDS(MySQL),我們?yōu)槭裁磿?huì)選擇DTS來(lái)做這部分?jǐn)?shù)據(jù)傳輸,而不會(huì)采用Oracle的通用解決方案?原因在于DTS在監(jiān)控方面及頁(yè)面展示方面做得很好,我們可以通過界面比較直觀地觀察DTS的延遲情況以及每個(gè)時(shí)間段的數(shù)據(jù)抽取量,而且可以通過API或控制臺(tái)實(shí)現(xiàn)非常快速的配置。而Oracle的通用解決方案多停留在命令行層面,在操作及維護(hù)的方便性方面遠(yuǎn)不如DTS,且無(wú)API,這樣給我們的操作帶來(lái)了極大的困難。DTS的配置很簡(jiǎn)單,下面就是一個(gè)同步任務(wù)在控制臺(tái)中的實(shí)操場(chǎng)景:
? 首先進(jìn)入到DTS產(chǎn)品頁(yè)面
? 在管理界面中點(diǎn)擊右上角的“創(chuàng)建遷移任務(wù)”來(lái)新建一條遷移任務(wù)
? 在接下來(lái)的頁(yè)面中,填寫目標(biāo)庫(kù)和源庫(kù)的信息,然后點(diǎn)擊“測(cè)試連接”,連通性測(cè)試通過后就可以進(jìn)入下一步了
? 接下來(lái)選擇我們要同步的表
? 最后啟動(dòng)任務(wù)
這樣一來(lái),一個(gè)任務(wù)就這樣的簡(jiǎn)單的建立起來(lái)了,無(wú)需額外的工作量。整個(gè)銀泰將近有500多條DTS任務(wù)來(lái)支持如此龐大的數(shù)據(jù)傳輸體系。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
轉(zhuǎn)載于:https://my.oschina.net/u/1464083/blog/3041843
總結(jié)
以上是生活随笔為你收集整理的“旧城改造”的背后——银泰新零售阿里云解决方案(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qwt(一): 编译 · 安装
- 下一篇: python基础:并行遍历ZIP()函数