www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]1.導(dǎo)讀高德啟動(dòng)Go業(yè)務(wù)建設(shè)已經(jīng)有段時(shí)間了,主要包含Go應(yīng)用落地,Go中間件建設(shè),云原生三個(gè)部分。經(jīng)過持續(xù)的發(fā)力,在這些方面取得了不錯(cuò)的進(jìn)展。高德Go業(yè)務(wù)落地過程是如何實(shí)現(xiàn)的,遇到過哪些問題,如何解決?本文將為大家介紹相關(guān)經(jīng)驗(yàn),希望對(duì)感興趣的同學(xué)有所幫助。2.高德為什么要落地Go...

1.導(dǎo)讀


高德啟動(dòng)Go業(yè)務(wù)建設(shè)已經(jīng)有段時(shí)間了,主要包含Go應(yīng)用落地Go中間件建設(shè),云原生三個(gè)部分。經(jīng)過持續(xù)的發(fā)力,在這些方面取得了不錯(cuò)的進(jìn)展。高德Go業(yè)務(wù)落地過程是如何實(shí)現(xiàn)的,遇到過哪些問題,如何解決?本文將為大家介紹相關(guān)經(jīng)驗(yàn),希望對(duì)感興趣的同學(xué)有所幫助。


2. 高德為什么要落地Go應(yīng)用


現(xiàn)在高德內(nèi)主流的語言還是Java,Java應(yīng)用最多,機(jī)器數(shù)十分驚人。而且高德整體業(yè)務(wù)也在快速向前奔跑,成本增加的速度非常快。在減少機(jī)器負(fù)載方面,Go語言在語言級(jí)別對(duì)Java語言有相當(dāng)優(yōu)勢。減少機(jī)器成本是我們落地Go應(yīng)用的第一個(gè)考慮因素。


其次,Go語言近幾年發(fā)展勢頭迅猛,不論是阿里集團(tuán)內(nèi)部,還是在高德內(nèi)部,對(duì)使用Go語言的呼聲越來愈高。落地Go應(yīng)用可以很好的驗(yàn)證Go中間件的穩(wěn)定性。當(dāng)然我們可以通過混沌工程等手段去驗(yàn)證,但經(jīng)過生產(chǎn)環(huán)境考驗(yàn)才最具有說服力。驗(yàn)證沉淀Go語言中間件穩(wěn)定性是我們落地Go應(yīng)用的第二個(gè)考慮因素。


最后,Go語言作為云原生基礎(chǔ)框架使用較多的語言,提前落地Go應(yīng)用,對(duì)后續(xù)落地云原生可以減少不少阻力。高德目前落地的Serverless/Faas規(guī)模相當(dāng)大。落地Go應(yīng)用的第三個(gè)考慮因素是為后續(xù)云原生落地鋪路。


3. 大流量場景Go應(yīng)用落地


3.1 渲染網(wǎng)關(guān)介紹

本文所述中提到的高德渲染網(wǎng)關(guān),是我們落地的Go應(yīng)用中業(yè)務(wù)流量、改造難度、風(fēng)險(xiǎn),收益均處前列的應(yīng)用。渲染網(wǎng)關(guān)在接入層,占高德總流量的一半,重要性可想而知。


接下來簡要介紹下渲染網(wǎng)關(guān)承接的業(yè)務(wù),方便大家有一些更立體的認(rèn)識(shí)。


渲染網(wǎng)關(guān)承接高德手機(jī)App、車機(jī)、開放平臺(tái)等來源所有的圖面渲染。大家在使用高德時(shí),看到的建筑物、地形圖、名稱、路線、地鐵站、公交站、紅綠燈等等所有圖面,都是由渲染引擎通過渲染網(wǎng)關(guān)透出到端。下面放幾張圖,方便大家有一些更感性的認(rèn)識(shí)。


高德渲染網(wǎng)關(guān)Go語言重構(gòu)實(shí)踐


上面圖一為行前,圖二為行中,圖三為打車頁面,圖四為景區(qū)手繪圖。渲染網(wǎng)關(guān)涉及業(yè)務(wù)眾多,以上僅為舉例,其他業(yè)務(wù)就不在這里貼圖了。


3.2 重構(gòu)難點(diǎn)

做過重構(gòu)項(xiàng)目的同學(xué)相信都深有體會(huì),重構(gòu)項(xiàng)目中最大難點(diǎn)有二,一是要保證業(yè)務(wù)正確性,二是要保證服務(wù)穩(wěn)定性。


對(duì)于保證業(yè)務(wù)正確性,一般來說,重構(gòu)的服務(wù)大多數(shù)為老服務(wù),老服務(wù)面臨的最大問題是歷史邏輯復(fù)雜,人員更迭,文檔缺失,這些因素都是重構(gòu)過程中的“攔路虎”。


渲染網(wǎng)關(guān)重構(gòu)同樣如此,它涉及高德手機(jī)端、車機(jī)端、開放平臺(tái)、打車等各個(gè)業(yè)務(wù)線,所有的歷史版本,再加上上述因素,所以保證業(yè)務(wù)正確性是一件非常困難的工作。


對(duì)于保證服務(wù)穩(wěn)定性,做過網(wǎng)關(guān)的同學(xué)應(yīng)該都知道,網(wǎng)關(guān)本身的屬性就決定了它并不會(huì)有頻繁的業(yè)務(wù)迭代,穩(wěn)定性是網(wǎng)關(guān)的第一訴求。我們要保證,無論外部環(huán)境/依賴是否正常,網(wǎng)關(guān)始終能保持高可用。由于Go版本中間件缺乏在大流量場景的充分驗(yàn)證,這一難點(diǎn)需要仔細(xì)評(píng)測,用合適的方法和手段,盡可能的在仿真環(huán)境里驗(yàn)證各種邊界情況,從而保證在生產(chǎn)環(huán)境不出問題。


3.3 技術(shù)方案

在重構(gòu)高德渲染網(wǎng)關(guān)時(shí),我們整體技術(shù)方案分三大步走:


高德渲染網(wǎng)關(guān)Go語言重構(gòu)實(shí)踐


3.3.1 線上流量對(duì)比

如何驗(yàn)證新服務(wù)的業(yè)務(wù)正確性呢?我們采用了線上流量對(duì)比的方式。


我們前期做了大量調(diào)研,希望找到一個(gè)滿足(近)實(shí)時(shí),二進(jìn)制級(jí)對(duì)比的工具,但可惜并沒有找到一個(gè)滿足要求的工具。由于渲染業(yè)務(wù)的特殊屬性,渲染網(wǎng)關(guān)絕大多數(shù)接口返回的是二進(jìn)制矢量數(shù)據(jù),所以理想的工具不僅要能支持常規(guī)數(shù)據(jù)對(duì)比,也要能支持二進(jìn)制級(jí)對(duì)比。


二進(jìn)制級(jí)對(duì)比的另一個(gè)好處是,可以排除字符集差異,不同語言庫函數(shù)差異。更能保證對(duì)比的準(zhǔn)確性。有些同學(xué)可能會(huì)想到打日志,然后離線讀取比較的方式來做對(duì)比,這種方式有很多弊端。


首先,流量無法重放至指定機(jī)器。其次,這種使用方式一般為固定語料,語料完整度不夠,不能完全模擬線上環(huán)境。此外,打日志對(duì)比帶來的字符集和語言庫函數(shù)差異,會(huì)對(duì)比較準(zhǔn)確性有較大影響,特別是對(duì)于特殊字符(當(dāng)7層協(xié)議為二進(jìn)制協(xié)議時(shí)更加明顯)。沒有現(xiàn)成的稱手工具,怎么辦?"逢山開路,遇水搭橋"。


我們自主研發(fā)了一款(近)實(shí)時(shí)流量對(duì)比工具,它保障了此次重構(gòu)的業(yè)務(wù)正確性,并且還能服務(wù)于高德其他業(yè)務(wù)的重構(gòu)。其技術(shù)細(xì)節(jié)對(duì)TCP/IP涉及較多,非常有意思,感興趣的同學(xué)可以直接跳至《流量對(duì)比工具(ln)技術(shù)細(xì)節(jié)》一節(jié)。


3.3.2 仿真環(huán)境壓測

做服務(wù)的同學(xué)相信都深有體會(huì),想讓服務(wù)保障做到5個(gè)9的可用性并不是一件容易的事。真實(shí)生產(chǎn)環(huán)境中可能會(huì)出現(xiàn)各種情況,我們要想辦法驗(yàn)證各種邊界情況下服務(wù)的穩(wěn)定性,才能保障服務(wù)高可用。對(duì)于重構(gòu)完成的新服務(wù),更需要一個(gè)仿真環(huán)境,進(jìn)行各種情況驗(yàn)證。


構(gòu)建仿真環(huán)境,我們需要保持機(jī)器基線、外部依賴、外部流量均一致(比如從線上引流)。仿真環(huán)境不僅要提供正常態(tài)環(huán)境的能力,更要能提供異常態(tài)環(huán)境的能力。


異常態(tài)包括斷網(wǎng),網(wǎng)絡(luò)丟包等等。有句話說的好:20%的代碼完成功能,80%的代碼來處理各種異常情況。我們在實(shí)踐中構(gòu)建異常態(tài)的主要手段為混沌工程,通過混沌工程模擬下至操作系統(tǒng)級(jí)的異常(如斷網(wǎng),丟包等),上至應(yīng)用層的異常(如消息中間件積壓,JVM方法前后Hook模擬業(yè)務(wù)異常等等)。


在仿真環(huán)境里,同時(shí)進(jìn)行長時(shí)間極限壓測,語料從線上導(dǎo)流,壓測在正常態(tài),異常態(tài)均進(jìn)行,觀察服務(wù)在一段較長時(shí)間內(nèi)的表現(xiàn),從而得出服務(wù)的穩(wěn)定性,可用性結(jié)論。


觀測指標(biāo)包括基礎(chǔ)指標(biāo),例如CPU、磁盤利用率、內(nèi)存利用率、連接數(shù),以及業(yè)務(wù)指標(biāo),例如業(yè)務(wù)接口成功率、成功量、總量、TP99。通過這種方式,基本上完全覆蓋了可能出現(xiàn)各種情況,充分保證了服務(wù)穩(wěn)定性和高可用。


3.3.3 平滑灰度切流

前邊講了如何保證業(yè)務(wù)正確性和服務(wù)穩(wěn)定性。接下來說說如何保證平滑灰度切流。牢牢遵守阿里發(fā)布三原則是平滑灰度切流的“法寶”:可灰度,可監(jiān)控,可回滾。


在具體實(shí)踐中,我們按照如下步驟灰度切流


a. 原Java集群不動(dòng),新申請(qǐng)一套Go集群。修改路由規(guī)則,部分白名單用戶使用Go集群服務(wù)。


b. 逐個(gè)接口修改路由規(guī)則至Go集群,慢慢灰度,期間密切觀察機(jī)器姿態(tài),業(yè)務(wù)日志,監(jiān)控指標(biāo)。如有異常一鍵切回至Java集群。


c. 接口全量切至Go集群后,Java集群/Go集群同時(shí)共存一段時(shí)間。


d. 逐漸下掉Java集群機(jī)器。


3.4 主要收益

第一個(gè)重要收益:降本提效。高德渲染網(wǎng)關(guān)由Java換成Go語言之后,機(jī)器數(shù)減少近一半。用原來一半的資源完成了相同的工作,大大降低了成本,提高了資源利用率,更好支持了業(yè)務(wù)發(fā)展,大大降低了業(yè)務(wù)流量快速增長帶來的接入層機(jī)器增長速度。


第二個(gè)重要的收益是:驗(yàn)證了高德與集團(tuán)合作共建的Go版本中間件的穩(wěn)定性,一定程度上完善繁榮了集團(tuán)Go生態(tài)。在大流量場景考驗(yàn)過后,高德與集團(tuán)合作共建的Go版本中間件穩(wěn)定性得到了相當(dāng)充分的驗(yàn)證。


第三個(gè)重要的收益是:為網(wǎng)關(guān)云原生化鋪路。網(wǎng)關(guān)Go化只是第一步,Go是云原生基礎(chǔ)設(shè)施實(shí)現(xiàn)使用較多的語言,第一步抹平語言差異,對(duì)于網(wǎng)關(guān)后續(xù)云原生化,好處多多,可降低改造風(fēng)險(xiǎn)和成本。


當(dāng)然,高德渲染網(wǎng)關(guān)重構(gòu)過程中還有許多非常有用的工具沉淀??蔀楹罄m(xù)業(yè)務(wù)重構(gòu)提供關(guān)鍵性保障,比如自研的流量對(duì)比工具ln。


4. 技術(shù)干貨


4.1 流量對(duì)比工具(ln)技術(shù)細(xì)節(jié)

先提一個(gè)問題,做一款(近)實(shí)時(shí)流量對(duì)比工具需要完成哪些功能?沒錯(cuò),就是流量復(fù)制,流量解析,流量重放,流量比對(duì)。其實(shí)不止這些,在實(shí)踐中更多是一個(gè)流量回歸閉環(huán),如下圖:


高德渲染網(wǎng)關(guān)Go語言重構(gòu)實(shí)踐


4.1.1 流量復(fù)制

為了支持所有的7層協(xié)議,流量獲取必須從3層或4層開始。有同學(xué)會(huì)立馬想到tcpdump。沒錯(cuò),就是tcpdump。tcpdump出的文件就是實(shí)實(shí)在在的流量。復(fù)制流量這一步已經(jīng)有著落了,至于實(shí)時(shí),可以兩到三個(gè)進(jìn)程錯(cuò)開時(shí)間,時(shí)間段首尾互相重疊即可完成實(shí)時(shí)。


另外,設(shè)計(jì)此工具的另一個(gè)考量點(diǎn)是,對(duì)線上機(jī)器不能有太重的負(fù)載,避免對(duì)線上機(jī)器產(chǎn)生穩(wěn)定性影響。此種流量復(fù)制方式非常輕量,對(duì)線上機(jī)器增加的負(fù)載非常小,可以忽略不計(jì)。


4.1.2 流量上傳

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉