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
2.1.1 Golang主动式内存缓存的优化探索之路Golang主动式内存缓存的优化探索之路 安晏伯 学而思网校 技术专家 目 录 问题引入 01 难点攻克 02 主动式内存缓存框架 03 总结 04 问题引入 第一部分 为什么能有极致的性能? 01. 如何优化? 解决了哪些技术难题? 主动式内存缓存 如何优化? 极致的性能 除了网络IO,与Redis有什么区别? 复杂的查询怎么办? 02. 传统的Cache很难 • 复杂的查询场景,内存数据如何高效组织? • 主动式内存缓存,如何保证数据实时性? • 数据太多,内存不够用,如何进行存储扩展? 通过本次分享,可以带来哪些收获? 难点攻克 第二部分 使用内存缓存 数据一致性如何保证? 一致性 01. 缓存如何保证更新,如何与数据库同步 同步、更新 被动方式 缓存过期 定期同步 主动方式 监听数据变化 数据加载,更新 热数据的交换 冷 热 新 系 统 历 史 数 据 冷数据、数据量多 缓存成本大、命中低、收益小 热 数 据 当前系统中的热点数据 命中率高 系 统 新 增 数 据 近期新增数据,较大概率命中 存储空间 缓存性能 冷热可交换,引擎可扩展 06. 冷热数据交换,通过栈式缓存结构,实现多级缓存策略 语言的局限性 07. 基于golang语言,内存对象超过百万量级后出现的GC耗时问题0 码力 | 48 页 | 6.06 MB | 1 年前3
2.2 龚浩华(月牙寂)p2p缓存系统 基于Golang的Aop设计模式LOGO p2p缓存系统 基于Golang的Aop设计模式 龚浩华 QQ 29185807 月牙寂 背景 v Web缓存(类似CDN技术) § 网页、图片 § 普通下载 § 普通视频 v P2P缓存 § 下载(bt等) § 视频(qvod、百度影音等) 背景 v P2P缓存好处 § 一次获取,多次利用 § 减少局域网出网流量 减少局域网出网流量 § 提升用户体验 背景 v P2P缓存服务器(基于c++开发) § 代码量大 § 协议数量多 § 耦合性高 § 潜在bug多 重构 or 重新推倒? 背景 现实世界是怎么样的 分布式、并发 职能化、松散化 自组织、智能化 程序框架是否也可以这样? OOP v C++对象代码运行 仍然存在不确定性 现实世界的设计模式直接可以拿来借鉴 P2P缓存框架 P2P缓存框架 1、入口监听模块 常驻 功能监听识别连接 2、任务管理模块 常驻 管理任务、分流client P2P缓存框架 3、任务模块 文件缓存度:是否需要下载 文件热点程度:是否热点0 码力 | 29 页 | 338.20 KB | 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 和追踪 6.5 内置函数 6.6 递归函数 6.7 将函数作为参数 6.8 闭包 6.9 应用闭包:将函数作为返回值 6.10 使用闭包调试 6.11 计算函数执行时间 6.12 通过内存缓存来提升性能 第7章:数组与切片 7.1 声明和初始化 7.2 切片 7.3 For-range 结构 7.4 切片重组(reslice) 7.5 切片的复制与追加 7.6 字符串、数组和切片的应用 Darwin) 目前有2个版本的编译器:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix 系统下工作 。其中,gc 版本的编译器已经被移植到 Windows 平台上,并集成在主要发行版中,你也可以通过安装 MinGW 从 而在 Windows 平台下使用 gcc 编译器。这两个编译器都是以单通道的形式工作。 你可以获取以下平台上的 Go 1.4 源码和二进制文件:0 码力 | 466 页 | 4.44 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 次,任何发送(ch<-5)将会被阻塞,直到数据被读出。无缓冲channel是在多个goroutine之间同步很棒的工具。 Buffered Channels Buffered Channels 上面我们介绍了默认的非缓存类型的channel,不过Go也允许指定channel的缓冲大小,很简单,就是channel可以存 储多少元素。ch:= make(chan bool, 4),创建了可以存储4个元素的bool 型channel。在这个channel0 码力 | 295 页 | 5.91 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
Golang 微服务在腾讯游戏用户运营领域的探索及实践生态趋势 数据中间件——指标服务 Golang 高性能 高可用 扩展性 安全性 可运营性 业务发展驱动技术演进 服务网关 过载保护 流控降级 SET部署 立体监控 敏捷集成 微服务探索 跨部门 异构系统 非标接口 托管接入 业务隔离 解析适配 IDL • 标准接口 • 字段约定 Script 转码逻辑 • 非标接口 • 逻辑编码 问题 手段 Redis、令牌桶 流控 • 轻重分离、单元化部署、容错 降级 • 实时上报、缓存汇聚/本地文件、ELK 日志监控告警 • Bind Golang to Lua 运行时类库 并发模型 异步Async 批量Batch 多核并行Parallel Lua协程绑定Go程 IO阻塞自动切换 高可用 负载均衡 寻址 限流 缓存 降级 SLA保证 并行执行单元 消息总线 屏蔽本地网络差异 线 运营自助 • 策略嵌套、一键复制 流程复用 • 自动Mock、分支覆盖 自动测试 • 流程固化,沉淀运营模型 模型沉淀 基准数据 基准数据 总结及展望 总结及展望 服务网关 快速集成 服务编排 流程沉淀 执行单元 并发并行 技术驱动 业务优化 微服务 敏捷迭代0 码力 | 34 页 | 1.22 MB | 1 年前3
Hello 算法 1.1.0 Go版3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.5 小结 . . . . . 序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲 优化数据结构的操作效率。 ‧ 空间效率高:数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问:数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下局限性。 ‧ 插入与删除效率低:当数组中元素较多时,插入与删除操作需要移动大量的元素。0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.5 小结 . . . . . ,程序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 � 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉 及地址空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结 构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲 优化数据结构的操作效率。 ‧ 空间效率高:数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问:数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下局限性。 ‧ 插入与删除效率低:当数组中元素较多时,插入与删除操作需要移动大量的元素。0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.5 小结 . . . . . 序便可以访问内存中的数据。 图 3‑2 内存条、内存空间、内存地址 Tip 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及地址 空间、内存管理、缓存机制、虚拟内存和物理内存等概念。 内存是所有程序的共享资源,当某块内存被某个程序占用时,则通常无法被其他程序同时使用了。因此在数 据结构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余 优化数据结构的操作效率。 ‧ 空间效率高:数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问:数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下局限性。 ‧ 插入与删除效率低:当数组中元素较多时,插入与删除操作需要移动大量的元素。0 码力 | 384 页 | 18.49 MB | 10 月前3
共 46 条
- 1
- 2
- 3
- 4
- 5













