应用 waPC (rust) 做软件测试工具bytes, send /continue back to host • Else send a list of TCP items TCP MITM 例子 • 模拟数据规则 • 自动化测试 • 验证功能 Assertion • 稳定环境 Stable environment • 报告能力(例如 junit) Reporting Basic API testing requirement API standin for wasm • 可用 Javascript 在游览器里面 模拟数据 • 发 RPC 请求 • 可以上传 proto 文档 • 可以验证数据 前段链接 Wasm Mock Server 随机 waPC 注册逻辑 Use wasm without fear 支持以 websocket 代替 wasm 协议 • 不可能为每个 websocket 链接编程新的 wasm0 码力 | 30 页 | 2.50 MB | 1 年前3
Zadig 产品使用手册使用介绍 视频 Demo 演示 ? • 准备环境 • 准备工作流 运维(管理员) • IDE 热部署 • 更新镜像 • 更新配置 • 更新数据 • 日常调试 开发工程师 • 日常测试验证 • 自动化测试 测试工程师 • 升级预发环境 • 升级生产环境 • 变更数据库 发布工程师 核心场景介绍:不同角色工程师基于统一协作平面,操作使用自动化工作流和云原生环境 面向角色 更新日常开发环境及 dev 业务配 置 project-dev-workflow • 构建、配置变更( Apollo/Nacos )、数 据变更、部署、冒烟测试、项目管理任务 变更 测试工程师 更新测试验证环境 project-sit-workflow • 构建、配置变更( Apollo/Nacos )、数 据变更、部署、接口测试 更新集成测试环境 project-auto-sit-workflow 起开发自测子环境 如果采用 Istio + Skywalking 技术栈,通过 Zadig 开启自测模式随时拉起子环境 测试工程师 用于测试手工验证 sit 自主升级环境,选择一个或多个 PR/MR 进行功能需求 的并行验证。 用于测试集成验证 auto-sit 执行自动化 CD 过程 用于验收测试 uat 以此环境作为发布生产环境前的用户验收环节 发布 / 运维工程师 用于生产查看 prod0 码力 | 52 页 | 22.95 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台角色: 产品 / 架构 开发 测试 运维 运维 / 开发 技术支持 事件 需求设计 架构设计 拆任务、写代码 代码集成 xN 单元测试验证 xN 代码扫描 xN 自测、联调 xN 集成验证 xN 写测试用例 系统验证 xN 自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 代码变更 xN 配置变更 xN 代码三: 代码编写 | 构建 | 部署 | 测试 | 发布 特点: ● 重复流程自动化 ● 边开发、边验证 ● 服务全生命周期而非只关注代码 ● 每天多次提交提早验证 Zadig 采用「云原生产品级交付」设计理念 数字化产研协同 • 环境 - 统一开发者协作平面 • 工作流 - 统一交付变更通道 • 异构支持 - 统一产研运管理平面 调试自测免打扰:本地 / 子环境免打扰,独立完成验证工作 自助验证更高效:自动化工作流 + 云上环境,高效验证调试 安全发布有信心: 一个平台完成日常 90% 工作,开发自助发布 需求研发总耗时降低 30% 需求迭代周期缩短 1-5 倍 解放开发,专注编码 更多的架构和技术提升 测试 效率和质量难以平衡: • 自动化测试难以开展 • 环境不稳定并行验证效率低 • 测试多苦劳,价值难以体现0 码力 | 59 页 | 81.43 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性: Future 灵活的可组合性 • 任意定制 Poll 的执行逻辑 (Join / Select / Timeout) • 动态的调用关系 • 痛点:观测与调试工具无法理解灵活的执行逻辑 • Backtrace 不够直观 ( 调用栈 -> 调用树 ) • Tracing 无法追踪调用关系的变化 Async Rust 观测与调试的痛点 计算:分布式流计算任务,实时增量维护 • 存储: S3 上的 Shared-storage 存储状态和数据 Await Tree 在 RisingWave 中的应用 • 技术挑战 • 计算任务需长期执行,稳定性要求高 • 算子逻辑复杂,计算与存储读写穿插,强依赖 Async • Await-Tree 的应用 • 数次帮助解决棘手的 Async Stuck 问题 • 长期于生产环境部署,性能开销极低 Backtrace 的补充0 码力 | 37 页 | 8.60 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程然而却出错了:因为 size() 是 const 函 数,而 mutex::lock() 却不是 const 的。 逻辑上 const 而部分成员非 const : mutable • 我们要为了支持 mutex 而放弃声明 size() 为 const 吗?不必, size() 在逻辑 上仍是 const 的。因此,为了让 this 为 const 时仅仅给 m_mtx 开后门,可以用 compare_exchange_strong 可修改他的值 。 方便同学们理解的伪代码 • 为了方便理解,可以假想 atomic 里面是这样实现的: • 可以看到其中 compare_exchange_strong 的逻辑最为复 杂,一般简称 CAS (compare-and-swap) ,他是并行编程 最常用的原子操作之一。实际上任何 atomic 操作,包括 fetch_add ,都可以基于 CAS 来实现:这就是0 码力 | 79 页 | 14.11 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器首先搞懂 set 内部是怎么确定 两个元素 a 和 b 相等的: • !(a < b) && !(b < a) • 也就是说他 set 内部没有用到 == 运算符,而是调用了两次 比较函子来判断的。逻辑是: • 若 a 不小于 b 且 b 不小于 a ,则视为 a 等于 b ,所以 这就是为什么 set 只需要一个 比较函子,不需要相等函子的 原因。 set 的排序:自定义排序函数 • 所以我们这里写了 (int *p = arr; p != arr + n; ++p) { • int value = *p; • } • 小彭老师说过建议用前置 ++ 运算符,区别我们上一期说 过了。前置比较高效且符合逻辑,后置对 C 语言考试有 用。 从 C 语言指针到 C++ 迭代器( 5 ) • 上节课说了,迭代器就是在模仿 C 语言指针。 • 那么 C++ 的迭代器模式也就呼之欲出了: • set0 码力 | 83 页 | 10.23 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅理想加速比应该是核心的数量。 • for 部分加速比为 5.98 倍。 • reduce 部分加速比为 10.36 倍。 • 提示:老师的电脑是 6 个物理核心, 12 个逻辑核心。 • 似乎这里 reduce 的加速比是逻辑核心数量,而 for 的加速比是物理核心的数量? • 剧透:因为本例中 reduce 是内存密集型, for 是计算密集型。 • 超线程对 reduce 这种只用了简单的加法,瓶颈在内存的算法起了作用。0 码力 | 116 页 | 15.85 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理)因此我们的课程 基于 C++17 标准,有时会谈到 C++20 作为扩展阅读。 C++ 有哪些面向对象思想? C++ 思想:封装 比如要表达一个数组,需要:起始地址指针 v ,数组大小 nv 将多个逻辑上相关的变量包装成一个类 因此 C++ 的 vector 将他俩打包起来,避免程序员犯错 封装:不变性 比如当我要设置数组大小为 4 时,不能只 nv = 4 还要重新分配数组内存,从而修改数组起始地址 shared_ptr ,可能出现循环引用之类的问题 ,导致内存泄露,依然需要使用不影响计数的原始 指针或者 weak_ptr 来避免。比如右边这个例子: 循环引用:解决方案 1 • 如何解决?只需要把其中逻辑上“不具有所 属权”的那一个改成 weak_ptr 即可: • 因为父窗口“拥有”子窗口是天经地义的,而 子窗口并不“拥有”父窗口。 • 其实主要是一个父窗口可以有多个子窗口 ,只有规定子窗口从属于父窗口才能解决0 码力 | 96 页 | 16.28 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器insert_or_assign(key, val) 不覆盖写入,要用 m.insert({key, val}) 判断是否存在,用 m.count(key) 若存在则删除,用 m.erase(key) 第四章:迭代与遍历 物理格式 逻辑格式 面壁者罗辑监督你鞋习 ! 面壁者罗辑监督你鞋习 ! map 的元素类型是…… • set::value_type 是 V 。 • map ::value_type 是 pair unordered_map 未使用 k 未使用 k 未使用 未使用 未使用 未使用 未使用 未使用 k v k v 第五章:专业的接口 物理格式 逻辑格式 面壁者罗辑监督你鞋习 ! 面壁者罗辑监督你鞋习 ! map 更便捷的接口 • 通过 find 返回的迭代器查找元素的方法,虽然是完备的,但使用起来较为复杂,不够简洁。 通常我们只是想要根据 0 码力 | 90 页 | 8.76 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程待时,原来那个线程说不定就好了呢?(记得上节课说过内存延 迟是阻碍 CPU 性能提升的一大瓶颈, GPU 也是如此。 CPU 解决方案是超线程技术,一个物理核提供两个逻辑核,当一个逻 辑核陷入内存等待时切换到另一个逻辑核上执行,避免空 转。 GPU 的解决方法就是单个 SM 执行很多个线程,然后在遇 到内存等待时,就自动切换到另一个线程) 板块内线程的同步 • 因此,我们可以给每个0 码力 | 142 页 | 13.52 MB | 1 年前3
共 20 条
- 1
- 2













