共通の問題を共有する次の3つのプロジェクトがあります。
彼らはWebシステム上にロジックを持っている必要があり、RESTful Webサービスを介してそのようなシステムと通信するローカルアプリケーション(POSなど)が必要です。
私が思いついたソリューションは、デスクトップアプリケーションに実装することです メッセージキューイング サービスがオフラインの間に操作を保存するため、より正確には 非同期メッセージキューイング 。しかし、それは簡単な部分です(そうすることが最善の解決策である場合)。また、データの同期と競合の解決にも関心があります。
関係者によるレポートと監視にはWebアプリが必要であり、Webサービスは複数の施設の要求を処理するため、メインシステムはWebベースである必要があります。
デスクトップクライアント(シンが望ましい)は、Java(より具体的にはNetbeans))とSymfony2を使用したWebシステムで実装されます。2つのプロジェクトでは、クライアントのハードウェア統合が必要であるため、デスクトップアプリケーションをWebテクノロジー(Appcelerator Titaniumなど)は大きな問題になる可能性があります。
スケーリング、つまり最小限の労力で最大の効率(そしてできれば、ローカル操作用のバックアップサーバーを購入するなどの追加コストなし)を意味する優れたソリューションとは何ですか?
これまでに誰がこれに対処したことがありますか?どのように問題を解決しましたか?どのような教訓を共有できますか?
同期をどのように扱いましたか?
編集:ポイント3の質問に欠けている部分を追加しました
私はあなたの質問がJavaであることを知っていますが、私はこのタイプのものに対して this メッセージバススタイルのアーキテクチャが本当に好きです。
基本的に、メッセージが送信されると、2つの応答が返される可能性があります。 1つ目はローカルキャッシュから、2つ目は接続後にサーバーから取得されます。
このアーキテクチャ(rhinoバスとnhib)をご自分の(MQとhib)にかなり簡単に適合させることができると確信しています。
すべてを実行しますローカル、および定期的に同期。
これが私があなただったらどうするかです(私はJava .NETのように同期フレームワークを認識していません)。
最後に正常に接続した時刻を保持するローカルアプリケーションのタイムスタンプを維持します。
再接続する時間に関係なく、そのタイムスタンプは新しいデータを引き出し、ローカルで生成された新しい注文を送信するために使用されます。
その後、2つのタイムスタンプを維持します。 1つは注文が作成されたとき(ローカルまたはオンライン)を定義するもので、もう1つはサーバーによって記録されたときを定義するものです。
メッセージキューはお勧めしません。以前は、Navisionに接続する必要があるeコマースWebサイトにMQを使用していました。 Navision内ですべてが操作され、MQを介してeコマースWebサイトに変更が送信されました。これには、注文状況や、製品の説明、価格設定などすべてが含まれます。新しい注文もMQを介してNavisionに送信されました。
または、リモートクライアントをサーバーに同期するという面倒な作業を行う、時々接続されているシステムデータベースの実装を確認する必要があります。 (SQL ServerはこれをSQL CEである程度備えており、Outlookがこれを行います)。
このように、すべての変更を小さなフットプリントデータベースでローカルに行うことができ(バージョン管理/論理タイムスタンプなどを維持するため、PCクロックなどを気にする必要はありません)、オンラインに接続するたびに、これをメインと同期しますサーバ。
システムがほとんどの時間オンラインにできない場合、私はRESTソリューションを求めません。