KubeCon2020/大型Kubernetes集群的资源编排优化of cluster nodes ? Dynamic-Scheduler Node1 Node2 Kube-scheduler Pod Request Load Level Request Load Level Real Load Level Real Load Level Assigned to Node2 The native K8S scheduling is based on Dynamic-Scheduler Node1 Node2 Kube-scheduler Pod Request Load Level Request Load Level Real Load Level Real Load Level Assigned to Node1 Dynamic-scheduler Node1 has a lower load Dynamic-Scheduler Node1 Node2 Dynamic-scheduler- node-annotator 5m Load Prometheus 1h Load 1d Load 5m Load 1h Load 1d Load telegraf Record to node annotation telegraf Dynamic-Scheduler Predicate Node2 Node3 Node1 5m Load0 码力 | 27 页 | 3.91 MB | 1 年前3
Zadig 产品使用手册技术升级」提升组织效能 01 04 02 03 工程化协同:“人、技术、流 程、工具” 四维协同基线,沉 淀全流程数据,从感知到赋 能,服务于工程师 释放云基建能力:链接任何云 及自建资源(容器、主机、车 机、端等),释放云原生价值 和企业创新力 生态开放:广泛开放系统 模块和 OpenAPI ,链接 一切流程、服务、工具和 上下游伙伴 安全简单自主可控:私有化 部署,现有服务 支持从需求到发布全流程敏捷交付。尤其面向 多服务并行部署发布,云原生构建环境和运行 环境,基础设施对接及企业级 SSO/ 权限管理 等 运维管理类平台 蓝鲸 Rainbond KubeSphere KubeVela 面向资源管理的运维工具集 面向开发者,需结合 CI/CD 工具额外 搭建全流程能力 专门面向开发者的生产力平台,涵盖需求到开 发,测试,运维的云原生一体化技术底座支撑 云厂商 DevOps 平台 华为云 环境不透明、测试效率低下、测 试有效性低、大量手工、价值难 以体现 上下游烟囱式、协作效率低、团 队花大量时间在碎片化沟通和流 程制定上、各方能力受限、无法 快速响应市场需求 层级越高、对产研状态越模糊 管理低效、延误战机 少量配置、快速拉起环境、稳定 性有保障、减少 90% 手工操作、 赋能开发、员工成就感高 碎片化:手工协作 + 复杂工具链 工程化:一个平台 一键发布 工作流、环境配置自动更新、高 效调试、消除手工操作、精准快0 码力 | 52 页 | 22.95 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人图自编码器 图查询及其应用场景 图查询 • 使用图数据库的查询语言进行点边的关联查询,可以快速完成传统数据库难以完成的 多度点边关 联 当前图的典型应用场景 路径识别 群体挖掘 节点识别 相似节点 链接预测 连接强度 一致行动人 同事关系 实际控制人 可能认识的人 上下游 同爱好的人 亲属关系 … 人与人、企业与企业、企业与人之间的 复杂、潜在关系推导和挖掘 为已有的分析模型增加“关系特征”维 新一代分布式图数据库需具备的特性 特性 信 雅 达 • 高可用 • 一致性(事 务) • 高性能 • 低资源消耗 • 易用 • 功能丰富 AtlasGraph 关键特性 云原生 Cloud-Native Graph Database 支持弹性伸缩,有 效利用硬件资源,高可用,高 可靠,故障自愈,低成本运维 HTAP Hybrid Transactional/Analytical Graph Query Language) ,类 SQL 的图查询 语言,内置上百种分析函数, 面向分析师友好,拥抱标准, 基于 openCypher 向 ISO GQL 迈进 实时大图 支持万亿节点存储及流式计算 引擎的结合,最新数据实时入 库构图,为在线业务决策分析 提供有力支撑 AtlasGraph 架构及实现 新一代图技术应用特征简介 Takeaway AtlasGraph 架构概览0 码力 | 38 页 | 24.68 MB | 1 年前3
谈谈MYSQL那点事B+ Tree 进行索引 进行索引 • 使用三个文件定义一个表: 使用三个文件定义一个表: .MYI .MYD .frm .MYI .MYD .frm • 少碎片、支持大文件、能够进行索引压缩 少碎片、支持大文件、能够进行索引压缩 • 二进制层次的文件可以移植 二进制层次的文件可以移植 (Linux (Linux Windows) Windows) • 访问速度飞快,是所有 像性别、状态值等等建立索引没有意义 像性别、状态值等等建立索引没有意义 字段唯一,最少,不可为 字段唯一,最少,不可为 null null 对大数据量表建立聚集索引,避免更新操作带来的碎片。 对大数据量表建立聚集索引,避免更新操作带来的碎片。 尽量使用短索引,一般对 尽量使用短索引,一般对 int int 、 、 char/varchar char/varchar 、 、 date/tim date/tim0 码力 | 38 页 | 2.04 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高 • 公共资源 / 业务资源利用率低 赋能多业务:一个平台解决了多异构项目的管理和规范 团队高效协作:定义团队角色工作流模板,随时可用云上环境 价值清晰呈现:为管理者提供全视角效能数据,赋能数字决策 人工低效操作减少 80% 构建资源利用率提升 60% 业务资源利用率提升 30% 统一治理内部规范,开发 自助上线;解放运维,工 面向多服务并行部署,安全发布, 0 维护负担 支撑云原生构建 / 运行环境,多云异构支持及企业 级登录权限支持 传统运维管理类平台 蓝鲸 Rainbond KubeSphere KubeVela 面向资源管理的运维工具集 面向开发者,需结合 CI/CD 工具额外搭建 全流程能力 专门面向开发者的生产力平台,涵盖全流程需求到 开发,测试,运维的云原生一体化技术底座支撑 云厂商 DevOps 平台 度,无需与运维持续沟通 降低个人心智负担 • 通过平台工程,将底层的复杂性 抽象化,降低个人心智负担,提 高开发效率 可重用降低运维成本 • 一些组织可能过度依赖高级工程 师管理发布流程和基础设施,导 致资源浪费和效率低下 Zadig 平台工程模式 工程规模数据: • 1500+ 产研工程师 Vs. 2 人运维 • 50 + 个 Kubernetes 全球集群 • 300+ 个数字产品(资产沉淀)0 码力 | 59 页 | 81.43 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理getter/setter 函数分离了声明和定 义,实现在另一个文件时! C++ 思想: RAII ( Resource Acquisition Is Initialization ) 资源获取视为初始化,反之,资源释放视为销毁 C++ 除了用于初始化的构造函数( constructor ) 还包括了用于销毁的解构函数( destructor ) 离开 {} 作用域自动释放 手动释放 RAII Python 等垃圾回收语言不同, C++ 的 解构函数是显式的,离开作用域自动销毁,毫不含 糊(有好处也有坏处,对高性能计算而言利大于 弊) 如果没有解构函数,则每个带有返回的分 支都要手动释放所有之前的资源 : RAII :异常安全( exception-safe ) C++ 标准保证当异常发生时,会调用已创建对象的解构函数 。 因此 C++ 中没有(也不需要) finally 语句。 如果此处不关闭,则可等 编译器默认生成的构造函数:初始化列表(妙用,处理函数的复杂类型参 数) • 还有,函数的参数,如果是很复杂的类型 ,你不想把类型名重复写一遍,也可以利 用 {} 初始化列表来简化: • zeno 的节点定义函数 defNodeClass 中就大量用到了这种简 化。 有自定义构造函数时仍想用默认构造函数: = default • 一旦我们定义了自己的构造函数,编译器就不会再生成默认的无参构造函数。0 码力 | 96 页 | 16.28 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程类的成员函数 join() 来等待该进程结束。 std::thread 的解构函数会销毁线程 • 作为一个 C++ 类, std::thread 同样遵循 RAII 思想和三五法则:因为管理着资源, 他自定义了解构函数,删除了拷贝构造 / 赋 值函数,但是提供了移动构造 / 赋值函数。 • 因此,当 t1 所在的函数退出时,就会调用 std::thread 的解构函数,这会销毁 t1 窗口才能刷新一遍 ,导致解算过程中基本别想做事,这一定程度上归功于 opengl 原始的单线程设计。 • 正面教材: zeno 可以在解算过程中,随时拖动滑块看前几帧的结果,编辑场景图,修改 节点间的连接,为下一次解算做准备,同时当前已经启动的物理解算还能在后台继续正常 运行。虽然 zeno 也用了 opengl ,但他用多进程成功在 opengl 的百般拖后腿下实现了 并发。 第 2 章:异步 是个厕所, A 同学在用了, B 同学就不能进去,要等 A 同学用完了才能进 去。 std::lock_guard :符合 RAII 思想的上锁和解锁 • 根据 RAII 思想,可将锁的持有视为资源 ,上锁视为锁的获取,解锁视为锁的释放 。 • std::lock_guard 就是这样一个工具类,他 的构造函数里会调用 mtx.lock() ,解构函 数会调用 mtx.unlock()0 码力 | 79 页 | 14.11 MB | 1 年前3
Go读书会第二期Go 技术图书阅读:从外刊到内刊 Go 中文图书 Go 外文图书 读书方法 精读 • 选择高质量图书 • 脑图 + 细节摘录 + 行动清单(输出) 泛读 • 闲书 ( 不烧脑 ) • 碎片化(快读) + 听书 小结 第四部分 小结 • 写书三要素 • Go 精进之路导读:思维先行,践行哲学,遵循惯例,认清本 质,理解原理 • 读书:选高质量图书精读 ( 脑图 + 细节摘录0 码力 | 26 页 | 4.55 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型Storage ) http://www.netlib.org/linalg/html_templates/node91.html 按行压缩( Compressed Row Storage ) http://www.netlib.org/linalg/html_templates/node91.html 第 1 章:稀疏网格 稠密网格计算粒子经过的格点数量 改用更小的 char 存储 只用一个 有了无边界的稀疏网格,再也不用担心二维数组要分配多大了。 坐标可以无限延伸,甚至可以是负数!比如 (-1,2) 等…… 他会自动在写入时分配 16x16 的子网格,称之为叶节点 (leaf node) ,而这里的 unordered_map 就是充当根节点 (root node) 。 图片解释稀疏的好处 传统稠密二维数组 无边界稀疏分块哈希表 此外,还是按需分配内存,即使被写入的部分奇形怪状也不会浪费内存。 这些被写入的部分被称为激活元素 图片解释:指针数组的原理 1 nul nul 2 3 nul nul nul nul 表示 nullptr (空指针) 图片解释:指针数组的稀疏 这样指针表中为 null 的部分,稠密叶节点的内存就省掉 了 垃圾回收 (garbage-collect) • 如果是运行的仿真,则液体可能会移动到 别的地方去。这时液体曾经存在过的地方 也仍然处于激活状态,可以每隔若干帧及 时释放掉这些不用的指针块以节省内存。0 码力 | 102 页 | 9.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器里面第一部分,也就是初始化语句: it = map.begin() 代表从最左节点开始出发。 • 第二部分,也就是判断是否退出的条件: it != map.end() 判断是否抵达最右节点的下一个 。 • 第三部分,也就是每次循环后执行的更新语句: ++it 会让迭代器往下一个节点移动。 • 所以人话就是:从根节点出发,不断向下一个移动,直到没有节点可遍历了。 • 而 for 里面的循环体,会对每个不同的 it 然后从程序员的黑盒视角看来,就是对于所有 map 中的 K-V 对执行了一遍循环体。 迭代器 operator++ 的移动方向 • 迭代器的 ++ 是中根遍历,先左子节点,然后根节点,最后右子节点。 • 为什么是中根遍历?因为刚刚说了二叉排序树的规则是:左子节点<父节点<右子节点。 • 这刚好是中根遍历的顺序,左中右。所以迭代器的 ++ 方向刚好是 K 越来越大的方向。 • 结论:遍历时,总是会按 K 从小到大的顺序。 1 待插入的数 4 5 8 7 set 查找为什么高效 • 刚刚的构建方法是平衡二叉树。而实际 set 中采用的是更为高效的红黑树。 • 区别就是每个节点上多挂了一个 bool 类型的 flag 变量,表示这个节点是红是黑。 • 总之这样三下五除二下来他的插入效率比平衡二叉树高出一个常数,但复杂度还是 O(logn) 。 • 红黑树的具体异同我会放到最后再细讲,一下子讲太深都睡着了,反正只有插入和删除的0 码力 | 90 页 | 8.76 MB | 1 年前3
共 28 条
- 1
- 2
- 3













