我在热拉工作的体验

两年前我以CTO身份加入了一家专注于拉拉社交的互联网公司——热拉。有次和一个身在国外的朋友提起我正在做LGBT,他的第一反应是,wow!so cool!要知道,在硅谷,库克等一帮大佬都是弯的,数据显示硅谷有三分之一公司的中高层都是同性恋。所以在他人眼中,从事LGBT是一件很fasion的事业。配合我不羁的长发和稀虚的胡渣,很多人认为我也是弯的。很遗憾,我是一个直男癌晚期!

在很多人的看来,一个小众社交软件应该是很简单的,做好它应该不难。起初我也认为自己可以驾轻就熟的做好这件事,并且不需要多少的人手,但我很快意识到没那么简单。在我加入之时,热拉已经是上线了一年多,拥有完整的产品形态,几十万体量的用户。所有后端由java开发,每天到了晚高峰时间,服务器都会崩溃。而与此同时,我们的市场推广依然不能停下,产品迭代仍要进行,这对于技术架构改进来说,无疑是雪上加霜。

我提出了招聘更多的人员,拆分为两个后端团队的想法,一个团队进行产品架构的重构,而另一团队则对现有系统进行维护和改进,在重构完成后切换到新系统上。这个方案很快被否定了,相反,我们需要对团队进行压缩,因为我们当时正面临着财务的压力。原本人员就严重不足的后端团队,减少了一位java工程师,和运维工程师。
我们当时无暇去做架构上的调整,并不是我们不明白它的重要性,而是情势使然。我们只能从运维的角度来进行优化,将现有系统看作一个黑盒的系统,从各项指标来分析整个系统的瓶颈所在,按影响程度从高到低进行优化。至少,在晚高峰的时候服务器不再频繁的崩溃了。

为了在进行现有系统优化的同时,依然能满足产品迭代的需求,我尽可能的不增加现有后台的负担,使用node.js 提供完全独立于现有系统的一部分新API接口。选择node.js是因为他的开发效率高,也可以保证与现有系统完全解耦。

在这样的团队结构下,服务逐步得到了稳定,产品也在不断迭代中。虽然过程中我们依然遇到了各种各样的问题,但我们也度过了最困难的时期,成功融资,并且拥有了变现能力,现在的财务状况非常之好。

热拉何时开始引入Go语言的?

在技术选型上编程语言的选型是基础,每种编程语言都有不同的特性,开源社区或是某家大公司支持都会影响它的生态。Java整个生态并不符合我们的“审美”。而且既有的java服务很不稳定,所以我们一直有计划替换掉java。

我们原本考虑使用node.js作为后端主要开发语言,但是我们在人才招聘上遇到了障碍,原因在于node.js工程师的后端能力可以说是良莠不齐。在意识到这一点后,我们决定使用Golang作为后端主要开发语言,而node.js主要应用于web相关的项目中。golang程序员相对而言,编程基础更加扎实,对后端的sense更好。

我们首次尝试Golang,是在聊天系统(IM)中。热拉的IM系统此前是使用的是XMPP协议的开源框架,当时已经达到了性能的瓶颈,难以维护和优化。因为IM系统是相对独立的,重写它对于整个系统架构没有太大影响,所以我决定自己使用Golang做一套IM系统。准确的说我们所开发的是一套网络通信框架,它包含Go服务端框架、Go客户端库、iOS客户端库、Android客户端库。我们的IM系统就是在这套网络通信框架之上开发的,目前已经在线上稳定运行一年多了。

另一个Golang的使用是重写整个后端API。当时我们的用户相比之前已经翻了几番,除了IM之外的功能主要还是在老后台上,在经历了几次严重的故障之后,我们终于决定使用Golang重写。我们的目标是灰度的、无缝的迁移,一切的重写对用户来说都是无感知的。所以Golang在热拉技术架构中的比重也越来越大了

介绍一下技术团队

热拉这个产品除了在用户量级上比其他社交软件小以外,在产品功能上一点也不比其他社交软件少,甚至还要更多,更复杂。对比我们的团队规模,还是非常有挑战的,我们的原则是“小而美”。对于一名程序员来说,还有什么比做一件充满挑战的事情更有趣的呢?

我们下一步的计划是按照微服务架构对服务进行重构,这次是重构而不是重写。你可能会好奇,为什么不直接使用Golang重构,而是先重写,再重构?这一点说来话长,简言之是权衡风险与成本的结果。

我们认为每个微服务模块都应该有唯一的负责人,这可以让每一个团队成员都有自主发挥的空间。一部分的微服务也成为了我们实验新技术的环境,consul,NSQ等技术都有在应用。我们也会在接下来组建数据团队,在大数据架构中依然会选择Golang作为主要的语言,这与很多公司以java为主的做法是不一样的,但我们相信Golang是可以胜任大数据基础架构的工作的,并且可以让我们使用更少的人力资源和硬件资源来完成这件事。当然,这也是一个新的挑战。

所以我们也在 招聘更多优秀的Golang程序员

  • 我们希望你首先对于Golang 语言特性的理解上是扎实的,同时也有3年以上的任意编程语言的后端开发经验
  • 如果你完全没有Golang的经验,但是后端经验非常丰富,并乐于转型到Golang,我们也非常欢迎
  • 如果你在github上有开源项目,在stackoverflow上有贡献答案,有坚持写博客的习惯,请把链接甩给我们
  • 如果你有大数据相关经验那就更合适了
  • 我们鼓励交流和分享,但不鼓励加班,我们认为加班与工作效率不存在正相关性
  • MBP是标配,也可以配备外置显示器

如果你对我们有兴趣,请将你的简历直接发送至我的邮箱: leen@thel.co