web-dev-qa-db-ja.com

Webサービスを使用するデスクトップベースのクライアントのオフラインフェイルオーバーを実行する最良の方法は何ですか?

共通の問題を共有する次の3つのプロジェクトがあります。

彼らはWebシステム上にロジックを持っている必要があり、RESTful Webサービスを介してそのようなシステムと通信するローカルアプリケーション(POSなど)が必要です。

私の解決策

私が思いついたソリューションは、デスクトップアプリケーションに実装することです メッセージキューイング サービスがオフラインの間に操作を保存するため、より正確には 非同期メッセージキューイング 。しかし、それは簡単な部分です(そうすることが最善の解決策である場合)。また、データの同期と競合の解決にも関心があります。

関係者によるレポートと監視にはWebアプリが必要であり、Webサービスは複数の施設の要求を処理するため、メインシステムはWebベースである必要があります。

デスクトップクライアント(シンが望ましい)は、Java(より具体的にはNetbeans))とSymfony2を使用したWebシステムで実装されます。2つのプロジェクトでは、クライアントのハードウェア統合が必要であるため、デスクトップアプリケーションをWebテクノロジー(Appcelerator Titaniumなど)は大きな問題になる可能性があります。

私の質問

  1. スケーリング、つまり最小限の労力で最大の効率(そしてできれば、ローカル操作用のバックアップサーバーを購入するなどの追加コストなし)を意味する優れたソリューションとは何ですか?

  2. これまでに誰がこれに対処したことがありますか?どのように問題を解決しましたか?どのような教訓を共有できますか?

  3. 同期をどのように扱いましたか?

編集:ポイント3の質問に欠けている部分を追加しました

13
dukeofgaming

私はあなたの質問がJavaであることを知っていますが、私はこのタイプのものに対して this メッセージバススタイルのアーキテクチャが本当に好きです。

基本的に、メッセージが送信されると、2つの応答が返される可能性があります。 1つ目はローカルキャッシュから、2つ目は接続後にサーバーから取得されます。

このアーキテクチャ(rhinoバスとnhib)をご自分の(MQとhib)にかなり簡単に適合させることができると確信しています。

3
Brook

すべてを実行しますローカル、および定期的に同期

これが私があなただったらどうするかです(私はJava .NETのように同期フレームワークを認識していません)。

最後に正常に接続した時刻を保持するローカルアプリケーションのタイムスタンプを維持します。

再接続する時間に関係なく、そのタイムスタンプは新しいデータを引き出し、ローカルで生成された新しい注文を送信するために使用されます。

その後、2つのタイムスタンプを維持します。 1つは注文が作成されたとき(ローカルまたはオンライン)を定義するもので、もう1つはサーバーによって記録されたときを定義するものです。

メッセージキューはお勧めしません。以前は、Navisionに接続する必要があるeコマースWebサイトにMQを使用していました。 Navision内ですべてが操作され、MQを介してeコマースWebサイトに変更が送信されました。これには、注文状況や、製品の説明、価格設定などすべてが含まれます。新しい注文もMQを介してNavisionに送信されました。

10
user2567

または、リモートクライアントをサーバーに同期するという面倒な作業を行う、時々接続されているシステムデータベースの実装を確認する必要があります。 (SQL ServerはこれをSQL CEである程度備えており、Outlookがこれを行います)。

このように、すべての変更を小さなフットプリントデータベースでローカルに行うことができ(バージョン管理/論理タイムスタンプなどを維持するため、PCクロックなどを気にする必要はありません)、オンラインに接続するたびに、これをメインと同期しますサーバ。

システムがほとんどの時間オンラインにできない場合、私はRESTソリューションを求めません。