2014年4月 ’ 的文章存档

Twitter:使用Netty 4来减少GC开销

在twitter,需要网络功能的核心模块使用的都是Netty。 比方说:

  • Finagle是我们的协议无关的RPC系统,它的传输层是在Netty之上构建的,许多内部的服务都是通过它来实现的,比如说搜索服务。
  • TFE(Twitter Front End,Twitter前端)是我们专门的填鸭式反向代理,它使用Netty支撑了大部分面向公众的HTTP及SPDY的流量。
  • Cloudhopper每个月都通过Netty向世界各地的数百个移动运营商发送数十亿的短消息。

可能有的人还没听说过Netty,它是一款开源的Java NIO框架,能让你更容易编写出高性能的网络服务器。前一个版本的Netty 3使用Java对象来表示IO事件。这样做比较简单,但会产生大量的垃圾,尤其是在我们这种规模下。最新的版本Netty 4中做了一些改进,短生命周期的事件对象已经不复存在了,而是通过生命周期较长的管道对象来处理IO事件。 同时还有一个专门的缓冲区分配器,它使用缓冲区池来进行实现。
阅读全文

MySQL体系结构

了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。

a1
阅读全文

使用Node.js、Twilio实现手机控制门锁

a1

 

试想一下,如果你忘了带钥匙,但你带手机了,你就可以打开门锁。或者,你还在往家赶,可你的朋友已经到你家门口,你通过手机远程把家门打开,让朋友先自己进去看会儿电视。这不是科幻,也不需要多先进的设备,而是自己动手开发出来的。

本文是基于我在波兰的Makerland大会上的一次研讨演讲。这篇文章将会指导你如何通过手机控制你家的门锁,而且是在不需要弄坏或改造门锁的情况下实现。我们需要使用一个微控制器(Arduino Uno),一个电机,和Node.js,用它们来实现通过短信远程开锁和关锁。我是受到了Twilio-powered Lockitron的启发。

步骤1:设备

部件
阅读全文

MySQL源代码管中窥豹(一):磁盘写满之后,数据库show status受到阻塞的原因

摘要: 前两天同事讨论到一个问题,当mysql从库磁盘满之后,show status及show slave status会被卡住,但其他select操作不受影响,但如果数据库是主库,磁盘满了之后,只有dml会被阻塞,select及show是不会受影响的。于是一群人讨论了一会,最后决定,SMC,以下就是我的结论。

注意:

1..以下所有讨论都基于mysql 5.5.37版本及官方文档,不保证适用于其他版本。

2.下文中提到的磁盘满,指的是数据文件(数据文件,日志文件,配置文件)所在磁盘分区。

3.由于篇幅问题,最后面的代码部分,只有关键的函数及逻辑判断部分。

前两天同事讨论到一个问题,当mysql从库磁盘满之后,show status及show slave status会被卡住,但其他select操作不受影响,但如果数据库是主库,磁盘满了之后,只有dml会被阻塞,select及show是不会受影响的。于是一群人讨论了一会,最后决定,SMC,以下就是我的结论。
阅读全文

如何使用mysql存储树形关系

最近遇到业务的一个类似文件系统的存储需求,对于如何在mysql中存储一颗树进行了一些讨论,分享一下,看看有没有更优的解决方案。

 

一、现有情况

首先,先假设有这么一颗树,一共9个节点,1是root节点,一共深3层。(当然实际业务不会这么简单)

eee

原有的表结构如下:

id parents_id name full_path
1 0 a /a
2 1 b /a/b
3 1 c /a/c
4 1 d /a/d
5 4 e /a/d/e
6 4 f /a/d/f
7 5 g /a/d/e/g
8 5 h /a/d/e/h
9 5 i /a/d/e/i

 

 

 

 

 

 

需要满足的几个基本需求为:

1、从上到下逐层展开目录层级

2、知道某一个目录反查其全路径

3、rename某一个路径的名字

4、将某一个目录挪到其他目录下
阅读全文

linux暂停一个在运行中的进程

对于一个运行中的进程,我们可以使用kill -STOP pid命令将其暂停执行,使用kill -CONT pid命令恢复其运行。

下面用一个实例说明:

1、首先使用tar命令打包/usr目录:

[root@vps /]# tar zcf usr.tar.gz usr/

开启一个新窗口查看其进程状态:

[root@vps ~]# ps aux|grep tar
root 18900 2.7 0.4 2760 1068 pts/1 R+ 09:23 0:00 tar zcf usr.tar.gz usr/

进程处于运行状态(R)
阅读全文

linux crontab命令参数及用法详解–linux自动化定时任务cron

crontab 命令

如果发现您的系统里没有这个命令,请安装下面两个软件包.

vixie-cron

crontabs

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
阅读全文

你最深爱的编程语言其实很烂

我最近写了几篇比较严肃的博客,是关于一些沮丧的事情,结果我开始有些忧郁。很严重。所以,我想应该说些比较轻松的事情。我要做的就是数落大家最喜欢的编程语言。你会问我为什么,为什么要搞这种恶作剧?亲爱的朋友,我能想出三种理由。

1. 我无聊,没有更好的事情去做。

2. 我自命不凡,坐在家里,深知即使我侮辱了你编程最喜欢用的语言,你也拿我没折。除非你能发明出这样的东西:\
阅读全文

打造最佳开发团队的几点建议

在灭火时,有一种“水桶阵型”——队伍中所有人排成一列或几列,将水桶从水源处传递到火灾现场。这样在团队协作时甚至不需要语言交流,但显然不适用于软件开发。

Scott根据自身经验,针对软件开发总结了以下几点建议,不一定全面但是值得参考。CSDN编译如下:

组织架构是完成工作的工具,你需要好的工具来增加工作效率。没有永远最佳的组织架构,每一个项目都有最适合它的架构。

我个人的工作经历主要是关于网站早期开发,这是一门非常特定的工作,因此非常偏向于敏捷/迭代的工作模式,如果你是为银行或者航空公司做开发,肯定需要不同的工具和组织架构。

根据我的经验,通常3-5个开发者围绕这一个PM(项目经理)能够达到最佳的工作效率。PM是一个过于复杂并且常被滥用的术语,坦率地说,我非常讨厌这个词。这里我所说的PM是指“解释、阐明项目需求的人”,因此从产品战略的角度PM需要有强烈的想法,清楚需要构建的是什么,但他们更重要的任务是权衡从客户到设计师等等的全部利益相关者的需求,并据此制定计划。
阅读全文

即使别人是码农,你却不该是

qq

 

好几天前,在微信里,有个童鞋给我留了这么一段话:

「程序君,昨日知乎日报上出现的那篇《为啥中国的程序员都被称为码农》(以下简称「码农」),看完实在心酸,作为一名还在大学校园即将走向“码农”大军的愣头青,想请教您,你对那篇文章有啥看法?上面的说法属实吗?中国程序员的现状大体是怎样?麻烦指点」

我大概看了一下那篇文章,说的有些道理。但程序君认为:别人是不是码农与你无关,你不该成为那篇文章作者眼中的码农。作者说码农一词强调程序员「地位低下、枯燥和劳累」。作为一个程序员,我也来随便说说。
阅读全文