「开源软件供应链点亮计划——暑期 2021」USTCLUG 项目提案
「开源软件供应链点亮计划」是由中国科学院软件研究所发起并长期支持一项活动,旨在解决基础开源软件面临的许可、质量、维护和技术支持等问题,进而影响整个软件产业的供应链。而「开源软件供应链点亮计划——暑期 2021」是由中科院软件所与 openEuler 社区共同举办的一项面向高校学生的暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进国内优秀开源软件社区的蓬勃发展。
此活动与 GSoC (Google Summer of Code) 的模式类似:开源项目/社区提供项目需求与导师 (mentor);学生申请项目通过后利用暑期的时间进行开发,将成果贡献给社区;主办方(中科院软件所与 openEuler 社区)根据评估结果给学生发放奖金。所有参与的社区列表可查看 https://summer.iscas.ac.cn/#/org。
今年夏天,USTCLUG (中科大学生 Linux 用户协会) 计划以社区身份加入此暑期活动。以下是我们计划的项目提案,也欢迎社团的各位同学提出建议。
在报名前,请先阅读由主办方提供的学生指南。
通用反向代理缓存程序
项目描述:受到磁盘空间等的限制,镜像站有些时候无法完整同步上游的文件。退而求其次,能否只缓存“流行”的文件?能否在对缓存的总容量大小与文件过期时间进行限制的情况下管理缓存的文件?能否查看缓存命中率等指标,进行问题排查与优化?尽管现有的反向代理实现能够做到缓存,但是配置并不够灵活,无法满足需求。本项目计划构建一个灵活的、适用于镜像站场景的通用的 HTTP 反向代理缓存程序,提高用户体验。
项目难度:中
LICENSE:自选开源协议。
项目社区导师:陶柯宇
导师联系方式:taoky AT ustclug.org
合作导师:明宇龙
联系方式:myl AT ustclug.org
项目产出要求:一个稳定的、经过测试可用的 HTTP 反向代理缓存程序(缓存得到的文件存储在传统文件系统上),包括以下要求:
- 包含对缓存总大小与文件过期时间限制的缓存规则实现。
- 能够定时或实时清理不符合缓存条件的文件。
- 用户可编写配置文件,针对符合不同规则的路径,配置不同的缓存规则。
- 实现日志与用量统计。
- 通过有效性测试,可正确对 pypi/conda 镜像设置反代。
项目技术要求:
- 对 HTTP(S) 相关协议有基础了解。
- 有高性能的网络编程语言的编程能力。
- 有使用内存数据库的经验。
相关开源软件仓库列表:
- https://github.com/sjtug/mirror-intel(SJTUG 镜像的智能缓存方案,缺少本提案中计划的一些特性)
Rsync 在传统文件系统架构上的性能改进
项目描述:Rsync 是镜像站上下游间进行同步的事实标准,但是由于每次同步时 rsync 服务器与客户端都需要扫描一遍本地的文件列表,即使只有少量的文件需要更新,每次同步仍然会带来很高的 I/O 消耗,大幅度提高了服务的负载,降低了服务性能。本项目计划通过修改 rsync 服务端与客户端的实现,在不大幅影响整体架构的情况下优化 rsync 对文件元数据的读写性能(读取为主),降低镜像站的负载,提升 rsync 同步速度与服务性能。
项目难度:高
LICENSE:自选开源协议。对 rsync 的修改需要以 GPL v3 发布。
项目社区导师:陶柯宇
导师联系方式:taoky AT ustclug.org
合作导师:明宇龙
联系方式:myl AT ustclug.org
项目产出要求:本项目包含对 rsync 服务端和客户端这两个部分进行改进的要求。以下要求作为参考,如果有更好的 idea 在讨论后也可实现。
- Rsync 客户端
- 修改 rsync 客户端,使其能够访问 rsync-huai 的元数据,以在同步时减小对主仓库的磁盘压力。
- 修改 rsync 客户端,针对镜像站场景减少多余的本地读写,提高性能。
- Rsync 服务端
- 不修改服务端(rsync-huai)的源代码,而是使用 FUSE 设计高性能的、只存储文件元数据的文件系统存储文件元数据。例如,可以将元数据存储在内存数据库中,以减小 rsync-huai 在获取文件元数据时对磁盘的压力。
- 或者,修改服务端代码,使其可以绕过 kernel (FUSE) 直接连接相关数据库读取元信息。
项目技术要求:
- 有 rsync 的使用经验。
- C 语言编程能力,以及其他系统开发语言(如 C++, Go, Rust 等)的编程能力。
- 有 FUSE 的编程经验。
相关开源软件仓库列表:
- https://rsync.samba.org/(Rsync 官方实现)
- https://github.com/tuna/rsync(Rsync-huai 实现)
- https://github.com/facebook/rocksdb(RocksDB 数据库,可作为在实现使用 FUSE 的元数据文件系统的参考)
全连通内网守护程序
项目描述:一个组织的鉴权接口、数据库接口等服务都不应在公网公开,而内网(IntraNet)的瓶颈通常会出现在转发流量的网关上,若任意两台机器间直连则可以让总网络压力下降不少(一般需要借助中心节点协助 NAT 后的机器打洞)。Tinc 等优秀项目年久失修、无人维护,WireGuard 等新兴 Site2Site 的虚拟专用网络较轻便简单但是未实现 mesh、会对中心网关产生较大的流量压力。本项目计划构建一个灵活高效的全连通内网守护程序(IntraNet VPN)。
项目难度:中
LICENSE:自选开源协议。
项目社区导师:袁一玮
导师联系方式:totoroyyw AT ustclug.org
合作导师:明宇龙
合作导师联系方式:myl AT ustclug.org
项目产出要求:一个稳定的、全连通内网守护程序,包括以下要求:
- 用户可方便地对内网中的节点进行增删与同步配置(亦可选用其他虚拟专用网络实现作为基础)
- 基于 WireGuard,将 AllowedIPs 变为 AllowedMacs(实现基于 Mac 地址而非 IP 地址的配置描述)
- 在内网新加入一台机器后,整个内网可以自动更新、同步节点配置(选做)
- 通过有效性测试,可以在快速路由迭代后实现任意节点间的 mesh 连接
- 程序尽可能高效,减少内网中较大流量机器的 CPU 压力
- 可以让两台在 NAT 之后的机器直接相连(选做,假设 NAT 打洞完可以持续使用)
项目技术要求:
- 对 OSI 二层或三层模型有所了解,对内网搭建和架构有所了解
- 有高性能的网络编程语言的编程能力
相关开源软件仓库列表:
- https://github.com/cloudflare/boringtun (Rust 下的用户态 WireGuard 实现)
- https://github.com/WireGuard/wireguard-go (Go 下的 WireGuard 实现)
- https://gitlab.com/NickCao/RAIT/ (基于 WireGuard 的三层分布式全连通网络实现,缺少本提案中计划的一些特性)
- https://github.com/gsliepen/tinc (工作在 OSI 二层或三层的全连通网络实现,但其已年久失修,最近一次稳定版 release 是两年前)