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

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

Colours:移动应用的开源“美颜相机” 微信红包活动:用户疯狂中的腾讯“阴谋” 预测2014年最热门的IT职位及年薪 智能手机有隐私?Facebook可阅读Android用户的短信内容 苹果2014年Q1财报:iPhone、iPad 销量创纪录 3D打印:鞋垫也玩私人订制 与Google Glass抗衡,三星将推Galaxy Glass 进军移动?任天堂欲推iOS、Android版超级玛丽 回顾2013:云计算的夏天 微软最终加入OCP阵营,开源其云服务器设计 Docker:集装箱式“运输”在软件上的实现 《近匠》第09期:ShareSDK——专注社交分享工具 苹果车载iOS系统iOS in the Car界面被曝光 支撑过万亿音乐事件的数据分析系统 Facebook运维内幕曝光:一人管理2万台服务器 《近匠》第10期:友盟——开发服务平台化 LinkedIn耗资1.2亿收购数据驱动招聘服务公司Bright 谷歌推视频会议硬件产品Chromebox 基于Chrome OS 文件上传组件导致Apache DoS安全漏洞 EA,你是来拉仇恨的吗? Beep:前Google员工打造的流媒体音乐控制器 有利于开发App的5款天气预测API 七问微软新CEO,你准备好了吗? Hadoop虽然强大,但不是万能的 Flappy Bird:萌贱游戏日进斗金的烦恼 IT技术支持:索契冬奥会背后的无名英雄 简单10招,让你的云计算事业锦上添花 微软、谷歌及苹果从哪赚钱? 高大上!5.5寸屏幕的iPhone 6概念机来袭 苹果CEO Tim Cook:我们是一家快速发展的公司 2014年美国大学生数学建模竞赛翻译及建模思路 请问谁有用VMware设置好的solaris文件啊?或是那里可以下载啊??谢谢了~~ 帮帮小弟呀!!散分 在本地机遇到数据无法提交或读取的事,动网论坛的数据也无法读取,什么原因啊 寻程序员,短期,欢迎加盟!!!!!-------熟悉j2me的!!!!面试合格,待遇为150/天 关于Form的构造函数和OnLoad方法...... 请教Web Services的分布式创建和引用的问题?急!!!!! 在c#的WinForm中如何显示cdr文件,CorelDraw图片哪怕是8.0也行 在建立vc 工程的时候选择了生成hlp 文件。我把我的工程放到别的机器上的时候有如下的错误 怎么样得到游标中的数据的多少记录。 求解1000的阶乘 请问大虾有关BootCode方面的一点问题??非常急! 高分请教:如何在安装程序时注册OCX控件? 请问:在TDbgrid控件的TitleClick事件里如何取得鼠标击键的坐标位置? netwell服务器有不断的响声,急急急................. ★★请教新闻发布系统的图文混排问题 在建立vc 工程的时候选择了生成hlp 文件。我把我的工程放到别的机器上的时候有如下的错误 这句SQL应该如何写? 怎样在VC里面开发手机上程序?需要装什么软件? 请教:这个onLoad事件怎么不起反应 关于web services,大哥麻烦帮助小妹吧! 我现在神思恍惚,无心工作,天天上网灌水打发时间,大家估计我多久会失业? 使能工具栏的某项 网络下载编程求助(紧急求助) 如何判断一个字符串中是否含有某一字符? 如何在网络断开的情况下判断,等网络恢复后再自动连接??? 如何在comboBox中添加icon--在线= 救人啦!!请教BootCode方面的问题,十万火急!! 一个关于 WISE installation 制作安装程序的问题 *.lwp的文件怎么打开亚?请大家帮帮忙!!! DataGrid为何不显示? CRegKey::QueryValue()读取数值数据时遇到的问题…… chmod命令后造成启动错误 请教大家一个关于webservice transaction的实例 菜鸟急救,注册表文件导入的问题? 填空题(急) 钱本草呢? 关于手机的问题 求救:GetFieldValue()函数出错. 一个很简单的问题,来者有分 有个小问题请大家诊下 怎么样使stringgrid中的fixrows和rowcount数目一致? 如何在JB中联接SQL数据库! 把数据结构(比如说一个链表里的数据)保存为文件,不用序列化怎么办啊? 哪位大哥有installshield的安装password? 日期型中的“年”,如何取得? SOS!!!! COPY文件有哪些办法?用什么方法比较好? 友元函数重载操作符@obj,被c++编译器编译后被解释 对vcl库底层机制一些不明白的地方2 存储图片为什么不行? 真的很苦恼,如何同时更新两个文件? 上海租可以穿的动物衣服麻烦大虾们,我想给女朋友一个惊喜,所以想租一套可以穿在身上的动物衣服,有头的那种,因为买的话,下次就没有新意了,而且还比较贵吧 ,上海地区哦啊 那位有的话,也 单细包动物和多细胞动物有什么差异、 PS白油系列 LP矿物油系列 还有DS系列等等我想知道代号PS LP DS等等的意思还有,白油与矿物油有区别吗? 关于人性最大缺点的一个问题,谁能告诉我,为什么人类之间会这样?假如你的母亲或者你其他的亲人因为财产被杀害了,而凶手是一个美国人,他的名字叫T,当你知道真相之后,你心中仇恨的对象 机甲旋风雷电怎样放出隐藏技能?1散射光线+散射光线2 点击散射光线,在即将结束时快速点击 →→Z或←←Z,这样可以再一次发出散射光线,而且结束后没有冷却时间3散射炮加M134机枪,G加S我的方 PS把文字填充白色是什么意思 人类发展到现在的弊端 机甲旋风雷电隐藏技能 雷电隐藏技能怎么释放 雨后空气中的气味是如何产生的? 飞鸟尽,良弓藏;狡兔死,走狗烹的英语翻译 机甲旋风心眼雷电枷锁隐藏技能怎么发?隐藏技能是用头撞 但不知道怎么发. 雨后空气“清新”味道是什么? 含氟牙膏对身体有害吗?有好的不含氟牙膏吗? → 机甲旋风雷电、强袭、点睛技能哪个好 雨后气息的作文和下雨时的声音(小雨) 飞鸟尽,良弓藏;狡兔死,走狗烹的英文翻译我现在很想知道它的翻译! 从哪些语句可以看出"草原上行车十分洒脱 雨后田野的气息,____而又____,____而又____.今天下午五点前要解决这个问题!每个空里填的最好是两个字的词 含氟牙膏好不?一定要使用含氟牙膏吗? 草原上行车十分洒脱,只要方向不错,怎么走都可以.改成反问句 空气是什么味道的? 地理中凹岸和凸岸怎么区分. 蜡烛成灰是什么动物 1/2cosx的导函数是什么 飞鸟的家,用英语怎么说?如题. 机甲旋风心眼雷电枷锁为什么有两个样 那种溶剂可以清除掉白油 头带红帽子身穿五彩衣一个动物 化学方程式ph是啥意思 共射极放大电路实质上是改变了放大电路的什么技术参数 “惜飞鸟”英语怎么说? 求函数2cos(π/3+x)+2cosx 美国大批飞鸟鱼类死亡事件是基 DI 组织所为吗?是本--LA 登亲自策划实施的食物链(生 化)武 QI 是本 --拉 登利用食物链中的重要生物体内注射一种慢 XING 传 染 病 DU ,然后 某 一 天突然集体 被同样温度的热水和热气烫伤的程度是一样的.这句话是对是错? 身穿白大褂,头戴红帽子,走路摆架子.(打一动物) 什么是政治副中心 “潇然于山石草木之间者, 头戴红帽子,身穿绿袍子,走路吹笛子,坐下抹须子.(打一动物) 函数y=x+2cosx在区间 夫不能以游堕事而潇然于山石草木之间者,惟此官也 是什么句式 夏天的飞鸟用英语怎么说? 政治副中心为何舍近求远 翻译一句文言文:不能以游堕事,潇然于山石草木之间者,惟此官也.谢谢! 洒脱可以换成什么词 若函数f(x)=x²-2cosx+a有唯一零点,则a=?若函数f(x)=x²-2cosx+a有唯一零点,则a=2. 潇然于山石草木之间的翻译 草履虫的身体只有一个细胞,称为单细胞生物.它对外界刺激作出反应,叫什么? 求y=2cosx+∏/3函数周期 满井游记( 第三段中“潇然与山石草木之间者,唯此官也”一句,除了自我安慰外,还蕴含怎样的人生况味?它与苏轼《记承天寺夜游》中哪一句的含义相近? 请问一下朋友们:“洒脱”一词是什么意思?谢谢 有两只灯泡,个只就220V,100W,另一只是36V,40W,在额定电压下,那一个灯泡亮?那一个灯泡取用电流大?谁知道? 4399机甲旋风雷电配宠我有白羊2新 金牛2星 鹿斯基3星 艾克斯1星 太阳发电机3星 玩具兵2星 喵星人2星 飞鸟的英文是怎么拼的 色彩的固有色 光源色 与环境色在每个地方的关系色彩的固有色 光源色 与环境色在每个地方(亮部、暗部、交界线、阴影等)的关系 机甲旋风我雷电不知用什么宠,求讲解... 怎样判断南北半球哪岸较陡北半球的河流哪岸较陡?南半球的河流哪岸较陡?如何判断? 人们对音乐、图像、气味、感觉、文字的记忆模式分别有什么不同和相同还有对速度的记忆 虽然有些多,但是请尽量回答完整 机甲旋风雷电配宠紫迪斯加尔,超级霸王龙,超锋翼战龙,哪个好,另外,那两只rmb有必要买粉的吗,超进化会失败吗 喜羊羊与灰太狼中,包包大人是什么动物? 放大电路里的英语静态工作点Q,Q的英文是什么 美最新型隐身驱逐舰下水奥巴马考虑终止 监听盟国领导人英国窃听丑闻案开庭 默多克昔日爱将出无人机击毙索马里“青年党”高官美国十年逾百起医院枪击事件 FBI探美国驻也门大使馆虚惊一场 婚礼烟花被男子给6岁儿子买411万豪宅:怕他长利比亚枪手狂劫五千万美元白宫曾叫停监听默克尔?捐肾牵良缘 悲剧变喜剧美媒:光有“屌丝”与“土豪”社会无法四条眼镜蛇盘绕 “守护”婴儿午睡中国与东盟关系迎来“钻石十年”新发展纽约华裔灭门案震惊社区 凶犯偷渡来美有研究称所有哺乳动物遵循21秒排尿定世上真有“摇钱树”:桉树能测地下黄金出租屋现633万巨款续:租客妻子称钱铁路部门新规:火车票只能改签一次 开金华00后女生溜冰场结识男子 旷课5揭秘1亿年前东亚大碰撞(图)美月监听法意西通话达千万次声音·法治踏青赏花草 请保持安全距离孟建柱会见泰国国家安全委员会秘书长阿阿坝州400件假伪消防产品被销毁电影节首日是场“男人的战争”热门职位报考条件都较宽松欧洲多国加入亚投行构建国际金融新秩序审判事务法官管院长审案不能挑商贩售巴西疯牛病疫区冻肉获刑将继续加强英中知识产权合作中央地方政府分担保费安顺开展消防产品打假行动领取营业执照只需一天医保“全国漫游”还需立法助力哄抢古币属于违法行为侵犯女婴嫌犯被捕3项征求意见稿已形成英译部门规章应施行前公布小微企业享受税收优惠门槛降低家暴年拆10万家庭邹碧华先进事迹京外首场报告会举行
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘