BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Repustate从Python迁移到Go,性能提高10倍

| 作者 谢丽 关注 11 他的粉丝 发布于 2015年9月25日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Repustate向世界各地的企业和组织提供文本分析服务。随着公司的发展,他们每天处理的文本段数量从5亿增加到10亿,其中包括Tweet、新闻文章、博客评论、用户反馈等。大规模的文本分析非常困难,因为很少会出现两段文本完全相同的情况,所以无法利用缓存来提高效率。不过,它可以将大段的文本分成多个句子,然后并发分析每个句子。近日,Repustate官方博客发表了一篇博文,介绍其API的演进过程。

Repustate API的第一个版本是用Django编写的。他们构建了一个原型,并以此为基础推出了他们的服务。但每个Django请求/响应周期的开销太大。随着API访问量增加,可靠性问题凸显,使用Amazon服务的成本也大大增加。于是,他们开始寻找一种Python代替方案,并选择了Flask。Flask几乎是现成的API,而且是轻量级的。不过,他们稍后又发现了Falcon。他们非常喜欢这个框架,因为它使用Cython进行了优化,速度比Django要快许多,而且它还遵循简洁REST原则。事实证明,Falcon是一个很好的补救方案。Repustate的平均响应时间缩短了,故障和支持问题的数量也降下来了。

但即便如此,Repustate的性能仍然不能满足日益增长的需求。尤其是并发,一直是Python的痛处。而且,他们用的是Python 2.7,还没有使用Python 3中的asyncio包。但实际上,即使用了,也还是要担心GIL的问题。并且,Falcon无法实现自托管部署。Python无法像Java或C那样打包,然后分发。而他们的许多客户需要在自己的网络中运行Repustate,他们只能为这些客户提供一个部署了整个技术栈的虚拟应用。该虚拟应用既可以用于VMware,也可以用于Virtual Box。这是个可行的方案,但很笨重,而且更新和支持困难。所以,他们希望能够仅仅提供一个可以安装的二进制文件。

之所以选择Go,是因为Go满足了他们所有的要求:

  • 比Python快
  • 可以编译成单个的二进制文件
  • 可以部署到任何操作系统
  • 容易实现并发

而且,Go测试套件的布局看上去比他们的nose测试要简单。测试函数头很容易迁移。例如,将def test_my_function():转换成func TestMyFunction(t *testing.T) {,通过简单的替换就可以完成。此外,go routines和channels非常易于使用,使得并发文本分析很容易实现。

整个迁移过程耗时3个月,感兴趣的读者可以查看他们的迁移过程。下面是他们的迁移成果:

  • API平均响应时间由100ms降至10ms;
  • 所需EC2实例的数量减少了85%;
  • 由于Go可以编译成一个单独的二进制文件,而Go 1.5让交叉编译变得很容易,所以他们现在能够提供一个Repustate自托管版本;
  • 由于Python和Go相似,所以他们能够快速重建单元测试。

另外,由于重新过了一遍Python代码,他们还做了许多与性能无关的改进。因此,该文指出:

如果时间允许,回过头来看看旧有的代码总是好的。你也许会惊讶,它怎么会那么差。


感谢魏星对本文的审校。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

Go在未来十年必然呈爆炸性增长 by ching jason

Go在未来十年必然呈爆炸性增长
Go在未来十年会成为最最主流的开发语言
Go会像C一样经典,会被历史铭记

Pylons 作者把 Go 项目换成了 Python by Zhang Kaizhao

Pylons 作者把 Go 项目换成了 Python
python-china.org/t/909

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT