7

ピザの配達店向けに、フォールト トレラントなソフト リアルタイム Web アプリケーションを構築したいと考えています。これは、ピザ店が顧客からの電話を受け付け、(CRM Web クライアントを介して) 注文としてシステムに入力し、ディスパッチャーが配達ドライバーを注文に割り当てるのに役立ちます。

これらの目標は特別なことではありませんが、サービスを 24 時間 365 日利用できるようにしたいと考えています。つまり、フォールト トレラントにすることです。さらに、私はそれを非常に速く動作させ、非常に反応が良いようにしたいと思っています.

以下は、そのようなアプリケーションの非常に単純なアーキテクチャ ビューです。

宅配ピザ注文システム

問題は、Erlang/OTP の優れた機能をすべて使用して、アプリケーションの応答性と耐障害性を高める方法がわからないことです。

ここに私の質問があります:

  1. フォールト トレランスを提供するために、どのシステム要素を複製する必要がありますか?また、その方法は? 各車両のステータス (座標、割り当てられた命令など) を複製された Mnesia データベースに保存できることを知っています。それは正しい方法ですか?
  2. 従来の SQL ベース (例: Boss_dbベース) にする必要があるデータ ストレージ サービスと、非常に高速な応答を提供するために Mnesia で実行する必要があるサービスはどれですか? 従来の SQL データベースを使用して、このようなフォールト トレラントで応答性の高いアプリケーションに顧客の記録と履歴を保存してもよいでしょうか?
  3. アプリケーションの応答性を高めるために、すべてのサービス (顧客、車両の状態など) のすべてのデータを RAM に保存する必要がありますか?
  4. 永続的な車両データ (ID、容量など) を従来の SQL データベースに保存し、リアルタイム データ (座標、割り当てられた注文、トランク内の注文など) を Mnesia データベースに保存して、アプリケーションをより多く作成する必要がありますか?リアルタイムレスポンシブ?
4

2 に答える 2

8

まず、これは大きな問題ですが、分解してみます。まず事実を見てみましょう。そのウェブサービス。つまり、これらのレイヤーがあることを意味します: Web ServerMiddle ware applicationそしてData Storage。可用性の高いほとんどのアプリケーションでは、データ ストレージ レイヤーに による冗長性replicationと による負荷管理が必要Distributionです。Multi-player Game Server実際のほとんどのアプリケーションでは、やなど、実際にリアルタイムのアプリケーションでない限り、RAM に何も格納する必要はありませんA telecom Switchcachingしたがって、あなたのようなアプリケーションは、この場合、実際には RAM ストレージを必要としません (これから見ていくように、あちこちに何らかの種類があるかもしれません)。

現在、この種のアプリケーションには、一度に同じ形式を持つことができないさまざまな種類のデータや情報が含まれるため、RDMS を使用すると、すべてを同じように配置する必要があります。私の提案は、 any document oriented database、 aNoSQL DBまたはの使用法を学ぶことですkey-value system。これらは現実世界の複雑さをうまくモデル化したものだからです。あらゆる種類のストレージの詳細については、このpdfを参照してください。Couch ベース サーバーを使用することをお勧めします。これにより、データはシンプルになりJSON documentsschemalessアプリケーションの成長に合わせて進化させることができます。これには、あらゆるアプリケーションがこれまで必要としていた方法と同様に、配布と複製が付属しています。実行時にサーバーを追加したりサーバーを削除したりでき、システム全体がバランスを取り直します。それも付属していますmemcachedキャッシング用に組み込まれているため、あなたが話していたIN-Memory部分については、キャッシングがすべてを行います。

ストレージの次に、ミドルウェアの話をしましょう。ミドルウェアの一部としての Web サーバーについてお話したいと思います。負荷に応じて、非常に安定した Web サーバーが必要になります。また、Erlang を使用したいので、yaws Web サーバーをお勧めしますappmodsNginxWeb サーバーのクラスターの前に置かれたプロキシを使用すると、負荷管理に役立つ場合があります。少なくとも、Web サーバーの前で負荷分散を行う方法はいくつかあります。この後、OTP アプリケーションが必要になります。OTP アプリケーションは必ずしも持っている必要はありませんgen_servers. しかし、学んでいくうちに、並列化が必要な場所やシーケンシャル コードが必要な場所を実際に発見するでしょう。しかし、まだ習得していないものを使いたいと思うのは心配です。この Web ブックとこのOrielly ブックに従って、Erlang に関するすべてをマスターしてください。Chicago BossやHttp サーバー ライブラリMochiwebを試してみると便利です。Erlang でこれを行うことについて私が言及すべきもう 1 つのことは、データ構造とそれらを効率的に操作する方法を習得する必要があるということです。データ構造の選択を誤ると、問題が発生する可能性があります。各ステップですべてをテストしてテストします。使用するMisultin

records可能であればどこでも実行し、各段階でのメモリ消費を確認します。この質問について言いたいことはたくさんありますが、うまくいけば、他の人も自分の考えを投稿するでしょう.

于 2012-08-03T09:37:26.850 に答える