|
| 1 | +--- |
| 2 | +title: "开源之夏经验分享|Layotto 社区 郑浩宁:尝试,就会有收获!" |
| 3 | +authorlink: "https://github.com/sofastack" |
| 4 | +description: "Layotto 在创建之初,目标就是需要兼容 Dapr 接口和 Dapr 相关的 component 的实现,并且在 22 年,对 Dapr 的 v1.5.2 版本做了第一次的兼容。但是当前 Dapr 的版本已经走到了 v1.13.0,很多能力做了修复,就需要我们将 Layotto 中 Dapr 的兼容版本升级到 v1.13.0。" |
| 5 | +categories: "SOFAStack" |
| 6 | +tags: ["SOFAStack"] |
| 7 | +date: 2024-12-17T15:00:00+08:00 |
| 8 | +cover: "https://img.alicdn.com/imgextra/i4/O1CN01tv0Mrm1z0DGuwoHTc_!!6000000006651-0-tps-1215-518.jpg" |
| 9 | +--- |
| 10 | + |
| 11 | +# 开源之夏经验分享|Layotto 社区 郑浩宁:尝试,就会有收获! |
| 12 | + |
| 13 | +**文 郑浩宁** |
| 14 | +软件工程专业 |
| 15 | +Layotto 社区贡献者 |
| 16 | + |
| 17 | +就读于福州大学,软件工程专业的大三学生。当前致力于微服务与云原生领域。 |
| 18 | + |
| 19 | +**本文1708字,预计阅读5 分钟** |
| 20 | + |
| 21 | +今天 SOFAStack 邀请到了开源之夏 2024 Layotto 社区的中选学生**郑浩宁**同学。在本项目中,他完成了「**对齐**** Layotto 对 Dapr 的依赖**」这一课题任务。希望他分享的这段经历,能让更多人了解到 Layotto 开源社区,感受开源的魅力~ |
| 22 | + |
| 23 | +**项目链接**:[https://summer-ospp.ac.cn/org/prodetail/24f080353?list=org&navpage=org](https://summer-ospp.ac.cn/org/prodetail/24f080353?list=org&navpage=org) |
| 24 | + |
| 25 | +## 项目信息 |
| 26 | + |
| 27 | +**项目名称**:对齐 Layotto 对 Dapr 的依赖 |
| 28 | + |
| 29 | +**项目导师**:王文学 |
| 30 | + |
| 31 | +**项目描述**:Layotto 在创建之初,目标就是需要兼容 Dapr 接口和 Dapr 相关的 component 的实现,并且在 22 年,对 Dapr 的 v1.5.2 版本做了第一次的兼容。但是当前 Dapr 的版本已经走到了 v1.13.0,很多能力做了修复,就需要我们将 Layotto 中 Dapr 的兼容版本升级到 v1.13.0。 |
| 32 | + |
| 33 | +## 项目实现思路 |
| 34 | + |
| 35 | +### 对 Layotto 项目中的相关 Dapr API 进行处理 |
| 36 | + |
| 37 | +对于早期依赖于 Dapr API 的部分,这部分由于无人使用且维护成本高,需要将原 Dapr API 的相关内容迁移到 Layotto API 部分中,然后将整个 Dapr API 部分移除。 |
| 38 | + |
| 39 | + |
| 40 | + |
| 41 | +以 SaveState 代码示例: |
| 42 | + |
| 43 | +**修改前:** |
| 44 | + |
| 45 | +```bash |
| 46 | +func (a *api) SaveState(ctx context.Context, in *runtimev1pb.SaveStateRequest) (*emptypb.Empty, error) { |
| 47 | + // 构造请求 |
| 48 | + // ... |
| 49 | + // ... |
| 50 | + |
| 51 | + |
| 52 | + // 调用 Dapr API |
| 53 | + return a.daprAPI.SaveState(ctx, daprReq) |
| 54 | +} |
| 55 | + |
| 56 | + |
| 57 | +func (d *daprGrpcAPI) SaveState(ctx context.Context, in *dapr_v1pb.SaveStateRequest) (*emptypb.Empty, error) { |
| 58 | + // 构造请求 |
| 59 | + // ... |
| 60 | + // ... |
| 61 | + |
| 62 | + |
| 63 | + // 调用 Dapr-contrib 执行具体逻辑 |
| 64 | + err = store.BulkSet(reqs) |
| 65 | + if err != nil { |
| 66 | + err = d.wrapDaprComponentError(err, messages.ErrStateSave, in.StoreName, err.Error()) |
| 67 | + log.DefaultLogger.Errorf("[runtime] [grpc.SaveState] error: %v", err) |
| 68 | + return &emptypb.Empty{}, err |
| 69 | + } |
| 70 | + return &emptypb.Empty{}, nil |
| 71 | +} |
| 72 | +``` |
| 73 | +
|
| 74 | +**修改后:** |
| 75 | +
|
| 76 | +```bash |
| 77 | +func (a *api) SaveState(ctx context.Context, in *runtimev1pb.SaveStateRequest) (*emptypb.Empty, error) { |
| 78 | + // 构造请求 |
| 79 | + // ... |
| 80 | + // ... |
| 81 | + |
| 82 | + |
| 83 | + // 直接调用 Dapr-contrib 执行具体逻辑 |
| 84 | + err = store.BulkSet(ctx, reqs, state.BulkStoreOpts{}) |
| 85 | + |
| 86 | + |
| 87 | + if err != nil { |
| 88 | + err = a.wrapDaprComponentError(err, messages.ErrStateSave, in.StoreName, err.Error()) |
| 89 | + log.DefaultLogger.Errorf("[runtime] [grpc.SaveState] error: %v", err) |
| 90 | + return &emptypb.Empty{}, err |
| 91 | + } |
| 92 | + |
| 93 | + |
| 94 | + return &emptypb.Empty{}, nil |
| 95 | +} |
| 96 | +``` |
| 97 | +
|
| 98 | +### Dapr 相关依赖进行升级 |
| 99 | +
|
| 100 | +这部分工作可简要概括如下: |
| 101 | +
|
| 102 | + |
| 103 | +
|
| 104 | +## 开源之夏个人随访 |
| 105 | +
|
| 106 | +### 自我介绍 |
| 107 | +
|
| 108 | +大家好,我是**郑浩宁**,目前是福州大学软件工程专业的大三学生。自从大二以来,我就对开源抱有浓厚的兴趣,这次是我第一次真正意义上为社区的开源项目进行贡献。 |
| 109 | +
|
| 110 | +### 参与该项目的原因 |
| 111 | +
|
| 112 | +因为我本身就对**微服务与云原生领域**抱有兴趣,在这次 OSPP 的申报过程中也就自然而然的接触到了 SOFAStack 社区,进而注意到了 Layotto 项目。 |
| 113 | +
|
| 114 | +在对 Layotto 项目有了一定程度的了解之后,我马上对这个项目产生了浓厚的兴趣,并且最终决定参与到 Layotto 项目的开源贡献之中。 |
| 115 | +
|
| 116 | +### 如何克服项目过程中的困难与挑战 |
| 117 | +
|
| 118 | +OSPP 开始后,我参考了官方以及 Dapr 的文档、相关联的 issues、项目的源码实现,同时在与导师进行积极的交流之后,最后得出对于这次课题的合适方案。 |
| 119 | +
|
| 120 | +在项目开发的过程中,导师给予了我许多的帮助。当我在开发过程中遇到问题时,我会将具体问题**整理成文档并附上个人的理解**,通过文档与导师一起讨论问题并解决问题。 |
| 121 | +
|
| 122 | +在项目的开发过程中,也有一些问题让我留下了深刻印象。比如对于 Dapr 的依赖升级:Dapr 已经走过了很多版本,许多功能都进行了升级完善,而 Layotto 使用的 Dapr 依赖已经是很早之前的版本了,由于版本跨度大,对 Dapr 的依赖进行升级后, Layotto 会出现大量的错误,此时就需要修复所有因此出现的错误。 |
| 123 | +
|
| 124 | +在通过与导师的沟通交流完成课题工作后,又由于这部分的工作导致了 Github 上的 CI/CD 失效,后续还是通过与导师的配合一起完成了这部分的功能。 |
| 125 | +
|
| 126 | +### 你对社区的印象 |
| 127 | +
|
| 128 | +SOFAStack 社区是一个充满活力、专业的组织,致力于推动云原生技术的发展。通过开源合作、技术创新和社区生态系统的建设,该社区为开发者提供了丰富的资源和平台,以促进云原生应用的普及和应用。 |
| 129 | +
|
| 130 | +SOFAStack 社区同时也是一个充满开源精神的组织,欢迎并鼓励学生和开源爱好者的积极参与,与所有开源爱好者一同建设,共同成长。 |
| 131 | +
|
| 132 | +### 有哪些收获 |
| 133 | +
|
| 134 | +参与这次开源之夏项目,不仅加深了我对云原生领域的认识,更让我在实践中获得了珍贵的经验。同时,这次经历也拓宽了我的技术领域,激发了我投身开源事业的热忱。 |
| 135 | +
|
| 136 | +在开发过程中,我遭遇了众多未预见的难题。然而,正是这些挑战及其克服过程,为我的编程生涯塑造、积累了极为宝贵的经验。 |
| 137 | +
|
| 138 | +### 寄语 |
| 139 | +
|
| 140 | +开源之夏为所有人都提供了一个很好的机会。而对于开源本身,我相信只要勇于尝试,无论结果如何,都会有所收获! |
0 commit comments