IPC性能极致优化方案-RPAL落地实践call remote call 方案诞生的背景 微服务合并形态:sidecar 进程通信 方案诞生的背景 微服务合并形态:亲和性部署 方案诞生的背景 怎么放大本地通信的优势? 低延迟 提升用户体验 低开销 降低计算成本 常见的本地通信方案:回环 IP、UDS、共享内存IPC 方案诞生的背景 以性能较优的 IPC 方案 share memory ipc 为例分析性能瓶颈: 注:方案 第三部分 用户态进程切换 传统线程切换 rpal线程切换: 用户态进程切换 用户态进程切换 延迟进程切换 1.发生 Kernel Entry 时,sender 线程将 pt_regs(保存 Kernel 返回到用户态的 上下文信息)压入 sender 线程内核栈 用户态进程切换 延迟进程切换 2. 判断 fsbase 寄存器保存的地址是否 在 kernel current task 地址 空间内? > 若不是,代表当前在RPAL Call, 将 pt_regs 拷贝并覆盖掉之前处于 epoll_wait 上下文的 receiver 线程的内 核栈中 用户态进程切换 延迟进程切换(lazy switch) 用户态切换时还需要保留一个操作: > sender线程将自身线程上下文拷贝一 个副本,并允许kernel访问该副本。 3. sender 线程在 lazy_switch0 码力 | 39 页 | 2.98 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value boxing)和反射(reflection)。 支持指针。 支持函数闭包(closure)。 支持方法。 支持延迟函数调用(defer)。 支持类型内嵌(type embedding)。 支持类型推断(type deduction or type inference)。 内存安全。 自动垃圾回收。 良好的代码跨平台性。0 码力 | 821 页 | 956.82 KB | 1 年前3
基于Go的大数据平台-党合萱• 多种上下游适配 • ⾼高吞吐/低延迟问题探究 • ⾼高可⽤用与⽔水平扩展 • ⾃自动化运维 • Go的应⽤用 简单 · 可信赖 系统设计分析与架构 构建系统的挑战 export service系统全貌 简单 · 可信赖 多种上下游适配 简单 · 可信赖 业务架构 简单 · 可信赖 导出模型 简单 · 可信赖 ⾼高吞吐/低延迟问题探究 简单 · 可信赖 困难 热点所在 • 另⼀一⽅方⾯面依靠服务⾃自身的状态反馈实时微调,修正宏观 预测结果 简单 · 可信赖 线上系统现状 • 每⽇日处理理超过千亿数据点 • 每⽇日处理理百TB级别的数据量量 • 线上导出延迟在1分钟以内 • 较少的⼈人⼯工介⼊入 • 秒级扩容 • 实时的可视化监控系统 • 易易⽤用的报警系统 • ⾃自动⽣生成线上⽇日报 简单 · 可信赖 Go的应⽤用 我们⽤用Golang做了了些什什么0 码力 | 34 页 | 1.26 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 目录 2 第33章:表达式估值顺序规则 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value boxing)和反射 (reflection)。 支持指针。 支持函数闭包(closure)。 支持方法。 支持延迟函数调用(defer)。 支持类型内嵌(type embedding)。 支持类型推断(type deduction or type inference)。 内存安全。 自动垃圾回收。 良好的代码跨平台性。0 码力 | 591 页 | 21.40 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value boxing)和反射(reflection)。 支持指针。 支持函数闭包(closure)。 支持方法。 支持延迟函数调用(defer)。 支持类型内嵌(type embedding)。 支持类型推断(type deduction or type inference)。 内存安全。 自动垃圾回收。 良好的代码跨平台性。0 码力 | 608 页 | 1.08 MB | 1 年前3
2-6-Golang 在 Baidu-FrontEnd 的应用-陶春华分布式架构 GC带来的问题 –GC是个好东西,但也有问题 –难以避免的延迟(几十到几百ms) • 经验公式:10万对象1ms 扫描时间 –1个tcp连接,约10个对象=> 1万连接,1ms gc延迟 • GO-BFE的实时需求 –请求的处理延迟 平均1ms以内,最大10ms • 实测 –100万连接,400ms gc延迟 GC优化思路 • Go的gc算法(go1.3) –Mark and –主动调用GC GC优化 – 补充分析 • HTTP场景 –短连接 –长连接 • 平均连接上的请求是3个 • 90%(20s以内)、98%(50s之内) –大文件请求 • 对gc造成的延迟(几十ms)不敏感 多说一句Go 1.5/1.6:没有银弹 • Stop-The-World(STW)缩短了,决定因素也变了 –Time spent looping over goroutines Dict • 问题: – 变更频率 – 启停速度 – 功能单一,各自扩展 • 同步/异步,开发效率4:1 BFE BGW RS cache dict 总结 • Go可以用于高并发、低延迟的程序开发 • Go极大的提升了开发效率0 码力 | 35 页 | 730.17 KB | 1 年前3
2.2.2 深入理解BFE录 BFE涉及的相关技术原理 01 BFE的设计思想 02 BFE的实现机制 03 为什么需要BFE? • 没有统一七层接入的问题 • 功能重复开发 • 运维成本高 • 流量统一控制能力低 • 引入BFE后 • 功能统一开发 • 运维统一管理 • 流量控制能力增强 • BFE平台的主要功能 • 接入和转发,流量调度,安全防攻击,数据分析 BFE部署前 BFE部署后 L4LB 接 / 请求的粒度。 高。负载均衡器引 入了额外的资源消 耗。 低。客户端基本不 需要实现策略。 总体流量规模不大 (从负载均衡器资 源消耗的角度); 应用场景对流量控 制要求高。 基于名字服 务 + 客户 端策略 弱。客户端直接访问 服务,没有可靠的卡 控点,无法实现精细 的流量控制测量。 低。不需要额外的 资源投入。 高。客户端需要支 持比较复杂的策略, 持比较复杂的策略, 且涉及升级的问题。 总体流量规模较大; 应用场景对流量控 制要求低;无法使 用负载均衡器的场 景。 负载均衡器 • 负载均衡的趋势 • 硬件 => 软件 • 四层和七层负载均衡器分离 • 四层负载均衡 • LVS,DPVS,… • 七层负载均衡 • HAProxy,Nginx,Envoy,Traefik, BFE,… BFE为什么基于Go语言 • 研发效率 • 远高于C语言0 码力 | 26 页 | 1.78 MB | 1 年前3
2.游戏战中陪伴助手微服务架构设计与应用运营 - 变更困难,修改策略 = 修改代码 开发 - 代码低内聚,交接难度大 扩展 - 没有考虑扩展 功能 - 难以实现战略推荐 - 早期:先考虑有无 - 引入推荐系统 系统思考——如何评判方案的好坏? 需要定义几个维度来评判一个方案的好坏 - 响应性能: 获取事件到输出策略的延迟 - 服务器成本: 每服务千人成本越低越好 - 运营简易度: 设计新运营策略的难度 - 开发迭代:0 码力 | 47 页 | 11.10 MB | 1 年前3
2.7 Golang与高性能DSP竞价系统Right ReservedAll Right Reserved • ⾼高并发量请求处理(峰值QPS 20万) • 每天上百亿竞价请求 • 每个竞价请求要在100毫秒内响应(包含⺴⽹网络延迟) • 复杂的出价算法与逻辑 DSP竞价系统的挑战 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved ReservedAll Right Reserved • ⾼高性能、天⽣生并发⽀支持 • 性能敏感的模块可以直接使⽤用C编写(当时是这么认为的) • 编译为本地机器码,部署⽅方便 • 快速上⼿手,学习成本低 • 标准库基本够⽤用 • 带GC(当时不了解GC的性能问题) • ⾃自带单元测试、性能测试、性能分析⼯工具 • 开发效率不低 为什么选择Golang 专业DSP解决⽅方案0 码力 | 51 页 | 5.09 MB | 1 年前3
Go Web编程p这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递 指针。(注:若函数需改变slice的长度,则仍需要取地址传递指针) defer defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些 defer语句会按照逆序执行,最后该函数返回。特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回, 在返回 断,但是F中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方,F的行为就像调用了panic。这一 过程继续向上,直到发生panic的goroutine中所有调用的函数返回,此时程序退出。恐慌可以直接调用panic产 生。也可以由运行时错误产生,例如访问越界的数组。 Recover 是一个内建的函数,可以让进入令人恐慌的流程中的goroutine恢复过来。recover仅在延迟函数中有效。在正常 目录 上一节: XML处理 下一节: 正则处理 160 7.3 正则处理 7.3 正则处理 正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是 它却更灵活。按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何想你要得到的字符组 合。如果你在Web开发中需要从一些文本数据源中获取数据,那么你只需要按照它的语法规则,随需构造出正确的模式0 码力 | 295 页 | 5.91 MB | 1 年前3
共 38 条
- 1
- 2
- 3
- 4













