自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

转载 ffmpeg+x264 Windows MSVC 静态编译

在为一个视频相关SDK添加h264编码支持时,Android/iOS平台都进展都很顺利,Windows想着也不不多,先编成静态库后扔Vistual Studio做链接,目标是最终都链接为一个动态库。因为有现成的编译shell脚本,开始尝试用mingw编译静态库,发现Vistual Studio链接时因为静态库依赖的 libgcc.a, libmingw.a, libmingwe...

2016-07-01 23:35:00 515

转载 NodeJS Addon 多线程通信

某个产品的Mac客户端计划基于electron实现,因为现有SDK有C API,原理上用NodeJS Addon来封装成JS API就可使用了。但涉及到与Addon多线程交互,翻找资料没能找到到底该怎么做,只好翻看NodeJS实现找到实现思路。实现思路上,NodeJS V8 引擎是libuv单线程的,客户端前台页面逻辑跑在libuv事件循环中,后台SDK跑在独立的线程上。业务需要前后...

2016-05-26 22:15:00 468

转载 c coroutine

今天看了下云风写的关于 c coroutine博客(代码), 发现coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级。具体实现1. 创建一个coroutine: 也就是创建一块连续内存,用于存放栈空间,并设置好入口函数所需要的寄存器 makecontext glibcc语言实现2. resume coroutine: p...

2015-03-11 00:41:00 213

转载 leveldb(ssdb)性能、使用场景评估

  最近有个业务场景存储压力很大,写远远大于读,读也集中在最近写入,想想这不很适合采用leveldb存储么。leveldb的话好像用ssdb比较多,花了两天时间就ssdb简单做下测试,以下总结。  ssdb是对leveldb存储引擎的redis兼容协议封装,并且实现了主从同步,源码不多易读。对于支持的操作,除了get/set KV存储,由于 leveldb 是有序的,还可实现很多操...

2015-01-18 15:30:00 208

转载 [微信协议分析] 多媒体

声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。语音片断语音片断的发送、接收都是通过长连接分包进行:发送:语音录制过程中,客户端每2秒发一次,每次2.5K左右接收:服务器将语音分片文件整体当成一条消息,和文本消息一样的方式推送总结,语音分片发送和文本相...

2015-01-03 19:31:00 209

转载 [微信协议分析] 多点登陆

声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。  IM产品的多点登陆逻辑特别复杂,很难做到很好的用户体验,就像新版mac handoff 功能也不少人在喷。  微信最开始并不支持多点登陆,后来陆续增加的Web版、Mac版,但并不是完整意义的客户端,要说只是辅助输...

2015-01-03 18:16:00 180

转载 [微信协议分析] 文本消息

声明:微信客户端协议是二进制协议而且加密,难以分析协议具体编码格式,我不做逆向工程。只是简单抓包分析业务的实现流程,在这里记录下来用于参考学习,并不是破解协议。参考:微信协议简单调研笔记微信破解研究总结Sync协议  道听途说,加上上面参考中都是提到微信使用Sync协议。去年项目中因此也尝试参考 Microsoft Exchange ActiveSync 协议来...

2015-01-03 15:11:00 1051

转载 paxos(chubby) vs zab(Zookeeper)

参考:Zookeeper的一致性协议:ZabChubby&Zookeeper原理及在分布式环境中的应用Paxos vs. Viewstamped Replication vs. ZabZab vs. PaxosZab: High-performance broadcast for primary-backup systemsChubby:面向松散耦合的分布...

2015-01-03 01:22:00 124

转载 分布式一致性算法

补习了一下分布式相关知识,嗯,还是有很些不懂地方,阅读不少不错资源,记录一下有时间回头再读。 分布式存储的强一致性实现方式:1. Quorum: W+R>N2. 同步复制: 如PacificA3. 复制状态机:分布式一致性协议Paxos/Raft/Zab等学习分布式系统需要怎样的知识?CSE 552 Fall 2013 Lectur...

2014-12-27 22:07:00 70

转载 erlang 健壮性

  erlang 提供了简单易用的并发编程模型,基本不需要再考虑多线程并发问题。但实际应用中并不是那么的完美,很多地方需要注意,就算标准库也有不少问题。很多在多线程编程中很多很容易解决的事情,在erlang中是那么的蛋疼和无奈。erlang专注于自己擅长领域,本身十分健壮,强大的shell,分布式特性,让我们更专注于业务实现;但因缺乏文档、足够的经验资料,初入时很容易用出各种问题。 ...

2014-12-27 13:12:00 89

转载 tcp 出现rst情况整理

正常情况tcp四层握手关闭连接,rst基本都是异常情况,整理如下:1.GFW2. 对方端口未打开,发生在连接建立  如果端口打开,只是sync_backlog满了的话,sync简单被丢弃,表现为超时,而不会rst。3. close Socket 时recv buffer 不为空  例如,客户端发了两个请求,服务器只从buffer 读取第一个请求处理完就关闭连接,...

2014-12-07 16:51:00 435

转载 tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项

linux TIME_WAIT 相关参数:net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭net.ipv4.tcp_fin_t...

2014-12-07 13:19:00 262

转载 erlang 在线生成crashdump

  一般说来抓dump 4种 方式: 1. erlang:halt(“abort”). 2. 在erlang shell下输入CTRL C + “大写的A” 3.等着进程崩溃自己产生dump 4.kill -SIGUSR1 <pid> (shell 无法进入时可以使用)  不过4个方式无一不是需要node crash掉...

2014-12-07 11:35:00 146

转载 erlang 故障排查工具

系统级别perf top, dstat -tam, vtune 都能很好分析beam 瓶颈,本文主要erlang 级别排查:1. 反编译 确认线上运行代码是否正确,reltools没掌握好,升级偶尔出现问题decompile(Mod) -> {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(cod...

2014-12-07 11:26:00 265

转载 erlang 虚机crash

现网服务,每次更新一个服务时,另外一个集群所有node 都跟着同时重启一遍,这么调皮,这是闹哪样啊。。  看系统日志:/var/log/messages  Oct 30 15:19:41 localhost kernel: beam.smp[21880]: segfault at 7fa300006d4b ip 00007fa300006d4b sp 00007fa3...

2014-12-07 11:06:00 150

转载 Erlang C1500K长连接推送服务-内存

上篇Erlang C1500K长连接推送服务-性能提到:150w连接,使用了23GB内存,每个连接占用15KB,约一半是内核使用。大概分析一下:1. Erlang 节点  12GB,内部因为有内存池碎片问题,实际使用9GB,也就是实际每个进程+Port占用越6K,因为采用hibernate策略,已经没水分了。2. linux内核  11GB,通过运行前后, ...

2014-11-30 01:19:00 66

转载 Erlang C1500K长连接推送服务-性能

Whatsapp已经使用Erlang在生产环境跑到96GB内存单机 3M长连接,参加:WhatsApp的Erlang世界。毕竟业务级别能达到Whatsapp那样极少,现在只有千万级,单机太多挂一台影响太大,再者就是没有多线接入,每个机房都得扔那么几台机器吧,所以1M就能满足要求。Erlang 作为长连接网关有着天生的优势:- 擅长与IO密集型业务,也要求将网关设计尽量简单,认证完...

2014-11-30 00:05:00 153

转载 redis lua

  需求是在缓存最近一周内用户所有消息列表,考虑用Redis 存储;为每个存储一个独立Sorted Set,value 为消息体,Score 为MessageId,用以实现增量消息同步。  问题就来了:Sorted Set 怎么清理?    -设计内存容量只允许放一周内最新的,太久了缓存意义不大,太浪费。    -再者存在百万级/s群发请求,不允许写入时触发清理。  理想...

2014-10-25 15:23:00 66

转载 erlang 虚机性能调优

erlang 默认启动参数更多的是针对电信平台实时特性,简单调整参数能很大程度降低CPU消耗,提高处理能力。1. 关闭spin_wait  设置参数:+sbwt none我上一篇文章提到:erlang 调度器CPU利用率低排查,关闭spin_wait 可能增加了调度器需要唤醒延时。关闭后CPU 基本能够简单30%以上,且几乎没有任何副作用,调度器唤醒微妙级,延时可忽略。...

2014-10-18 01:17:00 238

转载 java问题排查总结

前些天发现:http://hellojava.info/ 这个站点,关于java问题排查分析总结线上故障总结其实是最有价值的,好的总结就是一个系统演进历史,是团队难得的积累沉淀。花了不少时间看了下,顺手整理了笔记:1. Hashmap 并发情况下未加锁导致OOM 嗯,死循环很常见,OOM也会有,序列化时HashMap.writeObject 一直执行生成巨大...

2014-10-18 00:54:00 57

转载 erlang 虚机CPU 占用高排查

-问题起因  近期线上一组服务中,个别节点服务器CPU使用率很低,只有其他1/4。排除业务不均,曾怀疑是系统top统计错误,从Erlang调度器的利用率调查找到通过erlang:statistics(scheduler_wall_time) 查看服务器CPU低的机器调度器实际的CPU利用率很高接近100%,而其他机器都不到30%。 分析不同业务服务,发现只有在nod...

2014-09-18 00:21:00 797

转载 android 移动网络实时抓包

2G、3G环境,那就必须root进去tcpdump 方式抓。准备:一、root CF-auto-root:http://autoroot.chainfire.eu/ 需要清理全部数据,注意备份 不用怕root 后的不安全,root权限由superU管理授权。 root 后推荐: 绿色保护、fqrouter、xposed、XPrivacy。...

2014-09-14 15:08:00 116

转载 erlang 分布式数据库Mnesia 实现及应用

先推荐一篇:mnesia源码分析(yufeng)- linear hash ETS/DETS/mnesia 都使用了linear hash算法http://en.wikipedia.org/wiki/Linear_hashingredis dict 的实现类似于linear hash,渐进式rehash,保证操作是O(1)。不过除了每次操作时执行一个b...

2014-09-01 23:22:00 249

转载 WhatsApp的Erlang世界

rick 的两个ppt整理下载:2012 2013 ,使用半年erlang后,重新看这两个ppt才发现更多值的学习的地方,从ppt中整理如下:- Prefer os:timestamp to erlang:now 应该禁止使用erlang:now(),稍微用得多,整个node的%si 飙满,且整体性能数量级下降。- Implement cross-node ...

2014-08-29 23:52:00 170

转载 一次erlang 节点CPU严重波动排查

  新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均。  接下来是排查步骤:  1. dstat -tam    大概每10s一个周期,网络流量开始变得很小,随后突然增大,CPU也激增。  网络流量变化和从性能计数器结果上并不符合,服务相关业务较为复杂,先找出那个业务占用网络流量。  2. iftop  找出...

2014-07-27 23:36:00 214

转载 infoq 微信后台存储架构

infoq 上微信后台存储架构视频很是值得认真一听,大概内容摘要如下:主要内容:同城分布式强一致,园区级容灾KV存储系统- sync 序列号发生器 移动互联网场景下,频繁掉线重连,使用 sync 消息协议是非常理想的。相比于推送协议,更加可靠、实现简洁(不需要考虑离线消息)。从陌陌分享看,也使用sync机制。  可靠高效的序号发生器特别重要的,遗憾的是...

2014-07-27 15:03:00 108

转载 总结初用erlang 时的遇到一些问题

  算起来接触erlang 快四个月来,从零开始看书写erlang代码、修改RabbitMQ、业务开发、系统调优,总算是有点入门了。  最难受的是边学边修改RabbitMQ,难受只是暂时的,憋过去就海阔天空,最后提交修改2000+行代码。  说到坑都是自己技术不过关造成,erlang 设计与一般语言很大不同,虽然简单但还是有不少需要注意点;erlang 是一门非常成熟语言,OTP...

2014-07-06 00:25:00 207

转载 gen_server port 调用receive_match 问题

问题由来  前些天对系统做了一个优化,将原来从queue 轮询刷出数据后每条消息一个 spawn 进程单独处理,修改为批量刷出。一条一条刷轮询刷 queue 存在问题:刷queue 进程太多时,占用CPU,刷queue 少时容易受网络延时影响。修改后,queue 中数据越多,batch 数越大,提高刷queue速度。 但问题随之而来:erlang节点,进程数蹭蹭往上涨,...

2014-07-05 22:45:00 75

转载 erlang 200w进程测试

今天开始学习Erlang,参照《programing erlang》书例子,测试erlang创建进程性能创建N个进程 都wait,然后挨个发送die关闭进程,代码如下:测试场景:200w进程、MacBook Pro 2013(I5/16G)测试结果:processes:max(2000000).Maximun allowed processes:16777216...

2014-03-10 23:58:00 79

转载 haproxy测试

环境:Clients:N台linux, 使用“ab -k -c 20000...” 并发2w 请求haproxyHaproxy Server: R610 2*8核 2.4GReal Server: IIS6 (50字节 html静态文件)使用一台客户端向haproxy发起20000并发请求,如下:1. option httpclose 7000/s2....

2013-07-24 22:45:00 159

转载 软负载方案整理配置手册

因为需要,尝试了预研下面常用几个软负载,大概整理了如下:(自己只是在虚机部署,大概跑跑,没做详细性能测试,性能数值为网上看到的文章归纳,仅供参考):1.LVS 性能最强1. LVS :Linux Virtual Server(VS),请求对于RealServer(RS)都是透明的(不修改Src),使用内核转发,相比应用实现性能要高很多。分为3种模式:l DR:...

2013-07-21 21:42:00 165

转载 IP切换

问题场景:非常重要带状态服务,经常出现机器硬件故障,需要运维手动切换备机,修改配置,反应速度慢。 想过解决方案:1. 一致性hash,目前使用zk临时节点方案有些问题。像如果机器因为网络不稳定掉线,Zookeeper Client在触发Session Expried 事件时,无法确定已经掉线多长时间了,可能已经掉线一个小时了,这会网...

2013-06-11 00:22:00 129

转载 IP冲突-- Gratuitous ARP

主机有时会使用自己的IP地址作为目标地址发送ARP请求。这种ARP请求称为Gratuitous ARP,主要有两个用途:(1)检查重复地址(如果收到ARP响应表明存在重复地址)。 在windows NT下,网卡启动时,TCP/IP协议栈初始化时会最大发送3次Gratuitous ARP请求(初始化1次,0.5s,1s时各一次),当请求收到回应,Window NT将关闭协...

2013-06-10 21:39:00 402

转载 SOHO路由器处理能力

所了解到的网络设备设计情况,网络设备CPU很弱,只用来完成如DHCP、ARP路由更新等较轻工作,主要的路由转发直接有ASIC专用芯片。ASIC芯片类似于一段固定程序由硬件来实现,处理速度和能效相比CPU要高出一两个数量级,而且可以由很多物理核心并行完成;这好比GPU要比CPU在专用计算上的差距。思科最新的路由设备号称一台就能实现中国所有人一起视频的能力。一直挺好奇SOHO路由器如...

2013-06-10 20:02:00 124

转载 redis 一致性hash

使用zookeeper 实现一致性hash。redis服务启动时,将自己的路由信息通过临时节点方式写入zk,客户端通过zk client读取可用的路由信息。服务端使用python 脚本写的守护进程:https://github.com/LittlePeng/redis-manager脚本部署在redis-server本机,定时ping redis-se...

2013-06-10 17:10:00 120

转载 Redis 集群方案

根据一些测试整理出来的一份方案:1. Redis 性能对于redis 的一些简单测试,仅供参考:测试环境:Redhat6.2 , Xeon E5520(4核)*2/8G,1000M网卡Redis 版本:2.6.9客户端机器使用redis-benchmark 简单GET、SET操作:1. 1单实例测试1. Value大小:10Byte~1390Byte...

2013-06-10 16:42:00 199

转载 [知识整理] Mysql Driver & 协议解析

曾经在负责Mysql时,那会觉得IO就应该是异步的,但是C# 版本Mysql Driver竟然只支持同步调用方式,简直不可接受哇。然后就研究Mysql Driver,并改了一版异步的实现,并且做了一次小组分享: PPT,抓包分析 (2011/11/3)。接下来为应对故障排查,也做了一版将Mysql 的Pcap抓包解析成为明文文本的工具,就是下文了。想想那会儿真是比较闲了,还...

2013-06-10 16:12:00 109

转载 [知识整理]使用RawSocket 抓包

曾经写过一个远程网络抓包工具,为啥原远程抓了?在解决现网问题,或者统计数据,需要快速准确的抓取特点的网络吧。我们应用都是windows机器,经常需要抓XX服务某A机到XX服务B机的网络包,定位机器、查部署情况、IP地址、负载配置、同时操作多台设备等等都特别耗时,因为有了这个工具的设计初衷。于是开始设计使用调用Winpcap组件实现去抓,后来发现生产环境很多机器并未安装,同时win...

2013-06-10 16:04:00 455

转载 [知识整理] 导数据工具

以前负责DB相关,经常需要写专门工具将原始数据经过一定逻辑处理后导入目标库,工具需要做在不影响业务的情况下以最快的速度完成导入。 1. 一般数据源只有一个,而目的库有多个,对于DB读取要远快于写入,要注意读取的数据顺序保证能够对多个目的库同时写入。 2. Buffer 整个处理过程分为几段分别并行进行,为保证整个流水线每个时期都并行进...

2013-06-10 15:53:00 93

转载 使用keepalived 实现redis主从高可用

  keepalived官方有中文文档:LVS + Keepalived Chinese application doc- March 16, 2010。  keepalived 实现VRRP协议,从路由级别实现VIP切换,可以完全避免类似heartbeat 脑裂问题。可以很nice的实现主从、主备、互备方案,尤其是无状态业务,有状态业务就需要额外花些功夫了。 既然my...

2013-04-14 23:32:00 143

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除