开源之夏经验分享|Layotto 社区 郑浩宁:尝试,就会有收获!

简介: 郑浩宁,福州大学软件工程专业大三学生,致力于微服务与云原生领域。作为 Layotto 社区贡献者,他参与了开源之夏 2024,完成了“对齐 Layotto 对 Dapr 的依赖”项目,将 Layotto 的 Dapr 兼容版本升级到 v1.13.0。

文|郑浩宁

软件工程专业

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 社区同时也是一个充满开源精神的组织,欢迎并鼓励学生和开源爱好者的积极参与,与所有开源爱好者一同建设,共同成长。

有哪些收获

参与这次开源之夏项目,不仅加深了我对云原生领域的认识,更让我在实践中获得了珍贵的经验。同时,这次经历也拓宽了我的技术领域,激发了我投身开源事业的热忱。

在开发过程中,我遭遇了众多未预见的难题。然而,正是这些挑战及其克服过程,为我的编程生涯塑造、积累了极为宝贵的经验。

寄语

开源之夏为所有人都提供了一个很好的机会。而对于开源本身,我相信只要勇于尝试,无论结果如何,都会有所收获!

相关文章
|
7月前
|
人工智能 缓存 Cloud Native
解锁 DeepSeek 安全接入、稳定运行新路径
聚焦于企业部署 DeepSeek 的应用需求,本文介绍了模型权重下载及多种部署方案,还阐述了大模型应用落地的常见需求,帮助用户逐步提升模型应用效果。
1073 250
|
程序员 数据库 开发者
值得收藏!如何快速画出一幅漂亮的架构图
这篇文章总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合业务需要的架构图。
162320 95
|
8月前
|
编解码 Cloud Native 算法
通义万相:视觉生成大模型再进化
通义万相是阿里云推出的视觉生成大模型,涵盖图像和视频生成。其2.0版本在文生图和文生视频方面进行了重大升级,采用Diffusion Transformer架构,提升了模型的灵活性和可控性。通过高质量美学标准和多语言支持,大幅增强了画面表现力。此外,视频生成方面引入高压缩比VAE、1080P长视频生成及多样化艺术风格支持,实现了更丰富的创意表达。未来,通义万相将继续探索视觉领域的规模化和泛化,打造更加通用的视觉生成大模型。
|
7月前
|
Shell Go 开发工具
【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
通过本文的介绍,我们详细讲解了如何在Rocky8上使用gvm来管理多个Go版本,并配置go-zero框架的开发环境。通过gvm的灵活管理,开发者可以轻松切换不同的Go版本,以适应不同项目的需求。同时,go-zero框架的使用进一步提升了微服务开发的效率和质量。希望本文能帮助开发者构建高效的Go语言开发环境,提高项目开发的灵活性和稳定性。
225 63
|
6月前
|
存储 负载均衡 Java
开源之夏经验分享|SOFARPC 社区郑佳莉:开源的收获不止代码
郑佳莉,国防科技大学计算机学院研二学生,专注Java领域与中间件技术。在开源之夏2024中,她参与SOFARPC社区项目,完善了动态配置能力,集成Nacos、Zookeeper等配置中心。通过这段经历,她不仅深入理解了SOFARPC框架的设计与实现,还学会了在大型开源项目中推动功能优化与创新,平衡系统稳定性和灵活性。导师和社区的支持使她受益匪浅。她鼓励更多新人勇敢尝试开源,保持热情,在挑战中不断成长。
开源之夏经验分享|SOFARPC 社区郑佳莉:开源的收获不止代码
|
6月前
|
NoSQL Go API
HTNN 如何斟酌出更好的插件扩展机制
HTNN在设计插件扩展机制时,重点关注扩展性和开发效率。通过统一的FilterPolicy CRD,HTNN实现了网络资源的策略配置与插件解耦,支持灵活的目标引用和多种插件类型。使用Protobuf和Go进行配置校验,确保了插件配置的合法性。HTNN支持两种插件:Native Plugin运行于istiod,适合利用现有Envoy能力;Go Plugin运行于Envoy Golang filter,借助Go生态解决更复杂问题。这种设计提升了HTNN的扩展性和开发效率,为用户带来更强大的网络能力。
HTNN 如何斟酌出更好的插件扩展机制
|
6月前
|
Cloud Native 测试技术 Go
开源之夏经验分享|MOSN 社区韦鑫:做自己认为很酷的事
韦鑫是南京航空航天大学计算机科学与技术学院研三学生,研究方向为分布式系统。作为HTNN社区贡献者,他参与了开源之夏2024 MOSN社区项目,负责将Sentinel-golang流量控制能力集成到MOSN on Envoy(MoE)生态中。通过该项目,韦鑫不仅提升了对服务网格和云原生网关的理解,还学会了如何开发HTNN插件,并深刻体会到严格的单元测试、集成测试及CI/CD对项目的重要性。他的经历展示了积极参与开源项目的价值,鼓励更多人勇敢尝试并投身于开源社区。
开源之夏经验分享|MOSN 社区韦鑫:做自己认为很酷的事
|
6月前
|
Java 数据库连接 API
开源之夏经验分享|Koupleless 社区魏照华:开源精神是场永不停歇的接力
魏照华是 University of Wollogong 计算机科学专业研究生,开源之夏 2024 Koupleless 社区贡献者。他参与开发了 Koupleless 模块打包插件的 Gradle 版本,旨在为 Gradle 用户提供与 SOFAArk 兼容的模块化研发框架支持。
|
6月前
|
设计模式 Java uml
课时107:时序图
课时107介绍了时序图的描述与设计。时序图用于展示代码执行流程,如Java程序中接口IMessage、类MessageImpl及Factory的调用顺序。通过Power Designer创建UML Sequence Diagram,定义类操作结构并绘制消息传递路径,清晰呈现工厂模式下对象实例化和方法调用的过程。时序图帮助理解程序逻辑,适用于项目开发中的流程分析与文档记录。
186 1
|
6月前
|
NoSQL Go API
HTNN 如何斟酌出更好的插件扩展机制
在设计插件扩展机制时,HTNN 关注两大核心目标:强大的扩展能力与高效的开发效率。为此,HTNN 引入了统一的 FilterPolicy CRD,通过 targetRef 与 filters 两个核心字段,实现了针对网络资源的策略配置与插件解耦。通过 Protobuf 与 Go 的双重校验机制,在多个层次确保了插件配置的合法性。同时,HTNN 支持在控制面和数据面两个层次运行插件,Native Plugin 适合借助现有 Envoy 能力,Go Plugin 则拥抱 Go 生态解决更广泛的问题。这一整体设计赋予了 HTNN 卓越的扩展性与开发效率,有力地补充和拓展了 HTNN 的网络能力。

热门文章

最新文章