-
「创新者的窘境」读书笔记
最近参加公司组织的一场针对研发同学的产品力培训,听了很多老师线上线下的分享和互动,收益良多。在产品竞争力的课上多次听到老师提及「创新者的窘境」这本书,读完以后获益良多。现象作者首先观察到了一个现象,许多曾经辉煌和取得巨大成功的公司,为什么在后面无法持续的创新跟上行业发展的节奏而掉队,甚至快速陨落。简单的批评这些公司的管理团队保守、不够努力等等都是一种偷懒的行为,反而他们都是非常优秀非常善于管理的,甚至是带领公司走上成功的一群人。那么就一定是有某些客观存在的规律导致了这些公司的衰落和失败,我...…
-
2021新年计划
又到了一年一度立Flag的时候了,那就开始吧。工作 了解一些解码器,深入学习下E2E模型的设计以及MNN 招聘2个应届生 坚持每周的计划,做好时间管理。少开会,高效开会 团队内培养出2-3个leader生活 去南方的海边旅行 每周陪孩子背一首诗,读4本故事 每周至少运动一次,尝试长跑个人成长读书读完25本书 历史&哲学 「中国哲学简史」 读一本南北朝时期的书 技术类 杂书 ...…
-
2020年度总结
2020年就像是被按下快进键的一年,从年初突然袭来的疫情,到个人工作的调整,感觉每天都在忙忙碌碌中度过。发现每天过于高强度的淹没在日常的工作中,真的会让人智商下降,体现在脑力的衰减和体力的下降。因为疫情的原因,坚持了多年的打篮球的习惯也被中断了,在公司健身房坚持慢跑的习惯也因为膝盖出现不适中止了,今年整个人的心脑体感觉都是在不停的消耗中,时至年底好像也没有恢复的迹象。新的一年,看来首先要做的事情就是恢复体力,身体和精神必须都要保持健康,天平上任何一侧倾斜了,另外一个都没办法很好的发挥出来。...…
-
Netty内存管理
概述netty内存管理中涉及到的几个历史概念: Buddy memory allocation Slab allocation jmellaocbuddy memory allocationwiki上介绍的很详尽,算法也比较易懂。首先选定可分配的最小内存block作为order-0,然后按照2的整数倍逐级递增,一直到某个block为可分配内存的上限位置。举个例子,比如我们设定order-0的block大小为1k,那么order-1的大小就是2^11k=2k,order-2就是2^21...…
-
Grpc_memory_overflow
最近线上遇到了一个Direct Memory溢出的问题,这里记录一下排查的过程,希望能给其他遇到类似问题的同学提供解决问题的思路。首先是线上收到告警,出现了大量服务端错误,而且势头猛烈,第一反应首先肯定是去sls上根据错误码线搜索日志。出现问题的应用本身提供的是gateway网关接入服务,承担鉴权、路由、限流、请求分发的职责,服务端错误集中在两类错误上:gateway服务自身错误和访问下游服务失败。在sls上对日志根据服务端IP聚合,发现集中在少量2-3台服务器上,初步分析问题主要集中在个...…
-
Grpc_articles
保存一些读到的文章列表: 深入了解 gRPC:协议 gRPC客户端创建和调用原理解析…
-
Netty_flow
netty的流控netty作为一个异步的网络处理框架,如果作为请求的代理服务使用或者说作为service mesh的网关,需要能够对自身的可用性做保障。这里就类似大家说的Spark、HBase等框架中使用的反压机制,当下游的接受速度跟不上的时候,避免大量的写操作堆积临时对象在内存中,导致heap 或者 direct memory 溢出。有人在github上给netty提过issue,网上也有人写了文章来分析,大概意思是netty的写缓冲区是个无界队列,如果自己不做控制的话,一旦下游的读取速...…
-
新年计划
新年计划再有几个小时就要是新的一年了,年初自然要立好flag,简单点吧,看看最后执行的如何 读完24本书。平均下每个月2本,希望能做到 学一门新语言。今年应该是golang了吧 坚持写东西。每周一篇,每天30分钟留给学习时间 了解语音相关的算法。既然进入这个行业,就要成为专家 家庭旅行读书计划+ 「Google SRE」 新年第一本就交给SRE的开山之作吧学习一门新语言「Golang」写作 完成「Paxos」的文章…
-
中缀表达式转后缀表达式
最近参加了一次电话面试,对方出的题目是把一个中缀表达式转换为后缀表达式,这里对问题做了一些简化,操作符只有+-*/和左右括号。惭愧的是因为之前数据结构和算法的基础不牢,在几十分钟的时间内都没搞明白后缀表达式是如何去计算的,更不要谈如何去做转换了。结束之后自己先搜索了下后缀表达式。 知道含义了之后,就能开始去思考如何去完成这个转换了。正好在csdn上看到了一篇文章,将整个中缀表达式转换为一个二叉树,树的枝干节点是操作符,叶子节点都是数字,这样一来整个模型就清晰了。从这棵树就能直接很轻松的生成...…
-
Paxos
paxos the simple之前也看过paxos的原版论文,确实看的不明所以。作者估计也是感觉到问题了,所以又来了个simple版本的,还特意强调The Paxos algorithm, when presented in plain English, is very simple :D问题定义在论文一开始,作者强调说这个本身是一个共识算法,其目标就是要保证在所有的提案中有唯一的一个会被确认。 只有被提案的值才能被选中 只有唯一的值能被选中 只有被选中之后的值才能被集群中其他节点...…
-
Learing golang with seaweedfs
0x00项目中使用到了seaweedfs作为对象存储,据称是参照了facebook的Haystrack这篇论文。从实际使用中来看,确实稳定性还不错,IO吞吐也挺好。但是还是存在几个问题: 日志输出的比较少,遇到问题的时候往往无从下手 偶尔遇到读写失败,同样看不到啥日志 曾经莫名丢过一次几百个文件,也找不到啥日志追踪前后做过什么操作所以这回打算硬着头皮,把go和seaweedfs一起研究一下。0x01老规矩,下go的包、源码,下seaweedfs的源码。google了一下,目前好用的g...…
-
Collectd使用snmp收集wlc监控
前述最近被wifi网络下VOIP的语音通话质量折磨,无法自拔。voip的语音数据经常毫无征兆的发生丢包、延迟抖动,但是又是偶发的,无从查起。所以就想还是先搞起监控来呗,cisco的wlc是支持snmp协议的,那就按照设想的路数搞起来呗?collectd通过snmp协议收集指标,感觉都是很成熟的东西了,应该不难吧……使用网上查到的OID,直接就在collect的配置文件上加上了,看看效果先。配置上之后,果然就愉快的出来监控了,对应的指标是ifHCInOctets,指代交换机上面的流量,也可以...…
-
Freeswitch入门1
freeswitch(freeswitch.org)是个牛逼的开源软交换项目,这里有一篇挺好说它发展历史的文章。最近开始研究了,那就先从基础了解起。找了一个比较靠谱的作者写的书freeswitch权威指南,刚看几章,感觉质量还是不错的。书的前面说的安装啥的就不表了,先从配置文件了解起。配置文件列表如下: 配置文件的功能已经基本表述了,下面就挨个看看主要功能。…
-
Voip语音质量分析
继续追杀VOIP语音质量不好的问题,从呼叫中心的开发同学了解到,RTP数据包本身是带有序列号的。虽然是UDP协议,但是因为有序列号所以可以通过计算知道丢包率。但是同样是因为UDP协议,发出去的包是否到达是无法知道的。所以目前在客户端的日志中记录了dump数据,但是只能知道收到的数据包丢包情况,终端上行丢包率无法统计到。这个时候就需要在服务器端抓包,分析丢包率了。需要用到两个命令,抓包:/usr/bin/dumpcap -f 'udp portrange 19384-32468' -i et...…
-
当voip遇上alg
最近有客户在外地办公室使用我们提供的VOIP服务,然后发现一开始外呼就被挂断,而且是几率的……请了呼叫系统技术支持的同学帮忙抓包看了报文,发现是客户网络中有设备篡改了SIP信令。好了,现在问题来了,到底是谁干的呢?开始以为是地方代理商搞鬼,不过发现是客户办公网IP,所以推测是出口网关设备干扰了SIP信令。OPS同事跟我们说怀疑是一个ALG功能造成的。网上搜了下,ALG全称Application Level Gateway,是可以在做NAT的时候针对特定协议的包做一些过滤和处理,wiki上的...…
-
Yarn任务调度
目前线上我们选择的是yarn作为我们spark的资源管理和调度层,主要好处是hadoop自带了yarn,不用额外引入mesos减少了管理的成本,以下所有介绍都是基于hadoop 2.7.3版本。yarn目前我们使用的版本主要管理了CPU和内存资源,CPU以VCore的形式,但是其实yarn不能严格管理具体container使用的资源。以spark为例,我们为每个container配置了最大46G的内存,但是为了给堆外内存等提供空间,spark的executor只配置了42~40G的内存。即...…
-
Java8 flight recorder初探
Oracle在收购Bea之后拿到之前他家灰常牛逼的JVM技术JRockit,其中就包含Flight Recorder。之前一直没有机会使用,这次线上spark集群使用的jdk就是java8的,终于有机会一试身手了。问题首先说下起因,有同学在集群上跑一个spark job,剩下最后一个task迟迟不肯结束。在spark ui上抓thread dump,发现线程卡在fastJson的toString。好嘛,为了输出日志把对象都序列化了,浪费资源,但是按理说也不至于卡到一直跑不完啊。分析首先出动...…
-
Spark sql process lzo json file
为了减少对存储的消耗,dfs中文件采用了LZO的方式去存储,这样就遇到了一个比较棘手的问题。SparkSQL官方文档里面给的示例都是直接读取一个未压缩文件,对于一个Lzo压缩过之后的文件怎么处理呢,找了半天没有找到一个比较直接的方案。看了下spark的scala api,最终找到了一个方法。先用LzoTextInputFormat加载RDD,然后转化成RDD[String],最后让sparkSqlContext直接去读这个RDD。BTW:这里需要注意另外一个问题,使用Lzo做存储格式的时候...…
-
Sicp读书计划
chapter1chapter1.1 The Elements of Programming第一章基本是了解了下lisp的语法,写起来确实就像数学公式,有种久违的简练和直接。基本的思维方法其实看起和之前的过程式编程语言没啥不同。Lisp中解释器执行的顺序是applicative-order,不同于普通的顺序执行,字面意义上去理解的话,就是不到需要的时候不会去执行对应的操作,猜想这样为了优化执行效率?尾递归优化是不是就与此有关呢?不同于C/java,Lisp中操作符是在表达式的最前面,对于自...…
-
我的死生观
庄子外篇至乐:[http://club.ntu.edu.tw/~davidhsu/New-Lao-Chuang-Lecture/discuss_references/references/PerfectHappiness.html]『美丽新世界』…