 Go持续集成• 崔英杰 Go的持续集成 实践分享 简单 激情 速度快 聚焦 极致 可信赖 什么是持续集成 持续集成 是一种软件开发实践。在持续集 成中,团队成员频繁集成他们的工作成果, 一般每人每天至少集成一次,也可以多次。 每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历 1. 无单元测试,手工集成测试 2. 测试用例300多个,需要一个星期 3. 面对业务压力,规则形同虚设 4. 深夜事故 简单 激情 速度快 聚焦 极致 可信赖 原有开发体系的问题 1. 迭代周期漫长 2. 质量缺乏保障 2. 开发过程透明度无改善 3. 代码审核形同虚设 4. 部署过程依然没有完全自动化 简单 激情 速度快 聚焦 极致 可信赖 简单 激情 速度快 聚焦 极致 可信赖 持续…… 1.持续集成 Continuous Integration(CI) 2.持续发布 Continuous Delivery 3.持续部署 Continuous Deployment 简单 激情 速度快 聚焦0 码力 | 39 页 | 10.74 MB | 1 年前3 Go持续集成• 崔英杰 Go的持续集成 实践分享 简单 激情 速度快 聚焦 极致 可信赖 什么是持续集成 持续集成 是一种软件开发实践。在持续集 成中,团队成员频繁集成他们的工作成果, 一般每人每天至少集成一次,也可以多次。 每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历 1. 无单元测试,手工集成测试 2. 测试用例300多个,需要一个星期 3. 面对业务压力,规则形同虚设 4. 深夜事故 简单 激情 速度快 聚焦 极致 可信赖 原有开发体系的问题 1. 迭代周期漫长 2. 质量缺乏保障 2. 开发过程透明度无改善 3. 代码审核形同虚设 4. 部署过程依然没有完全自动化 简单 激情 速度快 聚焦 极致 可信赖 简单 激情 速度快 聚焦 极致 可信赖 持续…… 1.持续集成 Continuous Integration(CI) 2.持续发布 Continuous Delivery 3.持续部署 Continuous Deployment 简单 激情 速度快 聚焦0 码力 | 39 页 | 10.74 MB | 1 年前3
 IPC性能极致优化方案-RPAL落地实践IPC性能极致优化方案-RPAL落地实践 谢正尧 字节跳动 研发工程师 目 录 方案诞生的背景 01 全进程地址空间共享与保护 02 用户态进程切换 03 高效的Go Event Poller 04 RPC框架Kitex集成 05 性能收益与业务展望 06 方案诞生的背景 第一部分 方案诞生的背景 几种常见的同机通信场景: 1. 微服务合并部署(亲和性部署、sidecar 部署) 2. 本地基础组件:mesh 2. 是否有同步的 Go 函数调用方案? RPC 框架 Kitex 集成 第五部分 RPC 框架 Kitex 集成 指针读写抽象接口: 对象指针ACK RPC 框架 Kitex 集成 新增 Transport:绕过 Kernel 传递指针 重写 Codec:绕过序列化/反序列化 RPC 框架 Kitex 集成 传统 uds/tcp 读写 RPAL 读写 多次 syscall: syscall:epoll_wait/readv/writev 仅在必要时调用 wakep,全程无 syscall 无拷贝 RPC 框架 Kitex 集成 1. 一致的函数签名 2. 几乎一致的 IDL 定义 RPC 框架 Kitex 集成 使用深拷贝替代序列化/反序列化,两种方式: 1. 通过 RPC Method 进行类型断言(IDL 定义一致); 2. 传递类型信息构造 reflection cache0 码力 | 39 页 | 2.98 MB | 1 年前3 IPC性能极致优化方案-RPAL落地实践IPC性能极致优化方案-RPAL落地实践 谢正尧 字节跳动 研发工程师 目 录 方案诞生的背景 01 全进程地址空间共享与保护 02 用户态进程切换 03 高效的Go Event Poller 04 RPC框架Kitex集成 05 性能收益与业务展望 06 方案诞生的背景 第一部分 方案诞生的背景 几种常见的同机通信场景: 1. 微服务合并部署(亲和性部署、sidecar 部署) 2. 本地基础组件:mesh 2. 是否有同步的 Go 函数调用方案? RPC 框架 Kitex 集成 第五部分 RPC 框架 Kitex 集成 指针读写抽象接口: 对象指针ACK RPC 框架 Kitex 集成 新增 Transport:绕过 Kernel 传递指针 重写 Codec:绕过序列化/反序列化 RPC 框架 Kitex 集成 传统 uds/tcp 读写 RPAL 读写 多次 syscall: syscall:epoll_wait/readv/writev 仅在必要时调用 wakep,全程无 syscall 无拷贝 RPC 框架 Kitex 集成 1. 一致的函数签名 2. 几乎一致的 IDL 定义 RPC 框架 Kitex 集成 使用深拷贝替代序列化/反序列化,两种方式: 1. 通过 RPC Method 进行类型断言(IDL 定义一致); 2. 传递类型信息构造 reflection cache0 码力 | 39 页 | 2.98 MB | 1 年前3
 Go Web编程本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类 的都是通用的。 LiteIDE LiteIDE LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写。 18 图1.4 LiteIDE主界面 LiteIDE主要特点: LiteIDE主要特点: 支持主流操作系统 Windows Linux 路径 5. 恭喜你,安装完成,你现在可以使用:e main.go体验一下开发Go的乐趣。 Emacs Emacs Emacs传说中的神器,她不仅仅是一个编辑器,它是一个整合环境,或可称它为集成开发环境,这些功能如让使用者 置身于全功能的操作系统中。 图1.10 Emacs编辑Go主界面 1. 配置Emacs高亮显示 cp $GOROOT/misc/emacs/* ~/.emacs {{else}} else部分.{{end}}\n")) tIfElse.Execute(os.Stdout, nil) } 通过上面的演示代码我们知道if-else语法相当的简单,在使用过程中很容易集成到我们的模板代码中。 注意:if里面无法使用条件判断,例如.Mail=="astaxie@gmail.com",这样的判断是不正确的,if里面只能是bool 值 pipelines pipelines0 码力 | 295 页 | 5.91 MB | 1 年前3 Go Web编程本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类 的都是通用的。 LiteIDE LiteIDE LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写。 18 图1.4 LiteIDE主界面 LiteIDE主要特点: LiteIDE主要特点: 支持主流操作系统 Windows Linux 路径 5. 恭喜你,安装完成,你现在可以使用:e main.go体验一下开发Go的乐趣。 Emacs Emacs Emacs传说中的神器,她不仅仅是一个编辑器,它是一个整合环境,或可称它为集成开发环境,这些功能如让使用者 置身于全功能的操作系统中。 图1.10 Emacs编辑Go主界面 1. 配置Emacs高亮显示 cp $GOROOT/misc/emacs/* ~/.emacs {{else}} else部分.{{end}}\n")) tIfElse.Execute(os.Stdout, nil) } 通过上面的演示代码我们知道if-else语法相当的简单,在使用过程中很容易集成到我们的模板代码中。 注意:if里面无法使用条件判断,例如.Mail=="astaxie@gmail.com",这样的判断是不正确的,if里面只能是bool 值 pipelines pipelines0 码力 | 295 页 | 5.91 MB | 1 年前3
 Go 入门指南(The way to Go)Go 2.5 在 Windows 上安装 Go 2.6 安装目录清单 2.7 Go 运行时(runtime) 2.8 Go 解释器 第3章:编辑器、集成开发环境与其它工具 3.1 Go 开发环境的基本要求 3.2 编辑器和集成开发环境 3.3 调试器 3.4 构建并运行 Go 程序 3.5 格式化代码 3.6 生成代码文档 3.7 其它工具 3.8 Go 性能说明 3.9 Darwin) 目前有2个版本的编译器:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix 系统下工作 。其中,gc 版本的编译器已经被移植到 Windows 平台上,并集成在主要发行版中,你也可以通过安装 MinGW 从 而在 Windows 平台下使用 gcc 编译器。这两个编译器都是以单通道的形式工作。 你可以获取以下平台上的 Go 1.4 源码和二进制文件: com/sbinet/igo。 2.8 Go 解释器 2.8 Go 解释器 - 36 - 本文档使用 书栈(BookStack.CN) 构建 第3章:编辑器、集成开发环境与其它工具 因为 Go 语言还是一门相对年轻的编程语言,所以不管是在集成开发环境(IDE)还是相关的插件方面,发展都不是 很成熟。不过目前还是有一些 IDE 能够较好地支持 Go 的开发,有些开发工具甚至是跨平台的,你可以在 Linux、Mac0 码力 | 466 页 | 4.44 MB | 1 年前3 Go 入门指南(The way to Go)Go 2.5 在 Windows 上安装 Go 2.6 安装目录清单 2.7 Go 运行时(runtime) 2.8 Go 解释器 第3章:编辑器、集成开发环境与其它工具 3.1 Go 开发环境的基本要求 3.2 编辑器和集成开发环境 3.3 调试器 3.4 构建并运行 Go 程序 3.5 格式化代码 3.6 生成代码文档 3.7 其它工具 3.8 Go 性能说明 3.9 Darwin) 目前有2个版本的编译器:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix 系统下工作 。其中,gc 版本的编译器已经被移植到 Windows 平台上,并集成在主要发行版中,你也可以通过安装 MinGW 从 而在 Windows 平台下使用 gcc 编译器。这两个编译器都是以单通道的形式工作。 你可以获取以下平台上的 Go 1.4 源码和二进制文件: com/sbinet/igo。 2.8 Go 解释器 2.8 Go 解释器 - 36 - 本文档使用 书栈(BookStack.CN) 构建 第3章:编辑器、集成开发环境与其它工具 因为 Go 语言还是一门相对年轻的编程语言,所以不管是在集成开发环境(IDE)还是相关的插件方面,发展都不是 很成熟。不过目前还是有一些 IDE 能够较好地支持 Go 的开发,有些开发工具甚至是跨平台的,你可以在 Linux、Mac0 码力 | 466 页 | 4.44 MB | 1 年前3
 Go 入门指南(The way to Go)欢迎来到 Go 语言开发的奇妙世界! Go入门指南 - 3 - 本文档使用 看云 构建 第一部分:学习 Go 语言 第1章:Go 语言的起源,发展与普及 第2章:安装与运行环境 第3章:编辑器、集成开发环境与其它工具 第1章:Go 语言的起源,发展与普及 1.1 起源与发展 Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 Darwin) 目前有2个版本的编译器:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix 系统 下工作 。其中,gc 版本的编译器已经被移植到 Windows 平台上,并集成在主要发行版中,你也可以通 过安装 MinGW 从而在 Windows 平台下使用 gcc 编译器。这两个编译器都是以单通道的形式工作。 你可以获取以下平台上的 Go 1.4 源码和二进制文件: Binet 已经使用这种环境实现了一个 Go 解释器,你可以在这个 页面找到:https://github.com/sbinet/igo。 第3章:编辑器、集成开发环境与其它工具 因为 Go 语言还是一门相对年轻的编程语言,所以不管是在集成开发环境(IDE)还是相关的插件方面,发 展都不是很成熟。不过目前还是有一些 IDE 能够较好地支持 Go 的开发,有些开发工具甚至是跨平台的, 你可以在0 码力 | 380 页 | 2.97 MB | 1 年前3 Go 入门指南(The way to Go)欢迎来到 Go 语言开发的奇妙世界! Go入门指南 - 3 - 本文档使用 看云 构建 第一部分:学习 Go 语言 第1章:Go 语言的起源,发展与普及 第2章:安装与运行环境 第3章:编辑器、集成开发环境与其它工具 第1章:Go 语言的起源,发展与普及 1.1 起源与发展 Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 Darwin) 目前有2个版本的编译器:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix 系统 下工作 。其中,gc 版本的编译器已经被移植到 Windows 平台上,并集成在主要发行版中,你也可以通 过安装 MinGW 从而在 Windows 平台下使用 gcc 编译器。这两个编译器都是以单通道的形式工作。 你可以获取以下平台上的 Go 1.4 源码和二进制文件: Binet 已经使用这种环境实现了一个 Go 解释器,你可以在这个 页面找到:https://github.com/sbinet/igo。 第3章:编辑器、集成开发环境与其它工具 因为 Go 语言还是一门相对年轻的编程语言,所以不管是在集成开发环境(IDE)还是相关的插件方面,发 展都不是很成熟。不过目前还是有一些 IDE 能够较好地支持 Go 的开发,有些开发工具甚至是跨平台的, 你可以在0 码力 | 380 页 | 2.97 MB | 1 年前3
 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台⾃定义告警 APM 微服务管理 资源管理 标签管理 系统监控 集群管理 服务⽬录 埋点 数据库 ⽇志 画像 标签 报表 推荐 … 代码管理 持续集成 编排部署 应⽤运维 测试管理 协同管理 数据源管理 数据集成 数据开发 数据资产 数据服务 数据应⽤ 资源统计 运维报告 审计⽇志 K8S 管理 数据监控 多云管理平台 MySQL Redis Kafka ⽀持运⾏时插件,允许⽤户以 服务的⽅式拦截系统接⼝ - ⽀持UI的运⾏时扩展 开源新时代的挑战 第五部分 打造围绕开源的开发流程 - GitFlow or Github Flow - 基于 pr 的持续集成 - 打破需求、开发和测试的边界 简化平台的上⼿难度 - 解耦对中间件的强依赖 - 平台应⽤可独⽴安装和部署 - 像搭积⽊⼀样拼装系统 云端和本地⼀致的开发体验 - 本地⽆需启动完整的环境0 码力 | 40 页 | 8.60 MB | 1 年前3 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台⾃定义告警 APM 微服务管理 资源管理 标签管理 系统监控 集群管理 服务⽬录 埋点 数据库 ⽇志 画像 标签 报表 推荐 … 代码管理 持续集成 编排部署 应⽤运维 测试管理 协同管理 数据源管理 数据集成 数据开发 数据资产 数据服务 数据应⽤ 资源统计 运维报告 审计⽇志 K8S 管理 数据监控 多云管理平台 MySQL Redis Kafka ⽀持运⾏时插件,允许⽤户以 服务的⽅式拦截系统接⼝ - ⽀持UI的运⾏时扩展 开源新时代的挑战 第五部分 打造围绕开源的开发流程 - GitFlow or Github Flow - 基于 pr 的持续集成 - 打破需求、开发和测试的边界 简化平台的上⼿难度 - 解耦对中间件的强依赖 - 平台应⽤可独⽴安装和部署 - 像搭积⽊⼀样拼装系统 云端和本地⼀致的开发体验 - 本地⽆需启动完整的环境0 码力 | 40 页 | 8.60 MB | 1 年前3
 2.2.5 Go 如何助力企业进行微服务转型• ⼩改动也得全量更新 • ⼩问题容易触发⼤故障 • 能够⽀撑的业务规模有限 微服务的优点 • 边界清晰的业务拆分 • 易开发、易理解、易维护 • 技术栈可相对独⽴ • 持续集成、持续部署更容易 • 按需对服务进⾏治理 • 稳定性更容易保障 微服务的缺点 • 增加了系统复杂度 • 数据拆分复杂度 • 难调试、难测试 • 跨服务修改麻烦 • 部署复杂 不增加成本并为业务发展留下扩展空间 单体到微服务何时转? 什么信号标明该考虑转换了? • 单体系统已过度复杂 - 体感 • 当前架构已不能满⾜业务发展需要 • 研发效率降低 • 持续集成、持续交付⽐较困难 • 团队⼈员已经⽐较多了 单体到微服务怎么转? 如何启动? • 最重要的是决⼼ • 充分调研必要性 • 技术选型 • 充分调研可⾏性 • 争取公司或者部⻔领导的⽀持0 码力 | 25 页 | 4.51 MB | 1 年前3 2.2.5 Go 如何助力企业进行微服务转型• ⼩改动也得全量更新 • ⼩问题容易触发⼤故障 • 能够⽀撑的业务规模有限 微服务的优点 • 边界清晰的业务拆分 • 易开发、易理解、易维护 • 技术栈可相对独⽴ • 持续集成、持续部署更容易 • 按需对服务进⾏治理 • 稳定性更容易保障 微服务的缺点 • 增加了系统复杂度 • 数据拆分复杂度 • 难调试、难测试 • 跨服务修改麻烦 • 部署复杂 不增加成本并为业务发展留下扩展空间 单体到微服务何时转? 什么信号标明该考虑转换了? • 单体系统已过度复杂 - 体感 • 当前架构已不能满⾜业务发展需要 • 研发效率降低 • 持续集成、持续交付⽐较困难 • 团队⼈员已经⽐较多了 单体到微服务怎么转? 如何启动? • 最重要的是决⼼ • 充分调研必要性 • 技术选型 • 充分调研可⾏性 • 争取公司或者部⻔领导的⽀持0 码力 | 25 页 | 4.51 MB | 1 年前3
 Golang 微服务在腾讯游戏用户运营领域的探索及实践生态趋势 数据中间件——指标服务 Golang 高性能 高可用 扩展性 安全性 可运营性 业务发展驱动技术演进 服务网关 过载保护 流控降级 SET部署 立体监控 敏捷集成 微服务探索 跨部门 异构系统 非标接口 托管接入 业务隔离 解析适配 IDL • 标准接口 • 字段约定 Script 转码逻辑 • 非标接口 • 逻辑编码 问题 手段 线 运营自助 • 策略嵌套、一键复制 流程复用 • 自动Mock、分支覆盖 自动测试 • 流程固化,沉淀运营模型 模型沉淀 基准数据 基准数据 总结及展望 总结及展望 服务网关 快速集成 服务编排 流程沉淀 执行单元 并发并行 技术驱动 业务优化 微服务 敏捷迭代0 码力 | 34 页 | 1.22 MB | 1 年前3 Golang 微服务在腾讯游戏用户运营领域的探索及实践生态趋势 数据中间件——指标服务 Golang 高性能 高可用 扩展性 安全性 可运营性 业务发展驱动技术演进 服务网关 过载保护 流控降级 SET部署 立体监控 敏捷集成 微服务探索 跨部门 异构系统 非标接口 托管接入 业务隔离 解析适配 IDL • 标准接口 • 字段约定 Script 转码逻辑 • 非标接口 • 逻辑编码 问题 手段 线 运营自助 • 策略嵌套、一键复制 流程复用 • 自动Mock、分支覆盖 自动测试 • 流程固化,沉淀运营模型 模型沉淀 基准数据 基准数据 总结及展望 总结及展望 服务网关 快速集成 服务编排 流程沉淀 执行单元 并发并行 技术驱动 业务优化 微服务 敏捷迭代0 码力 | 34 页 | 1.22 MB | 1 年前3
 6.从 0 到 1 搭建十亿级包裹 API Versioning海外。 - 自动化 - 通过 API,企业可以利用 SaaS 产品的功能来构建自动 化流程和工作流程。 - 定制化 - 通过 API,企业可以开发自己的应用程序、插件或集成 其他工具,以满足特定的业务需求。 - 数据集成 - 通过 API,企业可以灵活地与 SaaS 提供商实现数据 的共享和交换。 1.2.1 标准与规范 RESTful - Request - Response -0 码力 | 28 页 | 2.26 MB | 1 年前3 6.从 0 到 1 搭建十亿级包裹 API Versioning海外。 - 自动化 - 通过 API,企业可以利用 SaaS 产品的功能来构建自动 化流程和工作流程。 - 定制化 - 通过 API,企业可以开发自己的应用程序、插件或集成 其他工具,以满足特定的业务需求。 - 数据集成 - 通过 API,企业可以灵活地与 SaaS 提供商实现数据 的共享和交换。 1.2.1 标准与规范 RESTful - Request - Response -0 码力 | 28 页 | 2.26 MB | 1 年前3
 1.5 Go 语言构建高并发分布式系统实践具有go语⾔言特⾊色的运维 Æ ⼯工具 -> ⽣生成项⺫⽬目公共⽂文件夹下的.go 配置⽂文件 Æ 客户端sdk -> keeper通信 告知⾝身份-> 原⼦子性的换掉全局配置⽂文件 Æ 客户端sdk->集成profiling功能-> keeper调⽤用并存储 Æ 客户端sdk-> ⾃自定义信息(通信库信息) -> keeper调⽤用并存储 Æ keeper本地保持所有客户端状态信息,按时间和需求获取其他富信息, go语⾔言原⽣生提供的各组⼯工具,构建分布式系统配套设施⽅方⾯面,提供了便利 ⽣生态圈 = 测试 + 调优 + 监控 + 运维 便利 = 原⽣生profiling⼯工具 + 通信库集成监控+协程协作模拟业务压测 谢 谢 ! 北京奇虎科技有限公司0 码力 | 39 页 | 5.23 MB | 1 年前3 1.5 Go 语言构建高并发分布式系统实践具有go语⾔言特⾊色的运维 Æ ⼯工具 -> ⽣生成项⺫⽬目公共⽂文件夹下的.go 配置⽂文件 Æ 客户端sdk -> keeper通信 告知⾝身份-> 原⼦子性的换掉全局配置⽂文件 Æ 客户端sdk->集成profiling功能-> keeper调⽤用并存储 Æ 客户端sdk-> ⾃自定义信息(通信库信息) -> keeper调⽤用并存储 Æ keeper本地保持所有客户端状态信息,按时间和需求获取其他富信息, go语⾔言原⽣生提供的各组⼯工具,构建分布式系统配套设施⽅方⾯面,提供了便利 ⽣生态圈 = 测试 + 调优 + 监控 + 运维 便利 = 原⽣生profiling⼯工具 + 通信库集成监控+协程协作模拟业务压测 谢 谢 ! 北京奇虎科技有限公司0 码力 | 39 页 | 5.23 MB | 1 年前3
共 24 条
- 1
- 2
- 3













