0

私は Web アプリケーションの作成に興味があり、優れた Web サーバーの条件について調査しました。フェイスブック、ツイッター、フォースクエアで検索しました。彼らは、インフラストラクチャの構築に使用したソフトウェアを共有しています。

私にとって、使用されているソフトウェアのいくつかは新しいものです。ここでいくつか質問したいことがあります。バックエンド サーバーを作成する理由は、PHP を実行している Web サーバーで十分ではありませんか? バックエンドに java/scala を使用する理由 thrift/protocol バッファなどの RPC フレームワークは本当に必要ですか? その RPC フレームワークは何に使用されますか? フロントエンド サーバーとバックエンド サーバー間の通信に使用されますか?

私の質問に答えてくれた人たち、または私に読むように勧めてくれる本があれば、本当に感謝しています.

ありがとうございました。

4

2 に答える 2

3

スケーラブルなバックエンド インフラストラクチャを構築して、最終的には次のことを実行したいと考えているようです。

  1. コンテンツを提供します。これは Web サーバー層です。
  2. Web サーバー レイヤーから受信したユーザー リクエストに対してある種のバックエンド処理を実行し、データ ストアと通信します。これをアプリケーション サーバー層と呼びます。
  3. セッション状態とユーザー データを、分散されたフォールト トレラントな結果整合性のあるキー値ストアに保存します。

また、市販の PC ハードウェアを使用してこれを行いたいように思えます。

これは難しい注文です。

Foursquare は、Lift フレームワークで Scala を使用し、Web サーバーには jetty を使用しています。詳細はこちら。そしてもっと

Facebook はさまざまなテクノロジーを使用しています。彼らのデータストアにはHBaseを使用していることを知っています(彼らはCassandraを使用していました)

Yahoo は HBase を使用してユーザー統計を追跡しています。

Twitter は、Ruby バックエンド Web サイトとして始まりました。彼らは Scala に移行しました。Twitterは、独自の増分データベース変換ツールを使用して、mysql (シャードされていると思います) から Cassandra に段階的に移行しています。

アプリケーション サーバーと Web サーバー エンドでのスケーリングに関する限り、本当に重要なのは、ユーザー空間で新しいユーザー プロセスを生成する機能を持つ言語と、入ってくる要求を新しいワーカー プロセスに割り当てるマネージャー プロセスを持つことです。考えてみてください。非常に効率的な会社を運営しているとして。仕事が増えれば増えるほど、より多くの人を雇うことができます。これが アクターモデルです。アクターが組み込まれている言語 (erlang) や、フレームワーク (akka) またはライブラリー (Scala ネイティブ) としてアクターが実装されている言語もあります。どうやら、Scala のネイティブ アクターにはバグがあるようです。そのため、何人かの人々が集まって、Scala と Java の akka フレームワークを実装しました。アクターと、どの言語とライブラリを使用すべきかについて、オンラインで多くの議論があります。Erlang はすぐに使用できるように多くの機能を備えていますが、Scala は JVM で実行され、既存の Java Web ライブラリの多くを再利用できます (静的オブジェクトが宣言されている場合、問題が発生する可能性があります)。にはアクターと OTP ライブラリがありますが、明らかに Java が持つ豊富なライブラリはありません。つまり、私にとっては、Scala (akka を使用) または Erlang に要約されます。

Web サーバーの場合、Scala を使用すると、任意の Java アプリケーション サーバーを使用できます。Foursquare は、ほとんどのものに桟橋を使用しています。これは Scala で書かれていませんが、Scala は JVM で実行されるバイトコードにコンパイルされるため、任意の Java アプリ サーバーと簡単に相互運用できます。
また、Erlang プログラマーはそれほど多くなく、Erlang は習得が難しい (関数型プログラミングvs命令型プログラミング) とも言われています。Scala は関数型であると同時に命令型でもあります (つまり、どちらでも可能です)。

Erlang は機能的です。現在、関数型プログラミングには、熟練した関数型プログラマーが熟練した命令型プログラマーよりも多くのことを行うことができるため、多くのことが行われています。 Yahoo ストアは、もともと Lisp (関数型言語) で 1 人の男性によって作成および保守されていました。一方、命令型プログラミングは習得が容易で、チーム環境で広く使用されています。命令型言語はあるものには適していますが、他のものには関数型言語が適しています。適切な仕事のための適切なツール。

Web サーバーの議論に戻ると、Erlang を使用すると、yaws を使用したり、フレームワークを実行したりできます (Chicago Boss)

Scala と Erlang の議論についてはこちら。
別のリンク
詳細はこちら
そしてもう一つ
別の意見

データベース側には、多くの選択肢があります。こちらをご覧ください。 データベースを完全に避けて、データを mnesia (Erlang のランタイム データ ストア) に保存することもできます。

このトピック (アプリ サーバー、データベース、および Web サーバーのスケーリング) は非常に複雑で、議論に満ちているため、私の回答は完全ではありません。一部のフレームワークは、層 (Web サーバー、アプリケーション サーバー、データベース) の区別をあいまいにし、これらの層の多くの機能をフレームワーク自体に統合しています。

于 2012-06-04T00:10:32.920 に答える
0

たとえば、PHP のみを使用して複雑な Web アプリケーションを開発すると、多くの問題が発生します。PHP にはスレッドがありません。php には、scala を備えた多くの優れた機能や、豊富な構文を備えた別の優れた最新言語が欠けています。PHP は、コンパイル済みの JVM 言語に比べて遅いです。私の意見では、PHP はあまり安全ではありません。大量のデータを取得して HTML ページとしてレンダリングするのは良いことですが、高負荷時の処理はプラスにはなりません。あなたが示唆するように、RPCは通信層として機能します。

于 2012-04-12T12:56:39.487 に答える