我选择的语言是Ruby,但我知道因为twitter,Ruby无法处理很多请求。使用它进行套接字开发是一个好主意吗?或者我应该像twitter开发者那样使用像erlang或haskell或scala这样的函数式语言吗?
答案 0 :(得分:15)
我工作的公司在我们的网站上使用Ruby。到目前为止,我们已经处理了超过34,000,000,000次点击。我们每天处理大约10,000,000次点击没有问题。峰值命中率每天超过40,000,000次。
可扩展性取决于很多因素。例如,与读取相比,我们的数据库执行的写入百分比不成比例地高。虽然大多数网站大约有90%的读取到10%的写入,但我们接近50%-50%。我的观点是可伸缩性受很多因素的影响。如果您是数据库限制的(通常是Web应用程序的情况),那么您使用的语言无关紧要,您将等待数据库。
如果您正在考虑处理大型秤,需要考虑很多事情。对数据库,memcached等进行分片等等。用于应用程序的语言只是一个方面,通常但并不总是可扩展性的一小部分。
Ruby可能是一个不错的选择,但在其他语言中有很多值得喜欢的东西。例如,Erlang努力使其更容易从错误中恢复。
答案 1 :(得分:13)
我不确定Twitter团队所学到的关于Ruby(更具体地说,Rails)和扩展的任何“课程”都适用于您的项目。他们正在寻找比大多数人可以合理期望的更多的流量。
就套接字和Ruby而言,请查看I like Unicorn because it's Unix。关于在Ruby中执行套接字这是一个非常有趣的读物。
答案 2 :(得分:4)
我想首先提供一些背景信息。我对Scala社区非常活跃,我会选择Scala over Ruby来进行任何项目。
所以,尽管如此,除非你真的遇到障碍,否则请继续使用Ruby。如果Ruby是您选择的语言,那么您可能永远不会对您提到的选择感到满意,尤其是静态类型的选择。
学习一门新语言可能会有所帮助,如果你需要替代方案,可以有所依据。在你的情况下,我推荐Clojure或Erlang。 Scala是一种很好的静态类型,OO语言,具有函数式编程特权。它可能比其他人更容易学习,但真正喜欢动态类型的人不会轻易转换为静态类型。
对于Haskell而言,它是最强大的语言之一(并且比同样令人敬畏的替代方案提供更好的支持和流行),并且可以像其他任何东西一样敞开心扉。掌握它也很难。
答案 3 :(得分:3)
如果红宝石是你最喜欢的语言,那么这是个好主意。使用你所知道的和你喜欢的东西总是更好
答案 4 :(得分:1)
虽然你可以从像Erlang这样的函数式语言中获得更好的性能,但Ruby的适用性将取决于你想要实现的目标。例如,您要处理的请求数量可能是第一个问题,如果使用Erlang的性能优势没有太大差别,请使用您熟悉的内容,为什么学习新语言,如果您不需要?
答案 5 :(得分:1)
如果你使用像Haskell,Erlang或Scala这样的快速并发语言,你至少可以选择保留你喜欢的高级语言。使用Ruby,性能瓶颈意味着无论如何都要切换到已编译的C(或Haskell,或......)。
Ruby具有良好前端框架的优势。
答案 6 :(得分:1)
我已经在许多项目中使用过Ruby,尽管我最近搬到了Scala并喜欢它。我在Ruby中听到的关于网络内容的好事(但从未尝试过)是EventMachine。它使用Reactor Pattern就像扭曲一样,看起来非常坚固。
答案 7 :(得分:0)
关键是在C / C ++中有一个低级库,为你做套接字多路复用。套接字复用是使TCP服务器进程真正多用户的原因。 C中的这些库(你想要的)可以是libevent / libev ...以及c ++ boost :: asio。 Python在幕后做了扭曲。
如果你得到这样一个库并在ruby中使用它,你应该能够很好地实现大多数套接字程序。在支持多进程到多线程的UNIX上尤其如此。
答案 8 :(得分:0)
最近写过(实际上现在仍然这样做),一个使用Ruby和Java套接字的项目我会说不。除非您计划编写基本的阻塞聊天服务器,否则ruby套接字实现的文档很少。我发现用C或Java写的更简单,Ruby包装了原生套接字,你有点想知道现在如何使用它。我以前在C语言的Windows,Linux和其他平台上编写了大量的套接字代码,压力较小。
我的Ruby代码现在非常小并且运行良好,达到这一点真的很痛苦。