坚信科学,分享技术

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

在c/c++中解决SHA1WithRSA/ras/X509的过程记录

过去六年在小米搞(wa)错(keng)的几个技术细节

54chen的程序人生

c++ protobuf中set_allocated引起的double free core dump

服务质量衡量抽象心经

8182015年总结和2016年预测

如何练就高效率团队

macos下vim YouCompleteMe快速安装记录

R u ok--客户端网络优化实践

大规模业务服务器开发总结

disruptor thrift server连接参数与rps数值影响记录

基础环境 rmbp 8G MEM Intel(R) Core(TM) i7-3615QM CPU @ 2.30GHz 四核 八线程 oracle jdk 1.7.0_45 原理 如上图,是类似tomcat的nio实现过程,不过将queue换成了高性能的disruptor,可能会得到更好的性能。可调整参数为numAcceptors,numSelectors,numWorkersPerSelector三个值。 测试的代码位置在 https://github.com/54chen/disruptor_thrift_server 项目中的BenchmarkTest同时启动一个server,同时对其进行压测。 AbstractDisruptorTest.Service类中实现了server的逻辑,里面实际上是一个加减乘除的简单方法,故意加了300ms的sleep以尽可能模拟真实的消费时间。 BenchmarkTest类中实现了client的压力逻辑,固定了200个线程同时死循环地进行访问,同时进行计数统计rps。 调整记录 1.A(cceptors):4 S(electors):2 W(orkersPerSelector):2 处理接入的线程数:4 处理调用逻辑的线程数:2 推荐是cpu的核数以上 每个处理逻辑上的worker数量:2 结果: Rate: 16 req/s Rate: 12 req/s Rate: 12 req/s 无reset等异常。 2.A:40 S:2 W:2 结果: Rate: 16 req/s Rate: 12 req/s Rate: 12 req/

Continue reading

Posted in java | Tagged , | 2 Comments

Cassandra的thrift用法学习手记

__English Version__The notes about the usage of Thrift in Cassandra Cassandra在client访问server cluster的时候使用了thrift,在cluster node间的通讯,依旧是自己实现的二进制协议。 先决条件 thrift 0.9.1 mac libthrift-0.9.1 Cassandra 2.0.3 本文所涉及的代码:https://github.com/54chen/cassandra-thrift 看代码 thrift的定义:server的逻辑实现代码叫做Processor,创建的等待socket代码里叫做Transport,最后启动的进程叫做Server,大致就会有要启动一个thrift server,需要有一个socket(Transport)和一堆逻辑(Processor)。 这里有一篇2011年写的thrift入门手记:http://www.54chen.com/java-ee/thrift-quick-start.html 示例代码中以TNonBlockingServer来举例。TNonBlockingServer是采用libevent lib实现的一种thrift内置的server类型,理论上是最快的一种。 CustomTNonBlockingServer Cassandra并没有默认使用这种类型的server,默认的是基于TServerTransport连接完成的CustomTThreadPoolServer(自行实现了连接池)。 以示例代码为例: Cassa

Continue reading

Posted in java | Tagged , | 1 Comment

BLUNO试用手记

准备工作 rmbp BLUNO ×1 Android 4.3+ Devices with BLE or IOS 7.0+ Devices Accessory Shield with Arduino ×1 Micro USB cable x1 http://freeware.the-meiers.org 下载安装简化串口调节工具CoolTerm。 通过AT指令配置BLUNO的蓝牙属性 1.把BLUNO上的AT开关,从NORMAL拔到AT 2.连接BLUNO到电脑,打开CoolTerm 3.CoolTerm -> Options -> baud rate -> 115200 -> ok 4. Connect 5. Connection -> send String 6.弹出来的框框可以输入AT指令了 注意:Port要选择USBmodem***,因为电脑有延迟,如果没出来,可以拔了重新插入micro usb线,然后点下面的Re-scan。 7.(注意每个指令末尾要加回车)send之后,后面如果提示OK,表示发送成功,其他的提示或者没有提示,回到3。 常见AT指令集 AT+NAME=? - 你叫啥名字 AT+NAME=54CHEN_110005 - 把你的名字改为54CHEN_110005 AT+MAC=? - 你的mac地址是多少 AT+RESTART -去死吧 AT+CONN_INTERVAL=? -多少秒搞一次尝试连接? 设置好BLUNO Input : AT+ROLE=ROLE_PERIPHERAL Answer(Return):OK // 角色调整为周边设备,

Continue reading

Posted in linux | Tagged | Leave a comment

java 1.6.0_38-b05 vm 20.13-b02优化手记

基础: 业务代码 rose框架(底层是spring) resin4 java 1.6.0_38-b05 centos 初始配置: 只修改了以下三个值 -Xmx5000M // max的heap的大小。 -Xms5000M // min的heap的大小,就是一初始给的大小,不够先GC,还不够再加,直到max。 -Xmn2000M //young区的大小,一般来讲:heap=Y+O,P是额外的值。Sun推荐Y=heap*(3/8)。 gc情况解读: # jstat -gcutil 20538 1000 100 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 51.96 62.53 73.42 99.93 35830 1554.778 185 1089.488 2644.266 0.00 51.96 69.83 73.42 99.93 35830 1554.778 185 1089.488 2644.266 0.00 51.96 77.75 73.42 99.93 35830 1554.778 185 1089.488 2644.266 0.00 51.96 85.79 73.42 99.93 35830 1554.778 185 1089.488 2644.266 0.00 51.96 92.35 73.42 99.93 35830 1554.778 185 1089.488 2644.266 S0\S

Continue reading

Posted in java | Tagged | Leave a comment

《移动互联网技术挑战》-ssdc

以下是上周末在苏州参加的活动使用的slide,http://softwaresuzhou.org。 看不到的同学请猛击这里 ssdc-移动互联网技术挑战

Continue reading

Posted in 架构研究 | Tagged | Leave a comment

百人共用企业maven私服nexus迁移搭建手记

三年前,小米的第一个nexus(版本1.8.0)在一台dell的办公机上安装完成。域名为http://www.a.com。 三年后,a.com时不时已经慢得不行了。特别一到周一,大家都在update snapshot的时候,完全陷入一种无尽的痛苦中。 然后弄来了一台专业server做这事情,域名为http://www.b.com。版本到官网一看,已经2.64了。日新月异! 看升级文档顿时没了兴趣考虑升级,全新从零安装。 最后的办法是,在新机器上安装新的,把老的仓库挑出来设置为proxy类型。然后启用了ldap,同时保障大家都有deploy权限的同时,最大保障大家的密码不明文出现,同时通过代理ngx来限制最大上传的包,同时规定了snapshot的使用规则,防止在线上使用snapshot。以下是详细记录: 一、下载安装nexus和配置nginx 找个磁盘分区不小的: wget http://sxrelease.n.miliao.com/nexus-2.6.4-02-bundle.zip unzip nexus-2.6.4-02-bundle.zip bin/nexus start 然后就能用了。http://www.a.com:8081已经启动了。当然了,如果还不能访问,应该是iptables在捣乱,试一下iptables -F。 [nginx安装忽略] 然后再在此机器上配置一个nginx代理到8081端口上。只举是为了:1.分担jetty的访问压力,毕竟公司人已经越来越多了。2.好做后续更多的事情。 server { listen       80; server_name

Continue reading

Posted in 架构研究 | Tagged | Leave a comment

移动互联网系统架构十大陷阱

过去的三年,54chen一直奋斗在中国移动互联网一线,历经各种坑爹的情况。以下特做记录。 Top 1.时不我待 连通性 cmwap cmnet这样的词语以后应该都会消失在人世间。三年前,经常性地有移不动联不通手机连不上服务器机房的情况。两年前,这种情况要好了一些。一年前,改善很多。现在还存在。相信未来会越来越好,时代在召唤!解法,花钱找有“背景”的机房。 Top 2.生不逢时 HTML5 在去年的网络情况下,HTML5依旧不适合用来做优秀的app。前几年的时候,网速各种烂的情况下,2G下的html5应用基本上完全不能用。现在好一点,开始有闲人把html5全部封装好native的调用,使其只做view的显示部分,但是,性能也是个大问题。当然了,同样地,相信未来会越来越好,同样是时代在召唤!解法,过几年再用。 Top 3.环境恶劣 DNS DNS解析也有失败的情况下,app做得再漂亮,请求也不可达。IP要比域名靠谱一些,却有别的问题。解法就是在客户端多留下点域名和ip,一个不能用换下一个。 Top 4.车匪路霸 http拦截 天朝运营商,可以干得出你想不到的事情。各种小广告帖你家防盗门上。所以你最好还是在header里声明好了:畜生,这个不是html,这是json,不要加广告! Top 5.五花八门 app添加按钮一定要克制 特别是android app,完全没有限制,或者统一标准,什么样的App都有,做一个大气的App,最重要的一点,看看能不能打开就是主要功能,手指点一下就能到重要功能。 Top 6.逆流而上 完全不要在传统web上有所期待 除了新浪微博、QQ空间这种从传统

Continue reading

Posted in 架构研究 | Tagged , | Leave a comment

又拍云cdn试用体验

十一之前,又拍云存储(upyun.com)市场部的谢静同学邮件我,让我试用又拍云的功能。之前在infoq或者是之类的技术讲座上有看到过又拍云的报道和技术架构讲解,印象还是不错的,本着支持创业提升期企业的态度,特写此文写下全部试用感受。 用法 我的用法比较简单,因为diahosting给我提供的vps在国外,流量是个大问题,所以写博客时,基本都不上传大图片。遇到要上传的图片,之前基本都是两个地方,一是淘宝(嘿嘿,提醒淘宝的兄弟不要把那个上传的口关了哈,淘宝的cdn岗岗的!),二是新浪微博。 上述两个老办法的坏处:淘宝的话,每次上传打开步骤都老麻烦了,又是密码又是选上架之类的。微博呢,又老有那个水印。二者图片质量都不行,老是压缩得不行了。 申请了又拍云存储之后,直接使用它的ftp功能,无压缩,cdn速度也岗岗的。http://www.54chen.com/architecture/how-to-document-code.html 此文中第一个图即为又拍云提供。 使用记录(mac下纯ftp命令记录): localhost:~ chenzhen$ mkdir -p 54chen-pic/1008 localhost:~ chenzhen$ cd 54chen-pic/1008 localhost:1008 chenzhen$ cp ~/Downloads/wallpaper_1282030786.jpg . localhost:1008 chenzhen$ ls wallpaper_1282030786.jpg localhost:1008 chenzhen$ ftp v2.ft

Continue reading

Posted in WEB相关 | Tagged | 2 Comments

如何写一手好文档(好代码)?

好久没见。 中秋去了一趟草原,放空了大脑,回来灵感突发,对文档、代码写法这方面的感悟多了些,特记录一下。 一、什么样的文档(代码)叫做“好”? 任何一篇文档,目标都是给别人看懂。 任何一段代码,首先也都是别人能看爽了才是目标。 以上述“世界观”为准,很容易得到文档(代码)好不好的结论。 以80后小时候读的连环画为例,它就是优秀文档的典范。 像连环画这样优秀的文档,主要具备以下几个特点: 1.长篇被分成小节。 2.小节中关键页有图。 3.描述言简意赅。 4.页数固定不多。 典型地,如果在写文档(代码)时,能够做到上述四点,都是优秀的。 比如: PHP文档造福了多少PHP程序员,让PHP这门语言流芳百世、追随者众多。在PHP文档中,每一小节都进行了特别归类; 在关键位置还有不少例子代码; 每个方法的作用也是言简意赅; 每一小节的数量都不是很多。 再来看nginx代码,完全是一个大型服务端软件构建的一个范例。只看src目录中的源码,从一开始就分成了core、event、http、mail、misc、os,这样相当清晰明了的层级结构和定义,让后续很多事情方便扩展; 每一部分的代码都能够让读者一眼看明白是做什么的; 每个细节的方法长度也不是特别长; 每个分类里的内容也相对是固定的,后续的改进都是在plugin上比较多。 二、几种实际的土办法提高文档(代码)能力 在上述建立好了对好文档(好代码)的世界观之后,下面再分享一些总结出来的套路,如果前面世界观没理解透,只把这里的土办法理解了,也能写出来容易读的文档(代码)。 办法一、写文档先写段落标题,写代码先建分类目录(java叫做pa

Continue reading

Posted in 架构研究 | Tagged | Leave a comment

记最近的事情-有关小米

最近小米好事连连,许多事情大家都知道了,这里只是纯粹的以个人视角把遇到的一些照片整理出来。按常规,只代表个人观点,与所就职公司没有半毛钱关系。还有很重要的一点,没有F码! 以下,按照记叙文的过程进行一一记录。 2013年08月30日,据纽约时报当天的报道,“智能手机制造商小米公司在周四宣布,该公司已从谷歌公司(Google)挖来一名高管,出任拓展其国际业务计划的带头人,这是中国手机行业出口雄心勃勃的一个迹象”。出处见:http://cn.nytimes.com/technology/20130830/c30xiaomi/ --你有可能打不开,别问原因,可以问候方校长。 没错,Hugo Barra,前Google全球副总裁,android的老大,加入了小米。以下是当天虎哥来我米报道的情形: 请自行忽略穿工作服的保安哥,他老是让我出示工牌。 2013年09月04日,HBase的头号带头大哥Michael Stack来到小米,给MITC进行了一场为时2小时的技术交流活动。以下是海报, 然后进入到现场: 当然了,他此行的原因有一部分是想来看一看这家为国际开源项目做出贡献的中国公司是什么样的,这主要是依靠我们优秀的小伙伴们。 还有这一张照片要附一下,多少是个心意: 2013年09月05日,秋了,还没有树的叶子飘然而落,没有凄凉地在空中打着旋儿。天空不是灰色的,空气有一点冷冷的。偶尔飞过一只麻雀,传来的也是愉快的叫声,仿佛知道当天要在国家会议中心发生什么…… 我相信,我所知道所有的细节你都知道,直接上图算了。 场子的外面,才到的时候,没门票进不去的。 米聊的易拉宝。 最后

Continue reading

Posted in 生活备份 | Tagged | 1 Comment
Page 1 of 5112345102030...Last »
尝试与54chen交流:
Twitter sina微博V GMAIL GitHub

 

54chen,真名:陈臻。
2010年加入小米科技。
关键词:
rose,riak,rabbitmq,zookeeper,thrift,nuclear,
senseidb,hadoop,hive,dynamo,
php extension,nginx module

天下风云出我辈,一入江湖岁月催.
鸿图霸业谈笑中,不胜人生一场醉.
提剑跨骑挥鬼域,白骨如山鸟惊飞.
尘世如潮人如水,只叹江湖几人回.

过去的经历:
人人网分布式研究人员(nuclear系统开发者)
雅虎、淘宝搜索开发工程师
金山词霸开发工程师
曾用代号有:cc0cc、零蛋。

SEARCH

接受捐赠

Comments

  • 54chen: 没有加@DAO注解...
  • 54chen: 移步github看看qieqie最新的版本吧。事...
  • 54chen: MysqlParse...
  • 54chen: 建议使用resin作为容器...
  • 54chen: jade目前版本还不支持存储过程调用...
  • 54chen: int返回就是update影响的行数...
  • kui.: 我在DAO那里,老是注入失败?? 快奔...
  • anonymous: 我也是,估计是框架本身的BUG。顺便...
  • anonymous: 请问rose的最新版有没有增加事务的支...
  • 叶良辰: chen老师,请问 那个SQL表示式的for循环...