Stories

Detail Return Return

開源之夏經驗分享|Layotto 社區 鄭浩寧:嘗試,就會有收穫! - Stories Detail

文|鄭浩寧

軟件工程專業

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 社區同時也是一個充滿開源精神的組織,歡迎並鼓勵學生和開源愛好者的積極參與,與所有開源愛好者一同建設,共同成長。

有哪些收穫

參與這次開源之夏項目,不僅加深了我對雲原生領域的認識,更讓我在實踐中獲得了珍貴的經驗。同時,這次經歷也拓寬了我的技術領域,激發了我投身開源事業的熱忱。

在開發過程中,我遭遇了眾多未預見的難題。然而,正是這些挑戰及其克服過程,為我的編程生涯塑造、積累了極為寶貴的經驗。

寄語

開源之夏為所有人都提供了一個很好的機會。而對於開源本身,我相信只要勇於嘗試,無論結果如何,都會有所收穫!

user avatar meituanjishutuandui Avatar vivo_tech Avatar yuebanxiaoyequ_5b12c826c10bc Avatar hex Avatar
Favorites 4 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.