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

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

VB中如何实现文本查找功能 VB中自制文件搜索器 Windows 初始化文件的修改 -VB资料 Word 97与WPS97的完美结合 -VB资料 比较两个文件-VB资料 采用递归算法删除带有多级子目录的目录-VB资料 菜单项的动态装入 -VB资料 处理加了密码的MDB文件-VB资料 VB创建临时文件 从公共对话框控件中提取多个文件名称 -VB资料 从全路径名中提取文件名 -VB资料 打印MsChart之类的控件 -VB资料 谈谈在VB6.0中如何使用资源文件进行编程 动画图像分解在VB动画设计中的应用 多重文档界面设计方法-VB资料 恢复回收站中的文件 -VB资料 VB获得位图文件的信息 VB获得文本框中光标所在行的内容 VB获取程序工作路径的方法 VB获取文件或文件夹属性 基于VB的通用折行打印程序 基于VB和EXCEL的报表设计及打印 VB建立多级目录 -VB资料 VB建立快捷方式-VB资料 VB建立文件关联 -VB资料 将RichTextBox 之中被选取的内容复制到剪贴簿-VB资料 将我的程序的文本直接送到WORD中(不用粘贴)-VB资料 开启文件属性窗口 -VB资料 快速读取 TextBox 第 N 行的资料 -VB资料 快速选择里List全部项目-VB资料 VB利用 App.Path 读取「应用程序所在之目录」 WIN98只能进安全模式,不能正常进入,什么原因 关于insertrow后不update而先getitemstring的问题。 tomcat 配置问题 C# 基于套接字的聊天室 遇到一个问题 高分请教!!! WIN95的序列号给一个谢了,各位兄弟,帮个忙。。 请问数据流程是指那方面的? 关于如何调用Windows Media Encoder 如何用vb实现将数据写入到excel和word中。请附源代码! 卖书拉,都是比较经典的,需要的看看巴 关于拨号连接的问题? 菜鸟问题:请问怎么安装Gcc3.0呀!随便问一下哪里有最新的版本下载? 关于存储过程的一些小心得(不知道对不对) 高手求救,ISAPI调用SQLserver的问题。在线等待! c语言编程访问大硬盘的物理扇区时坏扇区如何判断,如何跳过! WIN98+IE5和WIN2000+IE6运行JAVASCRIPT脚本的结果怎么不一样? 如何在只允许输入数字的文本框限制汉字的输入 求助!sql server 种子 自动标识 递增 在delphi中突然不可用??:(,嘴气歪了 出事了,我的线程停不了了。高人帮帮手。 asp连接oracle???急!!在线等待!! MSFlexGrid控件要如何添加内容? 我在基于FORMVIEW内加一个贴图的按纽,能显示,但返回时,按纽没了,且按纽地方一块灰色,为什么 如何給N條紀錄自動生成一個編號並寫入數据庫? 关于控件SmartMenuXP开发的文档 求助:混淆器JOC相关问题!!!急急急急急急急急急!!! 串口通讯 DBListBox可以直接显示出数据吗,象DBGrid一样 ** AddressOf在多线程方面后面的方法不能带参数嘛?100分送上! 急...区分两个不同按钮事件. 怎样使用SQLClientDataSet向数据库中添加和删除记录呀? 给我点勇气继续下去 在jsp中如何判断传来的字符串是8859-1编码还是gb2312编码方式 ----------m_ctrl[MAX].Create控件用DestoryWindow后怎么判断被Destory了this Help:about IIS 求Visual Studio.Net序列号!郁闷半天了! 怎么可以离开这个界面呢,在unix中 怎样在一个多线程程序中使用ADO2.7?? 域用户登录不了域…… 怎样制作VC的数据库表格?? Help:about IIS 做一消息问题? VB6和ACCESS的问题 有关Excel的简单问题 请问创建CListCtrl问题, 关于JAVA 的输入问题 请教 session 如果實現網頁的滾動信息?如果在用戶不篩新網頁的情況下更新其最新消息! 请问发布 .net WEB服务 和 WEB应用程序,需要购买哪些许可? 关于LOGO窗口 关于映射的疑问 有没有这样的数据类型,怎样去解决这个问题?在线等、、、、、 XML 转化的问题 陈涉世家,是写陈涉的.为什么要在开头的时候介绍吴广的表字和姓名呢? = 急用,就是大概怎样 运用是什么,为什么怎么做和法律 依据之类的有没有例题无所谓,不过最好有, 实验室对于少量乙烯的制取是在下列装置中进行的:反应原理是:上面那个但是该反应并不是单纯的一个反应,还存在多个副反应.因为该反应是在一个温度很高的、有强氧化剂(浓硫酸)存 在超市看到水养植物玻璃瓶扣托着一个口径跟瓶口差不多大的塑料的,防止植物太小滑落,这个塑料的是什么? 我国实施的法律是怎样产生的 过氧化钠和四升二氧化碳反应放热能不能点燃一氧化碳 题目是”陈涉世家”为何开头要并举吴广的籍贯? 政治题目 从法律角度评价其行为并指出实质 说明什么道理,启示 说明王某开车到某地去办事,倒车时不小心撞伤魏某,致其严重受伤,王某开车出逃,魏某不久后死亡,王某被判刑罚款 蒹葭描绘了一幅什么样的自然景象?有什么作用? 玻璃瓶里养什么植物瓶身大概十八厘米 瓶口大概四厘米的直径 单选英语 芦苇对人有什么作用 玻璃瓶里能种多肉植物吗 单选,英语 云石胶 原子灰这两个有什么不一样? 火炬花可以用玻璃瓶水养吗 青藏高原对季风的影响是加剧了季风的效果还是削弱了这种效果?原因是什么呢?3楼的朋友结论应该是对的,但是我想知道具体的原因5楼回答得很具体,可是没有我想要的东西。。。6楼的同 吴广是个有勇有谋的人,请你说说在杀死两尉的过程中,他的智谋表现在哪里? 法的特征主要表现在哪里?【急用】这是一道多选题法的特征主要表现在( )A.具有国家意志的属性 B.具有国家强制性C.规定人们的权利和义务 D.是明确的、普遍的规范 云石胶能粘玻璃吗想做个玻璃架,手边有云石胶(大力胶),问能粘玻璃吗,能承受较大力度吗? 吴广是个有勇有谋的人,那他在杀死两尉时的智谋表现在哪里? 芦苇花象征什么 硝酸根离子和硫酸根离子是不是有氧化性呢? 为什么 谢谢了如题 谢谢了 陈涉世家某段话最能凸显陈胜、吴广智谋的两个字是?吴广素爱人…………吴广为都尉.在这段文字中. 法律最本质的属性和最重要的特征是什么?为什么? 云石胶哪个牌子好 《陈涉世家》中最能凸显陈胜、吴广智谋的两个字是? 法律是特殊的行为规范,其特殊性表现在:()、()、().其中最重要的特征是(). 云石胶哪个牌子最好? 过氧化氢氧化二氧化硫制硫酸将S02通入3%的医用双氧水溶液能不能生成硫酸.(我估计是生成亚硫酸吧,毕竟更多的都是水.)通入过后待反应完成是不是要很久时间?大概要多少时间反应完后我再 C(H+)相同的盐酸硫酸中和碱的能力哪个强 芦苇叶有几种 二氧化硫通入30%的过氧化氢溶液中 会生成硫酸吗?反应时间多长 浓度能达到多少? 泡在水中的植物,叶像竹子,叫什么,较常见 过氧化钠加热会分解吗? 双氧水与二氧化硫制取硫酸应该用什么装置?我有一套标准的实验室装置. 吃多少维生素C和虾,才会在体内生成砒霜呢? 过氧化钠加热生成? 双氧水和二氧化硫反应时,生成硫酸过氧化氢还原性小于二氧化硫 用双线桥法时 为什么没出先这两个分子 而是氧和硫的比较证明它能反应 我国法律是的本质是____和____的体现,是____工具法律和道德的区别:法律是由________________.道德是____________的效力高于________法律不仅具有________功能,更具有________功能 过氧化钠能加热吗?若能加热,加热后生成什么? 英语单选 he was nearly killed in a car accident the other day -oh,when was __exactly?-It was on April 28__ he was riding a bike on the drive-way A this that B that when C that that Dthis when 答案是要选when 为甚不是that啊 这到底是 初中政治中关于法律的主要内容总结 刚才做了下实验,过氧化钠加热不变黄(but第三版《化工词典》说加热变黄),且试管底貌似生成气体推动过氧化钠向试管口移动,验证不是氧气,为什么?是什么气体? 我想买云石胶 浓硫酸能将木条变黑,是因为他的腐蚀性还是脱水性 过氧化钠可由什么加热分解得到 英语大神做下单选直接上答案好了 事成之后有附加分 玻璃瓶里的植物水总是会臭是怎么回事 什么云石胶好 云石胶的成分? 蚯蚓对水的反应在一个脸盆里放入泥土和蚯蚓,在倒一些水(注意:只要浸没一半泥土就可以了)此时会有什么现象出现?在往盆里倒水,直到淹没泥土表面,这时蚯蚓有什么反应? 为什么《陈涉世家》中写了陈胜吴广两个人·却以陈涉世家命名 单选求英语大神.he is a very._person who can easilycope with stressful situation A relaxed.B regarded.C related.D regarded就是选A 总觉得选A 芦苇的功效是什么 在饲养和观察蚯蚓的实验中,用沾水的棉球清擦蚯蚓的体壁的目的是a.让体表湿润,维持正常呼吸b.保持身体柔软c.保持体表湿润,有利于运动d.降温 陈涉世家中为什么剩下的人听从陈胜吴广的话 冬眠的动物有哪些方式为什么? 自来水里出现了一条蚯蚓,应该找谁呀 陈涉世家 陈胜 吴广起义陈涉世家:1.提出的口号是?2.陈胜,吴广起义做了哪些舆论准备?3.卒多愿吴广德差遣,原因是什么?4.文中表现陈胜敢于挑战权贵否定封建等级制度的句子是?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘