導(dǎo)讀:隨著5G的落地,今年,很多用戶將5G手機(jī)提上日程。但你知道嗎?就像路上行駛的汽車必須有號牌一樣,每一個設(shè)備接入5G,至少需要一個IP地址,用以表示它在網(wǎng)絡(luò)上的存在。而目前全球的IPv4地址已經(jīng)耗盡,所有43億個IPv4地址已分配完畢,這意味著沒有更多的IPv4地址可以分配給ISP和其他大型網(wǎng)絡(luò)基礎(chǔ)設(shè)施提供商。所以,大家將目光投向了下一代網(wǎng)絡(luò)協(xié)議IPv6,其地址數(shù)量號稱可以為全球的每一粒沙子編上一個地址。
作為5G的基礎(chǔ)架構(gòu),優(yōu)酷從2018年開始IPv6 的全業(yè)務(wù)改造,從技術(shù)策略到全量部署上線總耗時6個月。作為項目的深度參與者,阿里文娛技術(shù)專家蓋優(yōu)將詳解分享這一技術(shù)過程,希望對大家有啟發(fā)。
概述
什么是IPv6?IPv6=互聯(lián)網(wǎng)網(wǎng)絡(luò)層傳輸協(xié)議第六版。廣義的講,IPv6 就是下一代互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施,5G 物聯(lián)網(wǎng)的核心基礎(chǔ)。與現(xiàn)行IPv4 相比,它更安全,更高效,更省成本,幾乎用不完的IP 地址,業(yè)務(wù)無限拓展。
本文將詳解優(yōu)酷IPv6技術(shù)改造實踐,包括遇到的實際問題、技術(shù)解法,希望對大家有借鑒。
1.背景
Internet 在形成及演化的初期,經(jīng)歷了一個紛繁復(fù)雜的過程,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,以IP 協(xié)議為核心,包括:地址格式、數(shù)據(jù)封裝及數(shù)據(jù)轉(zhuǎn)發(fā)等Internet網(wǎng)絡(luò)結(jié)構(gòu)的基本框架,已經(jīng)穩(wěn)定 運行30多年不曾改變。5G來臨的時候,Internet的現(xiàn)有結(jié)構(gòu)無法快速適應(yīng)用戶及上層應(yīng)用需求。主要體現(xiàn)在以下幾點:
1)IPv4 資源枯竭:海外大量購買資源,私網(wǎng)地址僅可支撐三年;
2)IPv6 用戶增長:海外美國50%,印度、歐洲20%;
3)Apple 審核:2016 年6月起,Appstore 就開啟了IPv6 only 審核;
4)商業(yè)競爭態(tài)勢:Google、Facebook 已覆蓋50% IPv6 終端,IPv6 云產(chǎn)品發(fā)布;
5)戰(zhàn)略意義:由于IPv4 報文的限制,使得域名根服務(wù)器的總數(shù)有限制。IPv6 出現(xiàn)以后,這個限制被打破,可寫入更多的根服務(wù)器地址。目前,全球已完成25 臺IPv6 根服務(wù)器架設(shè),中國部署了4臺,打破了中國過去沒有根服務(wù)器的困境。
(圖 全球 IPv6 根服務(wù)器分布)
2.目標(biāo)階段
優(yōu)酷IPv6 項目將分成二步走,包括IPv4/IPv6 雙棧階段,以及內(nèi)外網(wǎng)IPv6-only 階段。
1)IPv4/IPv6 雙棧改造:實現(xiàn)應(yīng)用快速對外服務(wù),以Web/APP 請求服務(wù)為核心,滿足IPv6生態(tài)發(fā)展的需求,并且以外網(wǎng)拉動應(yīng)用的不同需求。爬蟲、郵箱、DB、存儲等直接交互,需要內(nèi)外網(wǎng)服務(wù)器采用IPv4/IPv6 雙棧能力,整網(wǎng)雙棧交付;
2)IPv6 Only:當(dāng)超過50%應(yīng)用逐步遷移到IPv6 后,新應(yīng)用采用IPv6 準(zhǔn)入,遺留一些老舊應(yīng)用繼續(xù)采用IPv4 服務(wù),內(nèi)網(wǎng)采用4over6 進(jìn)行封裝。相對雙棧而言,IPv6 only 成本更低,查表轉(zhuǎn)發(fā)速度更快,只需維護(hù)一套協(xié)議棧,全面開啟IPv6 Only 時代。
3.實施周期
優(yōu)酷2018 年6月開始,實施了IPv6 的全業(yè)務(wù)改造,完成客戶端及服務(wù)端改造,實現(xiàn)應(yīng)用快速對外服務(wù)。2018 年底,實現(xiàn)全量部署上線,總耗時6個月。所以,與優(yōu)酷同等用戶規(guī)模和服務(wù)體量的企業(yè),基本上6個月甚至更短的時間就可以完成整體IPv6 的改造。
(圖 優(yōu)酷 IPv6 改造計劃)
遇到的問題點及解法
IPv6 整個改造過程中可能會遇到的幾個典型問題和解決方法,簡單的總結(jié)如下:
1.沒有IPv6環(huán)境
眾所周知,一般應(yīng)用從開發(fā)到上線,至少要經(jīng)過開發(fā)測試環(huán)境、預(yù)發(fā)環(huán)境、Beta 環(huán)境,最后上正式環(huán)境。一開始,基礎(chǔ)環(huán)境還沒有具備的時候,我們使用IPv6 over IPv4 鏈路VPN 的方式連入測試環(huán)境 ,需要PC/客戶端加證書改Hosts,移動端無法改Hosts 的,需要root 越獄。然后,我們加強(qiáng)了基礎(chǔ)網(wǎng)絡(luò)和IT合作,在多個阿里園區(qū)部署多個IPv6 的接入環(huán)境,打通IPv6 出口,打通辦公網(wǎng)和機(jī)房的IPv6 鏈路,實現(xiàn)慢慢外網(wǎng)IPv6,日常環(huán)境通、預(yù)發(fā)通、正式通,慢慢使業(yè)務(wù)能夠測試逐步提升到IPv4 相同的測試體驗,通過域名劫持等手段,跳過了Hosts 配置的尷尬,達(dá)到標(biāo)準(zhǔn)的測試效率。
2.OS網(wǎng)絡(luò)模塊問題
需要讓容器支持從請求頭部獲取IPv6 地址,那么就需要把用戶IP一級一級透傳過來,就需要在各級的服務(wù)器上升級網(wǎng)絡(luò)模塊,擴(kuò)展報文頭部。例如TOA 模塊,TOA 模塊是為了讓后端的Real Server 能夠看到真實的ClientIP 而不是LVS的DIP。同時,Tengine/Nginx 等應(yīng)用需要 升級到支持IPv6的版本(支持新TOA模塊等),由于歷史原因存在各種老版本無法升級,導(dǎo)致升級受阻。我們通過推動應(yīng)用接入統(tǒng)一接入改造,避免自行升級網(wǎng)絡(luò)模塊帶來的風(fēng)險。
通過老版本應(yīng)用的升級,去Nginx的方式,統(tǒng)一升級安裝Tengine-proxy(安裝在ECS 測試 機(jī)器或宿主機(jī)上都可以),為了能減少業(yè)務(wù)改造工作量,在接入層架構(gòu)我們做了大量的改造。
3.地址庫特殊需求
首先,統(tǒng)一IP 地址庫,要求所有業(yè)務(wù)必須統(tǒng)一使用IP 地址庫。其次,協(xié)調(diào)集團(tuán)地址庫生產(chǎn)方,滿足優(yōu)酷使用場景需求,使統(tǒng)一過程中業(yè)務(wù)改造工作量減少。再次,對于廣告等必須要使用行業(yè)統(tǒng)一地址庫的場景,我們也制定了多套方案去解決。
兜底方案:將廣協(xié)地址庫中的地區(qū)編碼,加入到集團(tuán)地址庫中,使集團(tuán)庫具備行業(yè)庫的能力,在行業(yè)庫沒有完全產(chǎn)出之前,廣告業(yè)務(wù)可以臨時使用集團(tuán)地址庫進(jìn)行改造和測試,保障業(yè)務(wù)不受損。
長期方案:主動出擊,聯(lián)系廣協(xié)等行業(yè)協(xié)會,加快產(chǎn)出IPv6 地址庫,并且主動無償提供阿里集團(tuán)地址庫數(shù)據(jù),更加快了整個廣協(xié)會員單位的改造進(jìn)度。
4.MTU問題
IPv4 時代,中間網(wǎng)絡(luò)三層設(shè)備會進(jìn)行分片,所以一般設(shè)置為1500 的最大值,以降低網(wǎng)絡(luò)開銷。但I(xiàn)Pv6 協(xié)議為了減輕中間網(wǎng)絡(luò)層設(shè)備繁雜度及成本,中間設(shè)備不再分片,由兩端的協(xié)商指定。導(dǎo)致默認(rèn)mtu1500 的情況下,中間設(shè)備出現(xiàn)大量丟包,原因是NAT 轉(zhuǎn)換,TCP Option 等額外疊加,實際超過1500。開啟SYN Proxy,通過MSS 與端進(jìn)行協(xié)商,調(diào)整MTU 為最小值1280。發(fā)現(xiàn)中間層MTU 小于1280 時,進(jìn)行網(wǎng)絡(luò)報障等辦法。
5.客戶端是否IPv6,如何驗證
這是一個很現(xiàn)實的問題,我的網(wǎng)絡(luò)已經(jīng)是IPv6 了,業(yè)務(wù)也能正常運行,但怎么確認(rèn)網(wǎng)絡(luò)是運行在IPv6 上,沒有被降級呢?主要有以下兩個手段:
1)抓取客戶端日志:這也是最笨太最準(zhǔn)確的手段。具體抓日志的方法有很多,就不再重復(fù)介紹了;
2)業(yè)務(wù)改造,加入網(wǎng)絡(luò)檢測能力:將優(yōu)酷客戶端當(dāng)做網(wǎng)絡(luò)測試的工具。
6.協(xié)議回落問題
(圖 協(xié)議回落)
7.CDN灰度問題
CDN域名由阿里云等CDN 服務(wù)提供商進(jìn)行調(diào)度控制,用戶請求鏈路和業(yè)務(wù)服務(wù)是不一樣的,導(dǎo)致業(yè)務(wù)服務(wù)是IPv6,CDN 走的是IPv4;也可能CDN是IPv6,業(yè)務(wù)服務(wù)是IPv4,無法和業(yè)務(wù)統(tǒng)一灰度范圍。
解決方案:使用HTTPDNS 能力,讓CDN域名和業(yè)務(wù)域名共同管理,同步開啟灰度的地域和運營商。同時,增加IPv6專屬CDN 域名,APP 側(cè)通過業(yè)務(wù)側(cè)增加業(yè)務(wù)邏輯,分別下發(fā)不同的域名來實現(xiàn)同一灰度節(jié)奏能力。當(dāng)業(yè)務(wù)服務(wù)返回客戶端的出口IP是IPv6 時,調(diào)用IPv6的CDN 域名;當(dāng)業(yè)務(wù)服務(wù)返回客戶端的出口IP 是IPv4時,調(diào)用IPv4CDN域名。
架構(gòu)設(shè)計
(圖 優(yōu)酷 IPv6 改造架構(gòu)圖)
從客戶端到服務(wù)端,所有涉及到的設(shè)備、網(wǎng)絡(luò)、APP、服務(wù)器、業(yè)務(wù)等都是改造范圍。
1)用戶端的網(wǎng)絡(luò),包括移動網(wǎng)絡(luò)和局域網(wǎng):這部分移動網(wǎng)絡(luò)依賴運營商,目前三大運營商的4G IPv6 支持率>70%,固定寬帶內(nèi)部局域網(wǎng)等總體支持率不足3成,家庭路由器等也需要升級;
2)用戶終端設(shè)備:依賴手機(jī)等終端設(shè)備廠家更新升級固件,小品牌的終端就聽天由命了。部分安卓手機(jī)需要分配到64 段的IPv6 才能正常連接上IPv6 的Wi-Fi;
3)OS/瀏覽器:依賴蘋果、谷歌等的更新節(jié)奏,需要客戶端OS及瀏覽器都更新至最新版本,老OS 基本不支持;
4)客戶端APP/PC 端網(wǎng)頁:網(wǎng)絡(luò)底層包需要支持IPv6 以及降級能力,實施方案中詳細(xì)說明;
5)HTTPDNS:基于一定的策略對支持雙棧網(wǎng)絡(luò)的客戶端下發(fā)IPv6 地址,需HTTPDNS 端改造支持;
6)Local DNS:需要DNS 支持IPv6 解析,同時域名解析記錄中添AAAA 記錄;
7)網(wǎng)絡(luò)鏈路:運營商需要支持 IPv6,包括用戶端的出口網(wǎng)絡(luò)和服務(wù)端的機(jī)房出口,網(wǎng)絡(luò)路由等;
8)LVS:所有服務(wù)的出口,需要支持IPv6,將請求轉(zhuǎn)發(fā)至RS(反向代理服務(wù))
9)反向代理層:將請求轉(zhuǎn)發(fā)至具體業(yè)務(wù)服務(wù)器,并帶上客戶端IPv6 地址;
10)業(yè)務(wù)服務(wù):請看下一節(jié)。
詳細(xì)實施步驟
整個改造過程包括:客戶端APP及PC/H5 端/業(yè)務(wù)服務(wù)端的改造,安全測試及灰度保障能力。
1.客戶端APP
1)更新網(wǎng)絡(luò)底層包:涉及到集團(tuán)二方包或者第三方網(wǎng)絡(luò)庫的,需要升級到最新版本。第三方網(wǎng)絡(luò)庫需要確認(rèn)具備IPv6 能力,否則需要重新選擇其它網(wǎng)絡(luò)庫;
2)升級IP地址庫:端上集成有IP地址庫的,需要升級到包含IPv6 記錄的IP 地址庫;
3)升級HTTPDNS 服務(wù)庫:使用HTTPDNS 服務(wù)的,需要確認(rèn)支持AAAA 記錄的下發(fā);使用Local DNS 解析的,需要改造實現(xiàn)DNS 服務(wù)請求參數(shù)中添加AAAA 記錄解析的標(biāo)識;
4)改造支持降級能力:使用三方庫已經(jīng)具備IPv6 鏈路質(zhì)量不佳時自動降級IPv4 能力的,可以不改造。否則,需要業(yè)務(wù)或者架構(gòu)側(cè)進(jìn)行IPv6 網(wǎng)絡(luò)質(zhì)量的判斷,并實現(xiàn)降級功能;
5)探測埋點改造:弱網(wǎng)、DNS 耗時的情況下,探測能否正常,IPv6下埋點是否正常上報;
6)測試手法:所有功能需要在IPv4 only,IPv6/IPv4 雙棧測試通過。IPv6 only 有條件時也需要測試通過。
2.業(yè)務(wù)服務(wù)端/PC端/H5端
1)IP 地址庫使用:是否有用到地址庫,對用戶IP進(jìn)行地域來源等判斷。有的話需要升級到IPv6 地址庫,并更新調(diào)用方法;
2)IP 地址格式判斷:是否對用戶IP 進(jìn)行驗證,有的話,需要加入IPv6 地址格式的正則表達(dá)式判斷;
3)IP 地址保存:是否對IP有存庫等保存操作,需要修改相應(yīng)字段的長度,IPv6 長于IPv4, MySQL建議字段類型VARBINARY(16);
4)依賴鏈路上的修改:是否會將IP 作為接口參數(shù)傳遞給下游依賴業(yè)務(wù)。有的話,下游依賴業(yè)務(wù)也需要改造;
5)客戶端IP 地址的取得方式:如果從客戶端請求的頭部獲取,那么在雙棧環(huán)境中,同一請求,你只能獲取到IPv4 和IPv6 地址中的一個,不可能兩個都獲取。如果是通過請求正文中的某個字段,把客戶端地址傳上來的,那么,你需要考慮是否需要獲取客戶端的v4 和v6 的所有地址;
6)日志:當(dāng)用了第三方的采集工具,如果采集工具不支持IPv6 的話,那么采集上來的數(shù)據(jù)會和服務(wù)端的請求日志無法對齊,產(chǎn)生GAP。所以第三方數(shù)據(jù)產(chǎn)品等都需要能夠支持用戶IPv6 數(shù)據(jù)的采集;
7)監(jiān)控:存在用戶IP 作為判斷條件/統(tǒng)計條件的監(jiān)控配置時,需要改造;
8)大數(shù)據(jù)統(tǒng)計:存在用戶IP 作為判斷條件/統(tǒng)計條件的內(nèi)容時,需要業(yè)務(wù)改造。
3.安全,測試及灰度保障
主要包括上線前的測試保障及上線后的灰度引流能力。
1)測試保障:抓取客戶端日志;客戶端業(yè)務(wù)改造,加入網(wǎng)絡(luò)檢測能力;客戶端增加IPv6 鏈路日志,服務(wù)端日志工具支持對IPv6客戶端地址進(jìn)行分析匯總;IPv6流量壓力測試能力;模擬IPv6 網(wǎng)絡(luò)限速,延遲增加能力。
2)灰度引流能力包括兩種方式:
HTTPDNS 方式:基于用戶設(shè)備的白名單;基于地域+運營商+百分比+用戶設(shè)備白名單;基于APP 版本的全量百分比。
LocalDNS(ADNS)方式:ADNS 新開發(fā)并上線了一個能力,支持一個域名下配置多CNAME 解析功能,并且每條解釋都可以配置權(quán)重,通過修改IDNS 的CNAME 權(quán)重配置來達(dá)到比例控制。同時加上自有的線路和運營商的選擇能力,滿足地域級的灰度需求。
3)自動化能力:我們開發(fā)了自動化的灰度系統(tǒng),根據(jù)起始參數(shù)和灰度目標(biāo),自動規(guī)劃灰度比和時間節(jié)奏,實現(xiàn)完全自動化的灰度引流。監(jiān)控預(yù)警+自動回滾能力,邊喝咖啡邊看灰度量,就是這么簡單。
小結(jié)
IPv6還處于過渡期,目前是IPv4/IPv6雙棧發(fā)展階段,需要技術(shù)和產(chǎn)品特別關(guān)注在雙棧環(huán)境下才會出現(xiàn)的問題,而這些問題幾乎沒有資料可參考,非常考驗運維團(tuán)隊的應(yīng)變能力。以下是我的一些建議:
IPv6地址還在不斷分配中,IPv6地址庫的建設(shè)將是一項長期工程,當(dāng)IPv6歸屬地與IPv4歸屬地存在偏差時,優(yōu)先信任哪一邊,需要結(jié)合業(yè)務(wù)特點做判斷;
IPv6建設(shè)中最大的投入是監(jiān)控能力的改造,要讓業(yè)務(wù)監(jiān)控全部支持IPv6,否則將無法發(fā)現(xiàn)IPv6的網(wǎng)絡(luò)問題。在雙棧環(huán)境中,不要用總量模式觀察,要在各自的協(xié)議棧中觀察;
雙棧特有的IPv6回落IPv4的降級能力,Web端業(yè)務(wù)不要過度的依賴瀏覽器的能力,因為有些時候它并不靠譜??梢猿WR拆分業(yè)務(wù)域名,判斷用戶環(huán)境及網(wǎng)絡(luò)質(zhì)量,不同的環(huán)境給出不同的域名,來實現(xiàn)降級能力;
雙棧環(huán)境下,一個完整的業(yè)務(wù)流程,可能一部分走IPv4,一部分走IPv6。當(dāng)業(yè)務(wù)出現(xiàn)問題時,需要足夠的埋點用來定位原因,因為有些場景下很難再現(xiàn)問題;
IPv6的改造,更多是面向5G為未來的業(yè)務(wù)場景布局,當(dāng)下的用戶體驗并不明顯,所以不需要向產(chǎn)品強(qiáng)調(diào)性價比。