kubernetes社區組織和軟件工程過程學習
0. 社區化運作和kubernetes
不同軟件開發社區的運行模式不大相同,但總體目標是一致的,就是廣泛的聚集全球不同組織和身份的開發者進行某項軟件的開發,海納百川、兼容并包,那么在社區化開發的過程中,就會碰到如下的挑戰
不同組織和個人對社區的的訴求不同,粗略劃分可以按照 開發者/用戶,一般特性開發者/模塊組織者等維度來劃分,如何保持版本節奏有序,按時發布?
設計質量和代碼質量層差不齊,如何保證項目質量可控?
kubernetes社區是目前開源社區中運作比較規范,開發效率較高的一個社區,同時,也繼承了google強大的軟件工程實踐,非常值得學習。
最近,kubernetes社區的交流的庫從主項目交付件中脫離, 放在這里,從中可以探究社區項目的運作模式,并提升組織的開發效率。
1. 交流方式
社區(Community)的本質是要進行交流(Communicate)
主要交流方式為使用github進行交流,使用issue/milestone/PR等方式交流,這種方式
所有交流過程都是開發團隊全員可見的,避免了使用聊天工具、郵件等把信息束縛在幾個人可見的形態下
任何獨立的交流方式,最后都要存檔為其他人可見,例如google doc,或者文檔
次要交流方式包括了論壇,slack,在線會議,這些交流方式的頻次不算高,但可以有一些專注的深度交流
由于開源團隊分布在全球各個時區,舉辦meeting的成本非常高,所以大家在開會前基本都會做充足的準備,把分歧點和決斷點都搞的比較明確,所以會議的效率反而很高
不少大公司由于開會的成本很低,反而會議效率低下,無法在會上做快速決策和深度討論
開會主要是做決策,不去解決具體問題
改進方法
組內設計、討論,bug處理,盡量不使用郵件或即時聊天工具,用提PR/issue的方式來做
會議分為兩種,一種是少數人為了講清楚情況,在白板前自發召集人討論,這種會議是高效的。另一種專門到會議室開會,需要在會議系統內做跟蹤,把會議時長 *人數作為指標,并反饋給大家。必要時可以在會議系統中設置“會議配額”,限制團隊開會的時長。
2. 組織方式: SIGs(Special Interest Group)
把社區中的人分為20多個組,從組的劃分可以看出社區的關注點,每個組的Leader有大的決策權,類似于美國政治中的聯邦制
每個組有獨立的論壇(Google Group),和Slack(在線聊天,但我上去發現人不大多),定期開會
這些組可以大致分為這么幾類
功能特性: API機制,自動擴縮容,命令行,集群生命周期,集群操作,節點,rkt,服務目錄,UI
性能和安全特性:權限和認證,監控測量,性能和可擴展性
周邊依賴: aws,openstack,網絡,存儲
應用:大數據,應用,私有云
項目支撐工作:文檔,貢獻者體驗,項目管理,測試
一般的功能特性都會被各個公司的活動覆蓋,但在項目支撐工作的這幾項上做的就很少,尤其是貢獻者體驗這一項,沒有比較好的覆蓋。開源社區為了吸引開發者貢獻代碼,會有專門的文檔和流程指導新手開發者進入貢獻的道路,但在大部分公司依賴于口頭交流,會降低新入門開發者的成長速度,導致人月神話效應明顯。
3. 開發效率的度量和提升
在工程學的任何領域,如果想要提升效率,首先需要找到合適的指標進行度量。如果一項改進措施有效,那么在這些指標中應該有正向反應,那么就可以保留;如果無效,那就放棄。目前可以作為效率度量的指標有:
PR審核和合入的平均時長
issue解決的平均時長
社區的代碼提交率
4. 文檔
一般使用markdown格式,在github上可以直接查看,并專人持續維護。避免了傳統軟件開發中設計時寫了一大堆word/PPT文檔,但難以更新、搜索、查找的困境
設計文檔和代碼同時提交,一般來說設計文檔通過PR來提交,由Maintainer審核后就基本可以按此開發
5. 貢獻者體驗
以任何一個PR為例子,Google搞了自己的CI機器人 ,在所有PR里面都能自動給PR分類、測試、打標簽,還有Reviewable機器人,負責保證PR是可讀的,任何開發者提交的PR都要先自行解決這兩個問題,然后Reviewer才會去看這個代碼怎么合入
專門的開發者指導文檔,涵蓋了所有的開發者需要經歷的流程、開發環境搭建、API和插件的編寫方式
6. 項目管理
搜集用戶反饋,強化供應商中立性
在kubernetes里面搞一個項目孵化器,當生態中有其他值得開展項目的時候做支撐
尋找更多的公司貢獻者
7. 測試
從代碼層級保證單元測試的代碼和業務邏輯代碼需要用一個PR提交,保證了整個項目的代碼質量不會變差
編寫了端到端測試、整合測試、模擬器測試(性能)等多種方式
大量使用CI和自動測試,所以我猜測他們測試的主要工作量也是編碼
8. 結語
kubernetes社區是推進工程師文化非常好的一個例子。簡單來說,社區的一切工作都是圍繞著項目和開發者這兩個維度來進行的,社區為開發者提供了一個比較好的持續學習和進步的機制,并在工作過程中把可以由機器自動化的部分直接用機器來完成,大幅提升效率。
開發者在社區所能體會到的自由,就像在操作系統下運行的進程一樣,不必考慮CPU和內存的限制。這反過來增加了社區的繁榮和項目的演進,這樣,大型項目的開發就變成了一個大型的在線游戲,玩的開心的人提供了源源不斷的提供創造力。
Kubernetes
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。