基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺TDengine 是一款开源、云原生的时序数据库( Time Series Database ),专为物联网、工业互联网、金融、 IT 运维监控等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等 系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个极简的时序数据处理平台。 采用关系型数据库模型 需要建库、建表, 为提升写入和查询效率,要求一个数据采集点一张表 全 部 开 源 www.github.com/taosdata/TDengine 全球 50 多个国家安装实例超 270k | GitHub 全球趋势排行榜多次排名第一 TDengine - 数据模型 1. 设备 ID 及关联属性( Tags ) 2. 时间戳 3. 结构化采集量 STable 超级表 Table 子表 CREATE STABLE `meters` ( `ts` TIMESTAMP0 码力 | 29 页 | 2.26 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 • ? 如何解决? Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 1 Await-Tree 的 应用与真实案例 3 设计目标 Await Tree 的设计原理与实现 • 追踪关键 Future 的生命周期和控制流 • Init, First Poll, Pending 基本用例 Await Tree 的设计原理与实现 基本用例 Await Tree 的设计原理与实现 设计细节 Await Tree 的设计原理与实现 • 充分理解 Future 生命周期中的控制流 Await Tree 的维护 Await Tree 的设计原理与实现 • 初始状态 Await Tree 的维护 Await Tree 的设计原理与实现 • Future 构造0 码力 | 37 页 | 8.60 MB | 1 年前3
谈谈MYSQL那点事读写性能都非常优秀 • 能够承载大数据量的存储和访问 能够承载大数据量的存储和访问 • 拥有自己独立的缓冲池,能够缓存数据和索引 拥有自己独立的缓冲池,能够缓存数据和索引 MySQL 架构设计—应用架构 强一致性 对读一致性的权衡,如果是对读写实时性要求非常高的话, 就将读写都放在 M1 上面, M2 只是作为 standby 。 比如,订单处理流程,那么对读需要强一致性,实时写实 力和 途径,实际中尽可能两者兼顾。 MySQL 架构设计—高可用架构 系统优化:硬件、架构 系统优化:硬件、架构 服务优化 服务优化 应用优化 应用优化 MySQL MySQL 优化方式 优化方式 影响性能的因素 影响性能的因素 应用程序 应用程序 查询 查询 事务管理 事务管理 数据库设计 数据库设计 数据分布 数据分布 网络 网络 操作系统 操作系统 使用好的硬件,更快的硬盘、大内存、多核 使用好的硬件,更快的硬盘、大内存、多核 CPU CPU ,专业的 ,专业的 存储服务器( 存储服务器( NAS NAS 、 、 SAN SAN ) ) 设计合理架构,如果 设计合理架构,如果 MySQL MySQL 访问频繁,考虑 访问频繁,考虑 Master/Slave Master/Slave 读写分离;数据库分表、数据库切片(分 读写分离;数据库分表、数据库切片(分0 码力 | 38 页 | 2.04 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人业务对大图分析的诉求(千亿点、万亿边) • 实时风控对图库的性能挑战( OLTP 毫秒级响应) • 海致图平台产品服务于金融、政府行业有大量业务经验积累(接近客户需求) • 现有开源产品无法满足要求(受限于基础架构设计,优化性能有限) 新一代分布式图数据库需具备的特性 特性 信 雅 达 • 高可用 • 一致性(事 务) • 高性能 • 低资源消耗 • 易用 • 功能丰富 AtlasGraph Processing 架构,大规模集群 分布式存储及并行计 算, Shared Nothing 模式支 持存储计算分离 高性能 基于 Rust 开发的分布式存储引 擎及图计算引擎,精细的内存 管理设计,内置索引系统,支 持毫秒级的并发查询响应速度 易用 AQL(Atlas Graph Query Language) ,类 SQL 的图查询 语言,内置上百种分析函数, 面向分析师友好,拥抱标准, Storage backend ( Property Graph KV store ) Pushdown filter Cypher (a)-[:LIKES]->(b) 计算下推:面向图应用特征设计 分布式存储 Find Vertex Walk Vertex Scan Cartesian Product Projection Filter Stage Stage 物理执行计划0 码力 | 38 页 | 24.68 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台面向开发者的云原生 DevOps 平台 角色: 产品 / 架构 开发 测试 运维 运维 / 开发 技术支持 事件 需求设计 架构设计 拆任务、写代码 代码集成 xN 单元测试验证 xN 代码扫描 xN 自测、联调 xN 集成验证 xN 写测试用例 系统验证 xN 自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 研发阶段 现代软件交付挑战:开发 5 分钟,上线 2 小时 服务一:设计 | 代码编写 | 构建 | 测试 | 部署 | 发布 服务二:设计 | 代码编写 | 构建 | 测试 | 部署 | 发布 服务三:设计 | 代码编写 | 构建 | 测试 | 部署 | 部署 | 测试 | 发布 特点: ● 重复流程自动化 ● 边开发、边验证 ● 服务全生命周期而非只关注代码 ● 每天多次提交提早验证 Zadig 采用「云原生产品级交付」设计理念 数字化产研协同 • 环境 - 统一开发者协作平面 • 工作流 - 统一交付变更通道 • 异构支持 - 统一产研运管理平面 重视开发者体验,工程师不再做脏活累活 传统 DevOps0 码力 | 59 页 | 81.43 MB | 1 年前3
Go读书会第二期维特根斯坦(语言哲学奠基人) “ 不能改变你思维方式的语言,不值得学习” - Alan Perlis ( 首届图灵奖得主 ) Part1 - 进入 Go 语言编程思维导引 站在语言设计者的高度理解 Go 的与众不同 Go 诞生 与演进 Go 设计哲 学 Go 编程思 维举例 怎么学习 Go 思维? 学习本质是一种模仿。要学习 Go 思维,就要 去模仿 go 团队、 go 社区的优秀项目和代 码,看看他们怎么做的 践行哲学,遵循惯例,认清本质,理解原理 • 接口的内部表示 • 接口设计 • 接口与组合 接口:一切皆组合 Part6 – 语法核心:并发编程 践行哲学,遵循惯例,认清本质,理解原理 • 并发设计 vs. 并行设计 • 并发原语的原理与应用模式 • 低级同步原语 (sync 和 atomic) 并发:优先考虑并发设计 Part7 – 错误处理 践行哲学,遵循惯例,认清本质,理解原理0 码力 | 26 页 | 4.55 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vector以及所有的迭代器对象,都会失效。 vector 容器: resize 到更小尺寸不会导致 data 失效 • 当 resize 的目标长度小于原有的容量时, 不需要重新分配一段连续的内存也不会造 成元素的移动(这个设计是为了性能考 虑),所以指向元素的指针不会失效。他 只是会把数组的长度标记为新长度,后面 空闲出来那一段内存不会释放掉,继续留 在那里,直到 vector 对象被解构。 vector 容器:重新 const noexcept; vector 容器: resize 的优化策略 • 注意这里 resize(7) 之后容量实际上扩充到了 10 而不是刚好 7 ,为什么 ? • 因为标准库的设计者非常聪明,他料想到了你 resize(7) 以后可能还会来 个 resize(8) 甚至 resize(9) 之类的。为了减少重复分配的次数,他有一 个策略:当 resize 后的新尺寸变化较小时,则自动扩容至原尺寸的两倍 1 才 是真正的末尾元素指针 a + a.size() - 1 。 • 为什么要这样设计?因为如果用 a + a.size() - 1 也就是 &a.back() 作为尾地址 指针,将无法表示数组长度为 0 的情况。 迭代器模式:为什么尾指针要往后移动一格? • 而让尾地址指针往后移动一格的设计,使 得数组长度为 0 就是 begptr == endptr 的情况,非常容易判断。0 码力 | 90 页 | 4.93 MB | 1 年前3
Rust分布式账务系统 - 胡宇东京 班加罗尔 阿姆斯特丹 西安 马来西亚 币种 50+ 国家 130+ 办公地点 19 1300+ 员工 提供高效,低成本的数字银行服务 关于我们: Airwallex 从设计架构到实现细节 项目介绍 分布式账务系统 Fintech 互联网 正确性 bug= 资损 bug 不可怕,快速迭代 可靠性 丢数据 = 资损 允许数据丢失 性能 超低延迟 + 高吞吐 超高吞吐 水平扩展性:利用分布式事务实现钱包集群的的水平扩 展,应对高达 100 万 TPS 的流量 可演化性:业务逻辑与底层 API 解耦,当业务发生改变 时,底层 API 不用改变 分布式账务系统 设计理念 - Rust 是我们可靠的基石 分布式账务系统 存算分离 API 解耦 读写分离 层级账号 Rust ● 事务层与账户层分 离 ● 独立水平扩展 ● CQRS ● Event Sourcing 业界 共识 厉兵秣马 - 人才培养 Rust 的吸引力 ● 更加容易吸引对技术有追求的人才 Rust 学习曲线 ● Java 背景, C++ 背景的同事 ● 学习《 rust 程序设计》 ● 1-3 月可以熟练转型使用 Rust Rust 与原有技术栈的融合 ● Kotlin : 偏业务,适合快速迭代 ● Rust :偏基础架构,适合精心打磨 ● gRPC :跨语言跨平台通讯0 码力 | 27 页 | 12.60 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程的。而是一会儿执行这个线程,一会儿执行那个线程。有可能一 个线程已经执行到 if (j < 32) 了,而另一个线程还没执行完 if (j < 64) ,从而出错。可是为什么 GPU 要这样设计? • 因为其中某个线程有可能因为在等待内存数据的抵达,这时大可 以切换到另一个线程继续执行计算任务,等这个线程陷入内存等 待时,原来那个线程说不定就好了呢?(记得上节课说过内存延 迟是阻碍 分支,要么全部真要么全部假,否则实际消耗 了两倍时间! 避免修改寄存器和访存相当于 CPU 的 SIMD 指令 _mm_blendv_ps 和 _mm_store_mask_ps ,不过 GPU 这种 SIMT 的设计能够自动处理分支和循环的分歧,这是 他门槛比 CPU 低的一点。 分支,要么全部真要么全部假,否则实际消耗 了两倍时间! 避免修改寄存器和访存相当于 CPU 的 SIMD 指令 _mm_blendv_ps 和 _mm_store_mask_ps ,不过 GPU 这种 SIMT 的设计能够自动处理分支和循环的分歧,这是 他门槛比 CPU 低的一点。0 码力 | 142 页 | 13.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串具有成员函数,然后就可以快乐地 233_i32 .some_method() 了。而 rust 这种预先规定好一些后缀,就只能是他们标准库的那 个 int32 ,不能自己定义了。 • 所以 cpp 之父曾经说,他设计 cpp11 的时候,是考虑“如何在对语言本身改动最小的情况下 ,尽量只在标准库里做手脚,尽可能只利用现有的语言特性,实现 cpp 的现代化。” • 例如 shared_ptr 可以通过利用语言本 杂度……好吧,其实是 O(len) 复杂度, len 就是这里子字符串的长度 2 。 • 此外,要注意 replace 会就地修改原字符串,返回的是指向原对象的引 用,并不是一份新的拷贝!这是标准库的设计者为了性能考虑。 replace 替换一段子字符串 函数原型: string &replace(size_t pos, size_t len, string const &str); string 这期间涉及了字符串的拷贝,还需要分配额外的内存,有点小浪费 。 • 如果切下来的子字符串长度是 n ,则复杂度为 O(n) 。 string_view 的重要用途:高效地切片 • C++17 的设计者们就想:其实我没必要把整个子字符串都 拷贝出来,我们只需要保证原来的字符串存在于内存中, 让 substr 只是返回切片后的胖指针 [ptr, len] ,不就让新 字符串和原字符串共享一片内存,实现了零拷贝零分配嘛0 码力 | 162 页 | 40.20 MB | 1 年前3
共 19 条
- 1
- 2













