Curve质量监控与运维 - 网易数帆软件质量的定义是:软件与明确地和隐含地定义的需求相一致的程度。 为了确保最终交付的软件满足需求,必须将质量控制贯穿于设计、开发到测试的整个流程中。 设计 设计流程 文档规范 开发 编码规范与提交流程 版本管理 测试 测试方法论 CI与异常测试 6/33设计流程 Curve团队采用敏捷开发模式,负责人在制定迭代计划时,确认哪些任务需要设计 文档: 小需求(改动小)将实 小需求 实现思路 开发 大需求 设计文档 POC 开发 7/33设计文档规范 设计文档需要具备以下内容: 修订记录 审批记录 系统介绍 相关调研 架构 重要流程 关键算法 接口 数据库设计 非功能特性设计 参考文献 8/33代码编写规范 Curve代码编写规范遵循Google Style Guides(https://google Dailybuild测试 提交issue 开发设计 提交PR review +1 CI测试(编译、静态检 查、单元测试、集成测 试、覆盖率80%卡点) 合入master 分支 代码提交流程 异常自动化 测试 混沌测试 (每周一次) CI测试(编译、静态检 查、单元测试、集成测 试、覆盖率80%卡点) 邮件通知 Curve所有代码均在github托管。新 代码需要通过CI测试和code0 码力 | 33 页 | 2.64 MB | 6 月前3
【周鸿祎清华演讲】DeepSeek给我们带来的创业机会-360周鸿祎-20250220政企、创业者必读 21 DeepSeek出现之前的十大预判 之八 智能体推动大模型快速落地 能够调用各种工具,具有行动能力 调用企业专业知识,更懂企业 将日常重复性业务流程形成Playbook,实现流程自动化 通过目标拆解,多次调用大模型以及专家模型协同,形成 慢思考能力 传统软件是辅助人的工具,Agent是能够自主工作的数字员工,是新的生产力政企、创业者必读 22 DeepSeek出现之前的十大预判 能源自由 宇宙探索 生命科学 科学 能力 6 AI Fo r Science 知识管理( 内部知识管理、 外部情报分析、 大数据分析、 工作流知识) 专家经验模型( 专业模型训练) 业务流程自动化( A g e n t框架) 组织协同( 工作流) 人机交互 赋能个人和 企业员工 生产力提升 多模态 能力 3 图片理解和处理 视频理解和处理 音频理解和处理 非结构化文档处理 47政企、创业者必读 对外 四个方向 降低10倍人力 降低10倍成本 提高10倍效率 提升10倍体验 四个“十倍”原则 四个方向 四个十倍 选择场景 分解流程 做过去只有人才能做的事 做人做的重复繁琐易出错的事 拆解繁琐复杂的业 务流程 55政企、创业者必读 场景选择示例:人员招聘系统 场景分得足够细,就可以训练对应的专业模型来解决问题 注:经360内部测试,深色的业务环节更加符合“四个十倍”原则0 码力 | 76 页 | 5.02 MB | 5 月前3
Curve设计要点一个对象作为 EC 组的一个满条带 挖洞即时空间回收拓扑 • 管理和组织机器 • 软件单元:chunkserver • 物理机:server • 故障域:zone • 物理池:poolIO流程 client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 • 集群状态查询工具 • curve_ops_tool • 自动化部署工具 • 一键部署,一键升级高质量 • 良好的模块化和抽象设计 • 完善的测试体系 • 单元测试 行覆盖80%+,分支覆盖70%+ • 集成测试 Given When Then 方法 完备的测试用例集 • 自动化异常测试 41个异常用例 • 自动化大压力随机故障注入 20轮随机故障注入背景 01 02 030 码力 | 35 页 | 2.03 MB | 6 月前3
人工智能安全治理框架 1.0业等机构工作人员在业务工 作中不规范、不当使用人工智能服务,向大模型输入内部业务数据、工业信息, 导致工作秘密、商业秘密、敏感业务数据泄露。 (d)滥用于网络攻击的风险。人工智能可被用于实施自动化网络攻击或- 6 - 人工智能安全治理框架 提高攻击效率,包括挖掘利用漏洞、破解密码、生成恶意代码、发送钓鱼邮件、 网络扫描、社会工程学攻击等,降低网络攻击门槛,增大安全防护难度。 (e)模 全等方面的能力,降低 人工智能系统被攻击、重要数据被窃取或泄露的风险,保障业务不中断。 (f) 重点领域使用者应合理限制人工智能系统对数据的访问权限,制定 数据备份和恢复计划,定期对数据处理流程进行检查。 (g)重点领域使用者应确保操作符合保密规定,在处理敏感数据时使用 加密技术等保护措施。 (h)重点领域使用者应对人工智能行为和影响进行有效监督,确保人工 智能产品和服务的运行基于人的授权、处于人的控制之下。0 码力 | 20 页 | 3.79 MB | 1 月前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 2/562Rust 程序设计语言 简体中文版 11. 编写自动化测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 计算出所有符合要求的依赖版本并写入 Cargo.lock 文件。当将 来构建项目时,Cargo 会发现 Cargo.lock 已存在并使用其中指定的版本,而不是再次计算所 有的版本。这使得你拥有了一个自动化的可重现构建(reproducible build)。换句话说,项目 会持续使用 0.8.5 直到你显式升级,多亏有了 Cargo.lock 文件。由于 Cargo.lock 文件对于可 重现构建非 中跳转越少就越快。继续类比,假设有一个服务员在餐厅里处理多个桌子的点菜。在 一个桌子报完所有菜后再移动到下一个桌子是最有效率的。从桌子 A 听一个菜,接着 桌子 B 听一个菜,然后再桌子 A,然后再桌子 B 这样的流程会更加缓慢。出于同样原 68/562Rust 程序设计语言 简体中文版 因,处理器在处理的数据彼此较近的时候(比如在栈上)比较远的时候(比如可能在 堆上)更高效。 当你的代码调用一个函数时,传0 码力 | 562 页 | 3.23 MB | 23 天前3
CurveFS对接S3方案设计2021-05-20 胡遥 初稿 2021-07-20 胡遥 细化write和read流程 整体架构 整体思路 接口和关键数据结构 mds.proto client端数据结构 metaserver.proto space相关数据结构和proto 关键流程 init流程 write流程 read流程 整体架构 S3ClientAdaptor模块:负责将文件数据进行chunk,以及bl Page 3 of 11 整体思路 curvefs对接s3和对接volume主要的区别在于数据持久化和空间分配部分,而元数据的操作尽量保持统一。因此我们涉及到修改client的流程主要在read/write/flush,以及空间分配申请(s3不需要释放空间,可 直接删除对应s3 object) 文件首先会按照chunk进行拆分,每个chunk固定64M/1G( private: std::atomicchunkId_;© XXX Page 10 of 11 }; 关键流程 关键流程包括S3ClientAdaptor的init,write,read,delete和后台元数据整理以及数据回收流程 init流程 1.将conf中blockSize,chunkSize,metaServer和allocateServer ip保存在S3ClientAdaptor中 0 码力 | 11 页 | 145.77 KB | 6 月前3
Curve支持S3 数据缓存方案背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 Flush流程 FsSync流程 后台流程 poc测试验证 背景 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 通过日志初步分析有2点原因© XXX Page dex找到chunk,然后通过offset~len找到是否有合适的datacache或者new datacache。 对外接口 流程上对于读写缓存有影响的接口包括:write,read,releaseCache,flush,fssync。后面会详细介绍这些接口流程。这里不需要提供truncate接口,可以由client直接修改inode的len,由metaserver的碎片整 理(马杰负责)模块进行truncate的无效数据清理 chunkId; uint32_t chunkPos_;© XXX Page 8 of 9 uint32_t len_; char* data_; }; 详细设计 Write流程 1.加锁,根据inode和fsid找到对应的fileCacheManager,如果没有则生成新的fileCacheManager,解锁,调用fileCacheManager的Write函数。 20 码力 | 9 页 | 179.72 KB | 6 月前3
Curve元数据节点高可用clientV3的concurrency模块构成 3.2 Campaign的流程 3.2.1 代码流程说明 3.2.2 举例说明Campagin流程 3.3 Observe的流程 4. MDS使用election模块的功能进行选主 4.1 Curve中MDS的选举过程 4.2 图示说明选举流程 4.2.1 正常流程 4.2.2 异常情况1:MDS1退出,可以正常处理 4.2.3 异常情况 30 1. 2. Campagin用于leader竞选 Observe用于监测集群中leader的变化 3.2 Campaign的流程 3.2.1 代码流程说明 如对相关代码实现不感兴趣,请直接跳到 3.2.2 举例说明Campagin流程 按照官方对Campagin的定义: blocked until it becomes the leader func (e *Election) leaderSession = nil } return err } e.hdr = resp.Header© XXX Page 7 of 30 return nil } 代码流程说明如下:© XXX Page 8 of 30© XXX Page 9 of 30© XXX Page 10 of 30 etcd中的revision是全局的,只要有key-value的修改(put0 码力 | 30 页 | 2.42 MB | 6 月前3
CurveFS rename 接口实现方案方案一:chubaofs 方案二:事务方案 方案三:利用 KV 自带的分布式事务 Q&A 1. 是否需要实现跨文件系统的 rename 操作? 2. 在多客户端情况下,是否需要加锁来保证其原子性? 3. rename 流程举例说明? 例 1:rename A→B (A 存在,而 B 不存在) 例 2:rename A→C (A 存在,而 C 存在) 4. 当 2 个操作的 dentry 属于同一个 copyset PendingTx 与 dentry 副本是一一对应的,下面有机制确保,每个 copyset 只需要一个 PendingTx(即整个 copyset 中最多只会存留一个副本 dentry) 下面是图中流程说明: (1) mount 的时候将 MDS 中所有 copyset 对应的 txid 缓存在本地 (2) 以 (copyset_txid+1) 去对应的 copyset 删除/创建/修改 dentry 层已经给我们保障了,不需其他开发, 而如果我们挂载多客户端的话,需要一个分布式锁,可以利用块设备中 open() 的 session 机制来实现文件锁,加锁的粒度可以参考 VFS 3. rename 流程举例说明? 例 1:rename A→B (A 存在,而 B 不存在) 一些假设: 将文件 A 对应的 dentry 称为 dentryA,并假设 dentryA 属于 copyset1 将文件0 码力 | 15 页 | 555.93 KB | 6 月前3
CurveFS Copyset与FS对应关系copyset个数是否可以动态调整? 4、curvefs的topo信息 5、curvefs mds和metaserver的心跳 6、详细设计 6.1 创建fs 6.2、挂载fs 6.3、创建文件/目录 6.4、open流程 6.5、读写流程 6.6、topology 7、工作评估 7.1 client端 7.2 mds端 7.3 metaserver端 metaserver 子模块拆分 8、inode和dentry的内存估算 对应的copyset上插入一条rootinode的记录。最后修改fs状态为INITED。© XXX Page 10 of 19© XXX Page 11 of 19 6.2、挂载fs 挂载fs的流程不变,client向mds发送mount rpc请求,mds对fs进行相应的检查,然后记录挂载点返回成功。 1、检查文件系统是否存在 2、检查fs的状态,是否是INITED状态 3、检查挂载点是否已经存在 就为这个fs创 建一个新的copyset。© XXX Page 12 of 19© XXX Page 13 of 19 6.4、open流程© XXX Page 14 of 19© XXX Page 15 of 19 6.5、读写流程 读写流程和之前的读写流程大致保持不变。变化点在于之前inode修改是直接去metaserver上修改,现在变成了去copyset上修改。 client端缓存所0 码力 | 19 页 | 383.29 KB | 6 月前3
共 19 条
- 1
- 2













