文|鄭浩寧
軟件工程專業
Layotto 社區貢獻者
就讀於福州大學,軟件工程專業的大三學生。當前致力於微服務與雲原生領域。
本文1708字,預計閲讀5 分鐘
今天 SOFAStack 邀請到了開源之夏 2024 Layotto 社區的中選學生鄭浩寧同學。在本項目中,他完成了「對齊 Layotto 對 Dapr 的依賴」這一課題任務。希望他分享的這段經歷,能讓更多人瞭解到 Layotto 開源社區,感受開源的魅力~
項目鏈接:https://summer-ospp.ac.cn/org/prodetail/24f080353?list=org&navpage=org
項目信息
項目名稱:對齊 Layotto 對 Dapr 的依賴
項目導師:王文學
項目描述:Layotto 在創建之初,目標就是需要兼容 Dapr 接口和 Dapr 相關的 component 的實現,並且在 22 年,對 Dapr 的 v1.5.2 版本做了第一次的兼容。但是當前 Dapr 的版本已經走到了 v1.13.0,很多能力做了修復,就需要我們將 Layotto 中 Dapr 的兼容版本升級到 v1.13.0。
項目實現思路
對 Layotto 項目中的相關 Dapr API 進行處理
對於早期依賴於 Dapr API 的部分,這部分由於無人使用且維護成本高,需要將原 Dapr API 的相關內容遷移到 Layotto API 部分中,然後將整個 Dapr API 部分移除。
以 SaveState 代碼示例:
修改前:
func (a *api) SaveState(ctx context.Context, in *runtimev1pb.SaveStateRequest) (*emptypb.Empty, error) {
// 構造請求
// ...
// ...
// 調用 Dapr API
return a.daprAPI.SaveState(ctx, daprReq)
}
func (d *daprGrpcAPI) SaveState(ctx context.Context, in *dapr_v1pb.SaveStateRequest) (*emptypb.Empty, error) {
// 構造請求
// ...
// ...
// 調用 Dapr-contrib 執行具體邏輯
err = store.BulkSet(reqs)
if err != nil {
err = d.wrapDaprComponentError(err, messages.ErrStateSave, in.StoreName, err.Error())
log.DefaultLogger.Errorf("[runtime] [grpc.SaveState] error: %v", err)
return &emptypb.Empty{}, err
}
return &emptypb.Empty{}, nil
}
修改後:
func (a *api) SaveState(ctx context.Context, in *runtimev1pb.SaveStateRequest) (*emptypb.Empty, error) {
// 構造請求
// ...
// ...
// 直接調用 Dapr-contrib 執行具體邏輯
err = store.BulkSet(ctx, reqs, state.BulkStoreOpts{})
if err != nil {
err = a.wrapDaprComponentError(err, messages.ErrStateSave, in.StoreName, err.Error())
log.DefaultLogger.Errorf("[runtime] [grpc.SaveState] error: %v", err)
return &emptypb.Empty{}, err
}
return &emptypb.Empty{}, nil
}
Dapr 相關依賴進行升級
這部分工作可簡要概括如下:
開源之夏個人隨訪
自我介紹
大家好,我是鄭浩寧,目前是福州大學軟件工程專業的大三學生。自從大二以來,我就對開源抱有濃厚的興趣,這次是我第一次真正意義上為社區的開源項目進行貢獻。
參與該項目的原因
因為我本身就對微服務與雲原生領域抱有興趣,在這次 OSPP 的申報過程中也就自然而然的接觸到了 SOFAStack 社區,進而注意到了 Layotto 項目。
在對 Layotto 項目有了一定程度的瞭解之後,我馬上對這個項目產生了濃厚的興趣,並且最終決定參與到 Layotto 項目的開源貢獻之中。
如何克服項目過程中的困難與挑戰
OSPP 開始後,我參考了官方以及 Dapr 的文檔、相關聯的 issues、項目的源碼實現,同時在與導師進行積極的交流之後,最後得出對於這次課題的合適方案。
在項目開發的過程中,導師給予了我許多的幫助。當我在開發過程中遇到問題時,我會將具體問題整理成文檔並附上個人的理解,通過文檔與導師一起討論問題並解決問題。
在項目的開發過程中,也有一些問題讓我留下了深刻印象。比如對於 Dapr 的依賴升級:Dapr 已經走過了很多版本,許多功能都進行了升級完善,而 Layotto 使用的 Dapr 依賴已經是很早之前的版本了,由於版本跨度大,對 Dapr 的依賴進行升級後, Layotto 會出現大量的錯誤,此時就需要修復所有因此出現的錯誤。
在通過與導師的溝通交流完成課題工作後,又由於這部分的工作導致了 Github 上的 CI/CD 失效,後續還是通過與導師的配合一起完成了這部分的功能。
你對社區的印象
SOFAStack 社區是一個充滿活力、專業的組織,致力於推動雲原生技術的發展。通過開源合作、技術創新和社區生態系統的建設,該社區為開發者提供了豐富的資源和平台,以促進雲原生應用的普及和應用。
SOFAStack 社區同時也是一個充滿開源精神的組織,歡迎並鼓勵學生和開源愛好者的積極參與,與所有開源愛好者一同建設,共同成長。
有哪些收穫
參與這次開源之夏項目,不僅加深了我對雲原生領域的認識,更讓我在實踐中獲得了珍貴的經驗。同時,這次經歷也拓寬了我的技術領域,激發了我投身開源事業的熱忱。
在開發過程中,我遭遇了眾多未預見的難題。然而,正是這些挑戰及其克服過程,為我的編程生涯塑造、積累了極為寶貴的經驗。
寄語
開源之夏為所有人都提供了一個很好的機會。而對於開源本身,我相信只要勇於嘗試,無論結果如何,都會有所收穫!