5.cgo 原理解析及优化实践
良好的生态,上手门槛低 Wasm?Lua? Golang 云原生架构 良好的可扩展性 高性能 MoE 有什么挑战 业界少见 - 重度依赖 cgo 性能敏感 延时敏感 网关场景 cgo 是成熟 & 稳定的 唯一的 bug:trace 工具 性能挖掘空间大 cgo 工作机制 第二部分 Foreign Function Interface sighandler ② 保存之前的 sighandler so 被加载,初始化时 ① 判断当前上下文,是否为 Go 期望处理的 ② 如果是,Go 自己处理,如 Go 运行产生的 SEGV ③ 如果不是,转发为原来的 sighandler 信号触发 sighandler 时 sighandler 是进程级别的 10x 优化 MoE 整体提升 8% 快了 10 倍 优化前 ~1600ns,优化后 googlesource.com/c/go/+/495855 ① g0 的栈空间(lo,hi)是动态指定的 ② 原来是当前 C 栈顶,增长 32k ① 后续 C 栈顶变高,morestack 检查需要扩栈 ② 转发信号时,通过 sp 是否在 g0 栈来判断上下文 GC 优化 第五部分 内存交互原理 ① 内存布局一致 ② 生命周期一致 Go 对象是由 GC 管理的 确保不会被提前释放 ③0 码力 | 45 页 | 5.74 MB | 1 年前31.5 Go 语言构建高并发分布式系统实践
对智能硬件产品,提供定制化消息推送与转发服务 性能满⾜足需要: 线上单机最⾼高160w⻓长连接 (24核 E5-2630 @ 2.30GHz 64G内存 ) qps在2~5w(取决于协议版本,业务逻辑,接⼊入端⺴⽹网络状况) 测试环境,可以通过300w⻓长连接压测(⺴⽹网络,连接稳定,⽆无带宽限制,实际可以更⾼高 ,决定于⼲⼴广播时候业务内存开销的cpu消耗带来的⼼心跳或者业务延时能否接受)0 码力 | 39 页 | 5.23 MB | 1 年前32.2.2 深入理解BFE
深入理解BFE 章淼 百度智能云 架构师 什么是BFE? • 百度统一的七层流量转发平台 • HTTP, HTTPS, HTTP/2, QUIC • 2012年开始建设 • 每日转发请求约1万亿,日峰值超过1KW QPS • 2019年,核心转发引擎对外开源 • BFE => Beyond Front End • https://github.com/bfenetworks/bfe 没有统一七层接入的问题 • 功能重复开发 • 运维成本高 • 流量统一控制能力低 • 引入BFE后 • 功能统一开发 • 运维统一管理 • 流量控制能力增强 • BFE平台的主要功能 • 接入和转发,流量调度,安全防攻击,数据分析 BFE部署前 BFE部署后 L4LB 业务A 集群 业务B 集群 业务C 集群 BFE 业务A 集群 业务B 集群 业务C 集群 L4LB BFE平台架构 代表:Envoy Go 生态 • 基于Go语言的生 态积累 • 更好的稳定性和安 全性 • 易于开发扩展功能 • 代表:BFE, Traefik API网关 七层负载均衡 BFE主要设计思想 • 转发模型优化 • 支持多租户 • 引入条件表达式,减少正则表达式使用 • 降低动态配置加载的难度 • 区分“常规配置”和“动态配置” • 增强服务状态监控能力 • 向外展现大量内部的执行状态0 码力 | 26 页 | 1.78 MB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
Consensus Layer ⾮共识节点层 Provable Layer 轻客户端层 Edge Layer 轻节点层 Gateway Layer 核⼼技术 多类型节点分层部署模式 1 3 动态⾃发现⽹络转发模型 2 ⼤规模组⽹⾼效共识算法 1.提⾼数据处理效率 2.提升终端异构性能⼒ 3.提供实时计算与验证服务 4.解决数据真实性“第⼀公⾥” 问题 ⾯向海量节点⼤规模应⽤场景, ⽀持1000+节点的⽣产级联盟链⽹络, 区块链平台关键技术-共识算法 20 趣链科技 版权所有 ©2016-2021 全连接 双向通信 • 统⼀配置 • ⾼效转发 • 并发能⼒强 全连接 双向通信 ⽹络⾃发现 ⾃适应路由 跨域转发 • 简化配置 • 动态调整 • 跨域通信 全连接转发策略 ⾃发现转发策略 区块链平台关键技术-自发现网络 21 趣链科技 版权所有 ©2016-2021 区块链平台关键技术-网络流控0 码力 | 39 页 | 56.58 MB | 1 年前3Go Web编程
缓存了此网址映射关系,则调用这个IP地址 映射,完成域名解析,此解析不具有权威性。 5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行 查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这 个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息 会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。 6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级 服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还 是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。 图3.3 框架的数据流 1. main.go作为应用入口,初始化一些运行博客所需要的基本资源,配置信息,监听端口。 2. 路由功能检查HTTP请求,根据URL以及method来确定谁(控制层)来处理请求的转发资源。 3. 如果缓存文件存在,它将绕过通常的流程执行,被直接发送给浏览器。 4. 安全检测:应用程序控制器调用之前,HTTP请求和任一用户提交的数据将被过滤。 5. 控制器装载模型、核心库、辅助函0 码力 | 295 页 | 5.91 MB | 1 年前32-6-Golang 在 Baidu-FrontEnd 的应用-陶春华
BFE(Baidu Front End) • 百度统一前端 –七层流量接入平台 BFE(Baidu Front End) • 主要服务 • 接入转发 • 防攻击、流量调度、数据分析 • 业务现状 • 覆盖大部分重要产品 • 日请求量千亿级别 接入与转发 防攻击 流量调度 数据分析 BFE 为什么重写BFE • 现存问题 –修改成本高 • 事件驱动的编程模型:编码和调试难度大0 码力 | 35 页 | 730.17 KB | 1 年前3如何消除程序中的数据竞争-周光远
826;https://blog.leonardwang.cn/archives/print0 编译器对存在数据竞争的程序的行为不做任何保证。 消除数据竞争的误区:Sleep? 依靠sleep延时能不能消除数据竞争? 消除数据竞争的误区:内置数据结构的数据竞争 Go语言的string,slice,interface 的底层实现都是结构体,对于它们 本身的读写访问需要考虑数据竞争 而ch0 码力 | 30 页 | 1.92 MB | 1 年前3
共 7 条
- 1