一行で: プライベート IP を持ち、ファイアウォールの背後にある複数のオンプレミス クライアントのインストールを、パブリック クラウドでホストされているサーバーに接続し、サーバーからセットアップされたオンプレミス クライアントのいずれかで HTTP エンドポイントと SSH を呼び出す方法。
詳細:パブリック クラウド (AWS など) にデプロイされた 1 つのライブ パブリック (または複数のクラスター) Tomcat サーバーを持つマルチテナント アプリケーションがあります。また、クライアントの場所にデプロイされるクライアントTomcatサーバーもあり、オンプレミスでホストされているクライアントにはプライベートIPがあり、ファイアウォールで保護されます(ライブサーバーへの特定のポートでの通信を許可します)。
クライアントのオフライン時にアプリの一部の機能をサポートするために、オンプレミス クライアントのインストールをサポートする必要があります。ただし、エンド ユーザーは定期的にライブ サーバーからクライアント サーバーに同期します。
パブリック サーバーからプライベート ホスト クライアント マシン(SSH & Tomcat)にアクセスする効率的な方法が必要です。
設定:
- 言語: Java 8
- アプリケーション サーバー: Tomcat 8
- OS: Ubuntu Linux 14.04 (パブリック クラウドでホストされるサーバーとクライアント サーバーの両方)
私の知る限り、これを達成するための方法とその長所と短所を以下に示します。
- SSH リバース トンネル
- 長所: 追加のプログラミングは不要
- 短所: クライアントの数が増えると、パブリック サーバーでこれらの多くのポートを開く必要があり、多くのセキュリティ上の問題が発生する可能性があります。
- ngrockや他の多くのサービスなどのローカル トンネル サービス
- 長所: 手作業でプログラムをコーディングする必要はありません。おそらく、ほとんどの時間アイドル状態であっても、再接続や接続の維持など、多くのエッジ ケースを処理していたでしょう。
- 短所: それらのほとんどは商用ソリューションであり、価格モデルはノードごとです。少なくとも 500 ~ 600 のクライアント インストールが必要です。
- Websockets - サーバーはプッシュを送信し、クライアントはサーバーにコールバックします。
- 長所: サーバーで複数のポートを開く必要がない
- 短所:HTTPのみ可能、SSHは不可
- 各クライアントが SSH トンネルを介してサーバー上の個別のポートに接続するハンド コーディングされたソケット プログラミング
- 長所:完全にコントロールできます
- 短所: 対処しなければならないエッジ ケースの数がわかりません。
リソースの効率とセキュリティを念頭に置いて、私たちの要件に合うより良い方法を提案してください。