我的2013

前言

每年到这个时候,总需要回顾过去,展望未来。2013这一年学到了很多东西,收货了很多,也成长了很多。主要在技术和生活上面,让自己有了记录一下的冲动。

技术

在技术上面,这一年接触了很多新的东西,让自己眼界开阔不少,同时也开始自我提升,疯狂的在github上面玩开源,只是很多都惨不忍睹。

Openresty

今年最开始接触的新东西就是openresty,一个集成nginx的web应用开发框架。

最开始,我们项目的架构采用的是前端nginx做proxy,然后将请求反向代理到后端python tornado的方式实现的。但是随着压力的增加以及一些新功能的上线,这套架构开始显现其局限性,首当其冲的在于慢,虽然可以通过增加tornado进程的方式来进行负载均衡处理,但我总觉得不是长久之计。

同时,随着业务逻辑的复杂,一些操作需要多个service协同完成,然后在返回给用户,而在什么地方组织多个service的数据以及逻辑也成了我们的一个难题。

鉴于上述几个原因,我开始研究openresty,因为之前有3年多lua开发的经验,所以非常容易上手。同时,通过研读openresty的一整套源码,真正的了解了nginx以及之上的openresty的运行机制。可以这么说,这段时间我从一个连nginx配置都不会写的小白程序员一跃成为了名义上精通nginx开发的屌丝程序员。

自然,我开始在项目中推广openresty,这也得到了大家的支持,现在虽然我们很多代码仍然是使用python在编写,但是对于很多高性能模块我们已经逐步转向了openresty。

在使用openresty的时候,还提交了几个bug,这点颇为自豪,同时也写了一些东西,譬如 Introduction To Nginx

Go

接触go纯属偶然,在上半年终于完结了一个持续时间特长的项目之后,整个组的童鞋都陷于一个无事可干的真空期,也就是在这段时间,第一次学习了go,立刻就被它的简单强大所吸引,尤其是在服务器并发编程方面,那可是非常的强悍。

于是,我带着两个完全不懂go的童鞋开始了我们推送服务器的编程之旅。最开始的时候,因为两位童鞋只会python,为了尽快的出功能,一些后台的服务采用tornado搭建,而我用go写了挂载大量长连接的comet服务。

这里不得不说go开发服务的快捷,在goroutine以及channel的机制下面,没有了层层的callback,没有了死锁,我只用了3天就弄出了comet,而且能持续稳定运行。

鉴于用go成功开发了comet,我让另外两个童鞋也开始用go重构先前写的python逻辑,进展也很顺利。

不过对于我来说,go现在最大的一个问题在于内存占用,go现在默认的stack大小为8k,对于需要挂载百万连接的comet来说,内存开销实在太大,虽然现在机器的配置完全不需要我担心,但总觉得有点不爽。不过如果优化,也是后续的事情了。

今年,对于我来说,竟然吃了两次螃蟹,第一个就是openresty,而第二个就是go,而且很幸运的是都能在项目中实施。

Libtnet

今年,我真正的开始了一个算是比较大的开源项目:libtnet,它是一个参考tornado的c++高性能网络库。之所以写libtnet,主要是为了后续能用到comet上面,同时也让我自己对多年的网络编程做一个总结。

以前总说自己精通网络编程啥啥的,其实心里面也知道是用来忽悠的,毕竟精通这个词没多少年的沉淀是不可能的。但是通过写libtnet,不说精通,至少让我又对很多网络编程的东西了解了。

不过libtnet的问题在于使用c++进行开发,同时大量采用function + bind的开发模式,对于组内的童鞋来说理解上面还比较困难,如果在项目中实施很有可能面临只有我一个人维护的窘境。

移动开发

今年没事的时候也涉猎了一些移动开发的方面,包括android以及ios。在android上面开发了一些小应用,只是都是自娱自乐。在ios上面使用cocos2d-x开发了一个小游戏demon,也当是消遣了。

不过在明年准备好好的尝试一下该领域的开发。尤其是ios上面,毕竟老婆都有了土豪金了,为了展示老公的程序员风采,再怎么也得弄一个出来。

工作

今年在公司,我开始尝试站着上班,不得不说这对我工作效率的提升有很大的帮助,站着上班,不光减肥,还能让我专心工作,因为任何的聊天浏览网页都是一件很耗费力气的事情。这里也不得不佩服自己的毅力,每天竟然都能坚持站7,8个小时。

生活

生活上面今年最主要就是几件事情:

  • 举办了婚礼
  • 老婆怀了孩子
  • 拿到驾照
  • 买了小车

可能对于我来说,明年在生活上面最大的事情就是要照顾孩子了。

总结

总之,2013过的很快,但也过的很充实,希望自己在2014里面越来越好,能有更大的突破。