PaaSおよびDevOpsソリューションの需要が高まるにつれて、実際には仮想マシン上で実行されるか、または直接ベアメタル上で実行されるレガシーアプリケーションが見られるようになります。一連の障害に遭遇しました。分解と移行のプロセスは非常に複雑です。多くの場合、PaaSまたはCaaSモードの恩恵を受けるために、アプリケーション所有者は自分のアプリケーションアーキテクチャを再設計しなければなりません。
この記事では、仮想マシンで実行されているJavaレガシーアプリケーションをコンテナベースのプラットフォームに移行する際の具体的な課題について分析します。ケースとしてOracle WebLogic Serverを使用して、分解プロセスの具体的な手順と移行の結果を示します。
コンテナへの移行の動き
ベアメタル時代のJava EEアプリケーションを比較すると、ハードウェア仮想化は大きな一歩前進でした。これにより、複数のアプリケーション間の分離を解決し、ハードウェア使用率を改善することができます。ただし、ハイパーバイザーはホスト上で大量のCPUとメモリを使用するため、各仮想マシンには完全なオペレーティングシステム
、TCPスタック、およびファイルシステムが必要です。
各仮想マシンには固定メモリがあり、メモリバルーニングメカニズムを使用して仮想マシンを実行するためのメモリを再配分できるのは、ハイパーバイザーのサブセットだけです。そのため、アプリケーションの将来を拡張するために、各仮想マシンにいくつかのリソースを予約しますが、これらのリソースは完全には利用されていません。同時に、仮想マシン内のインスタンス間に適切な分離がないため、これらのリソースを他のプログラムと共有することはできません。
コンテナは、OSカーネル、TCPスタック、ファイルシステム、および共有ホストの他のシステムリソースを介して、わずかなリソースとCPUで実行できます。これにより、パフォーマンスとリソース使用率がさらに向上します。 。
コンテナには、アプリケーションコンテナとシステムコンテナの2種類があります。通常、アプリケーションコンテナは単一のプロセスとして実行されます。システムコンテナは、systemd、SysVinit、およびopenrcによって生成されたopenssh、crond、syslogdなどの他のプロセスなど、単一のコンテナ内でオペレーティングシステムのすべての機能を実行できる完全なオペレーティングシステムのようなものです。どちらの種類のコンテナも、さまざまな使用シナリオで非常に役立ち、冗長管理プロセスでメモリを浪費することはありません。通常、仮想マシンよりも少ないメモリを消費します。ただし、Javaレガシーアプリケーションの移行に必要なのは、システムコンテナを使用した大量のアプリケーションリファクタリングだけです。
仮想マシンとは異なり、実行中のインスタンスのコンテナリソースに対する制限を再起動せずに簡単に変更できます。さらに、制限された境界内で消費されないこれらのリソースは、同じ物理ノード上の他のコンテナーと自動的に共有されます。
さらに、コンテナは、アプリケーションの作成を迅速に行い、アプリケーションのスケーラビリティを向上させるために、アプリケーションを作成、パッケージ化、およびテストするための機敏なアプローチを使用して開発にも非常に役立ちます。
物理マシンで使用されていないこれらのリソースは、新しいアプリケーションコンテナで簡単に拡張または使用できます。コンテナーの分離性が高まると、異なる種類のアプリケーションが互いに影響を与えることなく同じ物理ノード上で実行できるようになります。これらは、既存のインフラストラクチャリソースの平均3〜10倍の使用率です。
分解とは何ですか?
移行プロセスでは、プログラム分解は基本的な部分です。これは、大きな単一ブロックのアプリケーションを小さな論理ブロックに分割するのに役立ち、独立して実行できます。プログラム
この図は、仮想マシンからコンテナへの移行時に適用される単純な分解プロセスを示しています。
仮想マシンでのJavaレガシーの実行アプリケーション
ソフトウェアプログラムの開発には古くからのことわざがあります。レガシソフトウェアはいいのですが、まだ実行中の古いソフトウェアです。 Oracle Weblogic Serverでどのように機能するかを詳しく見てみましょう。
仮想マシンでのOracle Weblogic Serverの構造
仮想マシンで実行している場合、Weblogic Serverには3種類のインスタンスがあります。
管理サーバーは、クラスタの構成と管理に使用する中央ノードです。内のすべてのリソース。ノードマネージャに接続して、管理対象ノードを追加または削除します。管理対象ノードは、Webアプリケーション、EJB、Webサービス、およびその他のリソースを実行します。
通常、各仮想マシンで1つのノードマネージャと複数の管理対象サービスサーバーが実行されており、1つの管理サーバーがすべての仮想マシンのすべてのインスタンスを管理します。
仮想マシンを介したWebLogicの拡張
トラフィックのピーク時にクラスタを拡張する必要があるとします。新しい管理対象サーバーが仮想マシンに追加され、増大する負荷に対応するまでリソース割り当てはありません。
しかし、トラフィックがまだ増え続け、現在管理されているサービスのインスタンス数が負荷を処理するのに不十分な場合は、プログラムのさらなる成長を処理するために新しい仮想マシンを追加する必要があります。
複数の仮想マシンを介したWebLogicの一般的な拡張には、3つのステップがあります。
仮想マシンでWebLogicを実行することの欠点
Oracle WebLogicをこのように実行することは、リソース使用率が非常に低いことです。または未使用の点:
仮想マシンからコンテナへの移行
最近、Spring Boot、WildFly Swarmなど、コンテナ内でマイクロサービスを実行するように設計された優れたアプリケーションサーバーとフレームワークがいくつか見つかりました。 、Payara Microなどいずれにせよ、Oracle WebLogic Serverなどの仮想マシンで実行される一連のサーバー設計があり、このタイプのインスタンスをコンテナに移行する作業はより複雑です。これが私たちがこのトピックについてもっと心配している理由です。
WebLogic Serverの分解
最近の分解は、Dockerコンテナを使用すると非常に簡単な作業です。まず、WebLogic Serverでコンテナイメージを用意する必要があります。 (ミラーリングはOracleの公式リポジトリから入手できます)。
Dockerテンプレートの準備ができたら、各インスタンスを個別のコンテナー(管理サーバーと必要な数の管理対象サーバー)に指定します。
ここでは、管理対象ノードを追加および削除するためのノードマネージャを断念しました。
コンテナに移行した後、管理対象サーバインスタンスは、管理ノードと同じように、コンテナオーケストレーションプラットフォームと一連のWSLTスクリプトを通じて自動的に追加および削除できます。
このようにして、非常に単純なWebLogic Serverクラスタ構造が得られます。
コンテナは最初から設定したり複製したりするのが簡単なので、水平方向の展開プロセスはきめ細かくスムーズになります。また、各コンテナは、ほとんど停止することなくすばやく起動または停止できます。コンテナは仮想マシンに比べてはるかに軽いので、コンテナのスケジュールは仮想マシンのスケジュールよりも時間がかかりません。
コンテナ内でWebLogicを実行する利点
アプリケーションをコンテナに移行するのは困難ですが、その管理方法がわかっている場合は、次のような利点があります。
同じ方法を使用して、アプリケーションの他の層を分割したり、他のJava EEアプリケーションサービスを適用したりできます。次のトピックでは、特定のケースを通して分解されたデータの全プロセスを処理する方法について説明します。
zh-CN"],null,[1],zh-TW"]]]
このチュートリアルでは、zenityやwhiptailのようなツールを使ってBashシェルスクリプトでメッセージ/ダイアログを提供する方法の例をいくつか紹介します。これらのツールを使用して、スクリプトは現在のプログラムが何をしているのかをユーザーに伝え、ユーザーと対話できます。これら2つのツールの違いは、メッセージボックスまたはダイアログの表示方法です。 ZenityはGTKツールキットを使用してグラフィカルユーザーインターフェイス
awkの構文:
#a
Ram /’ awk_fileRam、200、1000Hari、600、1000Ram、400、1000例:4名前の最初の列にユニークな値があるかどうか linuxtechi @ mai
Computer Store News:ドイツのテクノロジーWebサイトからの最新の報告によると、ValveのSteam Boxゲームコンソールは2013年にLinuxで稼働するようになります。
まず、Linux Deepinの注目を集めたコミュニティのファンやサポーターのおかげで、Linux Deepinチームによって開発された音楽プレーヤーとビデオプレーヤーは、beta2バージョンのすべて