在正式切入今天要谈的优化之前,先碎碎念一些自己过去这几年的经历。很久没有登录过博客园了,今天也是偶然兴起打开上来看一下,翻看了下自己的随笔,最后一篇原创文章发布时间是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传输优化浅谈的更多相关文章

  1. MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等

    MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化… 这是一个漫长且考 ...

  2. App性能优化浅谈

    前言 前段时间给公司的小伙伴们进行了关于app性能优化的技术分享.这里我稍微整理一下也给大家分享一下.关于性能优化这个话题非常大,涉及面能够非常广,也能够非常深入.本人能力有限,不会给大家讲特别难懂, ...

  3. web server性能优化浅谈

    作者:ZhiYan,Jack47 转载请保留作者和原文出处 Update: 2018.8.8 在无锁小节增加了一些内容 性能优化,优化的东西一定得在主路径上,结合测量的结果去优化.不然即使性能再好,逻 ...

  4. dom渲染方面的优化浅谈

    今天分享一个面试经验,上周面试中一位印象很深的面试官(主要长得很帅),问我了一个我至今印象很深刻的问题,当然不是什么你之后的职业规划啊,你工作中遇到过哪些问题啊之类的.原起于一道面试题,小伙伴们可以想 ...

  5. mysql配置优化浅谈(一)

    MySQL对于web架构性能的影响最大,也是关键的核心部分.MySQL的设置是否合理优化,直接影响到web的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识 ...

  6. Mysql 性能优化7【重要】sql语句的优化 浅谈MySQL中优化sql语句查询常用的30种方法(转)

    原文链接   http://www.jb51.net/article/39221.htm 这篇文章大家都在转载,估计写的有条理吧,本人稍微做一下补充 1.对查询进行优化,应尽量避免全表扫描,首先应考虑 ...

  7. sql性能优化浅谈

    sql性能优化总结: 最近随着数据越来越多,数据库性能问题暴露的越来越严重.几百万,上千万,甚至过亿的数据处理速度会非常的慢. 下面对工作中遇到的问题做下总结,希望以后能对日后的工作有所帮助. 不同的 ...

  8. 转:浅谈CSS在前端优化中一些值得注意的关键点

    前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...

  9. Android性能优化的浅谈

    一.概要: 本文主要以Android的渲染机制.UI优化.多线程的处理.缓存处理.电量优化以及代码规范等几方面来简述Android的性能优化 二.渲染机制的优化: 大多数用户感知到的卡顿等性能问题的最 ...

随机推荐

  1. 《JavaScript面向对象编程指南(第2版)》读书笔记(一)

    目录 一.对象 1.1 获取属性值的方式 1.2 获取动态生成的属性的值 二.数组 2.1 检测是否为数组 2.2 增加数组长度导致未赋值的位置为undefined 2.3 用闭包实现简易迭代器 三. ...

  2. Objective-C 实用关键字详解1「面试、工作」看我就 🐒 了 ^_^.

    在写项目 或 阅读别人的代码(一些优秀的源码)中,总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思 的. 相信很多开发者跟我当初一样,只是基本的常用关键字定义属性会使用,但在关键字 ...

  3. iOS·UIKit框架注解 & Foundation

  4. JS实现banner图轮换

    方法一: <!--灰色背景代码替换图片--> <!DOCTYPE html><html> <head> <meta charset="U ...

  5. nginx参数的详细说明

    #开启进程数 <=CPU数 worker_processes 1; #错误日志保存位置 #error_log logs/error.log; #error_log logs/error.log ...

  6. 进程间通信系列 之 socket套接字及其实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  7. myeclipse离线安装PyDev

    MyEclipse装好了,用来开发java web的,一直可以用,前几天用python写爬虫,也是在myeclipse下,离线安装的包.打开后配置了一下就可以了. 这里用的是PyDev2.8.2    ...

  8. poj3304计算几何直线与线段关系

    Given n segments in the two dimensional space, write a program, which determines if there exists a l ...

  9. 1008 Elevator

    Problem Description The highest building in our city has only one elevator. A request list is made u ...

  10. java线程(四)

    java5线程并发库 线程并发库是JDK 1.5版本级以上才有的针对线程并发编程提供的一些常用工具类,这些类被封装在java.concurrent包下. 该包下又有两个子包,分别是atomic和loc ...