2009-11-28 9 views
5

私の言語はRubyですが、私は知っています。これは、Twitterが多くのリクエストを処理できないためです。それはソケット開発のためにそれを使用することをお勧めしますか?または、erlangやhaskellやtwitter開発者のようなスカラのような関数型言語を使うべきでしょうか?ソケットプログラミングのためにルビーを使うのは良い考えですか?

+3

「私は、Twitterが多くのリクエストを処理できないことを知っています。」非常に非典型的な会社の特定の状況に基づいて技術を決定するべきではないでしょう。 –

+1

Hmm。 Ruby *がたくさんのリクエストを処理できることはTwitterのために知ってはいけませんか? Twitterはインターネット上で最も人気のあるウェブサイトの1つです(Alexaによると14位)。スケーラビリティの問題は、経験することをはるかに超えている可能性があり、使用する言語やフレームワークに関係なく発生する可能性があります。 Twitterがこれまでにスケールアップしていたという事実は、時にはいくつかの問題があるとしても、実際に多くの権利を行使していると言っています。 –

+0

実際にソケットレベルでコードを書いたり、単にソケットを利用するライブラリ/フレームワークを使いたいのですか? – Jim

答えて

15

私が働く会社は、私たちのウェブサイトでRubyを使用しています。これまでのところ、34,000,000,000ヒットを少し上回っています。 1日に約10,000,000ヒットを処理するのに問題はありません。ピークヒット数は1日あたり40,000,000ヒットを超えています。

スケーラビリティは多くの要因によって異なります。私たちのデータベースは、例えば、読み取りと比較して、書き込みの割合が不釣り合いに高くなっています。ほとんどのウェブサイトでは約90%の読み込みで10%の書き込みが行われていますが、私たちは50%から50%に近づいています。私のポイントは、スケーラビリティは多くの要因によって影響されるということです。データベースが限られている場合、ウェブアプリケーションの場合と同様に、使用する言語は問わず、データベースを待つことになります。

大規模なものを扱うことを検討している場合は、考えるべきことがたくさんあります。シャーディングデータベース、memcachedなどなど。アプリケーションに使用する言語は1つの側面に過ぎず、多くの場合、必ずしもそうではないが、スケーラビリティの小さな側面です。

Rubyは良い選択肢かもしれませんが、他の言語では好きなことがたくさんあります。 Erlangは、例えば、エラーからの回復を容易にするために努力しています。

3

ruby​​が好きな言語の場合は、それはいい考えです。あなたが知っているものと好きなものを使うのが常に良いです。

+0

なぜdownvoting?説明してください – luc

0

鍵は、あなたのためにソケットの多重化を行うC/C++の低レベルライブラリを持つことです。ソケットの多重化は、TCPサーバープロセスを真にマルチユーザーにするものです。 Cのライブラリ(あなたが望むもの)は、libevent/libev ...とC++のboost :: asioになります。 Pythonはそれを裏返しにしています。

このようなライブラリを入手してrubyで使用する場合は、ほとんどのソケットプログラムをかなりうまく実装できるはずです。これはマルチプロセスからマルチスレッドに有利なUNIXの場合に特に当てはまります。

+0

あなたが主張しているものは何もしません。ツイストされていても、普通のpythonソケットを使用しています。マルチコアプロセッサでは現在のものではありません。また、ASIOがどうやって行くのかについてもこの記事をお読みください。 http://www.metabrew.com/article/rewriting-playdar-c-to-erlang-massive-savings/ –

+0

ソケットの多重化では、しばしばサーバーに特殊なデータ構造が必要です。これは、多くの場合、すべてのサーバーに対して繰り返し実装されます。これらのデータ構造は、プリオ・キュー(ヒープ)、赤黒のツリー、およびリンクされたリストである傾向があります。 低レベルライブラリでねじれが発生しない場合は、ノンブロッキングソケットマルチプレクシング用のユーザー空間コードを実装するために、Pythonのデフォルトハッシュテーブルを使用する必要があります。 あなたは私の低レベルの投稿に、あなたの高水準の素朴なものを答えました。あなたが引用した記事では、ErlangとASIOがソケットプレキシングをどのように実装しているかについては言及していません。 –

1

Erlangなどの関数型言語の方がパフォーマンスが向上しますが、Rubyの適合性は実際に達成しようとしているものによって決まります。たとえば、Erlangを使用することのパフォーマンス上の利点が、あなたが快適であるものを多用しない場合、何故新しい言語を学ばなければならないのでしょうか?

13

私は、TwitterチームがRuby(具体的にはRails)について学んだスケーリングがあなたのプロジェクトに当てはまるとは確信していません。彼らは、ほとんどの人が合理的に見ることができるより多くの交通量を見ている。

ソケットとRubyに関する限り、I like Unicorn because it's Unixをチェックしてください。これは、Rubyでソケットを実行することについての非常に興味深い記事です。

+0

+1ユニコーンの記事への興味深いリンクです。有難うございます。 – ChrisInEdmonton

+1

@Chris:この記事が好きなら、このフォローアップリストをチェックしてください。 - http://jacobian.org/writing/star-is-unix/ – Telemachus

1

ハスケル、アーランまたはスカラのような高速で並行した言語を使用する場合は、少なくともあなたのお気に入りの高レベル言語にとどまることができます。 Rubyでは、パフォーマンスのボトルネックは、コンパイルされたC(またはHaskellなど)に切り替えることを意味します。

Rubyには、優れたフロントエンドフレームワークの利点があります。

4

私は最初に少しの文脈を提供したいと思います。私はScalaコミュニティにかなり関心を持っています。私はは任意のプロジェクトに対してScala over Rubyを選択します。

だから、あなたが実際に障壁に当たっていない限り、Rubyを守ってください。もしRubyがあなたの言葉の言語なら、あなたが言及した選択、特に静的に型付けされた選択には決して満足できないかもしれません。

新しい言語を習得して、代替手段が必要な場合には何かを取り戻すことは良いことかもしれません。あなたの場合、私はClojureまたはErlangをお勧めしたいと思います。 Scalaは、静的に型定義された、OO言語であり、関数型プログラミング特有のものです。 他のものよりも習得しやすいかもしれませんが、ダイナミックなタイピングが本当に好きな人は静的なタイピングに簡単に変換しません。

ハスケルは、そこの中で最も素晴らしい言語の1つで、(まったく素晴らしい選択肢よりもはるかにサポートされ人気があります)、何もないようにあなたの心を開くことができます。それは習得するのも難しいです。

1

私は最近、多くのプロジェクトでRubyを使用していますが、最近私はScalaに移りましたが、かなり好きです。私がRubyのネットワークのものについて良いことを聞いたことはあるが(しかし決して自分自身を試みたことはない)、EventMachineです。それはちょうど反りのような反応炉パターンを使用し、それは非常にしっかりしているようです。

0

RubyとJavaでソケットを使用しているプロジェクトは最近書かれています(実際は今もそうしています)。 rubyソケットの実装は、基本的なブロッキングチャットサーバを作成する予定がない限り、文書化されていません。私はCやJavaで簡単に書いていることを発見しました。Rubyはネイティブソケットをラップしています。以前は、ウィンドウズ、Linux、そしてC言語の他のプラットフォームにたくさんのソケットコードを書いていましたが、ストレスはそれほどありませんでした。

私のRubyコードは今では非常に小さく、うまくいきます。その時点までは本当に苦痛でした。

+0

ソケットプログラミングに関するGithub Repoはありますか?もしあなたが私に知らせてください。私はチャットアプリケーションの開発に目を向けています。ありがとう – TheMouseMan