日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

分享实录 | 单人开发场景下的测试环境实践

發(fā)布時(shí)間:2024/9/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享实录 | 单人开发场景下的测试环境实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在軟件研發(fā)過程中,“測(cè)試環(huán)境”是部署最頻繁、也是開發(fā)者使用最頻繁的一種運(yùn)行環(huán)境,穩(wěn)定而易用的測(cè)試環(huán)境能夠極大提高開發(fā)者的工作效率和幸福感。為更好的將阿里巴巴在測(cè)試環(huán)境管理方面的實(shí)踐和經(jīng)驗(yàn)跟廣大開發(fā)者分享,《云效說碼》策劃了《阿里巴巴Kubernetes測(cè)試環(huán)境開源工具箱》系列直播視頻,由阿里巴巴技術(shù)專家林帆(金戟)和鄭云龍(砧木) 來為大家講述。

本系列分享共有三節(jié)內(nèi)容,本文整理自砧木的第二次分享《單人開發(fā)場(chǎng)景下的測(cè)試環(huán)境實(shí)踐》。

【以下為分享實(shí)錄,有刪節(jié)】

《阿里巴巴測(cè)試環(huán)境管理概述》要點(diǎn)回顧

在正式開始本次分享之前,我們首先回顧一下上一次分享中我的同事金戟分享的要點(diǎn)。在測(cè)試環(huán)境管理中,我們主要遇到兩個(gè)問題,第一個(gè)是本地與集群雙向互通的問題,在阿里巴巴集團(tuán)內(nèi)部主要通過基于CNI(Conteinre Network Interface)機(jī)制改造Kubernetes的IP邏輯實(shí)現(xiàn)的“扁平化的內(nèi)網(wǎng)IP”這個(gè)方法來解決,這種方式更適合大型集團(tuán)企業(yè)。第二個(gè)問題是多人協(xié)作開發(fā)時(shí),路由的可訪問性控制問題,在阿里巴巴內(nèi)部我們是通過“項(xiàng)目環(huán)境”與“隔離域”實(shí)現(xiàn)的。

程序員小黑的困擾:測(cè)試環(huán)境不穩(wěn)定導(dǎo)致集成效率低下

本次分享,我們將把視角從阿里巴巴集團(tuán)內(nèi)部轉(zhuǎn)向外部開發(fā)者,特別是廣大開發(fā)者所在的中小團(tuán)隊(duì),聊聊他們?nèi)绾谓鉀Q前文中提到的“本地與集群雙向互通”的問題。

我們先來思考一個(gè)問題:在本地開發(fā)的時(shí)候,有哪些讓你感到痛苦的事情?

為了幫助大家更好回憶,我們假象了一位主人公——程序員小黑。小黑所在公司采用了微服務(wù)相關(guān)的技術(shù)實(shí)踐,公司的平臺(tái)根據(jù)業(yè)務(wù)情況被劃分為多個(gè)“服務(wù)”,小黑所在團(tuán)隊(duì)負(fù)責(zé)的是其中單獨(dú)一個(gè)業(yè)務(wù)領(lǐng)域。小黑團(tuán)隊(duì)會(huì)使用平臺(tái)中的一些公共服務(wù),同時(shí)他們也會(huì)為平臺(tái)中的其它服務(wù)提供標(biāo)準(zhǔn)的API,方便其它服務(wù)調(diào)用數(shù)據(jù)。

為了降低整個(gè)平臺(tái)的運(yùn)維成本,小黑公司使用了阿里云提供的Kubernetes服務(wù)來搭建他們的測(cè)試環(huán)境及生產(chǎn)環(huán)境,通過云效提供的項(xiàng)目協(xié)作“看板”管理項(xiàng)目的需求及迭代進(jìn)度。同時(shí)云效也提供了DevOps相關(guān)的能力支持,打通了從代碼開發(fā)到軟件發(fā)布上線的端到端的過程。小黑公司基于這套DevOps體系,不斷的對(duì)產(chǎn)品進(jìn)行迭代和優(yōu)化。

相對(duì)于采用“DevOps”之前,小黑公司的研發(fā)效能已經(jīng)得到極大提升,但近期小黑卻遇到了一些困擾。他發(fā)現(xiàn),由于測(cè)試環(huán)境不穩(wěn)定,讓他浪費(fèi)了大量的時(shí)間在“集成”這件事情上。

其實(shí),團(tuán)隊(duì)中的每位成員都希望盡快完成本地開發(fā)的功能的驗(yàn)證工作,目前情況下,小黑團(tuán)隊(duì)成員只能先將代碼提交到代碼倉(cāng)庫(kù),然后通過流水線將代碼部署到測(cè)試環(huán)境,因此“代碼提交”會(huì)變得非常頻繁,也就意味著在大部分時(shí)間里,你的測(cè)試環(huán)境會(huì)處于更新、發(fā)布狀態(tài)中,整個(gè)測(cè)試環(huán)境的可用性就會(huì)變得非常差。甚至有的時(shí)候,因?yàn)閭€(gè)別成員在本地開發(fā)完成后,對(duì)代碼沒有進(jìn)行充分驗(yàn)證就進(jìn)行了測(cè)試提交,導(dǎo)致整個(gè)測(cè)試環(huán)境“掛掉”。有時(shí)因?yàn)橛芯o急的需求需要快速上線,測(cè)試環(huán)境會(huì)被這些緊急變更獨(dú)占。小黑只能在測(cè)試環(huán)境可用的短暫的時(shí)間里盡可能地去驗(yàn)證自己開發(fā)的功能,這就導(dǎo)致小黑最近情緒很低落。

小黑的困擾一:聯(lián)調(diào)其它服務(wù)。

其實(shí)小黑的需求很簡(jiǎn)單,他希望在本地代碼開發(fā)完成之后,能夠盡可能快的跟其它服務(wù)進(jìn)行聯(lián)調(diào),來驗(yàn)證他開發(fā)的功能是否OK,但是現(xiàn)在他唯一能依賴的就是那套“公共環(huán)境”。

在本地完成代碼開發(fā)后,如何高效的與其它服務(wù)進(jìn)行聯(lián)調(diào)呢?經(jīng)過分析發(fā)現(xiàn),在本地進(jìn)行聯(lián)調(diào)效率最高,使用公共環(huán)境進(jìn)行測(cè)試成本最低,兩全其美的辦法就是,在本地直接訪問云上集群的環(huán)境進(jìn)行測(cè)試。對(duì)這個(gè)“命題作文”,開發(fā)者和企業(yè)有很多不同的選擇,除了在第一次分享中我同事介紹的方法外,我們還推出了一個(gè)更輕量的方式通過KT-Connect工具實(shí)現(xiàn)。

KT-Connect是阿里巴巴云效團(tuán)隊(duì)研發(fā)的面向Kubernetes的本地開發(fā)者輔助工具(已經(jīng)開源),通過“Connect”命令可以實(shí)現(xiàn)一鍵連接云上任意的Kubernetes集群。連接完成之后,可以快速建立本地到集群的VPN網(wǎng)絡(luò),同時(shí)將Kubernetes集群的DNS解析能力整合到本地,開發(fā)者可以像在集群中一樣可以直接通過PodIP,ClusterIP以及DNS域名訪問到集群內(nèi)的服務(wù)。

小黑的困擾二:其它服務(wù)調(diào)用我

在這個(gè)案例中,小黑既是服務(wù)的消費(fèi)者,同時(shí)也會(huì)提供一些公共的API供其它服務(wù)調(diào)用。這時(shí)只打通本地到集群的服務(wù),并不能完全解決小黑的問題,必須同時(shí)讓集群中的服務(wù)可以訪問本地的服務(wù)。

KT-Connect同樣可以幫助我們解決這個(gè)問題,這就需要使用“Exchange”和“Mesh”命令。
Exchange(交換)命令通過在集群內(nèi)部署代理容器,替換集群內(nèi)的原有應(yīng)用,并將所有對(duì)代理容器的請(qǐng)求直接轉(zhuǎn)發(fā)到本地端口。這是一種“完全替換”,這就意味著在同一時(shí)間點(diǎn),只有一位開發(fā)者可以將他本地的服務(wù)加入到集群中。為了解決這個(gè)問題,KT-Connect提供了第三個(gè)命令——Mesh(混合)。當(dāng)我們?cè)诒镜剡\(yùn)營(yíng)“Mesh”命令后,我們同樣會(huì)把本地服務(wù)加入到集群里面,但是會(huì)保持原有的目標(biāo)服務(wù)狀態(tài)不變,并且本地服務(wù)會(huì)繼承目標(biāo)服務(wù)中所有的標(biāo)簽。依照K8S本身服務(wù)發(fā)現(xiàn)的原理,請(qǐng)求流量會(huì)被隨機(jī)地轉(zhuǎn)發(fā)到原有服務(wù)或本地的服務(wù)。同時(shí)配合Istio的流量規(guī)則,就可以讓所有正常流量依然保持對(duì)原應(yīng)用的訪問,而只對(duì)一些有特殊標(biāo)記的的請(qǐng)求轉(zhuǎn)發(fā)到本地。從而可以實(shí)現(xiàn)在一套公用測(cè)試環(huán)境的基礎(chǔ)上各自獨(dú)立的完成本地的集成聯(lián)調(diào)。

KT-Connect帶來高效的測(cè)試體驗(yàn)

如前文所述,通過KT-Connect我們可以實(shí)現(xiàn)從本地到集群的雙向互通。在團(tuán)隊(duì)里,其實(shí)還有很多“小黑”,我們可以看到這樣一個(gè)場(chǎng)景:小黑A可以通過“Mesh”命令把本地服務(wù)加入到測(cè)試環(huán)境里,并且可以讓集群中一部分特定的流量轉(zhuǎn)發(fā)到本地,這樣他可以與集群中的其它服務(wù)進(jìn)行聯(lián)調(diào)。小黑B通過“Connect”命令連接到集群,直接在本地進(jìn)行測(cè)試。在某些情況下,小黑B需要依賴的服務(wù)剛好是小黑A正在開發(fā)的版本,小黑B只要按照Istio的流量規(guī)則設(shè)置可以調(diào)用小黑A服務(wù)的值,就可以跟小黑A的服務(wù)進(jìn)行聯(lián)調(diào)。對(duì)于小黑C,他既需要調(diào)用集群中的服務(wù),又需要集群中的服務(wù)回調(diào)到本地,所以他在本地既運(yùn)營(yíng)了 “Connect”又運(yùn)行了“Mesh”。如上所示,小黑團(tuán)隊(duì)中的所有成員的測(cè)試活動(dòng)都是建立在一套公共環(huán)境的基礎(chǔ)之上,但是彼此又都有一個(gè)相對(duì)獨(dú)立的測(cè)試環(huán)境,具有很好的可用性。

KT-Connect背后的原理

KT-Connect背后有什么黑科技嗎?答案是:沒有。我們只是綜合利用了兩個(gè)大家在日常工作中都會(huì)用到的能力,通過Kubectl的端口轉(zhuǎn)發(fā)可以實(shí)現(xiàn)將集群中服務(wù)的端口映射到本地,通過SSH協(xié)議建立本地與集群之間的隧道。

以“Connect”命令為例,了解一下KT-Connect背后的原理。如上圖所示,當(dāng)開發(fā)者在本地運(yùn)行“Connect”命令后,首先會(huì)創(chuàng)建一個(gè)shadow pod實(shí)例,這個(gè)實(shí)例會(huì)運(yùn)行“SSH Server”和“DNS Server”,當(dāng)實(shí)例創(chuàng)建成功之后,就可以通過“port-forward”將代理容器的22端口轉(zhuǎn)映射到本地,如2222端口。此時(shí),就可以通過本地的2222端口建立與集群內(nèi)部的連接。

“Exchange”和與“Connect”命令背后的原理類似,我們也會(huì)先創(chuàng)建一個(gè)代理容器,并通過“port-forward”將代理容器的端口映射到本地。然后根據(jù)Exchange的目標(biāo)服務(wù),判斷將代理容器的哪一個(gè)端口的請(qǐng)求全部轉(zhuǎn)發(fā)到本地的特定端口。

“Mesh”與“Exchange”的最大的差異在于“Exhange”會(huì)將原應(yīng)用的Replicas(副本)直接降到0,會(huì)將集群內(nèi)所有對(duì)原應(yīng)用的流量全部轉(zhuǎn)發(fā)到本地。而 “Mesh”則是在保持原有應(yīng)用Pod不變的前提下,創(chuàng)建一個(gè)新的代理容器并且繼承原應(yīng)用的所有標(biāo)簽,并會(huì)增加一個(gè)隨機(jī)的version標(biāo)簽。配合Istio的流量規(guī)則,可以讓所有正常流量依然保持對(duì)原應(yīng)用的訪問,而只對(duì)一些有特殊標(biāo)記的的請(qǐng)求轉(zhuǎn)發(fā)到本地。從而可以實(shí)現(xiàn)在一套公用測(cè)試環(huán)境的基礎(chǔ)上各自獨(dú)立的完成本地的集成聯(lián)調(diào)。

最后用《持續(xù)交付》中的一句話來總結(jié)今天的分享:集成通常是一個(gè)非常痛苦的過程。那么就應(yīng)該在每次提交代碼后就進(jìn)行集成,而且應(yīng)該從項(xiàng)目一開始就這么做。其實(shí)句話還可以做一個(gè)調(diào)整,我們提倡在代碼提交之“前”就進(jìn)行驗(yàn)證。

非常感謝大家的聆聽,歡迎大家加入云效開發(fā)者交流群和KT-Connect工具用戶群與我們交流。


【下期預(yù)告】

【直播日期】5月6日 16:00
【直播主題】多人協(xié)作場(chǎng)景下的測(cè)試環(huán)境實(shí)踐
【直播講師】鄭云龍 阿里巴巴技術(shù)專家
【觀看方式】云效開發(fā)者交流群直播(釘釘群號(hào):群號(hào):23362009)


【關(guān)于云效】

云效,企業(yè)級(jí)一站式DevOps平臺(tái),源于阿里巴巴先進(jìn)的研發(fā)理念和工程實(shí)踐,致力于成為數(shù)字企業(yè)的研發(fā)效能引擎!云效提供從“需求 ->開發(fā)->測(cè)試->發(fā)布->運(yùn)維->運(yùn)營(yíng)”端到端的在線協(xié)同服務(wù)和研發(fā)工具,通過人工智能、云原生技術(shù)的應(yīng)用助力開發(fā)者提升研發(fā)效能,持續(xù)交付有效價(jià)值。

總結(jié)

以上是生活随笔為你收集整理的分享实录 | 单人开发场景下的测试环境实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。