从旁观者到贡献者:经历 OpenYurt 的“开源之夏”,我们想让更多人体验社区的魅力
作者:OpenYurt 社區(qū)
背景
2021 年,中國開源軟件推進(jìn)聯(lián)盟 COPU 牽頭發(fā)布了《2021 中國開源發(fā)展藍(lán)皮書》,涵蓋當(dāng)今全球開源的總體情況分析、開發(fā)者分析、項目分析、領(lǐng)域案例,繪制了一副"開源數(shù)字生態(tài)地圖"。讓我們?nèi)娴乜吹搅碎_源領(lǐng)域的中國力量。報告指出:國內(nèi)的企業(yè),阿里開源活躍度排名第一,有的指標(biāo)值甚至是其它公司之和,并且在社區(qū)化/開放等方面也做得不錯。
同年,在中國科學(xué)院軟件研究所面向高校學(xué)生發(fā)起的第二屆“開源軟件供應(yīng)鏈點亮計劃系列暑期活動”,即“開源之夏”中,阿里云原生開源大家族共有 14 大開源項目加入其中。通過積極參與活動,同學(xué)們在頂級開源導(dǎo)師的指導(dǎo)下,深度體驗了真實世界的軟件開發(fā),感受到了開源技術(shù)共建的魅力,同時也為國內(nèi)優(yōu)秀開源軟件社區(qū)的蓬勃發(fā)展貢獻(xiàn)出了一己之力。
雖然距“開源之夏”已過了大半年的時間,由阿里云原生開源的 OpenYurt 項目,以其非侵入的設(shè)計思想、部署過程中的絲滑體驗、被多次提到的“易用性”、社區(qū)活躍開放的氛圍以及富有前景的發(fā)展方向仍然吸引著越來越多熱愛開源的伙伴參與其中。在“開源之夏——OpenYurt 體驗中心”,同學(xué)們能夠以低門檻的方式快速上手并參與到項目當(dāng)中,解決實際問題。從旁觀者到社區(qū)貢獻(xiàn)者的角色轉(zhuǎn)變之間,讓我們通過采訪內(nèi)容,一起看看他們的真實感受,以及有哪些意想不到的收獲。
采訪問答
陳濤,浙江大學(xué)軟件學(xué)院在讀研究生
劉佳文,浙江大學(xué)軟件學(xué)院在讀研究生
陳璐,同濟大學(xué)軟件學(xué)院在讀研究生
1. 請做個自我介紹,讓大家很好地認(rèn)識你~
陳濤:大家好,我叫陳濤,現(xiàn)在是一名浙江大學(xué)軟件工程的在讀研究生。
劉佳文:大家好,我是劉佳文,目前是浙江大學(xué)軟件學(xué)院研二的學(xué)生。
陳璐:Hi, 大家好,我是陳璐。現(xiàn)在是同濟大學(xué)軟件學(xué)院一名研究生。
2. 平時有什么愛好?從什么時候開始喜歡上編程?以及如何接觸到“開源”文化?
陳濤:平時的愛好主要就是讀書,看電影,跑步。拋開高中的計算機課程,真正了解深入編程還是因為本科選擇了軟件工程這個專業(yè)。作為小白,起初在建立與計算機之間的“溝通”過程中,遇到了很多困難,但是隨著專業(yè)知識面的不斷拓展,逐漸喜歡上了編程這種直接、富有邏輯性的人機溝通方式。
計算技術(shù)的發(fā)展日新月異,許多技術(shù)問題可能并不是在書里就可以找到,在解決問題的過程中,會很自然地接觸到開源項目,因為你遇到的問題很可能在最新的討論中加以解決,這種開放、共享的開源文化,也是我認(rèn)為計算機技術(shù)快速發(fā)展的重要創(chuàng)新來源。
劉佳文:日常除了搬磚,一般就是刷刷劇。編程的話是因為專業(yè)的原因,慢慢接觸,有所產(chǎn)出的時候就帶來了正反饋,促使自己不斷學(xué)習(xí)新知識。在這個過程中,就接觸到了開源項目。
陳璐:平時喜歡閱讀,乒乓球,追劇,籃球(排名已分先后: >)。接觸編程還是因為大學(xué)選擇了計算機專業(yè),但是后來幸運地發(fā)現(xiàn)當(dāng)初誤打誤撞選的專業(yè)意外地契合自己喜歡折騰的 nerdy 氣質(zhì)。
接觸開源自然也是“折騰”路上一件順理成章的事情。在服務(wù)器上搭博客,嘗試個人 RSS 服務(wù),踩坑后去 StackOverflow 搜回答,去 GitHub 提 issue,有時遇到解決不了的問題自己寫 PR。在這個過程里不自覺地就參與了開源社區(qū)。
3. 為何選擇參加“開源之夏”,希望得到哪些收獲?
陳濤:之前自己在社區(qū)里主要處于潛水狀態(tài),大部分時間只是看看有沒有可用的“輪子”來解決問題,但是心里其實一直有造輪子的想法,也是希望參加開源之夏的過程中,從一位旁觀者轉(zhuǎn)變?yōu)樨暙I(xiàn)者。
劉佳文:在參加開源之夏之前,我已經(jīng)在參與 OpenYurt 社區(qū)的工作,后來看到 OpenYurt 也參與了開源之夏,所以就選擇參加了這個活動。一方面想要更加深入了解相關(guān)的技術(shù),另一方面也能夠更加積極參與社區(qū)貢獻(xiàn)。
陳璐:“開源之夏”活動是受同學(xué)安利參加的。當(dāng)初參加這個活動只是抱著試試看的心態(tài)給自己暑假找點事做,現(xiàn)在看來這個活動給我的收獲遠(yuǎn)超過我最初的期待。
4. 在參加開源之夏活動前,對 OpenYurt 是否有過了解?在眾多項目中為什么選擇 OpenYurt?
陳濤:由于研究生的方向是邊緣計算方向,就把目光鎖定在了與邊緣計算相關(guān)的項目上,選擇 OpenYurt 是因為其非侵入的設(shè)計思想。剛接觸 OpenYurt 時,自己只使用過 Docker、 Kubernetes,原本下意識會感覺涉及到邊緣的項目使用起來會比較復(fù)雜,但是無論部署還是使用過程都十分的絲滑,與 Kubernetes、容器等云原生技術(shù)做到了很好地融合。我認(rèn)為在支持眾多邊緣特性和場景的同時,能夠兼容云原生特性,是一個很好地設(shè)計模式。
陳璐:參加活動之前,我完全是一個邊緣云原生領(lǐng)域的小白,只在幾篇技術(shù)文章中對 OpenYurt 略有耳聞,OpenYurt 于我還處于“猶抱琵琶半遮面”的狀態(tài)。選擇 OpenYurt 也是希望能通過這個項目到一個新的領(lǐng)域“見見世面”,開拓一片新地圖。
5. 如何看待 OpenYurt 所在的邊緣云原生這個領(lǐng)域的技術(shù)價值?
陳濤:隨著云計算能力的不斷下沉,將分散但總量豐富的邊緣計算資源納管進(jìn)來已經(jīng)成為趨勢。同時云原生技術(shù)作為云背景下誕生而出的一系列技術(shù),可以充分利用云計算資源,已逐漸成為標(biāo)準(zhǔn)。因此在納管邊緣設(shè)備的過程中,如何利用云原生技術(shù)屏蔽底層設(shè)備差異,使得云上云下環(huán)境統(tǒng)一,是一個十分具有挑戰(zhàn)和價值的方向。
劉佳文:OpenYurt 相比于其他方案,由于它對 Kubernetes 的非侵入性,開發(fā)者和使用者都能感受到它的易用性。另外,針對邊緣場景的難題,OpenYurt 也設(shè)計了各種方案解決,給邊緣云原生這個領(lǐng)域中的難題提供了不同的解決思路。
陳璐:OpenYurt 致力于打造一個邊緣云原生領(lǐng)域的基礎(chǔ)設(shè)施平臺。由于 Kubernetes 作為云原生事實上的標(biāo)準(zhǔn)最初是為數(shù)據(jù)中心設(shè)計的,并沒有考慮很多邊緣場景的特殊需求(比如不穩(wěn)定的網(wǎng)絡(luò)環(huán)境等)。OpenYurt 在做的事情是去針對這樣的場景對 Kubernetes 做一些非侵入式的改進(jìn)和拓展。
6. 在剛剛上手 OpenYurt 這個項目的時候,是否遇到過什么困難?如果有,請展開介紹下吧~
陳濤:剛開始遇到的困難主要在源碼閱讀方面,這是我第一次面對較大的架構(gòu),面對許多組件,不知道從哪里入手,可能看某個特性的過程中,就會飄到其他的代碼里,甚至?xí)霈F(xiàn)讀著讀著就忘記之前代碼的情況…對初窺門徑的我來說確實會造成一定挫敗感,但我認(rèn)為這是接觸每一個陌生項目時都必須經(jīng)歷的階段。后來慢慢熟悉過程中也逐漸產(chǎn)生了一些自己的經(jīng)驗,例如:把握主要脈絡(luò),不要沉溺到不重要的細(xì)節(jié)中;巧用調(diào)試,在運行過程中可以很好地觀察運行邏輯;以及多做筆記,將關(guān)鍵點和思考記錄下來。
劉佳文:剛上手的時候遇到的困難主要還是集群的搭建,當(dāng)時社區(qū)集群搭建的工具功能比較簡單,過程中遇到的問題還是需要自己手動排查。不過現(xiàn)在社區(qū)相關(guān)工具已經(jīng)很完善了,對新手也很友好。
陳璐:坦率講,OpenYurt 是有一定學(xué)習(xí)成本的。首先它要求對 Kubernetes 有一個基本的了解,要理解它的設(shè)計背景還需要結(jié)合一些邊緣計算的知識,然后想要上手體驗又至少需要一個分布式環(huán)境和一定動手能力。當(dāng)然現(xiàn)在社區(qū)也注意到這些問題,比如我參與的體驗中心項目嘗試去做的事情就是希望降低 OpenYurt 的使用門檻。
7. 了解到您主要參與貢獻(xiàn)的部分是 OpenYurt 開發(fā)者體驗中心,請向大家介紹下這個組件,包括設(shè)計的背景、實現(xiàn)方式、面臨的挑戰(zhàn),解決的問題等
陳濤:OpenYurt 自開源以來,就吸引了許多關(guān)注邊緣計算領(lǐng)域的開發(fā)者與使用者,但是由于使用者的背景不同,可能缺少 Kubernetes 等云計算領(lǐng)域的相關(guān)知識,當(dāng)使用、搭建 OpenYurt 集群時,就會出現(xiàn)各種各樣的問題,無法發(fā)揮出 OpenYurt 的能力。
在這個背景下,OpenYurt 社區(qū)考慮推出一個 OpenYurt 體驗中心,用戶只需要通過體驗中心申請賬號,就可以獲得并連接上一個 OpenYurt 集群。與此同時,由于體驗賬戶并非在生產(chǎn)環(huán)境中,也為了提高資源利用率,OpenYurt 體驗中心將采用軟多租技術(shù),實現(xiàn)多個租戶共享一個 OpenYurt 集群,確保用戶看到完整 OpenYurt 集群的同時,保證資源的隔離與安全性。
在這個項目中,我主要負(fù)責(zé)開發(fā) operator 管理租戶和相關(guān)資源的生命周期,包括對租戶 CRD 的設(shè)計、controller 的開發(fā)、租戶證書簽發(fā)等。其中印象較深的挑戰(zhàn)可能涉及到租戶證書這方面,因為要進(jìn)行租戶的身份認(rèn)證,必須在證書上添加相關(guān)的租戶信息,因此需要短時間內(nèi)梳理整個 Kubernetes 和 OpenYurt 相關(guān)的證書管理邏輯,同時設(shè)計在非侵入的情況下,完成認(rèn)證信息的注入,這在當(dāng)時花了較長時間。
劉佳文:OpenYurt 體驗中心由多個部分組成,我主要負(fù)責(zé)多租組件的設(shè)計開發(fā),簡單來講就是根據(jù)請求中租戶的信息對其請求進(jìn)行檢查以及修改,使得租戶無法看到其他租戶的資源情況。
在設(shè)計開發(fā)的過程中需要全面的考慮租戶的各類請求以及對應(yīng)的請求如何處理,最終對于租戶來說體驗中心能夠有較高的安全性。另外,為了實現(xiàn)請求處理的整個流程,還需要對 API-Server 處理請求的流程有詳細(xì)的了解,所以就要求在較短的時間內(nèi)對 API-Server 源碼的閱讀,并能夠掌握運用。這對我來說是一個不小的挑戰(zhàn)。
陳璐:體驗中心的架構(gòu)比較復(fù)雜,具體設(shè)計和實現(xiàn)可以參考 OpenYurt 體驗中心[1]介紹文檔。我主要負(fù)責(zé)其中 yurt-dashboard 的部分,實際上是一個包含前后端的 Web 應(yīng)用。由于該項目的前后端開發(fā)都由我一個人完成,所以對我開發(fā)能力提出了很高的要求。在設(shè)計與實現(xiàn)過程中也遇到了一些 trivial 的問題,這里我舉一個例子:
如何設(shè)計 Kubernetes API Client?為了在項目中更便捷的使用 client-go 提供的訪問 Kubernetes API 的能力,如何設(shè)計一套滿足易用性,可拓展性的訪問接口。這個問題困擾了我很久,針對這部分的邏輯,我前后重構(gòu)了幾個版本,希望找到一個合理的方案。
a. 直接調(diào)用 client-go 中提供的接口函數(shù),抽象出常用函數(shù),不進(jìn)行類的封裝。(可擴展性不足,代碼冗余嚴(yán)重,難以測試)
b. 抽象出一個 resourceClient 類,所有訪問請求經(jīng)過該類發(fā)出。(可擴展性不足,不同資源需要不同請求邏輯時通過 switch 來區(qū)分,不滿足 拓展大于修改 的設(shè)計原則)
c. 為每個資源定義一個 Client 類,將所有資源共用邏輯放到 baseClient 基類。(有一定冗余,可拓展性強)
另外,與我之前熟悉的“面向答辯編程”的玩具項目不同,這個項目最終會上線供實際用戶試用,這種直面用戶的壓力對我的編碼規(guī)范性,設(shè)計合理性提出了很高的要求。在開發(fā)過程中,很多地方都需要仔細(xì)考量是否符合實際,會不會影響系統(tǒng)可用性,是否會影響系統(tǒng)的可擴展性。軟件開發(fā)領(lǐng)域有一句著名的諺語,“Make it work, make it right, make it fast”。如果說我之前的開發(fā)經(jīng)歷大多停留在 “make it work” 的階段, 這個項目讓我站上更高的地方,能嘗試從 “make it right, make it fast” 的角度來思考。當(dāng)然受限于個人水平,最終實現(xiàn)效果也只是差強人意,但能在開源之夏項目中擁有這樣珍貴的機會,我十分感激。
8. 現(xiàn)在距離 2021 年開源之夏的舉辦已經(jīng)過了大半年的時間,是什么動力讓你一直留在 OpenYurt 社區(qū)并參與貢獻(xiàn)?
陳濤:除了自身的研究方向以外,還因為社區(qū)活躍開放的氛圍,富有前景的發(fā)展方向。在 OpenYurt 社區(qū)里,可以找到自己感興趣的點進(jìn)行深入?yún)⑴c,從剛開始解決一些 good-first-issue,到承擔(dān)重要特性并被認(rèn)可的過程中,可以收獲極大的成就感。
劉佳文:一方面因為自身研究方向為邊緣云原生這方面,日常的學(xué)習(xí)工作都圍繞這一塊內(nèi)容;另一方面選擇一個優(yōu)質(zhì)的開源項目并持續(xù)貢獻(xiàn),也會讓自己很有成就感。
陳璐:動力當(dāng)然是體驗中心在不斷迭代的需求(逃 >哈哈,開個玩笑。我覺得是 OpenYurt 很棒的社區(qū)氛圍讓人樂在其中,一句話來總結(jié)就是“一群專業(yè)的人,相互信任,做一件有價值的事”。
9. 回顧在 OpenYurt 社區(qū)的貢獻(xiàn)經(jīng)歷,是否達(dá)到了你參與開源之夏活動的預(yù)期?有什么意料之外的收獲,或者有意思的故事和大家分享嗎?
陳濤:已經(jīng)完美達(dá)到了我的預(yù)期,即從一個旁觀者轉(zhuǎn)變?yōu)閰⑴c者。意料之外的收獲可能就是在代碼以及文檔被不斷 review 的過程中,越來越規(guī)范,以前可能不會太過注重這方面,但是參與到該 OpenYurt 以后,自己寫代碼的過程中就會不知不覺的考慮易用性、可移植性等方面,我認(rèn)為這是我一個比較大的收獲。
劉佳文:意料之外的收獲的話,應(yīng)該是在報名這個活動剛開始,以為只是針對需求進(jìn)行開發(fā),項目結(jié)束就是終點。沒想到活動結(jié)束之中并且之后,社區(qū)仍然不斷跟進(jìn)我們的項目,讓我們有機會給大家分享。這些持續(xù)性的反饋更讓我感受到了開源的魅力。
陳璐:就像之前提到的,從這個項目得到的收獲遠(yuǎn)遠(yuǎn)超出我的預(yù)期。在完成項目的過程中,昌蒲和新勝兩位導(dǎo)師給了我很多幫助,在系統(tǒng)設(shè)計,原型設(shè)計,具體實現(xiàn)細(xì)節(jié)等各個方面都給予了我很多積極的反饋和有效的建議,而且不厭其煩地幫我這個 Kubernetes 初學(xué)者解答一些 silly questions。這個項目的完成離不開他們的指導(dǎo)與幫助。 另外由于本項目還涉及與陳濤和佳文兩位同學(xué)的合作,所以我們還會有定期的 sync 會議來同步進(jìn)展。大家一起分析、解決問題的經(jīng)歷也十分愉快,讓我認(rèn)識了這些新的朋友。
10. 最后,有什么話想對正在參與開源社區(qū)貢獻(xiàn),或是參加開源之夏活動的同學(xué)說嗎?
陳濤:通過此次經(jīng)歷,我體會到,在參與開源的過程中,不僅僅是單純地解決問題,由于開源項目開放的特點,所有合入的代碼都要考慮到易讀性、可擴展性等,包括規(guī)范代碼、怎樣設(shè)計可以更加優(yōu)雅與通用以及編寫相關(guān)文檔等項目的方方面面。而在代碼、文檔被不斷 review 和修改的過程中,也會極大地提升自己在復(fù)雜項目中參與合作的能力。
劉佳文:我覺得對于已經(jīng)參與過開源社區(qū)貢獻(xiàn)的同學(xué)來說,可能會更加注重在社區(qū)中更加主動、積極的參與到社區(qū)的討論中,提升自己的參與度。對于還沒有參與過貢獻(xiàn)的同學(xué)來說,以我為例,我當(dāng)時不知道為社區(qū)貢獻(xiàn)什么、怎么貢獻(xiàn),結(jié)合我自己的經(jīng)歷來看,如果身邊有參與開源的同學(xué),可以多問問,如果沒有,也可以大膽的在社區(qū)提交 issue 尋求幫助。
陳璐:不必有太多顧慮,放輕松,參與社區(qū)的門檻一定沒你想的那么高。參與一次討論,提一個修 typo 的 PR,這些都是你在為社區(qū)變得更好做出的貢獻(xiàn)。而一旦你度過最初的陌生階段,社區(qū)最終會回饋你意想不到的收獲。
關(guān)于 OpenYurt
OpenYurt 基于原生 Kubernetes 構(gòu)建,由阿里云于 2020 年 5 月開源,并于同年 9 月份入選 CNCF SandBox 項目,是業(yè)界首個對 Kubernetes 無侵入的邊緣計算云原生開源平臺。
OpenYurt 主打 “云邊一體化” 的概念,針對邊緣計算場景中的網(wǎng)絡(luò)環(huán)境復(fù)雜、大規(guī)模應(yīng)用交付、運維困難等痛點,提供了邊緣自治、云邊運維通道、單元化部署、一鍵式集群轉(zhuǎn)化等能力,通過將云邊節(jié)點統(tǒng)一管理,使得邊緣節(jié)點擁有與云端相同的能力,幫助開發(fā)者輕松完成在海量邊緣資源上的大規(guī)模應(yīng)用交付、運維、管控。
在過去兩年內(nèi),OpenYurt 已實現(xiàn)全網(wǎng)覆蓋和本地覆蓋的全場景落地,全網(wǎng)覆蓋的應(yīng)用場景如 CDN、音視頻直播、物聯(lián)網(wǎng)、物流、工業(yè)大腦、城市大腦等;本地覆蓋的應(yīng)用場景和案例如阿里云 LinkEdge、優(yōu)酷、盒馬、AIBox、銀泰商城等。
歡迎加入 OpenYurt 體驗中心
OpenYurt 作為邊緣云原生項目,涉及到邊緣計算和云原生兩個領(lǐng)域,許多邊緣計算的開發(fā)者不熟悉云原生相關(guān)的知識。為了降低 OpenYurt 的使用門檻,幫助更多地開發(fā)者快速上手 OpenYurt,社區(qū)推出了 OpenYurt 體驗中心這一平臺。想要嘗試 OpenYurt 能力的新用戶無需從頭搭建 OpenYurt 集群,只需要在平臺上申請一個測試賬號,即可馬上擁有一個可用的 OpenYurt 集群。
相關(guān)鏈接
[1]OpenYurt 體驗中心:
https://openyurt.io/docs/installation/openyurt-experience-center/overview
[2] OpenYurt 官網(wǎng):
https://openyurt.io/en-us/
點擊此處,立即了解 OpenYurt 項目!
總結(jié)
以上是生活随笔為你收集整理的从旁观者到贡献者:经历 OpenYurt 的“开源之夏”,我们想让更多人体验社区的魅力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何选择最优路径完成云原生上云?听这场阿
- 下一篇: 无缝融入 Kubernetes 生态 |