说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Timehop为什么要放弃Rails,转向Go?

HTML文档下载 WORD文档下载 PDF文档下载
流行的社交应用Timehop(时光机)能帮助人们回忆起过去某天自己在不同社交媒体上的足迹,自上线以来用户规模不断扩大。Timehop的开发平台经历了从Rails迁移到Go的转变,这其中有什么原因呢?

【编者按】去年,Express.js库作者TJ Holowaychuk由Node.js转向Go语言,并发表一篇文章,对这两门语言进行了对比。现在,又有越来越多的平台转向Go进行开发,例如,CSDN研发频道去年发表的Bowery为什么放弃Node.js,转向Go?那么,此次Timehop又为什么放弃Rails,转向Go呢?


以下为相关译文:

流行的社交应用Timehop(时光机)能帮助人们回忆起过去某天自己在不同社交媒体上的足迹,自上线以来用户规模不断扩大。Timehop的开发平台经历了从Rails迁移到Go的转变,这其中有什么原因呢?

自把Timehop迁移到Go已经差不多一年半了,其中95%的请求的响应时间从Rails时代的700ms减少到70ms,每天活跃用户数为600万。接下来我会总结本次Go迁移过程中的体会与心得,希望能让大家更好地认识Go语言。

为什么选择Go?

运作初期,Timehop是运行在Rails之上的。但随着用户数和访问量的快速增长,Rails渐渐地出现了瓶颈问题。我们很多请求都是需要并行处理的。当用户启动Timehop后,我们需要收集用户在过去的全部社交数据。而不同平台的数据查询都是相互独立的,所以并行处理是高频事件。我们也曾试图与Ruby相结合来做,但效果不理想,因为Ruby不是真正的多线程处理系统。

有鉴于此,我们列出了三个新平台最需要解决的问题:

  1. 能便捷进行并行处理
  2. 真正的多线程系统
  3. 高性能

为什么Go能脱颖而出?

除了Ruby,Node.js也曾经进入我们的视野。但最终我们坚定选择了Go:

  • 性能:Go代码会被编译为机器代码,编译后的程序运行速度可与C/C++媲美,并且无需额外的虚拟机和解析器;
  • 静态编写:计算机能掌握所有的编写错误而我们不能。为什么不依赖计算机来处理呢?
  • 稳健直接的并行处理:Go程序和管道使得并行代码可读性高、条理清晰。同时也使并行代码更加安全而无须显式锁,此外也不用担心出现回调错乱。

随着迁移工作的进行,我们还发现了更多的优点:

  • 十分简便的部署工作——编译Go程序时,程序本身及所有程序依赖都会被统一编译为单一个二进制文件;
  • 丰富的配套工具——例如代码格式工具“go fmt”,能帮助开发者消除代码格式不统一的问题。此外Go还有很多强大的工具;
  • 丰富的标准库——使用Go后,很多第三的库都不再需要了。

可见Go十分符合我们之前提出的三点要求,所以我们最后选择了它。但同时,团队里也曾就Go语言进行过讨论,现整理如下。

使用Go后会出现意外吗?

迁移时我们最怕的是影响程序代码的生产力。之前使用Ruby编码时,速度是非常快的。但是使用之后,发现Go不但没有影响编写速度,同时更加稳健,能帮助减少很多输入错误。编译速度也令人满意,我们最大的一个Go项目至多用时2.5s就能完成。

如何完成团队的技术切换?

结合个人体会,我发表过一篇入门文章供团队阅读。此外,Go教程高效Go,Go官网的标准库都是很好的教材。

Go有弱点

对程序依赖的管理。Go提供了一个便捷的导入方法,能以基于路径的方式进行包导入。例如:

import “github.com/timehop/golog/log”

你可以使用go get命令来运行。但虽然是方便,如果有其它人改变了路径或提供的API出现变更,那么可能会造成未知的部署错误。因此我们建议使用部署工具Godep来对程序依赖进行管理。

部署时有哪些关键的库需要注意?

我们曾试图搜索Go on Rails的信息,但一无所获。目前,我们使用得最多的是标准net/http库,以及Gorilla的mux。这也是目前主流的处理方式。

如何进行托管?如何进行部署?

刚开始是托管在与Rails相同的Heroku之上,使用Go buildback进行部署。后来迁移到EC2,部署工作也一样轻松。一如前述,Go程序最终都是一个编译好的二进制文件。

我们目前的流程是:

1.  把代码上传到Github;

2.  使用Travis进行测试;

3.  如果通过,进行编译,压缩,然后上传到S3。

进行部署时,从S3下载tar文件,解压缩,然后运行。(使用的是Chef)

能使用Go语言创建APIs吗?

可以的。比方说,一个User结构体:

type User struct {  FirstName string `json:"first_name"`  LastName string `json:"last_name"`  Password string `json:"-"`}

用户信息项之后的标签定义了如何进行JSON序列化。

如果要输出一个用户实例,可以简单地编写为:

u := User{FirstName: "Abe", LastName: "Dino", Password: "p4ssw0rd"}jsonBytes, _ := json.Marshal(u)

Go程序在多态性和模块化方面是如何处理的?

Go不是面向对象的语言,没有任何的类型分层。同时不存在继承,能自由地进行进行类包含,从而实现多态和代码复用。

另外Go的界面是非常友好的。不同于其它语言需要显式地进行类声明,在Go中一个简单的结构体就可以了。我们觉得这是它最强大的特性之一,具体原因可以参考这里。

Google的支援有多重要?

能持续得到Google的帮助与投入,对于Go语言无疑是一大福音。其社区规模也不断扩大,从而出现了很多高质素的开源项目与参考资源。

写在最后

我们希望本文对Go语言感兴趣的团队有所帮助。要想很好地使用新平台是需要下一番功夫的,不妨与团队成员一起多做多思考多讨论,从而确保项目顺利进行。

英文来自:Medium

Google Play Game Service详解 不仅提供API更提供后端支持 IBM Power走向Linux,是必然的! 美国国家安全局解密特工培训手册:如何利用谷歌等大众搜索工具搜集保密数据 微软IE10如何保护上网安全(大图) 谷歌无畏苹果的理由:强力的算法和基础设施架构 开发者热议异构统一内存访问技术(hUMA) 千万级并发实现的秘密:内核不是解决方案,而是问题所在! Apache RewriteRule重写规则语法入门 IDC:2013 Q1 Android和iOS出货量占92% WP首超黑莓 传雅虎欲10亿美元收购轻博客网站Tumblr A Beautiful Mess:如何赚男人女人的钱 CSS、JavaScript开发者必备的10款最佳工具 IBM推出API管理平台 抢占API经济市场份额 2013中国云计算榜单之一:15云平台,谁主沉浮? 移动周报:百万壁纸、85后程序媛,我为梦想代言! 电信天翼开放平台:为App开发者免费提供云存储和云主机服务 Google新的Web UI库:Ploymer 研发周报:让开发者高效编程的10个新框架 拯救行将就木的PHP:谷歌为GAE添加PHP支持 PPT集萃(一):10位业内高管分享云计算技术理念与行业趋势 得益于苹果谷歌,未来可穿戴技术市场规模可达500亿美元 雅虎11亿美元押注Tumblr三大因素:用户、社交、内容 Perceptual:英特尔感知计算挑战赛 正式启动 吴义坚:创业去!我用深度神经网络,处理语音识别 浅谈用户体验的“反面模式 可穿戴设备又一站:增强现实眼镜CastAR 数字医疗投资将破纪录 投资人看好这些细分领域 Mayer又下一城:雅虎收购Tumblr推进移动化? 前端开发利器:代码预处理工具Prepros 一个轻量级的JavaScript库:Reactor.js [探讨] 用户体验设计师现在面临怎样的机遇和挑战? 请问《程序员》杂志上的那几本外文期刊怎么买??? 我下载了几个rar文件有*.rar\*.r01\*.r02等等,可是这个网站没有提供合并文件,忘了怎么合并了,谁知道快告诉我。copy *.rar+*.r01不管用 请教在线的高人(在oicq上吗?) 我是白痴!大虾,什么是专家分,怎么得,有捷径吗???????????? 图形化界面问题!控件与窗体不重合! 书上的东西我看不董,是关于PB70与COM/MTS的,COM/MTS是什么,谁能告诉我? 怎么样能解决死机的问题? 跟帖比聊天有意思多了,哈哈 过去了,就不要再提 灌水乐园,我的MUD练功场 StringList 与 String的区别 为什么我的组合筐里只有最后的项,即"交叉线",没有其他的内容? 关于Tmemo 共享软件的开发经验 部件(Crystal Repot)引用错误(crystl32.ocx),请高手指点,,谢谢 无数个问题之123 steps你有oicq吗?壮丁!!!sos 怎样将数字字符转化为数字呀? WIN98下能读的光盘到了WIN2000/NT下居然读不出来! WIN98下能读的光盘到了WIN2000/NT下居然读不出来!(我的光盘是刻录的) 我不想要分(也许我只是个女生) 40分=一网址:那儿有Effective C++ 2e电子书? 如何在菜单中加入下拉框?像delphi的那样. 怎样用vb程序实现监控打印机打印输出情况 大家评出水园最有人气的mm,我给分啊,行动要快啊~~~~~~~~~~~~~~~~~~~~明天晚上7点结贴 编译servlet文件出错!急!!!! 寻觅朋友(用delphi优先) 我希望能认识安徽的程序员~~~~~~~~~~~~~~~联系:6011458(OICQ) 很长时间,我还是觉得这是一个事实! javascript中怎么进行数据类型间的转换? 关于非文档视图结构程序的菜单 寻delphi兼职程序员,要求比较懂数据库,多劳多得,不劳不得,报酬从几十元到几千元不等。 在程序中更改Filter to lastlove(☆)robin(★) 关于《深入浅出MFC》电子书 SOS:秦皇岛的小男孩胡颖1岁胡颖1岁8个月,得了白血病,希望大家帮助他,留住他的小生命 所有武大的GGDDJJMM进来报名 所有深圳的GGJJDDMM报道 请各位汇编高手看看这个程序,帮忙找一下错误。 无法安装REDHAT LINUX? inet控件怎样使用?请帮助 今天卖到一套D版VS7(6CD)不知道是真是假 如何读取注册表下某一键值? 一个语法错误,搞得我半天还没有弄出来!!!!!!!救命啊。 关于DCOM。 哈哈!我胡漢三又囬來了! 水园巨无聊,偶没时间的时候大家打的热闹,有时间的时候却又没人打,浪费偶这沙场骁将 如何判断Windows是否启动了“活动桌面“,并在程序里启动或关闭它??? 大家救命,关于COM+和EJB,大家快点帮忙,要不我就完蛋了,急死我了,救命阿。 OICQ上不去! mimi ? dynku ? do me a favor! 新东方的四级单词书,应该如何选择?额,听说有好几种,哪一种拿来背单词是实用的呢? 找一些英语水平差不多的小故事,找了给100分!要6分钟左右,有情节性 求大学英语四级词汇 MP3 加文本 的, 最好有中文翻译~ 谢谢. 推荐一本英语六级词汇书不知道六级大纲上有没有词汇?最好词汇书包括大纲要求的词汇.上次六级421,晕.这次一定要过, 要在3分钟内,要简短,要好记.要有中文 求大学英语四级词汇听力mp3格式. 如何判断一个词语的词性 什么六级词汇书比较好,要有满足2个要求,一是有例句,二是不能按字母的顺序排列 英语小故事五年级给5个英语小故事最好有点战争成分要中文 判断括号词词性1 这(朦胧)的桔红的光,实在照不了多远.( )月色便(朦胧)在这水气里 ( )2我们很快就要在全国(胜利)了 ( ) 这个(胜利)将冲破帝国主义的 请推荐几本好的英语六级词汇书. 五年级英语小故事, 老师这个词是什么词性? 推荐一本六级词汇书请推荐给我一本最新(2012)的六级词汇书,要求单词下面是有那种例句(从历年真题里选择、阅读、完型挑出来的),不知道有哪些书满足条件,求告知. carsickness这个词的音标 词性 意思分别是什么 这个词的词性是什么?这句话翻译为英语 推荐本好的《六级词汇书》谢谢~我一直希望有这样一本词汇书:比如六级大纲词汇前五十个单词是:abbreviation到analogue然后这本词汇书对应的第一单元:第一部分练习是缺空的句子,然后自己 大学英语四级词汇册买哪本好? 这个词是什么词性?She enjoys spending other people's money spending在这里是什么词呢?非谓语动词还是副词还是什么词?这句话的结构又是怎样的? 大学四级英语词汇,大学六级词汇分别有多少个词(大概就成),如果从现在开始(我现在初一下学期),大概多长时间,每天背多少词汇能在中考之前都背完四六级词汇啊? 大学英语四级词汇:首字母是D、E的单词,请附音标和解释 “决不”这个词的词性是什么? 过大学英语四级需要多少词汇量 大学英语四级词汇 有词汇 最好有音标最好是希望有经验者给点指导 英语4级词汇里面 包含考研的吗?因为 手上有本4级的单词书 不知道可否先拿那个背 四级词汇和六级词汇差别,我买了六级词汇,觉得词汇越多越好,那... 求大学英语四级词汇(最好能有音标).请发我邮箱,谢谢. 邮箱:350468868@163.com 考研的单词包括四级六级的单词吗? 六级词汇是在四级基础上新增的,还是完全不同的5500个单词? 谁有大学英语四级单词表带音标的,下载地址也行.前提是手机能下载的 考研英语单词中包含英语四级单词 是包含全部吗 请问六级词汇包括了所有的四级词汇吗?要考四级了,我想直接背六级词汇,考六级时就不用再背了 求2012年版Go for it七年级下册全部单词(要词性,音标,单词,中文)原封不动 有 没有包含绝大部分英语四级词汇的英文书籍?小 弟即将考英语四级了,想看看包含大部分英语四级的书籍,介绍一些好吗? 英语六级词汇涵盖四级吗 有没有包含绝大部分英语四级词汇的英文书籍?小弟即将考英语四级了,想看看包含大部分英语四级的书籍,介绍一些好吗? 十字锈这个词的英文翻译及其音标 能不能把星火大学英语四级词汇周计划 mp3下载也发给我啊,我买的书上没有光盘~ 新东方六级词汇书与六级单词一笑而过新东方的六级词汇书 与 周思成最近出的那本 六级单词一笑而过 哪本好啊? 这两本书的记忆方法有什么区别? 求买过这两本书的亲们给点建议. 英语翻译manufacture 求星火新要求大学英语四级词汇巧记速记精炼的 mp3 听力下载.( 精华本)是2009年7月第一版 .这本书后附有听力光碟,但是本人不会用. 求大学四级 ,六级词汇新东方俞敏洪乱序版的mp3,最好可以有文本的 liujing16341@163.com 英语翻译大家可以按照上面的图写下来拜托!我很需要呀..写一小点也是对我一个帮助呀!帮我写很多的,我给他50分好不好!555 奇思妙想记单词大学英语四级词汇哪有卖的 新东方的六级词汇书便携版和普通版词汇量一样么? 帮忙翻译一些单词对应的英文词性lie的动名词,名词、sleep的过去式、nature的形容词、energy的形容词、travel的名词、discuss、snow的动名词、explore的名词、peace的形容词、high的名词、push的反义词 我是初中生成绩不错,想扩充英语词汇量,有什么好方法?(据说上海初中生背大学英语四级词汇,有用吗) 谁有《新东方乱序版四级词汇》的LRC及同步文本和《新东方乱序版六级词汇》的LRC及同步文本.有的话发我呗 谢谢 如果有考研的词汇mp3和lrc可以给我的话就太感谢了 英语翻译快,短一点的英语故事,不是初一单词的要音标,要翻译! 大学英语四级词汇一题16.I certainly didn’t intend to _______ your plans.A.upset B.shake C.shave D.drag 新东方六级词汇乱序版中包含四级词汇么我要考四级 以后要考六级 想看看能不能直接买一本词汇书 四级六级都能用的 英文单词与音标 互译 在线等‍‍[fæt] = ‍[pændə]=‍[di:p]['sistə]‍['intrist]['sʌdnli]['æŋgri] teacherratbedfacerabittickettaxibeancapitalfact好的回答追加分 谁可以帮忙制作这首歌的lrc歌词?【此间年少】作曲/编曲:灰色作词:纱朵合唱:宝玉桑&小曲儿&纱朵&螭羽毛后期:奶妈月海报:茶壶LEN平纱落雁音乐团队出品宝玉:诗词背不齐 夫子发脾气 新东方四级词汇和六级词汇的差别四级词汇是不是在六级书里面基本都有啊...其实以后是要先考四级然后考雅思的... 英语翻译要加上音标,不然我不知道怎么读. 谁有六人行跟MP3对应的lrc?不要word 和 txt的 新东方词托福汇书包括六级词汇吗 英语小故事,要短一点,简单一点的. 谁有大学英语四级词汇MP3加文本解释的 如题
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn