 基于gRPC go实现消息发布订阅使用gRPC go实现 基于Topic的高效消息订阅发布模型 姓名 张凯 中国电子云 目 录 gRPC go 介绍 01 gRPC四种通信模式及落地场景 02 根据proto生成go桩代码 03 订阅者动态注册 04 发布者消息推送 05 现场案例演示 06 gRPC go介绍 gRPC是什么? 01. 副标题 开篇思考几个问题 01. 副标题 gRPC介绍 基于通信模式如何落地? 01. 副标题 流式传输 基于通信模式如何落地? 01. 副标题 以及,本次分享的 “ ” 基于Topic消息发布订阅 基于Topic的消息发布模型简介 01. 副标题 基于Topic的消息发布模型简介 01. 副标题 BRIAN KERNGHAN service PubSubService { rpc Publish(PublishRequest) subscribers[ch] = topic // 动态注册,保存到map中 p.m.Unlock() return ch } 发布者消息推送 01. 副标题 func (p *Publisher) Publish(v interface{}) { ... // 发布时,轮询所有注册上来的对象 for sub, topic := range p.subscribers { ... go p0 码力 | 31 页 | 2.42 MB | 1 年前3 基于gRPC go实现消息发布订阅使用gRPC go实现 基于Topic的高效消息订阅发布模型 姓名 张凯 中国电子云 目 录 gRPC go 介绍 01 gRPC四种通信模式及落地场景 02 根据proto生成go桩代码 03 订阅者动态注册 04 发布者消息推送 05 现场案例演示 06 gRPC go介绍 gRPC是什么? 01. 副标题 开篇思考几个问题 01. 副标题 gRPC介绍 基于通信模式如何落地? 01. 副标题 流式传输 基于通信模式如何落地? 01. 副标题 以及,本次分享的 “ ” 基于Topic消息发布订阅 基于Topic的消息发布模型简介 01. 副标题 基于Topic的消息发布模型简介 01. 副标题 BRIAN KERNGHAN service PubSubService { rpc Publish(PublishRequest) subscribers[ch] = topic // 动态注册,保存到map中 p.m.Unlock() return ch } 发布者消息推送 01. 副标题 func (p *Publisher) Publish(v interface{}) { ... // 发布时,轮询所有注册上来的对象 for sub, topic := range p.subscribers { ... go p0 码力 | 31 页 | 2.42 MB | 1 年前3
 05. OpenKruise镜像预热实践_王思宇OpenKruise 实现大规模集群 镜像预热&部署发布加速实践 王思宇(酒祝) 阿里云容器服务 技术专家 OpenKruise author & maintainer 目 录 前言:OpenKruise 简介 01 为什么说人人都需要镜像预热 02 OpenKruise 是如何实现镜像预热的 03 如何通过镜像预热加速部署&发布 04 版本前瞻:原地升级与预热的结合 05 前言:OpenKruise imagepulljob controller NodeImage node1 NodeImage node2 NodeImage node3 整体预热流程 如何通过镜像预热加速部署&发布 第四部分 常见预热使用场景 apiVersion: apps.kruise.io/v1alpha1 kind: ImagePullJob metadata: name: base-image-job in-place update pull several layers of image start container 原地升级+镜像预热 灰度分批发布 第一批 第二批 第三批 ...... 正在灰度第一批 Pod 提前在后续批次 Pod 的节点上预热即将发布的新版镜像 in-place update start container 最终原地升级过程: DADI (Data Accelerator0 码力 | 28 页 | 5.78 MB | 1 年前3 05. OpenKruise镜像预热实践_王思宇OpenKruise 实现大规模集群 镜像预热&部署发布加速实践 王思宇(酒祝) 阿里云容器服务 技术专家 OpenKruise author & maintainer 目 录 前言:OpenKruise 简介 01 为什么说人人都需要镜像预热 02 OpenKruise 是如何实现镜像预热的 03 如何通过镜像预热加速部署&发布 04 版本前瞻:原地升级与预热的结合 05 前言:OpenKruise imagepulljob controller NodeImage node1 NodeImage node2 NodeImage node3 整体预热流程 如何通过镜像预热加速部署&发布 第四部分 常见预热使用场景 apiVersion: apps.kruise.io/v1alpha1 kind: ImagePullJob metadata: name: base-image-job in-place update pull several layers of image start container 原地升级+镜像预热 灰度分批发布 第一批 第二批 第三批 ...... 正在灰度第一批 Pod 提前在后续批次 Pod 的节点上预热即将发布的新版镜像 in-place update start container 最终原地升级过程: DADI (Data Accelerator0 码力 | 28 页 | 5.78 MB | 1 年前3
 Golang大规模云原生应用管理实践应用管理的策略与机制 应用 版本 工作负载 负载均衡 标签 流量 组件 日志 指标 容量 服务 依赖 路由规则 持久卷 部署策略 健康检查 … 灰度 发布 定时弹性 事件 指标弹性 分批发布 重启 回滚 日志管理 事件中心 指标监控 存储挂载 服务绑定 手动弹性 回退历史 负载均衡 报警 诊断 组件管理 服务治理 … 权限 K8s Successfully applied components 新的复杂度-控制器运维 我们要管控大规模的集群,每个集群也会部署大量的控制器,控制器本身的运维成为问题 • 控制器管控平台 • 升级 • 回滚 • 灰度 • 重启 • 观测性 • Prometheus • 统一日志收集 • 事件中心 • 告警 • 能力管控 • 版本管理 • 依赖满足 • 健康检查 云原生PaaS平台的发展趋势 基础设施0 码力 | 23 页 | 7.70 MB | 1 年前3 Golang大规模云原生应用管理实践应用管理的策略与机制 应用 版本 工作负载 负载均衡 标签 流量 组件 日志 指标 容量 服务 依赖 路由规则 持久卷 部署策略 健康检查 … 灰度 发布 定时弹性 事件 指标弹性 分批发布 重启 回滚 日志管理 事件中心 指标监控 存储挂载 服务绑定 手动弹性 回退历史 负载均衡 报警 诊断 组件管理 服务治理 … 权限 K8s Successfully applied components 新的复杂度-控制器运维 我们要管控大规模的集群,每个集群也会部署大量的控制器,控制器本身的运维成为问题 • 控制器管控平台 • 升级 • 回滚 • 灰度 • 重启 • 观测性 • Prometheus • 统一日志收集 • 事件中心 • 告警 • 能力管控 • 版本管理 • 依赖满足 • 健康检查 云原生PaaS平台的发展趋势 基础设施0 码力 | 23 页 | 7.70 MB | 1 年前3
 2.游戏战中陪伴助手微服务架构设计与应用计算逻辑复杂度 - 方案:Token 计算插件化 - 技术选型: - 对比:Lua vs Go 二进制——开发灵活 vs 性能 - 思考:Go 脚本? - 最终方案: - Go 脚本开发 - 二进制发布 我全都要 方案 耗时(冒泡排序) 耗时(斐波那契) Lua 脚本 94766 ns/op 4957 ns/op Go 脚本 23250 ns/op 27208 ns/op Go 二进制 - 上线前压测: - 预估 CPU:20,000+ 核,其中推荐系统接近 18,000 - 现象:网络流量极大 - 原因:流量中包含对局完整历史(Token 历史、推荐历史、……) 服务(某灰度下) 峰值 CPU 使用率 峰值 内存 峰值 CPU 核 峰值网络 I/O show_common 35~50% 10~12% 400+ 1.68 + 36.4 = 38.1 Gbps token 的测试条件 可测试性建设 代码重构或新 token 插件不能影响原有逻辑 自动化测试 - 基于已有的 CI / CD 流水线,加入 CT(持续测试)功能 - 自动化检查、告警、发布 批量对局重放 + token 差异比对输出 总结 & QA 第六部分 代码重构或新 token 插件不能影响原有逻辑 总结 Thank you all!0 码力 | 47 页 | 11.10 MB | 1 年前3 2.游戏战中陪伴助手微服务架构设计与应用计算逻辑复杂度 - 方案:Token 计算插件化 - 技术选型: - 对比:Lua vs Go 二进制——开发灵活 vs 性能 - 思考:Go 脚本? - 最终方案: - Go 脚本开发 - 二进制发布 我全都要 方案 耗时(冒泡排序) 耗时(斐波那契) Lua 脚本 94766 ns/op 4957 ns/op Go 脚本 23250 ns/op 27208 ns/op Go 二进制 - 上线前压测: - 预估 CPU:20,000+ 核,其中推荐系统接近 18,000 - 现象:网络流量极大 - 原因:流量中包含对局完整历史(Token 历史、推荐历史、……) 服务(某灰度下) 峰值 CPU 使用率 峰值 内存 峰值 CPU 核 峰值网络 I/O show_common 35~50% 10~12% 400+ 1.68 + 36.4 = 38.1 Gbps token 的测试条件 可测试性建设 代码重构或新 token 插件不能影响原有逻辑 自动化测试 - 基于已有的 CI / CD 流水线,加入 CT(持续测试)功能 - 自动化检查、告警、发布 批量对局重放 + token 差异比对输出 总结 & QA 第六部分 代码重构或新 token 插件不能影响原有逻辑 总结 Thank you all!0 码力 | 47 页 | 11.10 MB | 1 年前3
 2.2.5 Go 如何助力企业进行微服务转型pain! ⽤户 商品 订单 物流 接⼝聚类收敛 • 按功能聚类接⼝ • 避免微服务过微 • 避免调⽤链路过深 正确性验证 • 循序渐进可回滚 • fork请求,验证返回 • 灰度逐步迁移 • 监控有⽆漏⽹请求 • 保留回滚可能性 数据迁移 CI/CD • mono repo • gitlab + jenkins • ansible + supervisor0 码力 | 25 页 | 4.51 MB | 1 年前3 2.2.5 Go 如何助力企业进行微服务转型pain! ⽤户 商品 订单 物流 接⼝聚类收敛 • 按功能聚类接⼝ • 避免微服务过微 • 避免调⽤链路过深 正确性验证 • 循序渐进可回滚 • fork请求,验证返回 • 灰度逐步迁移 • 监控有⽆漏⽹请求 • 保留回滚可能性 数据迁移 CI/CD • mono repo • gitlab + jenkins • ansible + supervisor0 码力 | 25 页 | 4.51 MB | 1 年前3
 6.从 0 到 1 搭建十亿级包裹 API Versioning持对现有功能的支持,以防止影响已部署的应用程序或客户端。 只有做到对当前版本 API 不发布任何 breaking changes 才能向后兼容。 2.1 本质 实际上的 API Versioning 1. API 有版本概念 2. 同一个版本的每次 API 变更都能向后兼容 3. 不能向后兼容的发布只会发生在新版本中 2.2 实现效果 一个 Versioned 的 API,将提供多套稳定版 Version 3. Webhook Version 4. 公开文档 5. 系统架构 6. 版本维护 3.1 Support Policy 每新增一个版本都会带来额外的维护成本,所以版本发布频率高的企 业,版本支持时间较短;版本发布频率低的企业,版本支持时间较长。 企业应根据自身的业务特性选择合适的 Support Policy。 3.2 API version v1/v2/v3 这种数值类型的版本号,没有生命周期,无法约束废弃时间。以 Versioning 的本质是最大化解决向后兼容问题,已存在的 API 不会 出现向后不兼容的变更,不能向后兼容的功能只会在新版本中发布。 3. 根据我们业务迭代的速度,决定是按固定周期发布版本还是按需发布新 版本。比如我们平均每三个月发布一个新功能,可以考虑以 3 个月为周 期发布版本,每个版本保留 12 个月,那我们同时最多只需要维护 4 个版 本的 API。 4. 建议在应用层实现 Versio0 码力 | 28 页 | 2.26 MB | 1 年前3 6.从 0 到 1 搭建十亿级包裹 API Versioning持对现有功能的支持,以防止影响已部署的应用程序或客户端。 只有做到对当前版本 API 不发布任何 breaking changes 才能向后兼容。 2.1 本质 实际上的 API Versioning 1. API 有版本概念 2. 同一个版本的每次 API 变更都能向后兼容 3. 不能向后兼容的发布只会发生在新版本中 2.2 实现效果 一个 Versioned 的 API,将提供多套稳定版 Version 3. Webhook Version 4. 公开文档 5. 系统架构 6. 版本维护 3.1 Support Policy 每新增一个版本都会带来额外的维护成本,所以版本发布频率高的企 业,版本支持时间较短;版本发布频率低的企业,版本支持时间较长。 企业应根据自身的业务特性选择合适的 Support Policy。 3.2 API version v1/v2/v3 这种数值类型的版本号,没有生命周期,无法约束废弃时间。以 Versioning 的本质是最大化解决向后兼容问题,已存在的 API 不会 出现向后不兼容的变更,不能向后兼容的功能只会在新版本中发布。 3. 根据我们业务迭代的速度,决定是按固定周期发布版本还是按需发布新 版本。比如我们平均每三个月发布一个新功能,可以考虑以 3 个月为周 期发布版本,每个版本保留 12 个月,那我们同时最多只需要维护 4 个版 本的 API。 4. 建议在应用层实现 Versio0 码力 | 28 页 | 2.26 MB | 1 年前3
 GoFrame框架介绍及设计• 统一框架、统一组件、降低选择成本 • 开发规范、设计模式、代码分层模型 • 强大便捷的开发工具链 • 完善的本地中文化支持 • 设计为团队及企业使用 特点 框架介绍-框架架构 • 发布方式:Docker、二级制、源码模块 • 模块管理: • 核心模块、社区模块、三方模块 • Go Modules管理方式 • 开发工具链 • 设计模式:MVC、三层架构、工具集 • 应用接口:HTTP/TCP/UDP/RPC 软件进行模块化设计的目的, 是为了使得软件功能逻辑尽可能的解耦和复用, 终极目标也是为了保证软件开发维护的效率和质量。 模块化设计-复用原则 REP 发布等同原则 (Release/Reuse Equivalency Principle) 软件复用的最小粒度应等同于其发布的最小粒度。 CCP 共同闭包原则 (Common Closure Principle) 为了相同目的而同时修改的类,应该放在同一个模块中。 虽然框架每一个模块都按照低耦合设计,模块可以选择性引入,但在使用时也得全量下载完整框架代码。 源代码 编译 执行 目标代码 输出 打包发布 一次编译 多次执行 编译型语言: 发布文件往往很小 源代码 解释器 输出 每次执行都需要解释 打包发布 解释型语言: 发布文件往往较大 统一框架设计 第三部分 • 技术体系化 • 开发规范化 • 组件统一化 • 形成技术沉淀 • 避免资源浪费0 码力 | 37 页 | 8.84 MB | 1 年前3 GoFrame框架介绍及设计• 统一框架、统一组件、降低选择成本 • 开发规范、设计模式、代码分层模型 • 强大便捷的开发工具链 • 完善的本地中文化支持 • 设计为团队及企业使用 特点 框架介绍-框架架构 • 发布方式:Docker、二级制、源码模块 • 模块管理: • 核心模块、社区模块、三方模块 • Go Modules管理方式 • 开发工具链 • 设计模式:MVC、三层架构、工具集 • 应用接口:HTTP/TCP/UDP/RPC 软件进行模块化设计的目的, 是为了使得软件功能逻辑尽可能的解耦和复用, 终极目标也是为了保证软件开发维护的效率和质量。 模块化设计-复用原则 REP 发布等同原则 (Release/Reuse Equivalency Principle) 软件复用的最小粒度应等同于其发布的最小粒度。 CCP 共同闭包原则 (Common Closure Principle) 为了相同目的而同时修改的类,应该放在同一个模块中。 虽然框架每一个模块都按照低耦合设计,模块可以选择性引入,但在使用时也得全量下载完整框架代码。 源代码 编译 执行 目标代码 输出 打包发布 一次编译 多次执行 编译型语言: 发布文件往往很小 源代码 解释器 输出 每次执行都需要解释 打包发布 解释型语言: 发布文件往往较大 统一框架设计 第三部分 • 技术体系化 • 开发规范化 • 组件统一化 • 形成技术沉淀 • 避免资源浪费0 码力 | 37 页 | 8.84 MB | 1 年前3
 2.3 用golang写一个操作系统信⽤用结算 路由 消息通讯 ⽤用户数据 公共数据 授 权 担 保 验 证 浏 览 器 第三⽅方应⽤用 结果显⽰示 数据解析 ⽤用户操作 数据打包 应⽤用发布 应⽤用安装 应⽤用管理 数 据 库 系 统 接 ⼝口 邮 件 模 块 前 端 架 构 WEB Server RPC 邮件⼿手机接⼝口 ⽤用户信息 ⾃自 ⼰己 好 友 数据解析 ⽤用户操作 数据打包 底 层 ⺴⽹网 络 层 浏 览 器 查 找 维 护 Swarms 数 据 层 应 ⽤用 层 消息通讯 索引 数据 应⽤用发布 应⽤用安装 应⽤用管理 Swarms 查 找 维 护 MVC 架构 MVC 架构 同 步 同 步 Leither的技术架构 ü 它是⼀一个⽣生态 ü 它有⾃自⼰己的⽣生态成员 微博,有新浪微博的⼤大部分功能。 ⽤用户体验和传统的⺴⽹网⻚页浏览没太⼤大区别: 保存⼀一个⼩小⽂文件到桌⾯面,通过浏览器打开。 Leither-应⽤用演⽰示:微博 api 开发⽅方式 应⽤用发布 应⽤用的内部代码展⽰示 l ⼩小范围内测已过,架构的各体系基本完备,可⾏行性已经验证 l ⾃自建节点,⾃自建应⽤用,万⼈人规模左右的内测 现有的微博应⽤用,继续强化0 码力 | 33 页 | 1014.12 KB | 1 年前3 2.3 用golang写一个操作系统信⽤用结算 路由 消息通讯 ⽤用户数据 公共数据 授 权 担 保 验 证 浏 览 器 第三⽅方应⽤用 结果显⽰示 数据解析 ⽤用户操作 数据打包 应⽤用发布 应⽤用安装 应⽤用管理 数 据 库 系 统 接 ⼝口 邮 件 模 块 前 端 架 构 WEB Server RPC 邮件⼿手机接⼝口 ⽤用户信息 ⾃自 ⼰己 好 友 数据解析 ⽤用户操作 数据打包 底 层 ⺴⽹网 络 层 浏 览 器 查 找 维 护 Swarms 数 据 层 应 ⽤用 层 消息通讯 索引 数据 应⽤用发布 应⽤用安装 应⽤用管理 Swarms 查 找 维 护 MVC 架构 MVC 架构 同 步 同 步 Leither的技术架构 ü 它是⼀一个⽣生态 ü 它有⾃自⼰己的⽣生态成员 微博,有新浪微博的⼤大部分功能。 ⽤用户体验和传统的⺴⽹网⻚页浏览没太⼤大区别: 保存⼀一个⼩小⽂文件到桌⾯面,通过浏览器打开。 Leither-应⽤用演⽰示:微博 api 开发⽅方式 应⽤用发布 应⽤用的内部代码展⽰示 l ⼩小范围内测已过,架构的各体系基本完备,可⾏行性已经验证 l ⾃自建节点,⾃自建应⽤用,万⼈人规模左右的内测 现有的微博应⽤用,继续强化0 码力 | 33 页 | 1014.12 KB | 1 年前3
 基于amqp实现的golang消息队列MaxQ7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 19/22 发布订阅 DC数据变更发布和订阅 1.DRC将DC的数据变更记录发布至MaxQ 2.各业务系统订阅相关的数据变更,并进一步做业务处理 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.1680 码力 | 22 页 | 1.45 MB | 1 年前3 基于amqp实现的golang消息队列MaxQ7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 19/22 发布订阅 DC数据变更发布和订阅 1.DRC将DC的数据变更记录发布至MaxQ 2.各业务系统订阅相关的数据变更,并进一步做业务处理 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.1680 码力 | 22 页 | 1.45 MB | 1 年前3
 Go持续集成每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 2. 降低风险 3. 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历 1. 无单元测试,手工集成测试 部署过程依然没有完全自动化 简单 激情 速度快 聚焦 极致 可信赖 简单 激情 速度快 聚焦 极致 可信赖 持续…… 1.持续集成 Continuous Integration(CI) 2.持续发布 Continuous Delivery 3.持续部署 Continuous Deployment 简单 激情 速度快 聚焦 极致 可信赖 Continuous Integration (CI) stagging bot deploy app to 1.1.1.1,1.1.1.2 bot deploy:rollback app 简单 激情 速度快 聚焦 极致 可信赖 注意事项 1. 发布后的监控报警系统 2. 部署并行,串行 3. Github国内连接 4. 回滚 5. 多国机房的问题 简单 激情 速度快 聚焦 极致 可信赖 原有问题是如何被解决的 1. 迭代周期漫长0 码力 | 39 页 | 10.74 MB | 1 年前3 Go持续集成每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 2. 降低风险 3. 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历 1. 无单元测试,手工集成测试 部署过程依然没有完全自动化 简单 激情 速度快 聚焦 极致 可信赖 简单 激情 速度快 聚焦 极致 可信赖 持续…… 1.持续集成 Continuous Integration(CI) 2.持续发布 Continuous Delivery 3.持续部署 Continuous Deployment 简单 激情 速度快 聚焦 极致 可信赖 Continuous Integration (CI) stagging bot deploy app to 1.1.1.1,1.1.1.2 bot deploy:rollback app 简单 激情 速度快 聚焦 极致 可信赖 注意事项 1. 发布后的监控报警系统 2. 部署并行,串行 3. Github国内连接 4. 回滚 5. 多国机房的问题 简单 激情 速度快 聚焦 极致 可信赖 原有问题是如何被解决的 1. 迭代周期漫长0 码力 | 39 页 | 10.74 MB | 1 年前3
共 38 条
- 1
- 2
- 3
- 4














