Go性能优化概览-曹春晖
业务性能优化概览 By Xargin 《Go 语⾔⾼级编程》合著者 Go contributor ⽬ 录 优化的前置知识 01 ⽣产环境的优化 02 Continuous profiling 03 优化的前置知识 第⼀部分 Latency numbers every programmer should know https://colin-scott.github.io/p go#L930 内存占⽤过⾼-堆分配导致内存过⾼ https://github.com/golang/go/pull/42036#issuecomment-715046540 怎么样说服官⽅接受性能优化的 PR 内存占⽤过⾼-goroutine 数量太多导致内存占⽤⾼ 这些内存的构成部分: 1. Goroutine 栈占⽤的内存(难优化,⼀条 tcp 连接⾄少对应⼀个 goroutine)0 码力 | 40 页 | 8.69 MB | 1 年前3对 Go 程序进行可靠的性能测试
对 Go 程序进行可靠的性能测试 Changkun Ou https://changkun.de/s/gobench/ Go 夜读系列 |talkgo.org|Talk Go|第 83 期 March 26, 2020 # Go 1.13 / 1.14 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 主要内容 ● 可靠的测试环境 ● benchstat 对代码块进行性能调优 ○ 例2: Benchmark 的正确性分析 ○ 例3: 其他的影响因素 ● 假设检验的原理 ● 局限与应对措施 ● 总结 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 教科书式的性能测试方法论 3 在《Software Testing: Principles and Practices》一书中归纳的性能测试方法论: 搜集需求 2. 编写测试用例 3. 自动化性能测试用例 4. 执行性能测试用例 5. 分析性能测试结果 6. 性能调优 7. 性能基准测试(Performance Benchmarking) 8. 向客户推荐合适的配置 可靠的测试环境 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 什么是可靠的性能基准测试环境 5 影响测试环境的软硬件因素0 码力 | 37 页 | 1.23 MB | 1 年前32.7 Golang与高性能DSP竞价系统
专业DSP解决⽅方案供应商 Golang与⾼高性能DSP竞价系统 By @QLeelulu 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • RTB: Real-time Bidding,实时竞价,允许⼲⼴广告买家根据 活动⺫⽬目标、⺫⽬目标⼈人群以及费⽤用⻔门槛等因素对每⼀一个⼲⼴广告 及每次⼲⼴广告展⽰示的费⽤用进⾏行竞价。 http包的HelloWorld性能测试 为什么选择Golang Via: http://www.cnblogs.com/QLeelulu/archive/2012/08/12/2635261.html 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • ⾼高性能、天⽣生并发⽀支持 • 性能敏感的模块可以直接使⽤用C编写(当时是这么认为的) 性能敏感的模块可以直接使⽤用C编写(当时是这么认为的) • 编译为本地机器码,部署⽅方便 • 快速上⼿手,学习成本低 • 标准库基本够⽤用 • 带GC(当时不了解GC的性能问题) • ⾃自带单元测试、性能测试、性能分析⼯工具 • 开发效率不低 为什么选择Golang 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved0 码力 | 51 页 | 5.09 MB | 1 年前3IPC性能极致优化方案-RPAL落地实践
IPC性能极致优化方案-RPAL落地实践 谢正尧 字节跳动 研发工程师 目 录 方案诞生的背景 01 全进程地址空间共享与保护 02 用户态进程切换 03 高效的Go Event Poller 04 RPC框架Kitex集成 05 性能收益与业务展望 06 方案诞生的背景 第一部分 方案诞生的背景 几种常见的同机通信场景: 1. 微服务合并部署(亲和性部署、sidecar 常见的本地通信方案:回环 IP、UDS、共享内存IPC 方案诞生的背景 以性能较优的 IPC 方案 share memory ipc 为例分析性能瓶颈: 注:方案 github 地址:https://github.com/cloudwego/shmipc-go 方案诞生的背景 方案诞生的背景 IPC 的性能瓶颈有哪些: 1. 系统特权级切换; 2. 异步线程唤醒/休眠(事件通知); 异步线程唤醒/休眠(事件通知); 3. 数据拷贝(序列化/反序列化); 方案诞生的背景 能不能把库函数调用的高性能优势做到 IPC 里面,降低进程间的事件通知和数据拷贝开销? 以go-go微服务 RPC 通信场景为例,该问题可以抽象为,如何高效地在两个 go runtime 间进行函数调用? 方案诞生的背景 基于以上问题,我们最终引入了 RPAL(Run Process As Library) 方案,基于跨进程虚拟地址0 码力 | 39 页 | 2.98 MB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
大规模高性能区块链架构 设计模式与测试框架 Gopher Meetup 深圳站 2021 年 8 ⽉ 21 号 趣�科技 李世敬 目录 区块链概述 01 大规模高性能区块链架构设计介绍 02 基于Go插件的区块链性能测试工具 03 写在最后 04 区块链概述 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 4 趣链科技 版权所有 ©2016-2021 ⼊要求。且⾮许可链⽹络节点⼤都由业务相关的机构组成,造成架构上共识、合约、安全、权限等⽅⾯的不同 �可�架构 大规模高性能区块链架构设计介绍 15 趣链科技 版权所有 ©2016-2021 ⼤�模⾼性能区��架构⾯�的�� 大规模高性能 区块链架构设计 网络连通问题 数据孤岛问题 异构部署问题 性能扩展问题 之困局 ? n 机构间数据难打通,不愿打通 n 公网内网、网关网闸情况复杂 n 业务组织形式不同,异构链/系统难适配 Edge Layer 轻节点层 Gateway Layer 核⼼技术 多类型节点分层部署模式 1 3 动态⾃发现⽹络转发模型 2 ⼤规模组⽹⾼效共识算法 1.提⾼数据处理效率 2.提升终端异构性能⼒ 3.提供实时计算与验证服务 4.解决数据真实性“第⼀公⾥” 问题 ⾯向海量节点⼤规模应⽤场景, ⽀持1000+节点的⽣产级联盟链⽹络, 可以实现数⼗万个多类型区块链⽹络节点分层部署 技术简介0 码力 | 39 页 | 56.58 MB | 1 年前31.5 Go 语言构建高并发分布式系统实践
go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 在⾼高并发,通信交互复杂,重业务逻辑的分布式系统中, Go语⾔言优势体现在:开发体验好 、⼀一定量级下服务稳定 、性能满⾜足 需要 ⼀一定量级下服务稳定: 50+内部产品,万款开发平台app 实时⻓长连接数亿量级,⽇日独数⼗十亿量级 1分钟内亿量级⼲⼴广播,⽇日下发峰值百亿量级 务实例接近3000个。 业务场景多样: ⽀支持聊天场景业务,稳定⽀支持多款聊天业务app 单通道多app复⽤用 上⾏行通道,回调⽀支持 对智能硬件产品,提供定制化消息推送与转发服务 性能满⾜足需要: 线上单机最⾼高160w⻓长连接 (24核 E5-2630 @ 2.30GHz 64G内存 ) qps在2~5w(取决于协议版本,业务逻辑,接⼊入端⺴⽹网络状况) 测试环境,可以通过300w⻓长连接压测(⺴⽹网络 套路:任务池集中数据合并请求、连接池+pipeline 利⽤用全双⼯工特性 经验⼀一 性能优化 性能优化:io集中处理 通信库 性能优化:io集中处理 通信库 性能优化:数据集中处理 性能优化:数据集中处理 go语⾔言开发追求开销优化的极限,谨慎引⼊入其他语⾔言领域⾼高性能 服务的通⽤用⽅方案 关注:内存池、对象池使⽤用与代码可读性与整体效率的权衡0 码力 | 39 页 | 5.23 MB | 1 年前3Go 入门指南(The way to Go)
3.1 Go 开发环境的基本要求 3.2 编辑器和集成开发环境 3.3 调试器 3.4 构建并运行 Go 程序 3.5 格式化代码 3.6 生成代码文档 3.7 其它工具 3.8 Go 性能说明 3.9 与其它语言进行交互 第4章:基本结构和基本数据类型 4.1 文件名、关键字与标识符 4.2 Go 程序的基本结构和要素 4.3 常量 4.4 变量 4.5 基本类型和运算符 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 字符串、数组和切片的应用 panicking 13.5 一种用闭包处理错误的模式 13.6 启动外部命令和程序 13.7 Go 中的单元测试和基准测试 13.8 测试的具体例子 13.9 用(测试数据)表驱动测试 13.10 性能调试:分析并优化 Go 程序 第 14 章 协程(goroutine)与通道(channel) 14.1 什么是协程 14.2 协程间的信道 14.3 协程的同步:关闭通道-测试阻塞的通道0 码力 | 466 页 | 4.44 MB | 1 年前32.1.1 Golang主动式内存缓存的优化探索之路
学而思网校 技术专家 目 录 问题引入 01 难点攻克 02 主动式内存缓存框架 03 总结 04 问题引入 第一部分 为什么能有极致的性能? 01. 如何优化? 解决了哪些技术难题? 主动式内存缓存 如何优化? 极致的性能 除了网络IO,与Redis有什么区别? 复杂的查询怎么办? 02. 传统的Cache很难实现多维度的查询,无法具备像SQL一样的灵活的查询模式 冷热可交换、策略可定制、内存可扩展,多种冷数据淘汰组件,自由组合 存储扩展,冷热数据交换 可自定义冷热数据交换策略 还能提供什么帮助? 04. 降低硬件成本,降低依赖,保证稳定性 同样的性能,需要更少的硬件资源,降低成本 01 核心数据在本地,依赖少,更稳定 02 • 千万级内存对象,GC严重耗时,如何解决? • 复杂的查询场景,内存数据如何高效组织? • 主动式内存缓存,如何保证数据实时性? 系 统 历 史 数 据 冷数据、数据量多 缓存成本大、命中低、收益小 热 数 据 当前系统中的热点数据 命中率高 系 统 新 增 数 据 近期新增数据,较大概率命中 存储空间 缓存性能 冷热可交换,引擎可扩展 06. 冷热数据交换,通过栈式缓存结构,实现多级缓存策略 语言的局限性 07. 基于golang语言,内存对象超过百万量级后出现的GC耗时问题 • go原生map存储200万数据对象0 码力 | 48 页 | 6.06 MB | 1 年前3Go 入门指南(The way to Go)
开发出的软件能够很好地在网络环境下工作 使人们能够享受软件开发的过程 Go 语言就在这样的环境下诞生了,它让人感觉像是 Python 或 Ruby 这样的动态语言,但却又拥有像 C 或者 Java 这类语言的高性能和安全性。 Go 语言出现的目的是希望在编程领域创造最实用的方式来进行软件开发。它并不是要用奇怪的语法和晦 涩难懂的概念来从根本上推翻已有的编程语言,而是建立并改善了 C、Java、C# 中的许多语法风格。它提 为什么要创造一门编程语言 C/C++ 的发展速度无法跟上计算机发展的脚步,十多年来也没有出现一门与时代相符的主流系统编程 语言,因此人们需要一门新的系统编程语言来弥补这个空缺,尤其是在计算机信息时代。 对比计算机性能的提升,软件开发领域不被认为发展地足够快或者比硬件发展更加成功(有许多项目 均以失败告终),同时应用程序的体积始终在不断地扩大,这就迫切地需要一门具备更高层次概念的 低级语言来突破现状。 在 Go Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并 行的支持,这对于游戏服务端的开发而言是再好不过了。 Go 语言一个非常好的目标就是实现所谓的复杂事件处理(CEP),这项技术要求海量并行支持,高度的抽 象化和高性能。当我们进入到物联网时代,CEP 必然会成为人们关注的焦点。 但是 Go0 码力 | 380 页 | 2.97 MB | 1 年前32.2.6 字节跳动在 Go 网络库上的实践
Netpoll – 性能表现 Environment CPU: 4 cores Memory: 8GB Go: 1.15.4 Netpoll Go net QPS Thrift RPC (echo 1KB) TP99 1.0x 0.34x 2.5x 1.0x Netpoll – 业务实测表现 CPU -25% TP99 -36% 设计实现 01 性能亮点 02 高级特性 03 展望未来 04 设计实现 01 性能亮点 02 高级特性 03 展望未来 04 Go net 在 RPC 场景下的问题 1. Conn 难以探活, 维护连接池成本高 Go net 在 RPC 场景下的问题 2. BIO 式编程, 连接量大时, 调度开销大 1. Conn 难以探活, 维护连接池成本高 Go net 在 RPC 场景下的问题 epoll_ctl() go epoll_wait() func conns... var input buffer var output buffer go handle() 设计实现 01 性能亮点 02 高级特性 03 展望未来 04 优化方向 优化 Buffer 设计(zerocopy) 优化调度效率(poller) 优化方向 优化 Buffer 设计(zerocopy)0 码力 | 42 页 | 3.19 MB | 1 年前3
共 55 条
- 1
- 2
- 3
- 4
- 5
- 6