 Go持续集成• 崔英杰 Go的持续集成 实践分享 简单 激情 速度快 聚焦 极致 可信赖 什么是持续集成 持续集成 是一种软件开发实践。在持续集 成中,团队成员频繁集成他们的工作成果, 一般每人每天至少集成一次,也可以多次。 每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 快速发现修复错误 2. 降低风险 3. 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历 1. 无单元测试,手工集成测试 2. 测试用例300多个,需要一个星期 3. 面对业务压力,规则形同虚设 4. 深夜事故 简单 激情 速度快 聚焦 极致 可信赖 原有开发体系的问题 代码审核形同虚设 4. 部署过程依然没有完全自动化 简单 激情 速度快 聚焦 极致 可信赖 简单 激情 速度快 聚焦 极致 可信赖 持续…… 1.持续集成 Continuous Integration(CI) 2.持续发布 Continuous Delivery 3.持续部署 Continuous Deployment 简单 激情 速度快 聚焦 极致 可信赖 Continuous Integration0 码力 | 39 页 | 10.74 MB | 1 年前3 Go持续集成• 崔英杰 Go的持续集成 实践分享 简单 激情 速度快 聚焦 极致 可信赖 什么是持续集成 持续集成 是一种软件开发实践。在持续集 成中,团队成员频繁集成他们的工作成果, 一般每人每天至少集成一次,也可以多次。 每次集成会经过自动构建(包括自动测试) 的 检验,以尽快发现集成错误。 — Martin Fowler 简单 激情 速度快 聚焦 极致 可信赖 持续集成的好处 1. 快速发现修复错误 快速发现修复错误 2. 降低风险 3. 持续发布 4. 减少代码审核时间 5. 减少对个体依赖 简单 激情 速度快 聚焦 极致 可信赖 石器时代 简单 激情 速度快 聚焦 极致 可信赖 分享惨案经历 1. 无单元测试,手工集成测试 2. 测试用例300多个,需要一个星期 3. 面对业务压力,规则形同虚设 4. 深夜事故 简单 激情 速度快 聚焦 极致 可信赖 原有开发体系的问题 代码审核形同虚设 4. 部署过程依然没有完全自动化 简单 激情 速度快 聚焦 极致 可信赖 简单 激情 速度快 聚焦 极致 可信赖 持续…… 1.持续集成 Continuous Integration(CI) 2.持续发布 Continuous Delivery 3.持续部署 Continuous Deployment 简单 激情 速度快 聚焦 极致 可信赖 Continuous Integration0 码力 | 39 页 | 10.74 MB | 1 年前3
 1.8 Go 在持续交付中的实践0 码力 | 33 页 | 7.85 MB | 1 年前3 1.8 Go 在持续交付中的实践0 码力 | 33 页 | 7.85 MB | 1 年前3
 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台配置即代码 : 实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 APM 监控:应⽤诊断,链路追踪,⽇志分析 微服务治理组件 可靠的业务 贴身护航 基础⽀撑 持续保障系统稳定性 只需很少的运维投⼊即可保证系统稳定性 端点⼀站式 PaaS - Erda 第⼆部分 端点 PaaS 发展历程 有状态服务 Job / JobFlow 批计算 流计算 ⾃定义告警 APM 微服务管理 资源管理 标签管理 系统监控 集群管理 服务⽬录 埋点 数据库 ⽇志 画像 标签 报表 推荐 … 代码管理 持续集成 编排部署 应⽤运维 测试管理 协同管理 数据源管理 数据集成 数据开发 数据资产 数据服务 数据应⽤ 资源统计 运维报告 审计⽇志 K8S 管理 数据监控 多云管理平台 MySQL Redis Kafka ⽀持运⾏时插件,允许⽤户以 服务的⽅式拦截系统接⼝ - ⽀持UI的运⾏时扩展 开源新时代的挑战 第五部分 打造围绕开源的开发流程 - GitFlow or Github Flow - 基于 pr 的持续集成 - 打破需求、开发和测试的边界 简化平台的上⼿难度 - 解耦对中间件的强依赖 - 平台应⽤可独⽴安装和部署 - 像搭积⽊⼀样拼装系统 云端和本地⼀致的开发体验 - 本地⽆需启动完整的环境0 码力 | 40 页 | 8.60 MB | 1 年前3 1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台配置即代码 : 实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 APM 监控:应⽤诊断,链路追踪,⽇志分析 微服务治理组件 可靠的业务 贴身护航 基础⽀撑 持续保障系统稳定性 只需很少的运维投⼊即可保证系统稳定性 端点⼀站式 PaaS - Erda 第⼆部分 端点 PaaS 发展历程 有状态服务 Job / JobFlow 批计算 流计算 ⾃定义告警 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
 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 HTTP协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对HTTP服务器来说,它并不知道这两个 请求是否来自同一个客户端。为了解决这个问题, Web程序引入了Cookie机制来维护连接的可持续状态。 HTTP协议是建立在TCP协议之上的,因此TCP攻击一样会影响HTTP的通讯,例如比较常见的一些攻击:SYN Flood是当 前最流行的DoS(拒绝服务攻击)与DdoS(分布式拒绝服务攻0 码力 | 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 HTTP协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对HTTP服务器来说,它并不知道这两个 请求是否来自同一个客户端。为了解决这个问题, Web程序引入了Cookie机制来维护连接的可持续状态。 HTTP协议是建立在TCP协议之上的,因此TCP攻击一样会影响HTTP的通讯,例如比较常见的一些攻击:SYN Flood是当 前最流行的DoS(拒绝服务攻击)与DdoS(分布式拒绝服务攻0 码力 | 295 页 | 5.91 MB | 1 年前3
 1.6 resource scheduling & container technology for financial service_yujun实现了(人工)可干预的分配机制(阈值)。  ④ 通过权重比对利用率优先,容量优先和可用性优先进行 调控。  ⑤ 具体实现采用较为独立的模块方式,方便将来开源后被 第三方使用,定制和集成。  ⑥ 面向金融行业应用场景,进行持续的演进和调整。  Gopher  China  2015  我们在围绕Container技术正在做一些面向金融行业场景的 严肃而”有趣”的东西  雏形和明天0 码力 | 21 页 | 27.20 MB | 1 年前3 1.6 resource scheduling & container technology for financial service_yujun实现了(人工)可干预的分配机制(阈值)。  ④ 通过权重比对利用率优先,容量优先和可用性优先进行 调控。  ⑤ 具体实现采用较为独立的模块方式,方便将来开源后被 第三方使用,定制和集成。  ⑥ 面向金融行业应用场景,进行持续的演进和调整。  Gopher  China  2015  我们在围绕Container技术正在做一些面向金融行业场景的 严肃而”有趣”的东西  雏形和明天0 码力 | 21 页 | 27.20 MB | 1 年前3
 3.云原生边云协同AI框架实践器、云服务器,利用分布式乃至分布式协同方式实现人工智能的技术 数据在边缘产生 边侧逐步具备AI能力 分布式协同AI 核心驱动力 分布式协同AI核心驱动力 • 随着边侧算力逐步强化,边缘AI持续演变至分布式协同AI 分布式协同AI技术挑战 1. 边缘资源碎片化 2. 边缘数据孤岛 3. 边缘样本少 4. 边缘数据异构 分布式协同AI 技术挑战 边云协同AI框架 第二部分 首个分布式协同AI开源项目Sedna Evaluation Sedna Incremental-Learning Service API ③ APP运行,识别难例,上传到云上标注服务中 ① 业务APP开发者:开发时使用边云AI Lib库, 集成边云协同增量学习功能 ② 部署业务APP,启动增量学习 ④ 人工定期介入,对样本进行标注。 ⑤ 系统基于任务知识库,自动增量训练产生新模型 ⑥ 更新边缘模型 边云协同增量学习: 小样本和非同分布下,模型越用越聪明0 码力 | 37 页 | 2.36 MB | 1 年前3 3.云原生边云协同AI框架实践器、云服务器,利用分布式乃至分布式协同方式实现人工智能的技术 数据在边缘产生 边侧逐步具备AI能力 分布式协同AI 核心驱动力 分布式协同AI核心驱动力 • 随着边侧算力逐步强化,边缘AI持续演变至分布式协同AI 分布式协同AI技术挑战 1. 边缘资源碎片化 2. 边缘数据孤岛 3. 边缘样本少 4. 边缘数据异构 分布式协同AI 技术挑战 边云协同AI框架 第二部分 首个分布式协同AI开源项目Sedna Evaluation Sedna Incremental-Learning Service API ③ APP运行,识别难例,上传到云上标注服务中 ① 业务APP开发者:开发时使用边云AI Lib库, 集成边云协同增量学习功能 ② 部署业务APP,启动增量学习 ④ 人工定期介入,对样本进行标注。 ⑤ 系统基于任务知识库,自动增量训练产生新模型 ⑥ 更新边缘模型 边云协同增量学习: 小样本和非同分布下,模型越用越聪明0 码力 | 37 页 | 2.36 MB | 1 年前3
 Hello 算法 1.1.0 Go版和 E. M. Landis 在 论 文 “An algorithm for the organization of information”中提出了 AVL 树。论文中详细描述了一系列操作,确保在持续添加和删除节点后,AVL 树不 会退化,从而使得各种操作的时间复杂度保持在 ?(log ?) 级别。换句话说,在需要频繁进行增删查改操作 的场景中,AVL 树能始终保持高效的数据操作性能,具有很好的应用价值。 ) 。该方法的效率很高,当 ? 较小时,时间复杂度趋向 ?(?) ;当 ? 较大时,时间复杂度不会超过 ?(? log ?) 。 另外,该方法适用于动态数据流的使用场景。在不断加入数据时,我们可以持续维护堆内的元素,从而实现 最大的 ? 个元素的动态更新。 8.4 小结 1. 重点回顾 ‧ 堆是一棵完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素是最大(小)的。 ‧ 不适合数据量过大的情况,因为哈希表需要额外空间来最大程度地减少冲突,从而提供良好的查询性 能。 树查找 ‧ 适用于海量数据,因为树节点在内存中是分散存储的。 ‧ 适合需要维护有序数据或范围查找的场景。 ‧ 在持续增删节点的过程中,二叉搜索树可能产生倾斜,时间复杂度劣化至 ?(?) 。 ‧ 若使用 AVL 树或红黑树,则各项操作可在 ?(log ?) 效率下稳定运行,但维护树平衡的操作会增加额 外的开销。0 码力 | 383 页 | 18.48 MB | 1 年前3 Hello 算法 1.1.0 Go版和 E. M. Landis 在 论 文 “An algorithm for the organization of information”中提出了 AVL 树。论文中详细描述了一系列操作,确保在持续添加和删除节点后,AVL 树不 会退化,从而使得各种操作的时间复杂度保持在 ?(log ?) 级别。换句话说,在需要频繁进行增删查改操作 的场景中,AVL 树能始终保持高效的数据操作性能,具有很好的应用价值。 ) 。该方法的效率很高,当 ? 较小时,时间复杂度趋向 ?(?) ;当 ? 较大时,时间复杂度不会超过 ?(? log ?) 。 另外,该方法适用于动态数据流的使用场景。在不断加入数据时,我们可以持续维护堆内的元素,从而实现 最大的 ? 个元素的动态更新。 8.4 小结 1. 重点回顾 ‧ 堆是一棵完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素是最大(小)的。 ‧ 不适合数据量过大的情况,因为哈希表需要额外空间来最大程度地减少冲突,从而提供良好的查询性 能。 树查找 ‧ 适用于海量数据,因为树节点在内存中是分散存储的。 ‧ 适合需要维护有序数据或范围查找的场景。 ‧ 在持续增删节点的过程中,二叉搜索树可能产生倾斜,时间复杂度劣化至 ?(?) 。 ‧ 若使用 AVL 树或红黑树,则各项操作可在 ?(log ?) 效率下稳定运行,但维护树平衡的操作会增加额 外的开销。0 码力 | 383 页 | 18.48 MB | 1 年前3
 Hello 算法 1.0.0 Golang版E. M. Landis 在 论 文 “An algorithm for the organization of information”中提出了「AVL 树」。论文中详细描述了一系列操作,确保在持续添加和删除节点后,AVL 树 不会退化,从而使得各种操作的时间复杂度保持在 ?(log ?) 级别。换句话说,在需要频繁进行增删查改操 作的场景中,AVL 树能始终保持高效的数据操作性能,具有很好的应用价值。 ) 。该方法的效率很高,当 ? 较小时,时间复杂度趋向 ?(?) ;当 ? 较大时,时间复杂度不会超过 ?(? log ?) 。 另外,该方法适用于动态数据流的使用场景。在不断加入数据时,我们可以持续维护堆内的元素,从而实现 最大的 ? 个元素的动态更新。 8.4 小结 1. 重点回顾 ‧ 堆是一棵完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素是最大(小)的。 ‧ 不适合数据量过大的情况,因为哈希表需要额外空间来最大程度地减少冲突,从而提供良好的查询性 能。 树查找 ‧ 适用于海量数据,因为树节点在内存中是分散存储的。 ‧ 适合需要维护有序数据或范围查找的场景。 ‧ 在持续增删节点的过程中,二叉搜索树可能产生倾斜,时间复杂度劣化至 ?(?) 。 ‧ 若使用 AVL 树或红黑树,则各项操作可在 ?(log ?) 效率下稳定运行,但维护树平衡的操作会增加额 外的开销。0 码力 | 382 页 | 17.60 MB | 1 年前3 Hello 算法 1.0.0 Golang版E. M. Landis 在 论 文 “An algorithm for the organization of information”中提出了「AVL 树」。论文中详细描述了一系列操作,确保在持续添加和删除节点后,AVL 树 不会退化,从而使得各种操作的时间复杂度保持在 ?(log ?) 级别。换句话说,在需要频繁进行增删查改操 作的场景中,AVL 树能始终保持高效的数据操作性能,具有很好的应用价值。 ) 。该方法的效率很高,当 ? 较小时,时间复杂度趋向 ?(?) ;当 ? 较大时,时间复杂度不会超过 ?(? log ?) 。 另外,该方法适用于动态数据流的使用场景。在不断加入数据时,我们可以持续维护堆内的元素,从而实现 最大的 ? 个元素的动态更新。 8.4 小结 1. 重点回顾 ‧ 堆是一棵完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素是最大(小)的。 ‧ 不适合数据量过大的情况,因为哈希表需要额外空间来最大程度地减少冲突,从而提供良好的查询性 能。 树查找 ‧ 适用于海量数据,因为树节点在内存中是分散存储的。 ‧ 适合需要维护有序数据或范围查找的场景。 ‧ 在持续增删节点的过程中,二叉搜索树可能产生倾斜,时间复杂度劣化至 ?(?) 。 ‧ 若使用 AVL 树或红黑树,则各项操作可在 ?(log ?) 效率下稳定运行,但维护树平衡的操作会增加额 外的开销。0 码力 | 382 页 | 17.60 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
共 34 条
- 1
- 2
- 3
- 4













