web-dev-qa-db-ja.com

数時間インターネット接続が失われた場合、Webアプリはどのように正しく機能しますか?

私たちのチームは、Webベースの小売薬局管理システムを設計したいと考えています。ユーザーによるインストールが不要なため、Webベースのソリューションは優れています。

中央データベースからフェッチされたデータの一部は読み取り専用であり、クライアント(薬局のユーザー5000人)間で共有されます。クライアントは、請求書などを中央データベースに保存します。

課題が1つあります。 Webアプリの稼働時間は100%でなければなりません。

  • インターネット接続が失われたときに、ハイブリッドのオンラインモードとオフラインモードをどのように処理できますか?
  • 既知の方法はありますか?データベースの更新をローカルの顧客のコンピューターに同期して、それで作業する必要がありますか?データベースのサイズが大きすぎる可能性があります(10 GBなど)。
3
user355834

インターネット接続が失われた場合、それはあなたのアプリケーションではなく、インターネット接続です。だから、あなたが集中する必要があるインターネット接続です。常時インターネットに接続することが重要な場合は、各場所で2つのインターネット接続(冗長性)を使用することで簡単に行えます。 (別のオペレーターからのものである必要があります)

多くの場合、薬局はクレジットカードの購入を処理するためにインターネット接続も必要とするため、アプリケーションが「ローカルにインストールされたデスクトップアプリケーション」である場合でも、実際にはインターネットに接続せずにそれをあまり実行できない場合があります。

3
Mr Zach

Progressive Web Apps(PWA)を検討することをお勧めします: https://developers.google.com/web/progressive-web- apps /

https://en.wikipedia.org/wiki/Progressive_Web_Apps

https://scotch.io/tutorials/the-ultimate-guide-to-progressive-web-applications

UPDATE:

私の元の回答へのコメントと他のすべての回答の視点の両方が私に考えさせられました質問にはもっともらしい、現実的な回答がありますか、それとも最初に反対票を投じるべき質問ですか?

明らかに、質問をするチームは、クライアントアプリケーションにインストールされ、ローカルデータを使用してオフラインで作業するデスクトップアプリケーションを開発する強力なバックグラウンドを持っています。誰もが知っているように、Webの登場により状況は大きく変わりました。

一方、私たちは皆、長年にわたってWebが悪用された範囲を知っており、使いやすさと機能性の両方。 Webアプリケーション(== --- ==)imitateデスクトップアプリケーションをforceする多くの試みがありました。結局のところ、us開発者がすべてを使用して終了を満たすように努力していますある種の複雑なトリック、ハッキング、独自のソリューション。これらすべては、Web標準を無視する、保守不可能な不安定なソフトウェアにつながります。

多くの場合、問題の原因は悪い設計であり、シフトの欠如に起因しますデザイナーに代わって心の。デスクトップアプリケーションの考え方を使用して、Web向けの成功するアプリケーションをどちらも設計することもすることもできることに、私たちは全員同意していると思います。

そうは言っても、設計チームへの私の正直な答えdropウェブを念頭に置いた「挑戦」と再設計。結局のところ、いわゆる「チャレンジ」は、デスクトップの背景によって課せられるものであるため、まったく難しいことではないことがわかります。

2
dpant

与えられた情報から、適切な答えを出すことは困難です。だから私はいくつかの考えだけを提供することができました:

Webアプリの稼働時間は100%である必要があります

これを達成するのはかなり難しいです。 1台のマシンのローカルシナリオでも。

停電や故障しているハードウェアなどと戦わなければなりません。また、ネットワークが関与するとすぐに、インターネットや不安定な接続について話すのではなく、故障している部分が増えます。

いくつかの数字を投入するには:

  • 99.999%の可用性は、1日あたり0.87秒が利用できないことを意味します
  • 99.99%の可用性とは、1日あたり8.64秒が利用できないことを意味します

GoogleのSREブック から取得

したがって、99.99%の可用性を保証できたとしても、問題は、顧客が使用しているネットワークがそのネットワークで利用可能かどうかです。

ネットワークの問題を減らすには、すべての顧客に対してある種の冗長ネットワークアクセスが必要になります。

ユーザーによるインストールが不要なため、Webベースのソリューションは優れています

それは事実ですが、可用性を実現するために困難を伴うことになります。

中央データベースからフェッチされたデータの一部は読み取り専用であり、クライアント間で共有されます

オンプレミスインストールを実行するとします。

  • アップグレードはどうでしたか?
  • アップグレードは可用性の目標にどのように影響しますか?
  • 一貫性の観点から異なる更新速度に対処する方法?顧客Aはデータベースの最新バージョンを持っていますが、顧客Bはまだ更新中であるため、持っていません。

したがって、いくつかの「スマートな更新」を伴うオンプレミス戦略に行ったとしても、一貫性の問題は十分に検討する必要があります。

クライアントは請求書などを中央データベースに保存するかもしれません

これは別の興味深いトピックです。データのオンプレミスインストールで読み取り部分を管理する場合でも、writesのネットワークの問題は同じままです:信頼できない接続。

他のユーザーが書き込みにアクセスできるための基準は何ですか?

お客様自身が「即時」アクセスを必要としている限り、更新部分を延期することができます。


インターネット接続が失われたときに、ハイブリッドのオンラインモードとオフラインモードをどのように処理できますか?

「読み取り部分」について:

オンプレミスでDBのインストールを実行します。これは、ネットワークの問題を除外する唯一の機会です。更新は一方向で簡単です。ネットワークが利用可能になるとすぐに、更新がプッシュされます。問題:結果整合性。

「書き込み部分」について:書き込み操作は、ネットワークが利用可能なときにキューに入れられ、配信される可能性があります。他の顧客が依存しない場合、問題はありません。しかし、他の人が公開されたデータに依存している場合、結果整合性の問題が再び発生します。

既知の方法はありますか?

はいといいえ。

利用可能なパターンはいくつかありますが、1つのサイズですべてのソリューションに適合することはできません。良いアドバイスをするためには、具体的なシナリオを知る必要があり、あなた/あなたの顧客が喜んで受け入れるトレードオフです。

データベースの更新をローカルの顧客のコンピューターに同期して、それで作業する必要がありますか?

上記のように:これは今のところ最良の解決策のようです。

考えられるシナリオの1つは、ターゲットプラットフォームとしてタブレットを使用することです。これらは安価なデバイスであるため、お客様は複数購入(購入またはレンタル)できます。複数のデバイスを使用すると、1つのデバイスが機能しない場合の冗長性が向上します。デバイスはWiFiと3/4G冗長性を介して接続され、ネットワーク問題の可能性を減らすことができます。

おそらく、セキュリティの観点から、誤ってインストールされたマルウェアがデータにアクセスするのを防ぐために、デバイスをユースケースにロックすることが理にかなっています。

2
Thomas Junk

インターネットに接続していなくても、ウェブサイトが運用を継続することは不可能ではありません。

クライアント側のJavaScriptは引き続き機能し、接続が戻ったときに処理するデータをローカルに保存できます。

しかしながら!!本質的な問題は、クライアントアプリケーションが大きなブラウザの更新ページボタンを備えたWebブラウザーで実行されていることです。

信頼性の高いオフライン機能を使用するには、単純なWebページよりもクライアントを詳細に制御する必要があります。

欠点は、どのようなソリューションでも何らかの形のインストールが必要になることです。

完全に回避しようとするのではなく、インストールの自動化に焦点を当てます。

1
Ewan

Webアプリケーションはオフラインで動作できますが( W3C ; [〜#〜] mdn [〜#〜] )、目標はモバイルユーザーにサービスを提供することではなく、 CRMのデスクトップ顧客へ。

発生する制限には、次のようなものがあります。

  • データのメモリ制限と揮発性。話している読み取り専用データのサイズを指定していませんが、クライアント側のSQLがサーバー側のデータベースを置き換えるわけではないことを理解する必要があります。ブラウザーにテラバイトのデータを保存することはできません。また、ユーザーが1日に一度にそのデータを削除することも(あるいは、改ざんすることも)できないかどうかもわかりません。

  • オンラインに戻るときの同期。これは、オフラインの間に2つの場所で変更されたデータの古典的な問題です。競合の処理方法は?

  • クロスブラウザの問題。ユーザーがPCやスマートフォンからアプリケーションにアクセスするとします。 PCネットワーク接続はダウンしますが、ユーザーはアプリケーションを使い続け、請求書を生成します。その後、彼はスマートフォンで請求書のリストを確認し、請求書が欠落していることに気付きました。これは開発者にとって驚くべきことではありませんが、ほとんどのユーザーは、最新であることが予想されるオンラインバージョンに、オフラインデバイスで生成されたデータがない理由を理解しません。

    顧客間でデータを共有している場合、事態はさらに悪化する可能性があります。たとえば、ある人がオフラインのデバイスで情報を生成し、その情報を別のユーザーと共有した後、他のユーザーに電話をかけて、その情報が見えないことを見つけるためだけに話し合うことができます。ユーザーインターフェースに細心の注意を払わない限り、そのような状況の責任は「壊れている」アプリにあります。

あなたがこの質問をしているなら、私はそれを仮定します:

  • インターネット接続の信頼性がそれほど高くない自宅(オフィス)でアプリケーションをホストしている。この場合、Amazon AWSまたは同様のホスティングプロバイダーでホストすることを検討する必要があります。ここで、アプリケーションは永久にオンラインになります。

  • または、顧客が信頼できる接続を持っていません。この場合、できることは多くありません。それは彼らの問題であり、ネットワークの問題が発生した場合に彼らのビジネスが待機する(または少なくとも遅くなる)ことを期待しているはずです。 Webアプリケーションのモバイルフレンドリーバージョンを使用すると、スマートフォンでアプリを使い続けることで、ネットワークの問題が発生した場合でも操作を継続できます。

1