专注于
IT技术和业内交流

使用Go语言代替node.js实践

使用Go语言到生产环境已有半年,其优秀的性能,内存管理及便利的Goroutine让人爱不释手。Go在语法上比较保守严谨,因此代码的正确性有很大的提升,但也使得其代码量上远远多于nodejs+CoffeeScript组合。

  之所以使用Go语言,直接原因是node.js在一个日1亿多次ajax请求同时1万websocket长连接的HTTPS服务端在内存上有类似泄漏的表现。debug发现是在启用SSL后,废弃数组中大量faye-websocket对象积压,究其原因,可能是使用不当,也可能是应用设计上的缺陷使得Javascript无法及时回收内存。由于修复无果便尝试寻找一种高速且容易使用的语言,Golang似乎非常符合,特别是Goroutine特性更是超出了期望。使用Golang重写了服务后,内存使用降低了70%,由12G缩减至4G,且非常稳定,同时性能提升了40%。唯一美中不足的是Golang的HTTPS工作不理想,用标准库http.ListenAndServeTLS直接使CPU满载,接nginx前端转发后问题改善,虽然多了层转发,性能与内存还是让人满意。

CPU使用情况:

3月底改用Golang后由16%降至10%

Golang

内存使用情况:

3月18日之前内存存在缓慢增长现象,但尚可接受。

3月18日切换至HTTPS,内存增长速度大幅提升,一天即可消耗20G以上内存。

3月底改用Golang内存降至4G,且长期稳定在4G~5G范围内。

Golang

小结:

  Golang的诞生有着很强的目的性,所以根基显得非常的沉稳,语言未来针对高性能,高并发的优化也更得心应手。更主要Golang可以切实的解决实际问题,并在内存与CPU使用上大幅优于node。为此,针对有大量请求的服务端,Golang是个不错的选择。

  再反观昨日之星node,作为node的深度用户,也想为其说点好话,但对比Golang,却找不出绝对优势,似乎只剩下Javascript的灵活性,前后端通用,CoffeeScript的语法糖,以及丰富的包积累。站在Golang角度,其严谨也有其道理,代码质量确实高很多,各有优劣,Golang的包也正在丰富中,常用包该有的也都有,有时甚至可以直接拿C的来用,也难分高下。

  综上,Golang在与node的竞争中具有一定的优势,node的的地位和应用范围势必都将受到了不小的冲击。而Golang能走多远,让人拭目以待。

未经允许,不得转载本站任何文章:代码山 » 使用Go语言代替node.js实践

分享到:更多 ()

专注品牌化高端网站建设

商务服务联系我们