昨天看到斑竹分享了一篇介绍 Raptor 的文章。https://ruby-china.org/topics/22600 我自己是一名 Rails 初学者,看完之后学到了很多基础姿势,觉得可能会对一些有兴趣的朋友有所帮助,所以就花了一天的时间翻译成了中文。
英文水平有限,如果有朋友发现翻译不妥之处,望能指出,以免误导他人,先谢过。
文章太长了,就不往这里贴了。
楼主的遣词造句可以看出下了一番功夫,并非无脑直译。不过有些句子翻译的有点过了,不但生硬了加了一些原文中没有的意义,而且还造成读者的困惑。
原文第一段最后一句:
Unicorn, Puma and Torquebox are already pretty fast, so beating them hasn’t been easy and has taken a lot of work.
你的翻译版本:
Unicorn,Puma 以及 Torquebox 已经非常快了,所以仅仅是打败它们就已经不是一件容易的事情,单就超越就已经需要花费大量的工作。
我尝试重新组织一下:
Unicorn,Puma 以及 Torquebox 已经非常快了,因此打败它们实属不易且颇费功夫。
还请琢磨琢磨,“单就超越”这句话从何说起?
在此声明,并非吹毛求疵鸡蛋里挑骨,只是翻译的确很辛苦,作为译者也不愿读者看了自己的译文还是颇多困惑而不得不求问于源,这样一来岂不是自己费了功夫,别人还得再费一遍不是?所以我只是想说既然选择了去翻译,那么准确——也就是“信达雅”的“信”是必须的。不仅仅是要把该翻的翻到,还得避免添加本没有的含义,这是为了避免歧义。
不过话说从头,翻译这么一大篇实属不易,一百个赞先给楼主。
翻译好赞!! 猜测性能的提升 node.js http parser 要占比较大的因素,unicorn 应该也可以用这个 parser。 另外,在实际项目中 app server 耗时在整个应用里面占很少的比重,提升效果有限。
重复参与 (reentrant)
reentrant 一般翻译成可重入。
在 Unix 系统中,这些是通过 readv() 和 write() 系统调用来实现的。在 Raptor 中会广泛使用 writev()。
前面也应该是 writev() 吧
酷!这篇文章以及翻译太棒了!学习到了很多东西!
看了半天,每个线程都拥有自己的对象池,线程之间又不能分享这些对象,感觉好像在 app server 层次,实现了类似于 erlang 的轻量级进程的意思,貌似很吸引人,就是不知道付费的多线程版本实际效果会有多好,其实单核单线程的免费版貌似看起来也不错,就是不知道有没有实际应用来验证到底效果如何?
感觉上,汲取了之前各种模型的长处,并且做了好多改进,使得这些长处可以发挥更大的作用,并且通过很深层次的 hack, 让这些优点可以完美的互相工作,像梦一样的 hn 一站式 app server 解决方案呀。
有个问题:
一个正常大小的 Rails app 单个进程可以耗费 250MB 的内存
这有没有考虑 cow 的作用?真的得那么大么?
还有我希望指出一些我认为很明显的理解错误。(也许是楼主只是表达错了?)
所以反向代理缓存不必完全用来解决 slow client 问题
看原文,
They don’t solve the slow client problem entirely.
这个句子应该译为:
它们并没有完全解决 slow client 的问题。
Twemproxy 的原生版本依赖的是全局变量,使用多个线程才能让全局系统变成不可用。
原文是:
making the entire system unusable with multiple threads.
这个句子应该译为:
使用多线程时,整个系统将变的 y 不可用。
@zw963 原文只是用单个 rails application 的单进程应用举了一个例子,所以我的理解是这里和 copy on write 无关。至于说单个 rails application 的单进程占用的内存到底比 250MB 数值大还是小,其实不必纠结,数字只是用来举例说明问题的,:)