Golang Warsaw #53Golang Warsaw #53 20 September 2023 – 18:30 Connectis_ (Varso Place), Chmielna 71, WarszawaHostSponsorsAgenda 1. Transitioning to Go - Robert Pajak 2. Break / Your announcements (OpenSource, event Kovalov 4. Afterparty, slowly moving to a place close byJoin Slido for Q&ALooking for speakers! • Golang specifics • Software engineering (implement/use/best practices) • Tech leadership and/or management jakubdal@gmail.com, wbarczynski@gmail.com Twitter/X: @golangwaw Slides: github.com/golangpoland/meetup_golang_warsaw Job Board: facebook.com/groups/golangpolandjobsQuestions? Join channel #poland on gophers0 码力 | 8 页 | 821.41 KB | 5 月前3
CurveFS rename 接口实现方案rename 接口实现方案(已实现,选用方案二)© XXX Page 2 of 15 1. 2. 3. 4. 1. 2. 1. 3. 1. 2. 背景 方案调研 Chubaofs Juicefs 方案实现 方案一:chubaofs 方案二:事务方案 方案三:利用 KV 自带的分布式事务 Q&A 1. 是否需要实现跨文件系统的 rename 2:rename A→C (A 存在,而 C 存在) 4. 当 2 个操作的 dentry 属于同一个 copyset 有什么不一样? 背景 当前 curvefs 并没有实现 rename 接口,本文档是对 rename 接口实现的调研及方案设计。 rename 操作,主要操作的是 dentry,如 rename /dir1/file1 /dir2/file2,主要有 2 个步骤:(1) 删除 file1 等同 file1 的 inode id)。 关于 rename 接口的实现,主要调研了 chubaofs 和 juicefs,而 rename 的实现难点主要在于其原子性的保证。 方案调研 Chubaofs chubaofs 中的 rename 实现不是原子性的,它是通 用创建源文件的硬连接,然后删除源文件的方式来实现的,主要有以下 4 步 : 将源文件的 nlink 加一 创建目标文件的0 码力 | 15 页 | 555.93 KB | 6 月前3
IntroductionGolang Warsaw #52 30 August 2023 – 17:30 / 7N Puławska 182 - WarsawaSpeakers for September 1. Topics from software engineering to implement/use X in Golang app 2. Software engineering + tech leadership Slack: #poland / #poland-warsaw Twitter: @golangwaw Slides: https://github.com/golangpoland/meetup_golang_warsaw Job Board: https://www.facebook.com/groups/golangpolandjobs0 码力 | 8 页 | 27.61 MB | 5 月前3
IntroductionGolang Warsaw #52 30 August 2023 – 17:30 / 7N Puławska 182 - WarsawaSpeakers for September 1. Topics from software engineering to implement/use X in Golang app 2. Software engineering + tech leadership Slack: #poland / #poland-warsaw Twitter: @golangwaw Slides: https://github.com/golangpoland/meetup_golang_warsaw Job Board: https://www.facebook.com/groups/golangpolandjobs0 码力 | 8 页 | 379.61 KB | 5 月前3
Transitioning to Go05whoamiROBERT PAJĄK Go maintainer Go language committee member @ Author of goyekhttps://github.com/golang-templates/seed https://github.com/goyek/goyekfundamentalsTL;DR; 1. Complete: Tour of Go 2. Read Examplehttps://go.dev/tourhttps://go.dev/doc/codehttps://go.dev/doc/effective_gohttps://github.com/golang/go/wiki/CodeReviewCommentshttps://gobyexample.comgoing furtherhttps://www.gopl.iohttps://go.dev/ dev/learn/https://github.com/enocom/gopher-reading-listRead other codebases 1. Study https://github.com/golang/go 2. Check the code of the packages that you are usingIDEAS FOR PROJECTS - CLI tool (e.g. curl)0 码力 | 30 页 | 1.53 MB | 5 月前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 18.3. 面向对象设计模式的实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 和生命周期(lifetime),这些功能让你能够定义适用 于多种类型的代码。第十一章全面讲述了测试,因为就算 Rust 有安全保证,也需要测试确保 程序逻辑正确。第十二章中将会构建我们自己的 grep 命令行工具的功能子集实现,用于在文 件中搜索文本。为此会用到之前章节讨论的很多概念。 第十三章探索闭包(closure)和迭代器(iterator),这两个 Rust 特性来自函数式编程语言。 第十四章会深入探讨 Cargo 程序中表达思想的有效方式。第二十章是 一个高级主题大杂烩,包括不安全 Rust(unsafe Rust)、宏(macro)和更多关于生命周期、 Trait、类型、函数和闭包的内容。 第二十一章我们将会完成一个项目,实现一个底层多线程的 Web 服务端! 最后的附录包含了一些关于该语言的实用信息,其格式更像是参考资料。附录 A 涵盖了 Rust 的关键字,附录 B 涵盖了 Rust 的运算符和符号,附录 C 涵盖了标准库提供的可派生0 码力 | 562 页 | 3.23 MB | 23 天前3
curvefs client删除文件和目录功能设计1 of 15 curvefs client 删除文件和目录功能设计© XXX Page 2 of 15 背景 相关调研 moosefs chubaofs 方案设计思考 1.Trash机制是实现1个(类似chubaofs),还是2个(类似moosefs)? 2. Trash放在哪里? 3. 是否需要做session机制(在metaserver打开),来维护inode的打开情况? 方案设计 工作量评估 背景 目前curvefs client版本对删除unlink和rmdir的设计只有简单的删除inode和dentry结构,遗留了nlink和lookup count相关的内容还未实现,是不完备的。本文首先调研moosefs,chubaofs等分布式系统,参考并设计解决上述遗留问题。 当前删除接口代码如下:© XXX Page 3 of 15 CURVEFS_ERROR Fu 文件的nlink用于实现hard link。 hard link使用nlink字段表示文件的link的引用计数,第一次创建文件是nlink字段为1。每创建一个新的指向该文件的hard link时,nlink字段+1, 每删除一个hard link或指向的原文件时,nlink字段-1。© XXX Page 4 of 15 当nlink字段减到0时,才真正删除inode。所以在实现unlink接口或r0 码力 | 15 页 | 325.42 KB | 6 月前3
CurveFS方案设计© XXX Page 1 of 14 CurveFS方案设计(总体设计,只实现了部分)© XXX Page 2 of 14 时间 修订人 修订内容 2021-03-23 李小翠 初稿(背景,调研,架构设计) 2021-03-30 李小翠 增加快照部分 2021-04-13 李小翠、陈威 补充元数据数据结构 2021-04-19 李小翠、吴汉卿、许超杰等 补充文件空间分配,讨论与确认 背景 文件空间管理 开发计划及安排 背景 为更好的支持云原生的场景,Curve需要支持高性能通用文件系统,其中高性能主要是适配云原生数据库的场景。当前Curve是实现了块存储,向上提供块设备服务,CurveFS会基于此实现。第一阶段的目标是实现 满足数据库场景的文件接口。 调研 开源fs 当前对已有的开源分布式文件系统进行了调研,主要包括系统架构,元数据内存结构,元数据持久化,调研文档如下: chubaofs: 可行性分析 方案对比 根据上述调研和测试结果,我们考虑了三种curvefs的元数据设计方案: CurveFS kv方案设计 curve实现块设备时,元数据不是扁平化的设计,而是采用来有目录层级的 namespace 方式,namespace 已经实现了 fs 元数据管理的雏形,具备了基本的元数据管理功能。(当时为什么要设计为 namespace 的管理形式?留有租户这个概念),直接基于 namespace0 码力 | 14 页 | 619.32 KB | 6 月前3
CurveFS Client 概要设计© XXX Page 1 of 11 CurveFS Client 概要设计(已实现)© XXX Page 2 of 11 背景 概述 关键接口分析 init destroy lookup write read open create & mknod mkdir forget unlink rmdir opendir readdir getattr & setattr access rename 内容 2021-04-27 许超杰 初稿 背景 CurveFS初步设计见 , 目前需细化Client端设计 CurveFS方案设计(总体设计,只实现了部分) 概述 CurveFS client 向上提供两层接口,分别是© XXX Page 3 of 11 对接fuse,提供通用文件系统接口。对于fuse接口,先前进行了一些调研,见FUSE调研 后删除旧的parent下的inode和dentry 两者都涉及到rename的事务性的问题?( ) 这里可能还需要详细分析到底是否需要完整的事务的4个特性acid,还是只需要实现其中部分 目前阶段rename可先不实现,但是可以先考虑一些方案。 symlink & readlink void (*symlink) (fuse_req_t req, const char *link, fuse_ino_t0 码力 | 11 页 | 487.92 KB | 6 月前3
Curve文件系统元数据持久化方案设计Snapshot 持久化文件 key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft 存在的问题? redis 改造 vs 自己实现? redis 中哈希表实现的优点? 参考 前言 根据之前讨论的结果,元数据节点的架 保存编码后的 value© XXX Page 5 of 12 其他说明 持久化文件中涉及到的数字均以小端序存储 利用 fork 子进程 (COW) 的方式解决在持久化的过程中,读写冲突的问题以及性能问题 实现 1、inode、entry 的编码 给 inode、dentry 增加编码函数 // 这里要尽可能减少 key/value 编码后的字节数,这样同样的内存可以存入较多的 key/value 对 2、KVStore 将当前实现中的 MemoryDentryStorage 和 MemoryInodeStorage 抽象成一个 KVStore,对外提供 SET/GET/DEL 等接口,inode/dentry 均编码后以 key-value 的形式存入 KVStore 当前实现可先只实现 KVStore(提供方便 API),Raft 等可以后续接入(目前实现中持久化可以在 KVStore0 码力 | 12 页 | 384.47 KB | 6 月前3
共 34 条
- 1
- 2
- 3
- 4













