开发者活动方向解读
本次开发者活动主要分为两大专题,如下:
-
Curve项目本身
Curve项目本身准备了非常多有意思且范围涵盖较广的议题,包括Curve web控制台方向,云原生方向,核心代码逻辑方向,Curveadm方向以及Curve的Ci方向。涉及的语言包括C/C++、go、python/shell等 -
社区联动
openEuler是面向数字基础设施的开源操作系统,支持服务器、 云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的操作系统。
openEuler拥有非常好的开源生态系统。Curve期望在openEuler操作系统上运行,所以我们需要做一些适应和验证工作。
1. Curve控制台方向
Curve 作为一个存储底座,除了功能上的不断丰富和对极致性能的追求,易用性同样是我们关注的重点。Curve 控制台是一个相对独立的 Web 服务,提供基于 Web 的集群管理能力,使得存储集群的部署和管理门槛进相对 CLI方式一步降低,提供一种更加清晰直观的视图。
Curve控制台项目分为前端和后端两部分,前端主要使用vue3 和 ts语言开发,后端使用go语言开发,因为是第一个版本,所以在前端显示和功能接口方面都有比较大的完善空间,具体的开发题目可见: [ Curve Summer Coding Camp]: Call For Participation! · Issue #2603 · opencurve/curve · GitHub ,除了已经提出的题目,如果在使用过程中有发现bug或者可完善的点均可通过issue方式反馈。代码仓库如下:
Curve期望在这些操作系统上运行,所以我们需要做一些适应和验证工作。
- 前端:GitHub - opencurve/curve-dashboard: Source for Curve website.
- 后端:GitHub - opencurve/curve-manager: curve-manager is the web-based management system of the curve, providing users with a clearer and more convenient management portal
2. 深入代码实现的修改或者优化
Curve还在不断的演进中,所以有很多待完善、优化的功能。这一项列表中的issue都是优先级比较高,对Curve的性能、可观测性、功能有影响的部分,希望大家一起来完善。
开发者指南见每个pr。
3. 云原生方向
目前Kubernetes已经成为云原生的事实标准,是业界云平台的标配以及云原生应用的底座。为了进一步实现Curve的云原生化,实现对Curve存储系统的云上自动化的部署和管理,我们设计并实现了 curve-operator。
我们利用Kubernetes的Operator扩展模式,创建对Curve集群的API抽象,为自定义资源CRD创建对应的controller,从而充分利用Kubernetes原生的自动化能力实现对Curve集群的管理。目前我们的 curve-operator 项目已经初具雏形,该项目已经可以实现在K8s集群中部署CurveBS存储集群的能力。然而,一个完整的Operator不仅具有部署应用和删除应用的能力,还需要封装对Curve集群的运维经验。同时现在Operator仍有很多的特性以及功能可以完善和优化。比如,对功能代码的格式化,添加在K8s中部署集群的监控系统,以及对现有Curve集群的更新和升级等等,可以在这里 https://github.com/opencurve/curve/issues/2603 看到关于Operator全部的题目。
4. 新工具的支持方向
当前Curve有两个形态的存储:块存储和文件存储。他们都有各自的工具。块存储的的工具有三个:curve_ops_tool,curve,curve_tool,这三个工具的功能是有重复的。文件存储的工具有一个curvefs_tool。这导致使用过程中的困惑。另外原有的工具使用的c++
,工具的显示不够友好,不便于阅读。
因此使用 go
进行了工具重构。把块存储和文件存储的工具都放在当前新工具中,通过 curve fs
和 curve bs
区分。
当前工具的架构已经搭建完成,并且大部分功能已经实现,现在邀请小伙伴们来一起实现剩余的一些命令。
旧工具和新工具输出对比:
5. Curve部署工具CurveAdm的功能支持
一个存储系统,易用性是非常重要的,否则对运维人员就是灾难。Curve原先使用ansible,进程直接跑在物理环境中。因为环境的差异,用户在使用过程遇到了各种各样的问题。
经历了多轮重构,简单易用的部署工具CurveAdm诞生了!它收获了很多用户的肯定。随着Curve版本的演进,需要在其中增加一些新的功能,希望大家一起来完善。
6. Curve CI工具优化
Ci对于开源软件是非常重要的,直接影响到开发者的体验,在此过程中,我们经过了 一系列的优化,目前还有很多事情需要做,欢迎感兴趣的同学们跟我们一起来完善Curve的Ci,让Ci对开发者越来越友好。
7. Curve 适配开源操作系统openEuler
openEuler是面向数字基础设施的开源操作系统,支持服务器、 云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的操作系统。
Curve期望在该操作系统上运行,所以我们需要做一些适配和验证工作,最终签署CLA协议加入这个优秀的社区。
参考资料如下:
Curve整体学习路径
在开发者活动选题之前,我们给参加开发者活动的小伙伴们一个分布式系统的学习的 Roadmap,该 Roadmap 是 Curve 团队的新人培养实践沉淀,大家可以根据自身需要自行学习。
☆ 了解分布式存储系统的基本知识目标:知道为什么需要分布式存储?分布式存储的难点在哪里?都有哪些解决方法参考资料:
- Distributed systems: Distributed systems for fun and profit
☆ 熟悉分布式系统设计目标:了解分布式系统一般架构,了解部分解决方案的技术细节参考资料:
- The Google File System http://static.googleusercontent.com/media/research.google.com/es//archive/gfs-sosp2003.pdf
- The Raft Consensus Algorithm: https://raft.github.io/
- MapReduce: Simplified Data Processing on Large Clusters https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf
- CEPH: RELIABLE, SCALABLE, AND HIGH-PERFORMANCEDISTRIBUTED STORAGE https://ceph.com/wp-content/uploads/2016/08/weil-thesis.pdf
- PacificA: Replication in Log-Based Distributed Storage Systems https://www.microsoft.com/en-us/research/wp-content/uploads/2008/02/tr-2008-25.pdf
- 6.824 Schedule: Spring 2020, MIT的分布式系统课程,感兴趣的可以多看:6.5840 Schedule: Spring 2023
☆ 了解Curve目标:掌握Curve总体设计,各模块的设计参考资料:
- Curve主页: https://opencurve.github.io/
- Curve系列讲座ppt地址https://github.com/opencurve/curve-meetup-slides/tree/main/2020
- Curve各模块介绍文档https://github.com/opencurve/curve/tree/master/docs/cn
- Curve技术文档【技术资源合集】Curve 开源云原生软件定义存储系统 - 知乎
- Curve代码阅读:
☆ 掌握代码开发/测试工具目标:掌握代码开发流程,熟练使用代码开发、调试、测试过程中所需要的工具参考资料:
- Curve代码构建工具bazel: https://bazel.build/
- Curve代码测试框架gtest: https://github.com/google/googletest/blob/master/googletest/docs/primer.md
- Curve代码管理 Git: Git 基本操作 | 菜鸟教程
- 代码调试工具: gdb等
- 谷歌开源项目风格指南:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/
- 编程规范:《Clean Code》