随着开源文化的遍及,越来越多的高校开发者参加到了 CloudWeGo 开源社区的建设中来,也有越来越多的高校 Contributors 成为了社区倒退的中流砥柱。
为了更好地帮忙高校开发者找到参加我的项目的方向,更有针对性、更有挑战性地参加到社区我的项目开发中,字节跳动基础架构团队的 CloudWeGo 开源我的项目精选了 5 个优质赛题,参加 2022 届 Gitlink 开源夏令营(GLCC)。
01 GLCC 流动介绍
GLCC 是在 CCF 中国计算机学会领导下,由 CCF 开源倒退委员会(CCF ODC)举办的面向全国高校学生的暑期编程流动。流动将笼罩近千所高校,并联结各大开源基金会、开源企业、开源社区和开源专家,旨在激励青年学生通过加入实在的开源软件开发,晋升本身技术能力,为开源社区输送优秀人才。
流动曾经收到来自 OpenMMLab、百度、阿里巴巴、亚马逊云科技、蚂蚁金服、滴滴、九州云、字节跳动基础架构、腾讯等 45 个企业 / 社区的 110 个课题,笼罩人工智能、操作系统、云原生、大数据、前端开发、数据库、运维、DevOps、零碎工具等 30 多个技术畛域。
流动官网:https://www.gitlink.org.cn/glcc
02 预期播种
高价值开发工作和一对一导师辅导
CloudWeGo 团队充沛认可高校开发者的实力,不心愿仅提供成长性较低的文档翻译、组件开发的赛题,更心愿可能真正帮忙高校开发者参加到社区实在的开发工作中。
咱们精心筛选了 2 轮赛题,保障 5 个赛题都可能满足“高成长性、高趣味性、高挑战性 ”的要求,让每个开发工作不仅仅只是比赛, 实现的每个工作,都会实现社区用户的实在诉求,带来真正的应用价值。例如,始终在社区备受关注的热门话题:“Kitex 什么时候反对 Windows”,也是本次夏令营的赛题之一。
每个赛题,都会有 1 – 2 个导师继续跟进,领导开发工作进行,导师会提供在赛题开发过程中须要的帮忙。
来自 GLCC 的丰富奖金、证书和实习机会
入选同学实现开源工作后可取得 CCF GLCC 流动的丰富奖金和结项证书。优良开发者将有机会取得字节跳动实习和内推机会。
03 赛题信息
子项目 Kitex
题目名称:为 Kitex 适配 Windows
1. 题目形容
Kitex 是字节跳动开源的 Golang RPC 框架,反对 Thrift 和 Protobuf 的编解码协定,配套了同名的命令行代码生成工具 Kitex,底层应用了 Netpoll 做网络传输层。目前 Kitex 和 Netpoll 仅反对在 Linux 平台上的应用,尚未反对 Windows。
2. 编码工作
- 实现 Netpoll 和 Kitex 对 Windows 的适配和反对;
- 不应答 Netpoll 和 Kitex 的 API、抽象层次做大范畴的不兼容变更。
3. 技能要求和编程语言
- 相熟 Windows 和 Linux 平台的网络编程;
- Golang。
尽可能不要应用 CGO,如果的确不可或缺,须要用文档具体阐明。如果应用了其余开源我的项目的代码,必须明确标注并遵循原有许可证。
4. 预期实现后果
能够在 Windows 上应用 Kitex 生成代码、创立并启动服务,编写客户端进行调用,短连贯、长连贯和多路复用模式都能正确运行。
Github Issue 链接: https://github.com/cloudwego/kitex/issues/469
报名链接: https://www.gitlink.org.cn/glcc/subjects/detail/35
子项目 Netpoll
题目名称:应用 Io_uring 实现 Netpoll I/O 轮询器
1. 题目形容
Netpoll 是字节自研的 Golang RPC 网络库,默认应用 Epoll 作为 I/O 轮询器,同时反对扩大实现。
Io_uring 是近年来提出的高效异步 I/O 内核接口,咱们心愿应用 Io_uring 实现(不同于 Epoll 的)Netpoll I/O 轮询器,提供更优良的性能。
2. 编码工作
- 整顿 Io_uring Golang 版本 SDK;
- 设计并实现几种可能的轮询器;
- 性能测试和计划优化。
3. 技能要求和编程语言
Golang
4. 预期实现后果
实现高性能的 Io_uring I/O 轮询器。
Github Issue 链接: https://github.com/cloudwego/netpoll/issues/151
报名链接: https://www.gitlink.org.cn/glcc/subjects/detail/98
子项目 Frugal
题目名称:SSA 后端 Auto-vectorization Pass 的实现
1. 题目形容
Frugal 是字节自研的一款高性能 Thrift 库,旨在应用 JIT 技术来减速 Thrift 的编解码过程。因为 Thrift 采纳了大端序,而 x86_64 等常见的处理器架构均为小端序,因而对于 List<i32>
这一类的数据类型须要一个循环来实现小端到大端的转换。而这个过程如果可能利用 SIMD 指令的话,能够极大的进步性能。
2. 编码工作
- 实现一个 SSA 后端的 Auto-vectorization Pass;
- 输出原始的 CFG,输入 Vectorize 之后的 CFG;
- IR 示意模式应用 Frugal SSA IR(Internal/Atm/Ssa 目录);
- 该 Pass 的运行程序在 Fusion 之后,在 Final TDCE 之前;
- CPU 架构为 x86_64,SIMD 指令应用 AVX / AVX-2 指令集。
3. 技能要求和编程语言
- 编译原理;
- x86_64 指令集常识;
- 实现语言为 Go。
4. 预期实现后果
可能辨认并且将 CFG 中的 Load-swap-store 循环替换为正确的 SIMD 指令。
GitHub Issue 链接: https://github.com/cloudwego/frugal/issues/5
报名链接: https://www.gitlink.org.cn/glcc/subjects/detail/161
子项目 Sonic
题目名称:开发 Arm64 汇编到 Go Plan9 汇编转换工具
1. 题目形容
Sonic 是字节自研的一款高性能 JSON 库,其底层文本处理算子采纳 C 语言开发,并基于 Go-assembly 机制联合汇编转换工具(Asm2asm)嵌入到 Go 语言接口中。然而以后的 Asm2asm 工具仅反对 x86-64 到 Plan9 的转换,限度了 Sonic 在 Arm 架构环境下的应用。随着 Arm 架构芯片的风行,Sonic 打算反对 Arm 架构,Asm2asm 工具反对 Arm64 到 Plan9 的转换也在布局之中。
2. 编码工作
- 实现一个 ARMv8-A 汇编到 Go plan9 汇编的转换工具;
- 反对命令行交互(Linux or MacOSX),最好能够间接对原始 C 文件调用 Clang(或 GCC)生成汇编,参考 https://github.com/bytedance/…;
- 主动生成对应的 Go 函数接口及其单测(可选)。
3. 技能要求和编程语言
- ARMv8-A 汇编;
- Go plan9 汇编(https://go.dev/doc/asm);
- 编译原理,能够借助第三方 Lib 做前端解析解决;
- 实现语言不限。
4. 预期实现后果
将纯 C 实现的文件(Sonic/Native/xx.c)转换为 Go Arm64 汇编文件(Sonic/Internal/Native/xx_arm64.s),并且在 Arm64 环境下可跑通 Go 代码单测(Sonic/Internal/Native/Native_amd64_test.go)。
GitHub 链接:
- Sonic – https://github.com/bytedance/sonic
- Asm2asm – https://github.com/chenzhuoyu/asm2asm
Github Issue 链接: https://github.com/bytedance/sonic/issues/231
报名链接: https://www.gitlink.org.cn/glcc/subjects/detail/224
子项目 Monoio
题目名称:应用纯异步 Rust 实现高性能可扩大的通用网关零碎
1. 题目形容
目前生产环境中大量 Nginx 作为入口网关。而因为 Nginx 应用 C 语言编写,且高度耦合底层零碎调用,所以在可扩展性上较为欠缺,二次开发老本较高,且组件不易复用。多年来只管领有能力极强的贡献者,还是产生了很多因为内存平安导致的破绽,影响生产环境安全性。
近年来 Caddy 补足了 Nginx 的上述问题,并集成 ACME 大大提高了易用性,然而应用 Golang 开发在升高二次开发难度的同时也带来了一系列的性能问题(有 Go 编译器自身的起因,也有 GC 和网络模型的起因,会导致在大规格机器上体现较差),不具备大规模生产可用性。
Rust 语言兼具了性能和内存平安,对于 Gateway 是最现实的语言。基于咱们开源的 Monoio,能够在不就义性能的前提下,做到对平台(Linux、Windows 等)、底层零碎调用(如 Io_uring 与 Epoll)的屏蔽。
应用 Rust 开发纯异步的通用网关零碎,能够为生产环境提供可证实的安全性、最佳的性能和可扩展性。
2. 编码工作
- 基于 Monoio 欠缺 HTTP 框架;
- 实现可插拔 Gateway 主框架,并实现 TCP / h1 / h2 组件;
- ACME 反对(相似 Caddy);
- QUIC 反对。
3. 技能要求和编程语言
Rust 语言、网络编程
4. 预期实现后果
- 基于 Monoio 欠缺 HTTP 框架;
- 提供可扩大的生产可用的 Gateway;
- 较欠缺的 TCP / h1 / h2 / QUIC / ACME 组件反对。
Github Issue 链接: https://github.com/bytedance/monoio/issues/71
报名链接: https://www.gitlink.org.cn/glcc/subjects/detail/287
04 流动工夫安顿
流动凋谢报名工夫:5 月 26 日 - 6 月 24 日。
05 参加形式
-
扫码退出夏令营流动交换群 和 CloudWeGo 社区交换群,咱们在群内进行赛题解说、报名领导和入选信息颁布。
扫描 左侧 二维码,退出 夏令营流动交换群。夏令营流动赛题解说、流动领导和流动告诉将在此群公布。
扫描 右侧 二维码,退出 CloudWeGo 社区交换群。此群公布社区动静、新闻,也是开发者日常交换群。
- 抉择赛题,点击报名链接,填报大赛报名信息,申领赛题。审核入选后即可在导师领导下开始赛题开发。
我的项目地址
GitHub:https://github.com/cloudwego
官网:www.cloudwego.io
流动预报
5 月,CloudWeGo 社区第一期源码解读流动曾经上线,欢送大家继续关注并积极参与。流动地址:https://github.com/cloudwego/community/issues/24