




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、周洋周洋 部门: 360手机助手 Weibo: johntech-oDate: 2015.04.25gogo语言并发编程实践语言并发编程实践以以360360消息推送系统消息推送系统为例为例如何应对的?go语言在基础服务开发领域的优势?我遭遇了哪些挑战?目录具有go特色的运维在高并发,通信交互复杂,重业务逻辑的分布式系统中,Go语言优势体现在:开发体验好 、一定量级下服务稳定 、性能满足需要 一定量级下服务稳定:50+内部产品,万款开发平台app实时长连接数亿量级,日独数十亿量级1分钟内亿量级广播,日下发峰值百亿量级400台物理机,9个独立集群,国内外近10个IDC运维管理的go语言编写的常驻s
2、ervice服务实例接近3000个。业务场景多样:支持聊天场景业务,稳定支持多款聊天业务app单通道多app复用上行通道,回调支持对智能硬件产品,提供定制化消息推送与转发服务性能满足需要:线上单机最高160w长连接 (24核 E5-2630 2.30GHz 64G内存 )qps在25w(取决于协议版本,业务逻辑,接入端网络状况)测试环境,可以通过300w长连接压测(网络,连接稳定,无带宽限制,实际可以更高,决定于广播时候业务内存开销的cpu消耗带来的心跳或者业务延时能否接受)以以360360消息推送系统为例消息推送系统为例高并发、通信交互复杂消息系统简要架构单实例,单端口,多协议复用全双工,单
3、客户端,多app复用服务单通道适用于复杂环境下的网络的接入策略协议完备、简单、数据安全、可扩展、省流量接入层消息系统规模架构:重业务逻辑高并发、通信交互复杂Golang开发开发C语言开发语言开发按用户来思考问题,按用户数量开协程,对一个用户至少有两个协程为其服务Oneloop per thread原则,人为控制线程数量,使用epoll+timefd+eventfd来做用户io控制,超时控制,对用户的通知io是阻塞执行的,直接设置deadline,调度器会对阻塞的协成进行调度,deadline到了,阻塞解除,超时出错对于所有io操作建立的fd映射到指定loop,同时记录上下文关系进行回调设置,超
4、时控制使用timefd通过channel与其他用户通信使用eventfd事件通知的方式,根据epoll获取的fd绑定的回调函数和参数进行回调操作对外的通信采取阻io或者也可以go出去,不阻塞主循环对外通信信全局消息list,在映射到的eventloop上开连接池进行消耗推荐使用开发体会的对比如何应对的?go语言在基础服务开发领域的优势?我遭遇了哪些挑战?目录具有go特色的运维问题与瓶颈问题与瓶颈单机内存占用高达69GGC 36s 瓶颈散列在协程里面的iobuffer和对象不复用问题与瓶颈问题与瓶颈 瓶颈散列在协程里面的io问题与瓶颈奔放的协程使用网络环境不好引起激增问题与瓶颈23s的GC 瓶颈
5、散列在协程里面的io问题与瓶颈奔放的协程使用接口响应速度降低,重试增多,压力倍增问题与瓶颈23s的GC 瓶颈散列在协程里面的io问题与瓶颈奔放的协程使用内存暴涨问题与瓶颈io阻塞,协程激增 瓶颈问题与瓶颈问题与瓶颈如何应对的?go语言在基础服务开发领域的优势?我遭遇了哪些挑战?目录具有go特色的运维go语言程序开发需要找到一种平衡,既利用协程带来的便利性又做适当集中化处理套路:任务池集中数据合并请求、连接池+pipeline 利用全双工特性经验一性能优化性能优化:io集中处理通信库性能优化:io集中处理通信库性能优化:数据集中处理性能优化:数据集中处理go语言开发追求开销优化的极限,谨慎引入其
6、他语言领域高性能服务的通用方案关注:内存池、对象池使用与代码可读性与整体效率的权衡经验二性能优化内存池性能优化:通用方案性能优化对象池性能优化:通用方案如何应对的?go语言在基础服务开发领域的优势?我遭遇了哪些挑战?目录具有go特色的运维go语言原生提供的各组工具,构建分布式系统配套设施方面,提供了便利配套设施= 测试 + 调优 + 监控 + 运维便利 = 原生profiling工具 + 开协程模拟测试终端+协程协作模拟业务go语言运维管理方面的独特魅力具有go语言特色的运维可视化平台Profiling可视化 将常规排查问题从手工经验化,变成流程化的过程 比较不同时间维度,两次上线后,进程的各
7、种状态 对于优化上线的效果,可评估(上线新功能发现问题与后续确定KPI神器)具有go语言特色的运维:以项目为例性能可视化具有go语言特色的运维可视化平台 Profiling可视化 将常规排查问题从手工经验化,变成流程化的过程 比较不同时间维度,两次上线后,进程的各种状态 对于优化上线的效果,可评估(上线新功能发现问题与后续确定KPI神器) 通信库状态可视化最接近业务场景的百万级别压测后台架构迭代所有实例组通信数据监控性能监控与调优架构迭代压测平台拆分多实例l缓解GC压力(gc时间减少40%)按业务类型聚类,广播(io密集),多播,点对点(内部通信密集),聊天室(cpu密集)分层服务,按层次扩展
8、改为分集群(Set/Cell思想),各自独立,又具备全被全部功能子集群l按业务拆分(助手,卫士,浏览器)l按功能拆分(push,聊天,嵌入式产品)l按IDC拆分 (zwt,bjsc,bjdt,bjcc,shgt,shjc,shhm,Amazon Singapore)拆解后带来管理成本,引入(zookeeper + deployd)/ (Keeper + Agent) 对各节点进行管理 l监控集群l控制组件行为(用户重定向)l连接监控push具有go语言特色的运维: 配置管理具有go语言特色的运维配置文件管理与监控后台-生成配置文件-全部服务器-调用deployd接口,重启或者reloadzoo
9、keeper- 动态修改配置文件 - 各个服务器上实例通过sdk订阅profiling 接口 后台定期获取-调用go pprof生成文件-存储通信库实时数据http接口- 后台定期获取- 进入数据库,展示具有go语言特色的运维工具 - 生成项目公共文件夹下的.go 配置文件客户端sdk - keeper通信 告知身份- 原子性的换掉全局配置文件客户端sdk-集成profiling功能- keeper调用并存储客户端sdk- 自定义信息(通信库信息) - keeper调用并存储keeper本地保持所有客户端状态信息,按时间和需求获取其他富信息,提供接口给后台所有组件都必须通过网络启动,通过agent调用命令行架构迭代总结回顾go语言在基于并发协作的,重业务逻辑的基础服务方向非常适用 适用 = 开发体验好 + 服务稳定 + 性能满足需要go语言程序开发需要找到一种平衡,既利用协程带来的便利性又做适当集中化处理套路 = 按请求和业务逻辑并行+任务池集中数据合并请求 + 连接池集中收发go语言开发追求开销优化的极限,谨慎引入其他语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会展项目执行接待方案
- 屋顶光伏建设方案
- 餐饮租赁合同承租人权益保障与风险规避详解
- 车辆借用与城市交通改善服务协议
- 成都房地产租赁代理合作协议书
- 太谷焊工考试题及答案
- 2026版《全品高考》选考复习方案生物838 课时作业(三十五) 神经系统的分级调节及人脑的高级功能 含答案
- 个人财务出纳担保合同范本
- 食品法规面试题及答案
- 商业综合体拆除作业免责协议
- 公司劳务派遣服务协议
- 医院检验科培训课件:《标本溢洒处理流程》
- 九阳豆浆机的推广方案
- 通讯ACS510字节解释-
- 中医护理技术操作揿针技术操作流程与考核评分标准
- 路面弯沉温度修正系数
- 选矿厂安装施工方案设计
- 客户关系管理程广见介绍
- 仲景心法传讲系列四
- 消化内科护士实习生入科教育54张课件
- (完整word版)餐券模板
评论
0/150
提交评论