pb传输优化浅谈
在正式切入今天要谈的优化之前,先碎碎念一些自己过去这几年的经历。很久没有登录过博客园了,今天也是偶然兴起打开上来看一下,翻看了下自己的随笔,最后一篇原创文章发布时间是2015年的4月,今天是2017年的6月10号,真是离开了博客园有两年之久了。
2014年6月毕业后开始了北漂生活,在百度2年时间,主要从事百度Hi服务端的研发工作。在百度算是第一次对整个项目的开发有了相对完善的了解,同时也从一个新人逐步的成长,踩了一些坑,长了一些见识。2016年6月离开百度,回到成都,主要是考虑在成都安家,同时老婆也怀孕了,家里很快就要迎来两个小朋友。正好成都蚂蚁金服团队在招人,通过几次面试然后顺利的加入到了蚂蚁金服人工智能团队。
加入蚂蚁一晃过去了一年时间了,现在还记得入职当天就出差时我一脸懵逼的状态。到蚂蚁之后,最大的改变就是团队不再把我当做一个新人来培养,没有人来指导你改怎么样做,我收到的就是一个需求,至于这个需求怎么做,我可以随意发挥,当然前提是要做好。总结为一句话,就是以结果为导向,你可以做的很完美,也可以做的很low,但只要项目符合预期,并取得了该有的成效那你就没有失职。当然懵逼归懵逼,任务可不会等你的,根本就没有时间给我去适应,然后就开始卷入各种任务中。现在回想起来,入职那段时间我效率也是最高的,当然压力也大。
好了,闲话不多说,谈谈今天我要说的话题:pb传输优化浅谈。在最近蚂蚁的工作中,遇到一个性能优化的问题,两个系统之间通过pb形式传输数据,考虑到数据量比较大(单次请求包大约2M左右),原有的pb传输性能不符合业务预期。那么,该怎么优化来提升这个性能呢?
首先我们需要分析主要的耗时在那个环节?我们对该调用链路进行简单的梳理:
客户端将请求对象序列化为pb--网络IO--服务反序列化对象--业务计算--计算结果序列化--网络IO--客户端对响应反序列化
对整个流程中的分阶段耗时进行统计分析,发现目前主要的耗时在序列化的过程,也就是说目前的pb序列化性能不符合预期!怎么优化呢?序列化的过程是cpu密集型的,既然pb序列化无法满足,那我们就寻求性能更好的序列化方式,这里我们选择了flat buffer。
pb和fb各有裨益,在内存空间占用这个指标上,flat buffers占用的内存空间比protobuf多了两倍。序列化时二者的cpu计算时间fb比pb快,当然反序列化时二者的cpu计算时间fb比pb也要快。即fb在计算时间上占优势,而pb则在内存空间上占优。
看似问题解决了,然而未必!序列化、反序列化的性能提升了,传输的数据包变大了。那就继续优化呗,包大了怎么破?压缩~
压缩方法比较多,GZIP、LZO、Zippy/Snappy压缩等方法众多,我们需要选择适合我们的那一款。这几款压缩也是hbase中应用的几种压缩方式。我们对其特点做一个分析,其中:
1)GZIP的压缩率最高,但是其实CPU密集型的,对CPU的消耗比其他算法要多,压缩和解压速度也慢;
2)LZO的压缩率居中,比GZIP要低一些,但是压缩和解压速度明显要比GZIP快很多,其中解压速度快的更多;
3)Zippy/Snappy的压缩率最低,而压缩和解压速度要稍微比LZO要快一些。
BigTable中采用的是Zippy算法,目标是达到尽可能快的压缩和解压速度,同时减少对CPU的消耗。我们目前的需求和这个也是类似的,所以我们通过实现最终选定了使用snappy压缩方式。
好了,今天的浅谈内容结束,期待后续自己能够多有一些出来,有关项目中遇到的一些点和大家分享,也期望能够帮到大家,谢谢!
pb传输优化浅谈的更多相关文章
- MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等
MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化… 这是一个漫长且考 ...
- App性能优化浅谈
前言 前段时间给公司的小伙伴们进行了关于app性能优化的技术分享.这里我稍微整理一下也给大家分享一下.关于性能优化这个话题非常大,涉及面能够非常广,也能够非常深入.本人能力有限,不会给大家讲特别难懂, ...
- web server性能优化浅谈
作者:ZhiYan,Jack47 转载请保留作者和原文出处 Update: 2018.8.8 在无锁小节增加了一些内容 性能优化,优化的东西一定得在主路径上,结合测量的结果去优化.不然即使性能再好,逻 ...
- dom渲染方面的优化浅谈
今天分享一个面试经验,上周面试中一位印象很深的面试官(主要长得很帅),问我了一个我至今印象很深刻的问题,当然不是什么你之后的职业规划啊,你工作中遇到过哪些问题啊之类的.原起于一道面试题,小伙伴们可以想 ...
- mysql配置优化浅谈(一)
MySQL对于web架构性能的影响最大,也是关键的核心部分.MySQL的设置是否合理优化,直接影响到web的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识 ...
- Mysql 性能优化7【重要】sql语句的优化 浅谈MySQL中优化sql语句查询常用的30种方法(转)
原文链接 http://www.jb51.net/article/39221.htm 这篇文章大家都在转载,估计写的有条理吧,本人稍微做一下补充 1.对查询进行优化,应尽量避免全表扫描,首先应考虑 ...
- sql性能优化浅谈
sql性能优化总结: 最近随着数据越来越多,数据库性能问题暴露的越来越严重.几百万,上千万,甚至过亿的数据处理速度会非常的慢. 下面对工作中遇到的问题做下总结,希望以后能对日后的工作有所帮助. 不同的 ...
- 转:浅谈CSS在前端优化中一些值得注意的关键点
前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...
- Android性能优化的浅谈
一.概要: 本文主要以Android的渲染机制.UI优化.多线程的处理.缓存处理.电量优化以及代码规范等几方面来简述Android的性能优化 二.渲染机制的优化: 大多数用户感知到的卡顿等性能问题的最 ...
随机推荐
- aProxy: 带认证授权和权限控制的反向代理
前段时间很多数据库因为没有做好权限控制暴露在外网被删然后遭勒索的事件,而类似的有些内网的web服务也会被开放到公网并且没有做任何权限控制的,这样也会有一定的风险.所以就决定写篇文章简单介绍一个小工具. ...
- EzHttp 使用Https协议时证书如何部署
今天为EzHttp增加了https支持, EzHttp介绍见这里:使用EzHttp框架 开发基于HTTP协议的CS轻应用 服务端启动时会创建自签名证书,并将其绑定到启动参数url对应的端口上. 服务端 ...
- Linux安装redis及redis的php扩展。
------ redis安装,启动服务,开机启动,打开redis客户端 ------ yum install -y redis systemctl start redis systemctl enab ...
- mysql 关联查询 索引不起作用原因记录
业务逻辑如下:查询某篇文章的评论列表,且列出评论人及被评论人的昵称.头像. 先看一下表结构 评论表: 评论表的索引: 用户表: 用户表的索引: 查询语句如下: SELECT t1.comment_id ...
- CSS3弹性伸缩布局(上)——box布局
布局简介 CSS3提供了一种崭新的布局方式:Flexbox布局,即弹性伸缩布局模型(Flexible Box)用来提供一个更加有效的方式实现响应式布局. 由于这种布局还处于W3C的草案阶段,并且它分为 ...
- 简单XSS跨站脚本攻击实验
原理:恶意Web用户将代码植入到提供给其它用户使用的页面中,如果程序没有经过过滤或者过滤敏感字符不严密就直接输出或者写入数据库.合法用户在访问这些页面的时候,程序将数据库里面的信息输出,这些恶意代码就 ...
- JQuery获取元素类名
一般而言,JQuery可以利用attr来获取元素的属性值, 1.$("元素").attr("属性"); //获取指定属性的值 2. ...
- cmd第一次推送github
echo off for %%i in ("%cd%") do set "name=%%~ni" git init git remote add origin ...
- [Linux] Linux 中的基本命令与目录结构
Linux 中的基本命令与目录结构 目录 一.Linux 基本目录结构 二.基本命令 三.浏览目录 四.中间命令 五.更改密码 六.环境变量和 shell 变量 七.命令路径 八.文本编辑器 九.获取 ...
- fread读入优化,寻找速度极限
序: 在之前的测试中,我们比较了四种读入方式,发现使用读入优化是最快的选择,但是我们知道fread()是比它更快的方法.这一次,我们对比四种读入优化,探寻C++读取速度的极限. 分别是getchar( ...