使用Rust与ClickHouse构建高效可靠的日志系统第三届中国Rust开发者大会 使用Rust与ClickHouse构建高 效可靠的日志系统 刘炜 腾讯云(专有云) • 自我介绍 • 系统介绍 • 整体架构 • 系统实现 • 遇到问题 大纲 自我介绍 • 大龄码农 • 做过嵌入式/CDN/数据库开发 • 从C/C++到Rust • 现在在腾讯云(专有云)从事日志系统的开发 自我介绍 PhoTto / image / chart 系统介绍 系统介绍 • 属于腾讯专有云PaaS平台(TCS) • 承接TCS底座日志 • 从Loki=>Menicus • 提供日志的搜索/报警/处理等功能 系统介绍 • 为什么放弃 Loki • 资源占用过大 • 统计/计算能力比较弱 • 组件过多,排查问题比较困难 • 商业使用不友好的开源协议 • 为什么选择Mencius+ClickHouse • 存储计算与业务分离 • 每天 100G • 磁盘 • 压缩比 1:13 • 内存 • Mencius • 200M左右 • ClickHouse • 2G以下 • 接入端 • API Gateway • 日志服务(Mencius) • 存储(ClickHouse) 整体架构 • 协议层 • 处理层 • 计算层 • 存储层 系统实现 协议层 • 支持协议 • Loki • 写入 • Json/ProtoBuf0 码力 | 19 页 | 2.66 MB | 1 年前3
Comprehensive Rust(简体中文) 202412202 35.2 模拟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 36 日志记录 205 37 互操作性 207 37.1 与 C 的互操作性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 53.5.4 开始使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 53.6 日志记录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 53.6.1 开始使用 . . about 50 minutes. It contains: Slide Duration 方法 10 minutes 特征(Trait) 15 minutes 派生特征 3 minutes 练习:通用日志 20 minutes 13.1 方法 Rust 允许您将函数与新类型相关联。您可以使用“impl”块来执行此操作: struct Race { name: String, laps: Vec0 码力 | 359 页 | 1.33 MB | 10 月前3
简谈 Rust 与国密 TLS - 王江桐洞: • 内存安全问题包括解引用空指针、缓冲区溢出、内存损坏,占总问题 的 43.2%,High 及 Critical 问题的 46.7%。 Low Medium High Critical Total 解引用空指针 0 6 1 0 7 协议漏洞 1 0 0 0 1 实现逻辑错误 7 5 4 1 17 计算溢出 0 0 1 0 1 缓冲区溢出 0 1 3 1 5 内存损坏 0 20 码力 | 44 页 | 3.70 MB | 1 年前3
尝试用RUST写教学操作系统pointer-dereference, double free, use-after-free 等内 存问题. rust 有runtime 检查ownership / buffer overflow -> 缓冲区溢出不会导致system compromise • 并发安全: 对于全局变量, 它自带一个锁. 访问全局变 量的过程必须取得锁 -> C里面全局变量和锁时分离 的, 时常会忘记加锁,当锁离开作用域时自动释放0 码力 | 23 页 | 1.53 MB | 1 年前3
Rust语言核心竞争力-庄晓立指针越界访问,意外修改别处内存 • 内存被提前释放,形成野指针,非法读写内存 • 野指针又转化为合法指针,意外修改别处内存 • NULL指针解引用,非法操作 • 并发读写同一内存地址,数据竞争 • 缓冲区溢出、段错误…… ……等等许多危险操作,在C语言里触目惊心 Move by default struct Value { x: i32, } fn process(v: Value)0 码力 | 51 页 | 1.09 MB | 1 年前3
Rust 语言学习笔记通过编译器固有功能调用未定义行为: o 使用 std::ptr::offset(offset 功能)来索引超过对象边界的值,除了允 许的末位超出一个字节 o 在重叠(overlapping)缓冲区上使用 std::ptr::copy_nonoverlapping_memory(memcpy32/memcpy64 功能) 原生类型的无效值,即使是在私有字段/本地变量中: o 空/悬垂引用或装箱0 码力 | 117 页 | 2.24 MB | 1 年前3
Hello 算法 1.1.0 Rust版算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 4.3 列表 列表(list)是一个抽象的数据结构概念0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 4.3 列表 列表(list)是一个抽象的数据结构概念0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版算法是一种常见的 CPU 调度算法,它需要对一 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 790 码力 | 383 页 | 17.61 MB | 1 年前3
Rust分布式账务系统 - 胡宇可靠性 丢数据 = 资损 允许数据丢失 性能 超低延迟 + 高吞吐 超高吞吐 交易日志 审计,监管 调试使用 分布式账务系统 Fintech 领域中的软件与互联网软件的不同 需求分析 支付处理: ● 转账 ● 冻资 / 解资 ● 账户限额 ● 批处理事务 正确性:无双花或少付 审计监管:交易日志不可篡改,交易历史可回溯 条件事务:根据一定的条件决定事务执行与否 高可用:在部分节点失效的情况下,依旧可以提供正确的0 码力 | 27 页 | 12.60 MB | 1 年前3
共 13 条
- 1
- 2













