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