NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Timehop 为什么使用 Go 替代 Rails

  • 2015-03-09
  • 本文字数:1084 字

    阅读完需:约 4 分钟

Go 语言从一面世就受到了很多开发者的关注,尤其它的并行机制使得开发者能够非常容易地编写多核和网络应用。当前,越来越多的项目基于 Go 语言实现,如著名的开源容器Docker PaaS 平台 Deis 、Google 的 Kubernetes 等。此外,还有众多项目迁移到了 Go 技术栈,如 Dropbox 从 Python 转向了 Go Bowery 从 Node.js 转向了 Go 等。近日,社交应用 Timehop(中文译为时光机)的联合创始人 Benny Wong 发布了一篇题为《 Timehop 为什么使用 Go 替代 Rails 》的文章,该文章对 Timehop 从 Rails 转向 Go 的经历进行了总结。从文章中得知,Timehop 的技术栈于 2013 年经历了从 Rails 到 Go 的转变;至今,Timehop 已经高效、稳定地运行了一年半时间,并且每天活跃用户数达到了600 万,其中95% 的请求响应时间从Rails 时代的700 毫秒减少到70 毫秒。InfoQ 编辑现对文章进行了整理和汇总以供读者参考和学习,具体内容如下:

为什么需要技术栈的转变

Timehop 自上线以来,其用户规模不断扩大和访问量不断增长,基于 Rails/Ruby 的 Timehop 渐渐地出现了性能瓶颈,Timehop 急需高性能、支持并行处理、真正多线程的平台 / 语言以解决遇到的性能瓶颈问题。

为什么选择了 Go

Go 能够完全满足 Timehop 对高并发和并行处理的需要,其具有以下主要特征:

  • 性能方面:Go 代码被编译为机器代码,所以不存在虚拟机或解析器等带来的额外开销
  • 静态编写方面:Go 利用计算机来处理所有的编写错误,从而减轻了自己的负担
  • 并行处理方面:Go 提供了语言级别的并发特性,这些特性使得 Go 的并行代码具有较高的可读性、条理性、安全性
  • 其他方面:Go 还具有程序部署非常简便、标准库非常丰富等特征

Timehop 的开发团队还对选择 Go 进行了一些讨论,如使用 Go 后会出现哪些意外、如何完成团队的技术切换、Go 有哪些不足、部署时有哪些关键的库需要注意、如何进行托管和部署、能否使用 Go 创建 API、Go 程序在多态性和模块化方面是如何处理的、Google 对 Go 的支持情况等,这些讨论内容为大家将自己应用的技术栈转向 Go 提供了参考依据。

此外,有关转向 Go 技术栈的经验总结,读者还可以阅读 InfoQ 去年发布的一篇题为《 Bowery 为什么从 Node.js 转向 Go 》的文章,文章总结了基于云技术的开发平台 Bowery 从 Node.js 转向 Go 的原因,这些原因包括 Go 具有强大的跨平台编程能力、快速部署、并发原语的支持、标准化的集成测试框架、强大的标准库、强大的开发者工作流工具等。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-03-09 09:423980
用户头像

发布了 46 篇内容, 共 51.4 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

【LeetCode】从上到下打印二叉树 Java题解

Albert

算法 LeetCode 6月日更

带你剖析鸿蒙轻内核任务栈的源代码

华为云开发者联盟

鸿蒙 任务栈 任务调度 任务上下文

密码学系列之:生日攻击

程序那些事

加密解密 密码学 程序那些事

如何进行可视化大屏视觉设计?

博文视点Broadview

Java 并发编程——线程池开篇

Antway

6月日更

证券互动问答平台关键词监控提醒

木头

互动平台 证券监控 股市消息 监控提醒

一文教会你认识Vuex状态机

华为云开发者联盟

Vue 应用 vuex 事件 父子组件

Kubernetes 的自动伸缩你用对了吗?

张晓辉

Kubernetes k8s最佳实践

内嵌双向链表的设计与实现

实力程序员

模块六作业

c

架构实战营

如何针对美工与设计师的Maya工具进行版本控制

龙智—DevSecOps解决方案

大道看“虚实”,DOM的虚实并进

法医

Vue 大前端 6月日更

开发感想 基于8051的数据采集系统(科技向)

万里无云万里天

经验总结 6月日更

春色满园关不住,带你体验阿里云 Knative

阿里巴巴云原生

云原生

如何科学制定和管理项目计划?

万事ONES

项目管理 ONES 项目经理

☕️【Java技术之旅】站在Linux操作系统角度去看Thread(线程)

洛神灬殇

线程 Thread 6月日更 内核线程

理解Linux之文件I/O——知其然,知其所以然

奔着腾讯去

文件管理 Linux内核 文件I/O I/O模型

宜兴牵手百度智能云共建人工智能应用中心,推动数字经济创新发展

百度大脑

人工智能

质量分析工具-监控大厅大揭秘

anyRTC开发者

音视频 WebRTC sdk

百度灵医智惠明星案例获人民日报点赞:智慧医疗让看病更便捷

百度大脑

人工智能 智慧医疗

读深入ES6记[二]

蛋先生DX

ES6 6月日更

【Flutter 专题】109 图解自定义 ACERadio 单选框

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

Locust完成gRPC协议的性能测试

陈磊@Criss

Webpack 系列:如何编写loader

范文杰

webpack 6月日更

那个陪我打王者的兄弟进了阿里

艾小仙

小白必看的,JS中循环语句大集合

华为云开发者联盟

JavaScript js 循环语句 while循环 for循环

企业应用AI之路怎么走?飞桨实践有真知

百度大脑

AI 飞桨

构建高可用的MySQL

林一

MySQ MySQL 高可用 Maxscale

聊聊追求测试技术导致过度测试

陈磊@Criss

待办事项列表,敏捷项目管理的核心工件

万事ONES

Scrum 敏捷 研发管理 ONES

想做DBA,多租户管理你一定要知道这些

华为云开发者联盟

多租户 GaussDB(DWS) 资源池 存储空间 资源隔离

Timehop为什么使用Go替代Rails_Google_李小兵_InfoQ精选文章