03. Golang 在隐私计算平台建设中的实践 - 刘敬
同步写法存在问题 算法效率低下 计算逻辑和⽹网络io是串串⾏行行的,不不相关 的计算逻辑和⽹网络io本可以并⾏行行,以 提⾼高效率 算法逻辑和⽹网络逻辑耦合 有⼤大量量的数据序列列化以及异步转同步 的⽹网络流程代码,算法本身不不应该关 注⽹网络相关逻辑 嵌套调⽤用其他算法复杂 在需要调⽤用其他算法时(OT,SS 等),都需要⼿手动编写⼀一遍类似的流 程,嵌套调⽤用逻辑冗余度⽐比较⾼高 同步写法存在问题 算法效率低下 计算逻辑和⽹网络io是串串⾏行行的,不不相关 的计算逻辑和⽹网络io本可以并⾏行行,以 提⾼高效率 算法逻辑和⽹网络逻辑耦合 有⼤大量量的数据序列列化以及异步转同步 的⽹网络流程代码,算法本身不不应该关 注⽹网络相关逻辑 嵌套调⽤用其他算法复杂 在需要调⽤用其他算法时(OT,SS 等),都需要⼿手动编写⼀一遍类似的流 程,嵌套调⽤用逻辑冗余度⽐比较⾼高 任务状态 校验多⽅方输⼊入 格式是否匹配 参与⽅方掉线 检测 算 法 管 理理 异 常 处 理理 算 法 实 例例 ADD CMP PIR PSI 优点 01.算法流程基于数据驱动异步执⾏行行 异步执⾏行行并⾏行行化,提⾼高算法性能 02.算法版本协商 实现新旧节点版本兼容,全⽹网节点可错 开时间依次升级 03.统⼀一异常处理理 参与⽅方掉线和流程异常时任务⾃自动终⽌止 040 码力 | 37 页 | 6.20 MB | 1 年前3Go性能优化概览-曹春晖
缩⼩临界区:只锁必须锁的对象,临界区内尽量不放慢操作,如 syscall • 降低锁粒度:全局锁 -> 对象锁,全局锁 -> 连接锁,连接锁 -> 请求锁,⽂ 件锁 -> 多个⽂件各种锁 • 同步改异步:如同步⽇志 -> 异步⽇志,若队列满则丢弃,不阻塞业务逻辑 CPU 使⽤太⾼了-编解码使⽤ CPU 过⾼ 通过更换 json 库,就可以提⾼系统的吞吐量 本质上就是请求的 CPU 使⽤被优化了 我们可以使⽤固定 Global lock -> connection level lock • Connection level lock -> request level lock • 同步改异步 • ⽇志场景:同步⽇志 -> 异步⽇志 • Metrics 上报场景:select -> select+default • 个别场景使⽤双 buffer 完全消灭阻塞 Continuous Profiling0 码力 | 40 页 | 8.69 MB | 1 年前3IPC性能极致优化方案-RPAL落地实践
github 地址:https://github.com/cloudwego/shmipc-go 方案诞生的背景 方案诞生的背景 IPC 的性能瓶颈有哪些: 1. 系统特权级切换; 2. 异步线程唤醒/休眠(事件通知); 3. 数据拷贝(序列化/反序列化); 方案诞生的背景 能不能把库函数调用的高性能优势做到 IPC 里面,降低进程间的事件通知和数据拷贝开销? 以go-go微服务 RPAL(Run Process As Library) 方案,基于跨进程虚拟地址 共享,复用 epoll 网络模型,实现了纯用户态的事件轮询和无拷贝的指针读写接口。 从性能瓶颈的两点分析: 1. 异步线程唤醒: 关键在于如何最低限度降低线程唤醒的开销,非必要不通知事件。 2. 数据序列化/反序列化 需要做到跨进程的虚拟地址空间共享,通过传递指针来传递一切数据。 全进程地址空间共享与保护 wait 3. readv syscall 4. 仅在必要时调用 futex_wake (没有自旋线程 && 有 idle P) 高效的Go Event Poller 思考: 1. 为什么要异步唤醒 M 处理? 2. 是否有同步的 Go 函数调用方案? RPC 框架 Kitex 集成 第五部分 RPC 框架 Kitex 集成 指针读写抽象接口: 对象指针ACK RPC 框架 Kitex0 码力 | 39 页 | 2.98 MB | 1 年前3NSQ - 陈冶
Dive into NSQ 舜飞 - 陈冶 消息队列服务 • ⾯向跨进程/跨服务器通讯的组件 • 异步通信,将可并⾏化处理的同步操作解耦 使⽤案例 ⼴告点击数统计 Web Service MySQL User Click User Click User Click Stateless Stat Service Stateless 使⽤案例 ⼴告点击数统计 Web chan Select } 数据⼴播 Topic Channel Channel Producer Consumer Consumer Consumer Channel Topic 异步把消息⼴播给 Channel 数据⼴播 Topic ⾃⾝拥有 buffer 的能⼒ Memory Channel Disk Queue Topic chan *Msg Channel0 码力 | 37 页 | 2.49 MB | 1 年前3Golang在接入层长连接服务中的实践-黄欣
司机乘客撮合 • 实时计价 – 高频度的数据交互 • 坐标数据 • 计价数据 – App和服务端双向可达 • 上行(抢单) • 下行(派单) 背景—why golang? • 开发效率 • 异步模型,同步原语 – C:代码上各种回调、思维中保持冷静 – Go:代码上同步,思维自然 • 性能够用,工具齐全 – 100w?10w?~~ – Memprof、cpuprof~ • 社区活跃,发展迅猛 架构—异地双活 • 要求 – 正常情况下: • 任何一个机房可推送到所有机房app – 异常情况下: • 本机房内推送可达 • 架构图如下 (核心解决路由共享问题) 架构—总结 • 异步通信接口 • 协议包业务态隔离 • 简单无状态 • 有状态的服务(涉及到存储)做到可降级 • 核心业务有自愈逻辑 简单实用,避免过度设计 目录 • 背景 • 架构 心得—coding • 代码分层0 码力 | 31 页 | 1.67 MB | 1 年前3基于amqp实现的golang消息队列MaxQ
基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 17/22 6. 使用场景和案例 异步解耦 订单系统与消息通知系统解耦 1.用户订单支付成功,直接向MaxQ推送下单成功通知,主流程迅速返回 2.消息通知系统异步接收通知消息, 发送短信通知或应用通知 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.1680 码力 | 22 页 | 1.45 MB | 1 年前32-6-Golang 在 Baidu-FrontEnd 的应用-陶春华
为单产品线设计,无法支持平台化要求 • 配置变更(修改、重载、验证)能力差 –变更和稳定性的矛盾 • 程序出core 技术选型:Go vs Nginx • 学习成本 • 开发成本 –并发编程模型:同步(Go) vs 异步(Nginx) –内存管理 –语言描述能力 • 性能 – 在BFE的场景下,性能在可接受范围内 – 通过算法设计和架构设计来弥补 几个问题 • GC优化 • http协议栈 • 分布式架构 STHETIC 分布式架构 • BFE程序结构:core+众多功能模块 – 分流 – Cache – Dict • 问题: – 变更频率 – 启停速度 – 功能单一,各自扩展 • 同步/异步,开发效率4:1 BFE BGW RS cache dict 总结 • Go可以用于高并发、低延迟的程序开发 • Go极大的提升了开发效率0 码力 | 35 页 | 730.17 KB | 1 年前3Golang大规模云原生应用管理实践
Result{RequeueAfter: waitTime}, nil } 1 获取应用期望状态 控制器初始化 2 解析期望的WTS状态 3 调谐动作-更新与新增 4 调谐动作-删除 5 调谐动作-状态同步 6 异步轮询 func (r *components) Render(ctx context.Context, ac *v1alpha2.ApplicationConfiguration) { workloads 73eec338-c3c1-4936-bc5b-3c47f2eb63bc 使用ownerRef做事件触发 新的复杂度-可观测 应用为什么没有到终态? • 关联资源太多 • 关联控制器太多 • 异步响应式 status: � workloads: - componentName: oamhsf-group-1 componentRevisionName: oamhsf-group-1-v50 码力 | 23 页 | 7.70 MB | 1 年前3大规模高性能区块链架构设计模式与测试框架-李世敬
数据部分 句柄管理组件 ... ... Filelog存储引擎 持久化层 Multicache存储引擎 内存层 memory-table write-ahead log ... ... 异步写入 0802 0803 0804 leveldb leveldb leveldb 只读 读写 元数据 索引数据 区块数据库 索引数据库 区块链平台底层采用Filelog+IndexDB 应用研发 司法存证链 通用链 数字身份链 ··· 公共联盟链 溯源链 跨链服务 联盟链 Hyperchain 隐私保护 联盟治理 高效执行引擎 自适应共识 混合型存储 分片模型 大规模组网 异步审计 扩展层 • Hyperchain:首个国产自主可控的联盟链平 台,是目前行业内落地应用最多、节点分布 最广、承载业务规模最大的区块链平台。 • BitXMesh:首个支持链上链下协同的数据共0 码力 | 39 页 | 56.58 MB | 1 年前3用Go语言实现推送服务器
GOMAXPROCS(runtime.NumCPU()) • 使用“go”命令创建goroutine go sockstore.Start() • goroutine使用channel交换消息 – 异步场景,直接往指定channel发送数据 – 同步场景,往channel发送的数据中,包含一 个获取返回值的channel 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果0 码力 | 25 页 | 260.04 KB | 1 年前3
共 21 条
- 1
- 2
- 3