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

有哪些收获

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

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

寄语

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

相关文章
|
安全 数据安全/隐私保护 开发者
三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
|
消息中间件 存储 负载均衡
RocketMQ 面试题及答案整理,最新面试题
RocketMQ 面试题及答案整理,最新面试题
2517 4
|
6月前
|
人工智能 自然语言处理 数据可视化
阿里云万小智AI建站是什么?产品架构、优势、功能与收费标准参考
万小智AI建站是阿里云面向企业及个人用户提供的一款AI驱动的自助建站产品,无需编程基础,通过对话式交互、可视化拖拽操作和AI辅助内容生成,即可快速搭建响应式网站。用户购买后无需单独配置服务器,只需注册域名并完成备案(如部署在中国内地),即可上线网站。
992 20
|
Shell Go 开发工具
【环境】Rocky8使用gvm配置Go多版本管理的微服务开发环境(go-zero)
通过本文的介绍,我们详细讲解了如何在Rocky8上使用gvm来管理多个Go版本,并配置go-zero框架的开发环境。通过gvm的灵活管理,开发者可以轻松切换不同的Go版本,以适应不同项目的需求。同时,go-zero框架的使用进一步提升了微服务开发的效率和质量。希望本文能帮助开发者构建高效的Go语言开发环境,提高项目开发的灵活性和稳定性。
482 63
|
人工智能 Cloud Native Java
2025 开源之夏开启报名|AI + 云原生,10个开源项目、24个课题任您挑选
“开源之夏”是由中国科学院软件研究所发起的暑期活动,旨在鼓励高校学生参与开源软件开发与维护。活动联合各大开源社区提供项目任务,面向全球年满18周岁的高校学生开放报名。每位学生最多可申请一个项目。阿里云云原生提报了包括Apache Dubbo、RocketMQ、Seata等在内的10个开源项目共24个课题,涵盖技术优化、功能实现及AI应用等领域。活动流程包括选题、申请、开发与结项考核,具体信息可访问官网了解。
3254 32
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
5705 7
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
IDE PHP 开发工具
【PHP开发专栏】Xdebug在PHP调试中的应用
Xdebug 是一个功能强大的 PHP 扩展,提供调试、代码分析和性能分析等功能。本文介绍了 Xdebug 的基本概念、安装配置方法及在 PHP 调试中的应用技巧,包括断点调试、堆栈跟踪、远程调试和性能分析等。通过合理使用 Xdebug,可以显著提高调试效率和代码质量。
370 3
|
SQL 关系型数据库 Shell
SQL整库导出语录及其实用技巧与方法
在数据库管理和备份恢复过程中,整库导出是一项至关重要的任务
|
Rust 安全 编译器
Rust中的生命周期管理:深入理解与实践
【7月更文挑战第10天】Rust中的生命周期是确保内存安全和避免数据竞争的关键机制。通过深入理解生命周期的概念、使用场景及省略规则,我们可以编写出更加安全、高效的Rust代码。虽然生命周期管理在初学时可能显得有些复杂,但一旦掌握,它将成为我们编写Rust代码时不可或缺的工具。希望本文能够帮助你更好地理解Rust中的生命周期管理,并在实际开发中灵活运用。
|
缓存 Shell 开发工具
Git Bash⭐一、安装软件,与Git Bash基础命令
Git Bash⭐一、安装软件,与Git Bash基础命令

热门文章

最新文章