d******e 发帖数: 2265 | 1 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代码,他们还做了许多与性能无关的改进。因此,该文
指出:
如果时间允许,回过头来看看旧有的代码总是好的。你也许会惊讶,它怎么会那么差。 |
p*****2 发帖数: 21240 | 2
是很牛呀。我们准备从Node转Go了。
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Repustate向世界各地的企业和组织提供文本分析服务。随着公司的发展,他们每天处 : 理的文本段数量从5亿增加到10亿,其中包括Tweet、新闻文章、博客评论、用户反馈等 : 。大规模的文本分析非常困难,因为很少会出现两段文本完全相同的情况,所以无法利 : 用缓存来提高效率。不过,它可以将大段的文本分成多个句子,然后并发分析每个句子 : 。近日,Repustate官方博客发表了一篇博文,介绍其API的演进过程。 : Repustate API的第一个版本是用Django编写的。他们构建了一个原型,并以此为基础 : 推出了他们的服务。但每个Django请求/响应周期的开销太大。随着API访问量增加,可 : 靠性问题凸显,使用Amazon服务的成本也大大增加。于是,他们开始寻找一种Python代 : 替方案,并选择了Flask。Flask几乎是现成的API,而且是轻量级的。不过,他们稍后 : 又发现了Falcon。他们非常喜欢这个框架,因为它使用Cython进行了优化,速度比
|
s***o 发帖数: 2191 | 3 你们绕来绕去怎么就不上java呢?
要不让赵老师去给你们辅导一下
【在 p*****2 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 是很牛呀。我们准备从Node转Go了。
|
p*****2 发帖数: 21240 | 4
为什么要上Java?
【在 s***o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你们绕来绕去怎么就不上java呢? : 要不让赵老师去给你们辅导一下
|
z****e 发帖数: 54598 | 5 it doesnt tell go is good
only tells u node & python sucks
becoz of dynamic type
py & js & other scripting lang. r slow
i think this is a common sense
benchmark is always there
u can try it uself
http://www.techempower.com/benchmarks/#section=data-r10&hw=ec2& |
a*****g 发帖数: 19398 | 6 厉害
有机会我也应该试一试 go 哦
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Repustate向世界各地的企业和组织提供文本分析服务。随着公司的发展,他们每天处 : 理的文本段数量从5亿增加到10亿,其中包括Tweet、新闻文章、博客评论、用户反馈等 : 。大规模的文本分析非常困难,因为很少会出现两段文本完全相同的情况,所以无法利 : 用缓存来提高效率。不过,它可以将大段的文本分成多个句子,然后并发分析每个句子 : 。近日,Repustate官方博客发表了一篇博文,介绍其API的演进过程。 : Repustate API的第一个版本是用Django编写的。他们构建了一个原型,并以此为基础 : 推出了他们的服务。但每个Django请求/响应周期的开销太大。随着API访问量增加,可 : 靠性问题凸显,使用Amazon服务的成本也大大增加。于是,他们开始寻找一种Python代 : 替方案,并选择了Flask。Flask几乎是现成的API,而且是轻量级的。不过,他们稍后 : 又发现了Falcon。他们非常喜欢这个框架,因为它使用Cython进行了优化,速度比
|
f*******t 发帖数: 7549 | |
p*****2 发帖数: 21240 | |
f*******t 发帖数: 7549 | 9 js无法编译呀
【在 p*****2 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 能不能把js编译成go?
|
l**********n 发帖数: 8443 | 10 看完感觉py可以被go取代了
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Repustate向世界各地的企业和组织提供文本分析服务。随着公司的发展,他们每天处 : 理的文本段数量从5亿增加到10亿,其中包括Tweet、新闻文章、博客评论、用户反馈等 : 。大规模的文本分析非常困难,因为很少会出现两段文本完全相同的情况,所以无法利 : 用缓存来提高效率。不过,它可以将大段的文本分成多个句子,然后并发分析每个句子 : 。近日,Repustate官方博客发表了一篇博文,介绍其API的演进过程。 : Repustate API的第一个版本是用Django编写的。他们构建了一个原型,并以此为基础 : 推出了他们的服务。但每个Django请求/响应周期的开销太大。随着API访问量增加,可 : 靠性问题凸显,使用Amazon服务的成本也大大增加。于是,他们开始寻找一种Python代 : 替方案,并选择了Flask。Flask几乎是现成的API,而且是轻量级的。不过,他们稍后 : 又发现了Falcon。他们非常喜欢这个框架,因为它使用Cython进行了优化,速度比
|
|
|
i***h 发帖数: 12655 | 11 py 和go不是一个类别啊
【在 l**********n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 看完感觉py可以被go取代了
|
d******e 发帖数: 2265 | 12 tornado和python3还是很厉害的。但是远到不了go的地步。
【在 l**********n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 看完感觉py可以被go取代了
|
N*****m 发帖数: 42603 | 13 请给我发大包子
【在 p*****2 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 能不能把js编译成go?
|
n******7 发帖数: 12463 | |
w***g 发帖数: 5958 | 15 go主要是一批system people在做,而python则有很强大的机器学习社区。
这个go三五年内取代不了。要我说,直接上C++就一步到位了。
【在 i***h 的大作中提到】![](/moin_static193/solenoid/img/up.png) : py 和go不是一个类别啊
|
d****i 发帖数: 4809 | 16 这个正好印证了rob pike自己所言,Go就是吸引只会Python这种脚本, 学不会C++和
Java的程序猿。Go实际上只是解决了狗家自己的问题:一批python程序猿看到C++和
Java觉得难(其实不难),只好学Go来充数一下。Go对于C, C++, Java程序猿没有任何
吸引力,论速度和效率比不过这三个,论做系统比不过C和C++, 论做应用比不过Java。
【在 w***g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : go主要是一批system people在做,而python则有很强大的机器学习社区。 : 这个go三五年内取代不了。要我说,直接上C++就一步到位了。
|
l*********s 发帖数: 5409 | 17 简单容易学是优点。go也不是只有狗狗用,楼主的例子你就没看到嘛。
【在 d****i 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个正好印证了rob pike自己所言,Go就是吸引只会Python这种脚本, 学不会C++和 : Java的程序猿。Go实际上只是解决了狗家自己的问题:一批python程序猿看到C++和 : Java觉得难(其实不难),只好学Go来充数一下。Go对于C, C++, Java程序猿没有任何 : 吸引力,论速度和效率比不过这三个,论做系统比不过C和C++, 论做应用比不过Java。
|
d****i 发帖数: 4809 | 18 楼主的例子正是Python程序猿转Go的典型例子,简单易学都是假的和表象的,真的到了
实际的use case, C++和Java几十年来碰到的东西都绕不过,比如Go号称用来做web不错
,但是搞了半天还是要加入指针,与其这样我还不如用C和C++。
【在 l*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 简单容易学是优点。go也不是只有狗狗用,楼主的例子你就没看到嘛。
|
d******e 发帖数: 2265 | 19 对startup,快速迭代最关键。
如果go又有性能又能快速开发,自然会有人用。
有没有指针真的不是问题。
【在 d****i 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 楼主的例子正是Python程序猿转Go的典型例子,简单易学都是假的和表象的,真的到了 : 实际的use case, C++和Java几十年来碰到的东西都绕不过,比如Go号称用来做web不错 : ,但是搞了半天还是要加入指针,与其这样我还不如用C和C++。
|
h****e 发帖数: 2125 | 20
lol我不觉得狗家employees比你傻,有啥学不会的?
【在 d****i 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个正好印证了rob pike自己所言,Go就是吸引只会Python这种脚本, 学不会C++和 : Java的程序猿。Go实际上只是解决了狗家自己的问题:一批python程序猿看到C++和 : Java觉得难(其实不难),只好学Go来充数一下。Go对于C, C++, Java程序猿没有任何 : 吸引力,论速度和效率比不过这三个,论做系统比不过C和C++, 论做应用比不过Java。
|
|
|
d****i 发帖数: 4809 | 21 狗家爱装逼,不作不死,对于一小部分狗家的人来说用C++和Java这样的传统语言多么
不酷显得俗套啊,所以要非要撒娇作一下,这个时候rob pike正好有活干一下,把原来
的Bell Lab的未出笼成型的老东西重新包装一下,然后内销转出口,配上一下PR狗毛吹
嘘一下。
【在 h****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : lol我不觉得狗家employees比你傻,有啥学不会的?
|
n******7 发帖数: 12463 | 22 是的 numpy这套没个几年时间搞不起来
numpy现在已然可以跟MATLAB R 相提并论了
问题是go没有操作符重载,搞这些会很难看吧
也没有REPL,用来搞data mining会很不爽
C++也没有REPL,很多运算大家都是用的blas之类的东西,区别不大
大部分人其实用不着自己写C++
【在 w***g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : go主要是一批system people在做,而python则有很强大的机器学习社区。 : 这个go三五年内取代不了。要我说,直接上C++就一步到位了。
|
l*********s 发帖数: 5409 | 23 re, data scientists do lots of exploratory work, the work flow of compiled
languages is too disruptive for their purpose.
【在 n******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 是的 numpy这套没个几年时间搞不起来 : numpy现在已然可以跟MATLAB R 相提并论了 : 问题是go没有操作符重载,搞这些会很难看吧 : 也没有REPL,用来搞data mining会很不爽 : C++也没有REPL,很多运算大家都是用的blas之类的东西,区别不大 : 大部分人其实用不着自己写C++
|
N*****m 发帖数: 42603 | 24 再加上ipython/notebook,然后spark也支持
data scientist玩起来很爽
【在 n******7 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 是的 numpy这套没个几年时间搞不起来 : numpy现在已然可以跟MATLAB R 相提并论了 : 问题是go没有操作符重载,搞这些会很难看吧 : 也没有REPL,用来搞data mining会很不爽 : C++也没有REPL,很多运算大家都是用的blas之类的东西,区别不大 : 大部分人其实用不着自己写C++
|
s***o 发帖数: 2191 | 25 因为java需要你们去拯救
Insider: Oracle has lost interest in Java:
http://www.infoworld.com/article/2987529/java/insider-oracle-lo
【在 p*****2 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 能不能把js编译成go?
|
S***s 发帖数: 104 | 26 go's goal as the creator describes
fast prototype (like python) but not bad to scale (python sucks at scale?)
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 对startup,快速迭代最关键。 : 如果go又有性能又能快速开发,自然会有人用。 : 有没有指针真的不是问题。
|
z****e 发帖数: 54598 | 27 拯救毛
oracle要是肯把java吐出来
估计所有人都会举双手赞成
【在 s***o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 因为java需要你们去拯救 : Insider: Oracle has lost interest in Java: : http://www.infoworld.com/article/2987529/java/insider-oracle-lo
|
f*******t 发帖数: 7549 | 28 of course. python doesn't scale at all
【在 S***s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : go's goal as the creator describes : fast prototype (like python) but not bad to scale (python sucks at scale?)
|
d****i 发帖数: 4809 | 29 这个说法不正确,人家PHP写的app还照样可以scale到上千个node十几亿的user,为什
么Python不可以,还是人的问题,不是语言的问题。
【在 f*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : of course. python doesn't scale at all
|
d******e 发帖数: 2265 | 30 Timehop的技术栈于2013年经历了从Rails到Go的转变;至今,Timehop已经高效、稳定
地运行了一年半时间,并且每天活跃用户数达到了600万,其中95%的请求响应时间从
Rails时代的700毫秒减少到70毫秒。
看起来Go稳定的搞python/rails 10倍response time 提高。 |
|
|
f*******t 发帖数: 7549 | 31 呃,你先研究下hhvm跟python性能对比吧
【在 d****i 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个说法不正确,人家PHP写的app还照样可以scale到上千个node十几亿的user,为什 : 么Python不可以,还是人的问题,不是语言的问题。
|
f*******t 发帖数: 7549 | 32 parse自从转到go以后,backend的问题已经变成mongodb only
【在 d******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Timehop的技术栈于2013年经历了从Rails到Go的转变;至今,Timehop已经高效、稳定 : 地运行了一年半时间,并且每天活跃用户数达到了600万,其中95%的请求响应时间从 : Rails时代的700毫秒减少到70毫秒。 : 看起来Go稳定的搞python/rails 10倍response time 提高。
|
p*****2 发帖数: 21240 | 33 你们在用mongo呀?
【在 f*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : parse自从转到go以后,backend的问题已经变成mongodb only
|
f*******t 发帖数: 7549 | 34 一直是mongo。问题太多,最近在升级mongorocks效果也不好。我们只好做接口,想把
数据库外包出去
【在 p*****2 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你们在用mongo呀?
|
z****e 发帖数: 54598 | 35 赞外包,这是外包第一步
【在 f*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一直是mongo。问题太多,最近在升级mongorocks效果也不好。我们只好做接口,想把 : 数据库外包出去
|
z****e 发帖数: 54598 | 36
纯粹是欺负动态类型语言效率低
【在 f*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : parse自从转到go以后,backend的问题已经变成mongodb only
|
p*****2 发帖数: 21240 | 37 大数据用mongo确实很蛋疼
【在 f*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 一直是mongo。问题太多,最近在升级mongorocks效果也不好。我们只好做接口,想把 : 数据库外包出去
|
z****e 发帖数: 54598 | 38
用了c++版的c*就不需要mongo了
【在 p*****2 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 大数据用mongo确实很蛋疼
|
f*******t 发帖数: 7549 | 39 卧槽,我们用c*存一些analytics的东西,这两天正挂着,一个老员工在拼命修呢
【在 z****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 用了c++版的c*就不需要mongo了
|
f*******t 发帖数: 7549 | 40 之前已经推出了webhooks,让客户把后端代码放heroku之类的地方跑
【在 z****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 赞外包,这是外包第一步
|
|
|
f*******t 发帖数: 7549 | 41 RoR实在太慢了,代码还不好维护
【在 z****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : : 用了c++版的c*就不需要mongo了
|
p*****2 发帖数: 21240 | 42 什么原因呀?
【在 f*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 卧槽,我们用c*存一些analytics的东西,这两天正挂着,一个老员工在拼命修呢
|
f*******t 发帖数: 7549 | 43 不知道,反正用着用着就挂了呗。这些数据库需要不停维护的
【在 p*****2 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 什么原因呀?
|