前言

网易高性能分布式存储系统Curve已在github开源,开源以来受到了业界的广泛关注,现招募在校学生贡献者加入我们的开发。

Who?任何对分布式存储系统,Curve感兴趣的在校生,不限年级不限专业。

Why? Curve是新一代开源高性能分布式存储系统,通过参与Curve的开发,你可以收获:大型分布式系统开发经验,和业界大牛协作学习的机会,表现优异者可以获得在网易实习的机会(人数不限),特别优异者有机会直接获得校招offer。

How?添加opencurve微信号联系我们,加微信号记得注明[报名C计划]。我们会提供分布式系统学习的Roadmap供大家参考,基于分布式存储系统的理论基础之上进行选题。另外我们会有定期线上会议,了解大家的想法并为为大家答疑解惑。近期12.25左右会有C计划启动会,具体时间我们会在微信群中公布。

Roadmap

因为缺乏专业背景知识,很多小伙伴看到Curve是一头雾水,看完Curve的简介后也许还是一头雾水,那我们该如何打怪升级呢?在开始C计划的选题之前,我们给参加C计划的小伙伴们一个分布式系统的学习的Roadmap,该Roadmap是Curve团队的新人培养实践沉淀,大家可以根据自身需要自行学习。

  • 了解分布式存储系统的基本知识

    目标:知道为什么需要分布式存储?分布式存储的难点在哪里?都有哪些解决方法

    参考资料:

    • Distributed systems(http://book.mixu.net/distsys/index.html)
  • 熟悉分布式系统设计

    目标:了解分布式系统一般架构,了解部分解决方案的技术细节

    参考资料:

    • 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-PERFORMANCE DISTRIBUTED 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 (https://pdos.csail.mit.edu/6.824/schedule.html , MIT的分布式系统课程,感兴趣的可以多看)
  • 了解Curve

    目标:掌握Curve总体设计,各模块的设计

    参考资料:

    • Curve主页 (https://opencurve.github.io/)
    • Curve系列讲座视频回放(https://space.bilibili.com/700847536/channel/detail?cid=153949)
    • Curve系列讲座ppt地址(https://github.com/opencurve/curve-meetup-slides/tree/main/2020)
    • Curve各模块介绍文档(https://github.com/opencurve/curve/tree/master/docs/cn)
    • Curve技术文档(https://zhuanlan.zhihu.com/p/311590077)
    • Curve代码阅读:建议先梳理io流程
  • 掌握代码开发/测试工具

    目标:掌握代码开发流程,熟练使用代码开发、调试、测试过程中所需要的工具

    参考资料:

    • Curve代码构建工具bazel(https://bazel.build/)
    • Curve代码测试框架gtest (https://github.com/google/googletest/blob/master/googletest/docs/primer.md)
    • Curve代码管理git (https://www.runoob.com/git/git-basic-operations.html)
    • 代码调试工具 gdb
    • 谷歌开源项目风格指南(https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/
    • 编程规范:《Clean Code》

选题

难易级别:选题共有三个级别:easy,medium,hard

发放规则:这三个级别的选题我们会分三个阶段发布,第一阶段发布easy,第二阶段发布medium,第三阶段发布hard,其中一二阶段间隔一个月左右,二三阶段间隔2个月左右,具体的时间会在微信群里通知。对选题的任何疑问或者需要帮助的都可以在群里咨询我们。

任务提交:

  • 代码开发环境推荐使用docker镜像,参照:https://github.com/opencurve/curve/blob/master/docs/cn/build_and_run.md
  • 对于所有的任务,开始之前请大家先提交issue,地址:https://github.com/opencurve/curve/issues
    • issue的标题格式【C计划-选题*】描述清楚选做哪部分
    • 在提issue之前可以浏览下其他已有的issue,是否有一样的任务,尽量选择不同任务,如果非常感兴趣,也可以重复选择
  • 对于完成的任务,请大家将代码/文档以pr的形式提交至Curve的仓库,我们会定期查收并进行review给大家提出相应建议。对于优秀的提交,我们会合入代码仓库。

选题一:清理代码中的TODO

任务说明

  • 单人参与,这是一个系列,每个TODO可以作为一个任务
  • 所需技能:github的使用,google c++编程规范,curve文档,编译工具bazel的使用,测试工具gtest的使用

任务描述

curve的代码在开发的过程中遗留了一些TODO,可以对这些TODO进行一些清理。清理范围,include,src,test目录下,排除thirdparties目录下的第三方组件的TODO。用“// TODO”作为关键字,搜索代码中的TODO。这些TODO有些比较简单,有些难度比较大。建议先从简单的开始修复,熟悉代码的修复合入流程,再慢慢挑战比较复杂的TODO。

参考资料

github的使用,google c++编程规范,curve文档,编译工具bazel的使用,测试工具gtest的使用

这里举例几个简单的TODO任务,也可以自己搜索代码中的TODO。

  1. curve/include/chunkserver/chunkserver_common.h,把kOpRequestAlignSize放到配置文件中。

    // TODO(wudmeiao): 是否需要考虑可配置
    const uint32_t kOpRequestAlignSize = 4096;
    
  2. curve/src/chunkserver/copyset_node.cpp,Init copyset对应的raft node options放到nodeOptions的init中。

    /**
    * Init copyset对应的raft node options
    */
    nodeOptions_.initial_conf = conf_;
    nodeOptions_.election_timeout_ms = options.electionTimeoutMs;
    nodeOptions_.fsm = this;
    nodeOptions_.node_owns_fsm = false;
    nodeOptions_.snapshot_interval_s = options.snapshotIntervalS;
    nodeOptions_.log_uri = options.logUri;
    nodeOptions_.log_uri.append("/").append(groupId)
    .append("/").append(RAFT_LOG_DIR);
  3. curve/src/client/libcbd_libcurve.cpp,cbd_libcurve_filesize调用StatFile4Qemu接口时,判断StatFile4Qemu的返回值。

    int64_t cbd_libcurve_filesize(const char* filename) {
    struct FileStatInfo info;
    memset(&info, 0, sizeof(info));// TODO(wuhanqing): 判断返回值
    StatFile4Qemu(filename, &info);
    return info.length;
    }
    
  4. curve/src/mds/nameserver2/curvefs.cpp,RenameFile接口,把oldFileName改成sourceFileName,newFileName改成destFileName。

    // TODO(hzchenwei3): change oldFileName to sourceFileName
    //                   and newFileName to destFileName)
    StatusCode CurveFS::RenameFile(const std::string & oldFileName,
    const std::string & newFileName,
    uint64_t oldFileId, uint64_t newFileId)

选题二:捉虫计划

任务说明

  • 单人参与,这是一个列任务,每找到1个bug,相当于完成了一个任务
  • 所需技能:github使用,熟悉curve部署、使用、代码

任务描述

金无足赤,人无完人,代码也没有不存在bug的代码。在代码开发过程中,虽然工程师们采用了各种方式来减少bug,但是总有一些漏网之鱼。各位小伙伴,一起撸起袖子来捉虫吧。在curve部署、使用、阅读代码过程中,如果发现了bug,请通过issue的方式记录下来,如果有解决方案,欢迎向我们提交代码。

参考资料

RoadMap中「了解Curve」所列出的资料

选题三:代码翻译

任务说明

  • 单人参与,这是一个系列任务
  • 所需技能:了解Curve代码框架和书写规范,github使用

任务描述

针对curve github仓库中的Curve各模块的代码注释进行中文到英文的翻译,注意翻译的完整性和准确性。Curve代码中的mds模块已经都是英文注释,剩下的为 curve/src/chunkserver 、curvesrc/client、curve/nebd/part1、curve/nebd/part2。大家可以按照一个头文件和cpp对应实现为单位进行翻译,比如common.h、common.cpp。

选题四:代码解读

任务说明

  • 单人参与,这是一个系列任务
  • 所需技能:熟悉Curve代码

任务描述

在阅读Curve代码的过程中写一些源码解读或者自己的心得体会,一方面作为自己学习的沉淀,另一方面可以供他人参考

参考资料

建议在了解Curve的整体架构基础上去看代码,代码可以从梳理client流程入手

选题五:单元测试

任务说明

  • 单人参与,这是一个系列任务
  • 所需技能:c++基础,gtest使用

任务描述

目前Curve很多代码的单元测试覆盖率不够,(具体情况见59.111.93.165:8080/job/curve_untest_job/HTML_20Report/),希望大家在现有单元测试代码(位于Curve代码的test目录)基础上,添加测试用例,使其覆盖率达到CI标准,代码行覆盖85%及以上,代码分支覆盖75%及以上。

参考资料

RoadMap中「掌握代码开发/测试工具」所列出的资料

奖励

表现优异者可以获得在网易实习的机会(人数不限),特别优异者有机会直接获得校招offer。我们会根据整个计划过程中提交任务的质量、参与度、提交任务的数量等为依据进行评估。

【网易C计划重磅启动】参与开源分布式存储Curve,抢校招offer!相关推荐

  1. 开源分布式存储Curve ChunkServer CPU优化实践

    Curve ChunkServer的CPU瓶颈问题 Curve是网易数帆开源的新一代分布式存储系统,具有高性能.高可用.高可靠的特点,可作为多种存储场景的底层存储,包括块存储.对象存储.云原生数据库. ...

  2. Log4j 爆发“核弹级”漏洞、工信部力推开源软件发展、“龙腾计划”启动|开源月报 Vol. 02...

    「WeOpen Insight」是腾源会全新推出的"开源趋势与开源洞见"内容专栏,不定期为读者呈现开源圈内的第一手快讯.优质工具盘点等,洞察开源技术发展的风向标,预见未来趋势. P ...

  3. 参与开源项目,结识技术大牛!CSDN“开源加速器计划”招募志愿者啦!

    什么是"CSDN开源加速器计划"? 纵观近 30 年的科技创新,开源已成为全球技术应用和行业数字化发展的基石,尤其最近几年,开源的商业化得到了极大突破,开源正在成为全球科技的强劲驱 ...

  4. 参与开源项目,结识技术大牛!CSDN “开源加速器计划”招募志愿者啦!

    什么是"CSDN开源加速器计划"? 纵观近 30 年的科技创新,开源已成为全球技术应用和行业数字化发展的基石,尤其最近几年,开源的商业化得到了极大突破,开源正在成为全球科技的强劲驱 ...

  5. 重磅!风再起· 2020——巴比特全球合作伙伴云端峰会下周启幕,12大主题穿越减半,招募计划今日启动...

    作者:王佳建 纵世界停摆,区块链永不眠. 没有什么可以阻挡,我们追逐风一样的自由. 这个春天,热闹的线下峰会没有了,小众的交流研讨会取消了,项目见面会推迟了,就连饭局也没有人组织了-- 难道我们的事业 ...

  6. 商汤科技2023届校招!AI先锋顶尖人才计划招募重磅启动!

    商汤科技2023届校招!AI先锋顶尖人才计划招募重磅启动!

  7. 重磅!共掘千亿大数据市场 智领云2021年合作伙伴招募计划正式启动

    2021年3月26日,在春暖花开,万物复苏之际,智领云将在武汉光谷凯悦酒店举办"数据驱动 智领未来"合作伙伴沙龙,我们诚邀您来参加本次会议,了解智领云领先的产品.技术理念及合作伙伴 ...

  8. Vue3教程:Vue3 开源商城项目重构计划正式启动!

    我打算用 Vue3 写一个商城项目,目前已经开始着手开发,测试完成后正式开源到 GitHub,让大家也可以用现成的 Vue3 大型商城项目源码来练练手. 1 Vue3 来了 今年上半年,我用 Vue ...

  9. 送技术、链资源、配资金……腾讯技术公益创投计划正式启动

    12月7日,在广州举办的大湾区科学论坛湾区科创峰会上,腾讯技术公益创投计划正式宣布启动(简称创投计划). 该计划重点关注缺乏资金资助.技术支援.运营指导.传播渠道.志愿者能力的五类公益性组织,希望以公 ...

最新文章

  1. 论文阅读:Network In Network
  2. dll文件:关于MFC程序不能定位输入点
  3. 关于 VC 执行顺序
  4. [css] font-style的属性有Italic和oblique,两者有什么区别呢
  5. PageObjects 设计模式
  6. 一月:你今年还回家过年吗?
  7. 职称计算机承诺书,职称申报承诺书范本
  8. 安卓案例:注册用户免启动时的广告页面
  9. okHttp3 源码分析
  10. 【django小练习之主机管理界面】
  11. Git常见问题:fatal: Unable to create index.lock File exists 错误的解决办法
  12. Python股票量化学习(3)——简单的策略回测
  13. Java为Excel导出增加批注(POI)
  14. 我的世界租赁服自定义服务器,我的世界租借服务器(我的世界技巧教程 租赁服务器玩家间传送功能)...
  15. 计算机论文 a会 c会,ccf b类论文 sci几区_焦文静_电影学者王田
  16. js生成随机数(数字+大小写字母)
  17. Java 实现连接sql server 2000(JDBC数据库访问例子)
  18. 百度地图离线API开发(真正的离线开发)
  19. Linux hex文件编辑器,全网最全Linux的十大十进制编辑器,要接触Linux的你摆脱不了...
  20. 数智十年,向新而行:2022 第十届CCF大数据与计算智能大赛在京启动

热门文章

  1. 【数据】统计汉字字数
  2. 【ACL2022】Knowledgeable Prompt-tuning: Incorporating Knowledge into Prompt Verbalizer for Text
  3. 聚焦产业数字化转型,第19届鹏城秘书长茶会成功举办
  4. 工作量统计系统 java GUI
  5. 测试账号在线生成工具
  6. 跳槽意愿报告:跳槽不太难,钱是原动力
  7. android内存攻击,针对物理内存的攻击可取得 Android 设备的 root 权限
  8. 十.控制文件指针移动,文本的修改
  9. 冲刺二团队五亲亲精英队
  10. WinEdt 10.3 Registration