自我介绍
很开心能有机会参与申请阿里云 MVP 的活动。然后就开始了绞尽脑汁的自我介绍历程。
作为在 Node.js 圈内小有名气的开发者,也是 Node.js 项目的核心贡献者之一,讲通俗点就是我快成为 Node.js 核心贡献者了。有兴趣的童鞋可以上我的 GitHub 围观(https://github.com/XadillaX)。
所以毋庸置疑,我现在是一名 Node.js 工程师,就职于大搜车。没错,那个最近铺天盖地薛之谦广告洗脑的弹个车就是我们公司的产品。我是大搜车无线架构部中间件团队的 Leader,主要负责前后端进行交互的那一层各类产品的研发,比如一个简单易用并且灵活性高的网关系统、用于前后端分离的模板服务端渲染系统等。讲真,你们看到的弹个车页面就是基于我设计的渲染系统 Vanille 进行渲染的。
在大搜车之前,也就是我大学期间,曾经以 Remote 形式供职于一家游戏公司,给韩国的外包客户写过一款老虎机类型的网游(基于一款小而美的 HGE 游戏引擎)。还曾赴西班牙一家类二维码产品的公司(aquaMobile)实习,当时技术栈还是 PHP(PHP 是世界上最好的语言)。后来也跟大多数大学生一样创过业,以技术负责人的岗位搞一款叫汽族网的汽车团购的 O2O 产品,当然也跟大多数大学生一样好景不长。再后来研究生阶段的实习就开始步入正轨,进入了一家小而美的互联网公司,很多人应该都听说过——花瓣网,自此我的 Node.js 技能点正式开始发光发热。
除此之外,我个人还是一个开源的爱好者。虽然不温不火,但是自身还是兢兢业业,研发并维护着一套高效的 Node.js ORM 库(Toshihiko),以及目前的阿里云 ONS 服务 Node.js SDK 也是我开发的,并且个人认为比阿里云后来出的官方 SDK 要流行。
在入坑 Node.js 之前,我有着相较于同龄人来说长很多的编程历程。怎么说呢,在我小学时期(2002 年左右),凭借我的第一本计算机启蒙读物《在网上安个家》习得了 FrontPage 和 Flash 两项技能,从此一发不可收拾。一直到高中接触了 OI 后,便入了算法的坑——个人认为这是我较目前大多数从业者来说额外多出来的经历,到大学继续参加 ACM 续梦。一路算来,应该也有个十五六年的经历了。要说我的技术栈是什么,其实不上高大上的企业级的产品的话,桌面应用、游戏开发、服务端开发什么的都是有做过相关类的从业的。
哦,对了,硬广下,我目前正在写一本暂定名为《Node.js:来一打 C++ 扩展》的书,初稿大约在今年八月要完成(不过我不确定自己会不会拖稿),然后到时候大家就能买到这本电子工业出版社出版的书了。本书会除了单单讲 Node.js 的原生扩展开发之外,还会给读者填充很多的前驱知识,例如 Google V8、libuv、NAN 等等。
跟阿里云的故事
第一次使用阿里云应该是 2013 年,那时学校的实训项目我们做了一款基于校园强关系的 App,我负责服务端的开发。后来项目上线我们就是使用了阿里云的 ECS。不过学校的玩意儿都是小打小闹,小孩子过家家闹着玩的,但也算是初次尝到了甜头。
于是,在我研究生期间接的一些用于自给自足的外包项目都开始使用 ECS 了。其实原因也很简单,我的技术栈在那时已经不再是 PHP 之类的了,而是 Node.js,老一代的那种网页空间(PHP / ASP 之流)已经无法满足我项目的部署了。
后来其实有一段空白期——在我在花瓣实习的阶段基本上没再用过阿里云,因为花瓣系的技术有着自己庞大的计算集群,散落在世界的各大机房。但是有着这样基础的互联网公司其实还是在少数的。
直到我到了现在供职的大搜车。我司是阿里云的重度用户,能不自己运维的系统全部使用阿里云的产品。最基础的就是 ECS 了,除此之外,还有 SLB、OSS、开放搜索、消息队列、MySQL、ProgreSQL、Redis、Memcached、MongoDB、OTS、阿里大鱼等等等等服务。总之能想到的,我们能用的上的,都上了阿里云全家桶。
不过,其实很多产品都是运维同学对它的感知更深一点,比如 MySQL 等数据库,对于我们这种屁民开发来说,跟平时开发时候用本机 MySQL 没什么区别。我个人用得比较重度的比较有感知的服务就属消息队列(ONS)和开放搜索了。
对于 ONS 来说,当时我使用的时候官方只提供了 C++、C#、Java 和 PHP 四种 SDK。对于我司的 Node.js 技术栈来说,使用 ONS 有着很大的一道门槛。但是没办法,我们的 Java 工程师们在用 ONS,作为异构的其中一套系统来说,要与他们对接的我们也必须上 ONS。
一开始我想了一个比较脏的办法,在我们的 Node.js 进程中启动一个自己事先写好的 PHP 脚本,通过管道与 Node.js 进行通信,而 PHP 那边负责与 ONS 进行交互。于是当时我们的 Node.js 项目代码库中出现了很奇葩的一个 PHP 文件。
后来等特性上线了之后,我沉下心来开始着手 ONS 的 Node.js 版 SDK 研发。由于 ONS 的 SDK 并没有开源,而 RocketMQ 也没有详细的协议文档,并且 ONS 是经过订制的 RocketMQ,我不能照抄过去。所以最终我选择了对 ONS 的 C++ SDK 进行封装。在此期间,我并没有中断与阿里云的技术支持的交流,一起讨论 C++ SDK 的各种不足,互相促进。到后来,我联系上了目前 ONS 的 C++ SDK 维护者天千,也一直和他保持联系,讨论 SDK 的完善相关事宜。例如 SDK 在队列内容过多的情况下,内存会无限暴涨;SDK 是在 GCC 4.x 下编译的,在较新的自带 GCC 5.x 的 Ubuntu 版本中无法适用等问题。也促进了他们将 boost 以静态链接库的形式编译进他们的 SDK(可以说这个特性当时是为了 Node.js SDK 订制的)。
现在虽然阿里巴巴官方团队出了 ONS 的 Node.js SDK,不过我个人还是认为我版本的 SDK 功能更为完善,并且我会一直维护下去——C++ SDK 在近期会有一次重构,这会让我的 ONS SDK 以后走上更好的一个阶梯。
其实要说还有对于阿里云还有别的什么贡献,虽然不是我的,但是我团队有人也给没有 Node.js SDK 的 OTS 写了一套 SDK。
我们还比较重度用到的一款原创性的阿里云服务就是 SLB 了。我们所有的线上业务都会用到 SLB 来进行负载均衡。包括我们团队使用 Nginx + Lua 开发的网关系统,其实在它之上也接了 SLB。相当于是两层负载均衡,阿里云 SLB 是进行可用性的一个负载均衡,而我们自研的网关系统则是进行路由的负载均衡和节点选择,对于我们目前有些系统的半微服务的架构、前后端分离服务的架构来说,是非常好的一个选择。
如果成为 MVP
其实成为 MVP 无非就是想一起共建和谐社会和谐阿里云,双方互赢。阿里云自身的产品能更进一步,而我们在使用更好的阿里云产品就是创建更好的自己的产品。
所以,对于重度使用产品是必须的,在这个基础上发现阿里云产品的不足,以及可以改进的地方,与阿里云团队多多交流。在力所能及的范围内,为阿里云的生态也添砖加瓦,比如我们先前做的各种 SDK。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。