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

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

跨平台开发如何事半功倍 Xamarin推出免费培训 《近匠》上海庆科:海尔智能家居背后的云方案 轻松DIY智能硬件,开源电子原型平台Hippo-ADK 所见即所得!基于Polymer的设计工具Mobile UI Elements 好的产品经理是怎样炼成的? 统一架构、统一运维:UnitedStack发布UOS2.0 把轻应用带进汽车——宝马、百度编程马拉松大赛启动 “钢铁侠”Insteon的逆袭:声控智能家居新时代 游戏云纪元 第二届游戏运营技术论坛即将召开 Bitly:构建月处理60亿点击的分布式系统 重塑微软:Satya Nadella开启整合之路 推送工具个推完成B轮数千万美金融资 娱乐行业数据化 ABD爱梦娱乐发布大数据引擎产品 增强现实:10大AR应用窥探移动未来 LBS的硬件创新:高德LBS智能硬件编程马拉松圆满闭幕 2014优秀微信开发商评选上线 首批旅游汽车电商房产等行业应用出炉(表) 让梦想照进现实——宝马百度编程马拉松闭幕 IXDC大会:移动交互设计精髓——用户体验 想辨析“马航”等事件真伪,有很多技术和工具可以使用 两倍于IBM的基础设施投资,Google大力发展云服务 听云平台发布移动应用性能黑洞报告 微信开发者大会陶瑾:如何玩转微信支付功能的原理和开发 560亿PV+7.3亿用户,Reddit是如何做到的? 打造安全界的希波克拉底誓言文化 极客的春天来了! Mozilla COO宫力:老牌操作系统如何助力新一代智能电视 App提高用户留存率新招:应用性能监测 韩国手游市场规模超万亿 2014中韩手游项目对接会开幕在即 SanDisk发展之路:专注SSD、推新产品线 AMD发展线路图曝光,欲造500+平方毫米GPU 全球移动开发者:IAP降温,企业应用成待掘金矿 Vuforia 2014 视觉大奖赛:寻找最炫酷AR增强现实应用,迈向巅峰! tomcat连接数据库oracle?用javabean? 请教:ORACLE ENTERPRISE MANAGER怎么连接 怎样做半透明窗口? 怎样用程序安装输入法? InsideCOM中第十章里Util.cpp的报错,请前辈指点阿。 dephi中有没有显示流程图的控件? 数据库有自动加锁的功能。那我是否可以在一个过程中,靠代码去主动给一个表,多个表加锁,解锁呢?? 一道scjp考题,问题答案都有,谁看明白了给俺解释一下,会送分的 急急急,40分想送!!!!! b/s结构下的新邮件提示问题(重赏!!!) 哪里可下载WINXP DDK和SDK 别忘了向我祝贺啊,今天也是我的生日!! 如何让光标不离开DBGrid的当前行,就将当前记录的修改提交数据库 好心的大虾们,帮帮我!有关gis的 ORACLE的触发器怎么弄 用C++怎样统计文本文件中的字符个数,请给源代码 讨论:不经人大批准给公务员加薪是腐败行为? http://www.csdn.net/expert/topic/389/389043.shtm 怎么样才能将*.pdf文件转成*.doc 急急急急……快帮忙,icevi,弱水快帮忙。 JAVASCRIPT 中怎么样用VBA的函数? 用VB怎样遍一个程序用列表的形势,找到并显示局域网中所有已经打开的SQL服务器名? C++标准类库中有没有类提供<<操作符输出调试信息? JAVASCRIPT 中怎么样用VBA的函数?我急呀~ ~~~~~~好心的大虾们,帮帮我,关于gis~~~~~~~~~~~~ 关于在mfc中使用stl中的警告问题? 关于视频播放控件的开发 在单位上了网通,我们通过局域网上internet,可是服务器装了wingate…… 怎样在程序里实现window下“打开方式”对话框,具体用什么类? 我下载了好多经典书籍(十几本),都不知道该从哪儿看起? 怎么处理没有用的连接文件? 问个菜问题 热烈庆祝灰毛兔参与分超过30000分~~~热情大送分~~!! (灰毛兔) 请教如何打包crystal report 7.0驱动引擎到我的安装程序中? 用open打开的页面如何RELOAD打开他的那个父页面? 谁有jet请发给我!谢谢!! 如何开发排序(用C或C++) 新手求教:请问怎么可以把含逗号(如:sa,ffd,sdf)的字符串从逗号处分开,变成独立的几个字串sa ffd sdf? 急!请问如何在程序启动时自动检测MODEM?能给出CODE最好。 如何在unix上远程安装软件 KeyPress事件处理疑问 TComboBox能不能有OnMouseDown事件??? 请教哪里有付费便宜、性能稳定、访问速度快的支持ACCESS、ASP的空间? 加载不了*.ocx控件是怎么回事? 我的CStatic上为什么不能贴位图? 主页何为佳? 偶用ultradev,在table里绑定字段,并作了重复区域的设置,但是live data 的结果总是一列纪录出现在一个单元格里,而且只有第一个单元格里有数据,其他是空的,怎么回事?//牛虻 ClassView Information file如何恢复,急,知道的朋友望告之! 500分求一好用的代理服务器,能访问www.creaders.net这样的网站(按:贴太多结不了,无法在水园发贴,烦版主转到水园) 各位高手,我的分发光了,问题还没解决。帮帮我好吗 请问什么叫专家分..怎样得到专家分,你们的专家分都有多少...有超过1000的吗 -->> 一个小数的小数点向右移动两位,结果比原来的小数增加了222.75,求现在的小数. 1米=10的9次幂纳米,那么1纳米= 米 春联中的语文艺术 (也是生活中处处有语文) 一个小数点向右移动两位,结果比原来的小数增加了222.75,求原来的小数.过程写出来, 焦点在x轴上,经过点(-√2,-√3),(√15/3,√2),求双曲线的标准方程只求计算过程.不要上来给个最终答案. 12厘米等于多少纳米 一个小数去掉小数点后比原小数多321点75原来小数是 求c=√6,经过点(-5,2),焦点在x轴上的双曲线的标准方程 12毫米等于几米 13.09减什么+2.49等于10 一个数的小数点向右移动三位,结果比原来增加321.75.求这个数. 一个数的小数点向右移动两位后比原来的数增加了198,原来这个数是多少 高二几何,双曲线的对称轴平行於坐标轴,两个焦点都在y轴上,一条渐近线方程为2x-y+1=0,又双曲线过原点,求双曲线方程. 用96朵红花和72朵白花做成花束,如果各花束里红花朵数相同,白花朵数也相同,每束花里最少有几朵花? 3.75的小数点先向左移动两位,再向右移动三位这个数比原数( )3.75的小数点先向左移动两位,再向右移动三位这个数比原数( )A.缩小10倍;b、缩小00倍;c、扩大10倍;d、缩小100倍;请说明 学校召开运动会,在操场的四周插彩旗,按3面粉旗,2面绿旗,2面黄旗的顺序,请你算算150面旗是什么颜色 用48朵红花和36朵白花做花束,如果每个花束里的红花与白花的朵数相等,每个花束里最多有几朵花? 也是一堂语文课我写的是不是用原来的方法上语文课,而是在生活中,亲戚有了一种新的方法来让我领会语文,有点题.我想知道有没有走题,走提了的话严不严重.改变了我原来对语文的看法.新的 学校召开运动会,在操场四周插上红黄蓝三种颜色的彩旗.其中红旗共20面,黄旗的数量是红旗的9/10,蓝旗的数量是黄旗的5/6.你知道操场四周一共插了多少面蓝旗吗? 用96朵红花和72朵白花做成花束,如果各花束里红花的朵数相同,白花的朵数也相同,每束花里最少有几朵花? 这也是一堂语文课 作文稍微好一点,不要太俗套. 运动会场地侧面插有彩旗,彩旗的顺序是:绿、黄、粉、红、绿、黄、粉、红……你能推算出第34面旗是什么颜请把每一个算式都写出 快 求适合下列条件的双曲线的标准方程(1)焦点在x轴上a=2√5经过点A(5,2) 什么也是一堂语文课 一位会计结账时发现账面上少支出了123.75元钱.她后来发现,是把一笔支出的小数点错点了两位.这位会计是把多少钱记错了(每一步的解释 焦点在X轴上,a等于2倍更号5 经过点A(-5,2).求下列条件的双曲线标准方程 作文《也是一堂语文课》不少于六百字,文体不限,诗歌除外 会计结账时,发现账面多出45.72元,检查后发现把一笔钱的小数点弄错了,原来这笔钱是多少元? 用24朵红花36朵黄花和48朵紫花做成花束,要使每束花有同样多的红花,黄花和紫花,这些花最多能做多少花束 也是一堂语文课怎么写写议论文的可以吗?我写些政治历史课也是在上一堂语文课,写了一篇议论文.这几天很不安,好像觉得写走题了,不会扣40分吧!我紧张的心都碎了! 北师大版语文五年级上册教学总结 有51朵红花和34朵黄花做成花束.如果每束里的红花朵数相同,黄花朵数也相同,最多可以做成多少束?每束花最少有多少朵?(要有算式过程) 1.77m等于多少飞米如题 为什么是等于13/2? 把一个小数的小数点向右移动两位后,得到的新数与原数的和是277.75.原来的小数是快明天交作业 ,要列式 若关于X的方程3tx^2+(3-7t)x+4=0的两实根α,β满足0 2加13等于几 一个小数,如果把它的小数点向右移动两位,则比原数大277.2.这个小数是多少? 一道中学方程数学题一块金和银的合成共重250g,放在水里称质量减轻了16g,已知金在水中称质量减轻19分之1,银在水中称质量减少10分之1,则这块合成金银,金和银各占多少?最好用方程,实在不行 寻求北师大版小学语文三年级冰灯说课稿我需要作为教学参考,急 一位小数的小数点向右移动两位数.所得到的新数和原来的数字之和是277.75.请问原来的小数是多少? 一个数的小数点向右移动一位后,比原来的数大21.6,原来的数是_____ 一个数的小数点先向右移动三位,再向左移动两位,结果比原数大0.63,原数是( ).做完上面一道,顺便在做一下,下面一道!4÷(0.9-□)=2.2求方块里的数! 双曲线焦点在y轴上的标准方程 用96朵红花和72朵白花做成花束,如果每束花里红花的朵数相同,白花的朵数也相同,每用96朵红花和72朵白花做成花束,如果每束花里红花的朵数相同,白花的朵数也相同,每束花里最少有多少朵花 0.25的小数点向右移动两位在向左移动一位,这个数就() 双曲线焦点在Y轴的标准方程 用96朵红花和72朵白花做成花束,如果每束花里红花的朵数相同,白花的朵数也相同,每束花里最少有多少朵花 把一个数的小数点向右移动一位后比原数增加了0.81,原数是多少? 焦距为12的等轴双曲线,求等轴双曲线标准方程 用96朵红花和72朵白花做成花束,如果每束花里红花的朵数相同,白花的朵数也相同,问每束花里最少有几朵花要写算式 我还有一个苹果 小学阅读的答案、急···············                我还有一个苹果斯坦利·库尼茨是一个对沙漠探险情有独钟的瑞典医生.年轻的时候,他曾试图 点M(2,3)的等轴双曲线的标准方程是什么 五(1)班同学用96朵红花和72朵白花做成花束,如果各束花里红花的朵数与白花的朵数相同.问:最多可做成多少束花?每束花里最少有几朵花? 一个苹果阅读题急 谁知道苏教版六年级上册语文练习册第四单元自测题的阅读题: 生活处处有语文的资料 javascript:y=5,x=++y,x等于多少啊?怎么算呢? 用96朵红花和72朵白花做花束,每束花中红花和白花比例相同,最多可做多少束花?每束花里红花和白花各有多 “生活处处有语文”资料(七年纪上)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn