IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エルゼットラブズ ゲーエムベーハーの特許一覧

特許7057571モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開
<>
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図1A
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図1B
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図2A
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図2B
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図3
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図4
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図5
  • 特許-モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-04-12
(45)【発行日】2022-04-20
(54)【発明の名称】モノリシックレガシーアプリケーションに基づくマイクロサービスのコンテナ化展開
(51)【国際特許分類】
   G06F 8/76 20180101AFI20220413BHJP
   G06F 9/455 20060101ALI20220413BHJP
   G06F 9/46 20060101ALI20220413BHJP
【FI】
G06F8/76
G06F9/455
G06F9/46 430
【請求項の数】 46
(21)【出願番号】P 2019558444
(86)(22)【出願日】2017-04-28
(65)【公表番号】
(43)【公表日】2020-06-18
(86)【国際出願番号】 IB2017052504
(87)【国際公開番号】W WO2018197928
(87)【国際公開日】2018-11-01
【審査請求日】2020-04-03
(73)【特許権者】
【識別番号】518210362
【氏名又は名称】エルゼットラブズ ゲーエムベーハー
(74)【代理人】
【識別番号】100078282
【弁理士】
【氏名又は名称】山本 秀策
(74)【代理人】
【識別番号】100113413
【弁理士】
【氏名又は名称】森下 夏樹
(74)【代理人】
【識別番号】100181674
【弁理士】
【氏名又は名称】飯田 貴敏
(74)【代理人】
【識別番号】100181641
【弁理士】
【氏名又は名称】石川 大輔
(74)【代理人】
【識別番号】230113332
【弁護士】
【氏名又は名称】山本 健策
(72)【発明者】
【氏名】イエーガー, ジャン
(72)【発明者】
【氏名】デュラン, ディディエ
(72)【発明者】
【氏名】ディトシャイト, ピエール-ジャン
(72)【発明者】
【氏名】ヴュアトゥー, ジャン-リュック
【審査官】久保 光宏
(56)【参考文献】
【文献】特開2001-125779(JP,A)
【文献】田原 貴司(外4名),「レガシー装置ソフトウェア更改の効率化に関する一検討」,電子情報通信学会技術研究報告,日本,社団法人 電子情報通信学会,2009年01月15日,Vol.108, No.396,第29~34頁,ISSN: 0913-5685.
(58)【調査した分野】(Int.Cl.,DB名)
G06F8/76
G06F9/455
G06F9/46
CSDB(日本国特許庁)
IEEEXplore(IEEE)
(57)【特許請求の範囲】
【請求項1】
非一過性媒体に記憶されたコンピュータ命令において実装されるスケーラブルコンテナベースのシステムであって、前記システムは、
モノリシックレガシーアプリケーションのソースコードを含むソースコードリポジトリであって、前記ソースコードリポジトリは、複数のトランザクションを実施するためのレガシーコンピューティング環境において実行可能な複数のプログラムを含む、ソースコードリポジトリと、
前記ソースコードを解析し、前記複数のトランザクションにおける各トランザクションのために、トランザクション定義ベクトルを識別し、複数のトランザクション定義ベクトルを作成するように動作可能であるソースコードアナライザであって、前記トランザクション定義ベクトルは、前記トランザクション中に潜在的に呼び出される各プログラムを識別する、ソースコードアナライザと、
前記複数のトランザクション定義ベクトルを記憶するように動作可能であるトランザクション状態定義リポジトリと、
動的定義リポジトリを作成するように動作可能であるアクティビティログアナライザであって、前記動的定義リポジトリは、前記複数のトランザクションの少なくとも一部において実施するときに前記モノリシックレガシーアプリケーションによって実際に使用されるプログラムを識別する、アクティビティログアナライザと、
前記複数のトランザクション定義ベクトルを前記動的定義リポジトリと比較し、使用されないプログラムを前記トランザクション定義ベクトルから除去し、複数のマイクロサービスを定義する複数のマイクロサービス定義ベクトルを作成するように動作可能であるマイクロサービス定義オプティマイザと、
前記複数のマイクロサービス定義ベクトルの各マイクロサービス定義ベクトルのために、前記マイクロサービス定義ベクトルによって識別された各プログラムのために、前記レガシーコンピューティング環境において実行するようにコンパイルされたコンパイル済みソースコードバイナリを見つけ、前記マイクロサービス定義ベクトルに対応する複数のマイクロサービスイメージを形成するように動作可能であるマイクロサービスイメージビルダと、
前記複数のマイクロサービスイメージを記憶するように動作可能であるマイクロサービスイメージリポジトリと、
レガシーエミュレータのエミュレータ要素のバイナリイメージの組を記憶するように動作可能である相補的コンポーネントリポジトリであって、前記バイナリイメージの組は、合わせて、完全なレガシーエミュレータより小さく、前記バイナリイメージは、前記レガシーコンピューティング環境の複数の機能または機能の組に対応し、前記バイナリイメージは、前記レガシーコンピューティング環境の命令セットと異なる命令セットによって特徴付けられる異なるコンピュータ環境において実行可能である、相補的コンポーネントリポジトリと、
コンテナビルダであって、前記コンテナビルダは、前記複数のマイクロサービスにおける各マイクロサービスまたはマイクロサービスの組のためのコンテナイメージを形成するように動作可能であり、複数のコンテナイメージを作成するために、前記コンテナビルダは、前記マイクロサービスイメージリポジトリからの前記対応する1つまたは複数のマイクロサービスイメージを使用することと、前記レガシーエミュレータのエミュレータ要素のためのイメージファイルを前記相補的コンポーネントリポジトリから使用することとを行い、前記レガシーエミュレータの前記エミュレータ要素は、実行されるときに前記マイクロサービスまたはマイクロサービスの組によって採用される機能または機能の組に対応し、前記採用される機能または機能の組は、前記マイクロサービスまたはマイクロサービスの組における前記ソースコードバイナリ内の呼び出しのシグネチャによって識別される、コンテナビルダと、
前記異なるコンピューティング環境において実行可能な前記複数のコンテナイメージを記憶するように動作可能であるコンテナイメージリポジトリと、
コンテナ管理システムと
を含み、
前記コンテナ管理システムは、前記異なるコンピューティング環境における実行のための少なくとも1つのコンテナを作成し、前記少なくとも1つのコンテナにおけるコンテナイメージリポジトリに記憶された少なくとも1つのマイクロサービスを実行するように動作可能である、システム。
【請求項2】
前記アクティビティログアナライザは、前記複数のトランザクション定義ベクトルの少なくとも一部に対応する複数の動的トランザクション定義ベクトルを作成するように動作可能であり、前記マイクロサービス定義オプティマイザは、各動的トランザクション定義ベクトルを各対応するトランザクション定義ベクトルと比較し、前記複数のマイクロサービス定義ベクトルを作成する、請求項1に記載のスケーラブルコンテナベースのシステム。
【請求項3】
前記アクティビティログアナライザは、前記レガシーコンピューティング環境において前記モノリシックレガシーアプリケーションを実行することによって生成される前記モノリシックレガシーアプリケーションのレガシーアクティビティログを使用する、請求項1または請求項2に記載のスケーラブルコンテナベースのシステム。
【請求項4】
前記アクティビティログアナライザは、エミュレータを使用し、前記モノリシックレガシーアプリケーションを実行し、ログファイルを生成し、トランザクションの実行中に前記モノリシックレガシーアプリケーションによって使用されるプログラムを決定する、請求項13のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項5】
前記ソースコードアナライザは、前記アクティビティログアナライザからの情報を使用し、前記トランザクション定義ベクトルを識別するように動作可能である、請求項14のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項6】
前記ソースコードアナライザは、複数の変換テーブルを作成するようにさらに動作可能である、請求項15のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項7】
前記マイクロサービス定義オプティマイザは、前記マイクロサービス定義ベクトルをさらに最適化するように動作可能である、請求項16のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項8】
前記マイクロサービス定義オプティマイザは、前記複数のトランザクションにおける2つ以上のトランザクションによって共有されるプログラムを含む追加のマイクロサービス定義ベクトルを作成することによって、前記マイクロサービス定義ベクトルをさらに最適化するように動作可能である、請求項7に記載のスケーラブルコンテナベースのシステム。
【請求項9】
前記レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含む前記コンパイル済みソースコードを記憶するように動作可能なバイナリリポジトリをさらに含む、請求項18のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項10】
前記バイナリリポジトリ内の前記コンパイル済みソースコードは、前記ソースコードリポジトリ内の前記ソースコードからバイナリファイルにコンパイルされる、請求項9に記載のスケーラブルコンテナベースのシステム。
【請求項11】
前記レガシーコンピューティング環境は、多重仮想記憶(MVS)またはz/OSコンピュータシステムを含む、請求項110のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項12】
前記相補的コンポーネントリポジトリは、前記レガシーエミュレータによって使用されるオペレーティングシステムソフトウェアパッケージの複数のイメージを記憶するようにさらに動作可能であり、前記コンテナビルダも、前記レガシーエミュレータの特定の要素によって使用される任意のソフトウェアパッケージのイメージを前記レガシーエミュレータの前記特定の要素を含む特定のコンテナイメージに設置する、請求項111のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項13】
前記コンテナビルダは、前記マイクロサービスまたはマイクロサービスの組における前記ソースコードバイナリ内の前記呼び出しのシグネチャを前記レガシーエミュレータにおいて動作可能な呼び出しのための命令と置換するようにさらに動作可能である、請求項112のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項14】
前記コンテナ管理システムは、複数のコンテナを作成するように動作可能である、請求項113のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項15】
相補的イメージの組が、共通ポッド内の別個のコンテナの中でインスタンス化される、請求項14に記載のスケーラブルコンテナベースのシステム。
【請求項16】
少なくとも1つのコンテナイメージの2つ以上のコピーが、2つ以上の別個のコンテナの中でアクティブにされる、請求項14および15のいずれかに記載のスケーラブルコンテナベースのシステム。
【請求項17】
前記コンテナ管理システムは、前記複数のコンテナにおけるコンテナの数を変動させるように動作可能である、請求項1416のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項18】
前記コンテナ管理システムは、様々なリソースを別個のコンテナに分配するように動作可能である、請求項1417のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項19】
前記コンテナ管理システムは、前記アクティビティログアナライザからの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うように動作可能である、請求項1418のいずれかに記載のスケーラブルコンテナベースのシステム。
【請求項20】
前記コンテナ管理システムは、前記スケーラブルコンテナベースのシステムの使用からの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うように動作可能である、請求項1419のいずれかに記載のスケーラブルコンテナベースのシステム。
【請求項21】
前記ソースコードアナライザは、前記モノリシックレガシーアプリケーションのデータベースから1つ以上のサブデータベースまたはサブデータベースのクラスタを作成するようにさらに動作可能である、請求項120のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項22】
前記コンテナビルダは、前記1つ以上のサブデータベースまたはサブデータベースのクラスタを1つ以上のコンテナの中に設置するように動作可能である、請求項21に記載のスケーラブルコンテナベースのシステム。
【請求項23】
前記ソースコードが変更されると、前記ソースコード変更に基づいて更新されたバイナリを含むために、前記コンテナベースのシステムは、少なくとも1つのマイクロサービスイメージ、少なくとも1つのコンテナイメージ、および少なくとも1つのコンテナを自動的に更新するように動作可能である、請求項122のいずれか1項に記載のスケーラブルコンテナベースのシステム。
【請求項24】
スケーラブルコンテナベースのシステムを作成し、動作させる方法であって、前記方法は、
レガシーコンピューティング環境において実行可能なモノリシックレガシーアプリケーションを解析し、そのプログラムファイルを区分し、前記モノリシックレガシーアプリケーションによって実施可能な複数のトランザクションに対応する複数のトランザクション定義ベクトルを作成し、各トランザクションのために、そのトランザクションによって呼び出される全てのプログラムを識別することと、
トランザクション状態リポジトリに前記複数のトランザクション定義ベクトルを記憶することと、
前記複数のトランザクションの少なくとも一部のために、前記トランザクションが前記モノリシックレガシーアプリケーションによって実施されるときに実際に使用されるプログラムを決定することによって、動的定義リポジトリを作成することと、
前記複数のトランザクション定義ベクトルを前記動的定義リポジトリと比較し、その対応するトランザクション定義ベクトルからトランザクションにおいて使用されないプログラムを除去し、複数のマイクロサービス定義ベクトルを作成することと、
前記複数のマイクロサービス定義ベクトルの各マイクロサービス定義ベクトルのために、前記レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含む対応するコンパイル済みソースコードバイナリを見つけ、前記対応するコンパイ
ル済みソースコードバイナリを含むマイクロサービスイメージを作成し、複数のマイクロサービスイメージを形成することと、
マイクロサービスイメージリポジトリに前記複数のマイクロサービスイメージを記憶することと、
相補的コンポーネントリポジトリにおいて、前記レガシーコンピューティング環境と異なるコンピューティング環境においてプログラムを実行するように動作可能なレガシーエミュレータの複数の要素のイメージを記憶することであって、前記レガシーエミュレータの前記要素は、前記モノリシックレガシーアプリケーションの複数の機能または機能の組に対応する、ことと、
数のマイクロサービスにおける各マイクロサービスまたはマイクロサービスの組のためのコンテナイメージを形成することであって、複数のコンテナイメージを作成するために、前記マイクロサービスイメージリポジトリからの前記対応する1つまたは複数のマイクロサービスイメージを使用することと、前記レガシーエミュレータの要素のためのイメージファイルを前記相補的コンポーネントリポジトリから使用することとを行い、前記レガシーエミュレータの前記要素は、実行されるときに前記マイクロサービスまたはマイクロサービスの組によって採用される機能または機能の組に対応し、前記採用される機能または機能の組は、前記マイクロサービスまたはマイクロサービスの組における前記バイナリ内の呼び出しのシグネチャによって識別される、ことと、
コンテナイメージリポジトリに前記コンテナイメージを記憶することと、
コンテナ管理システムを使用して、前記異なるコンピューティング環境内に少なくとも1つのコンテナを作成し、前記異なるコンピューティング環境において実行可能な形態で前記コンテナの中に少なくとも1つのコンテナイメージを記憶することと、
前記コンテナにおける前記マイクロサービスまたはマイクロサービスの組を実行することと
を含む、方法。
【請求項25】
クティビティログアナライザを使用して、前記複数のトランザクション定義ベクトルの少なくとも一部に対応する複数の動的トランザクション定義ベクトルを作成することと、
イクロサービス定義オプティマイザを使用して、各動的トランザクション定義ベクトルを各対応するトランザクション定義ベクトルと比較し、前記複数のマイクロサービス定義ベクトルを作成することと
を含む、請求項24に記載の方法。
【請求項26】
クティビティログアナライザが、前記レガシーコンピューティング環境において前記モノリシックレガシーアプリケーションを実行することによって生成される前記モノリシックレガシーアプリケーションのレガシーアクティビティログを使用することを含む、請求項24または請求項25に記載の方法。
【請求項27】
クティビティログアナライザが、エミュレータを使用し、前記モノリシックレガシーアプリケーションを実行し、ログファイルを生成し、トランザクションの実行中に前記モノリシックレガシーアプリケーションによって使用されるプログラムを決定することを含む、請求項2426のいずれか1項に記載の方法。
【請求項28】
ースコードアナライザが、クティビティログアナライザからの情報を使用し、前記トランザクション定義ベクトルを識別することを含む、請求項2427のいずれか1項に記載の方法。
【請求項29】
ースコードアナライザを使用して、複数の変換テーブルを作成することを含む、請求項2428のいずれか1項に記載の方法。
【請求項30】
前記マイクロサービス定義オプティマイザを使用して、前記マイクロサービス定義ベクトルをさらに最適化することを含む、請求項2429のいずれか1項に記載の方法。
【請求項31】
前記マイクロサービス定義オプティマイザを使用して、前記複数のトランザクションにおける2つ以上のトランザクションによって共有されるプログラムを含む追加のマイクロサービス定義ベクトルを作成することによって、前記マイクロサービス定義ベクトルをさらに最適化することを含む、請求項30に記載の方法。
【請求項32】
前記レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含む前記コンパイル済みソースコードバイナリをバイナリリポジトリに記憶することをさらに含む、請求項2431のいずれか1項に記載の方法。
【請求項33】
前記バイナリリポジトリにおける前記ソースコードバイナリは、ソースコードリポジトリ内のソースコードをコンパイルして得られたものである、請求項32に記載の方法。
【請求項34】
前記レガシーコンピューティング環境は、多重仮想記憶(MVS)またはz/OSコンピュータシステムを含む、請求項2433のいずれか1項に記載の方法。
【請求項35】
前記相補的コンポーネントリポジトリが、前記レガシーエミュレータによって使用されるオペレーティングシステムソフトウェアパッケージの複数のイメージを記憶することと、ンテナビルダも、前記レガシーエミュレータの特定の要素によって使用される任意のソフトウェアパッケージのイメージを前記レガシーエミュレータの前記特定の要素を含む特定のコンテナイメージに設置することとを含む、請求項2434のいずれか1項に記載の方法。
【請求項36】
ンテナビルダが、前記マイクロサービスまたはマイクロサービスの組における前記バイナリ内の前記呼び出しのシグネチャを前記レガシーエミュレータにおいて動作可能な呼び出しのための命令と置換することを含む、請求項2435のいずれか1項に記載の方法。
【請求項37】
前記コンテナ管理システムを使用して、複数のコンテナを作成することを含む、請求項2436のいずれか1項に記載の方法。
【請求項38】
相補的イメージの組を共通ポッド内の別個のコンテナの中でインスタンス化することを含む、請求項37に記載の方法。
【請求項39】
少なくとも1つのコンテナイメージの2つ以上のコピーを2つ以上の別個のコンテナの中でアクティブにすることを含む、請求項37および38のいずれかに記載の方法。
【請求項40】
前記コンテナ管理システムが、前記複数のコンテナにおけるコンテナの数を変動させることを含む、請求項3739のいずれか1項に記載の方法。
【請求項41】
前記コンテナ管理システムが、様々なリソースを別個のコンテナに分配することを含む、請求項3740のいずれか1項に記載の方法。
【請求項42】
前記コンテナ管理システムが、クティビティログアナライザからの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うことを含む、請求項
3741のいずれかに記載の方法。
【請求項43】
前記コンテナ管理システムが、前記スケーラブルコンテナベースのシステムの使用からの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うことを含む、請求項3742のいずれかに記載の方法。
【請求項44】
ースコードアナライザが、前記モノリシックレガシーアプリケーションのデータベースから1つ以上のサブデータベースまたはサブデータベースのクラスタを作成することを含む、請求項2443のいずれか1項に記載の方法。
【請求項45】
ンテナビルダが、前記1つ以上のサブデータベースまたはサブデータベースのクラスタを1つ以上のコンテナの中に設置することを含む、請求項44に記載の方法。
【請求項46】
前記ソースコードが変更されると、前記ソースコード変更に基づいて更新されたバイナリを含むために、少なくとも1つのマイクロサービスイメージ、少なくとも1つのコンテナイメージ、および少なくとも1つのコンテナを自動的に更新することを含む、請求項2445のいずれか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンテナ化、スケーラブル、かつフレキシブルな動作環境において実行されるマイクロサービスとしての展開のためにモノリシックレガシーアプリケーションを区分するための技法およびシステムに関する。
【背景技術】
【0002】
レガシーメインフレームコンピューティング環境では、数千、さらには数万の個々のプログラムを含むモノリシックアプリケーションを見出すことが、一般的であり、個々のプログラムの全てが、単一の動作環境内で非常にモノリシックな構造において一緒に実行される。プログラムのこのモノリシック構造は、それらの基礎コードの開発における時間および資源の相当な投資(最大数千人年)を表し得、ソフトウェアプログラムの相互依存性質は、1つのコンピュータ環境からのコードの変換または移行を非常に困難にする。
【0003】
レガシープログラムファイルは、多くの場合、レガシーシステムまたはレガシープラットフォームの一部と称される特定のアーキテクチャのプロセッサおよび命令セットにおいてのみ実行するようにコンパイルされ、アセンブルされ、制約とリンクされ得る。
【0004】
図1Aは、ハイパーバイザ仮想化を使用するレガシープラットフォーム(100)の要素を描写する。システムハードウェア(10)は、例えば、多くの場合、仮想マシンモニタ(z/VM)としてハイパーバイザ(30)を実行するメインフレームコンピュータを含み得、ハイパーバイザ(30)は、完全に分離された仮想マシンの組(70)を提供し、仮想マシンの組(70)の各々は、それ自身のゲストオペレーティングシステム(OS)を有し、プログラムは、典型的に、ゲストオペレーティングシステムにおいて実行される。ハイパーバイザ(30)は、ホストマシンのリソースを仮想またはゲストマシン(70)の組に区分する管理プラットフォームを提供し、ゲストマシン(70)は、レガシーシステム内で独立して動作可能である。1つのゲストオペレーティングシステム(40)または複数のゲストオペレーティングシステム(40)が、仮想マシン内にインストールされる。バイナリおよびライブラリプログラムの組(50)と1つ以上のアプリケーション(60)とが、次いで、所与の仮想マシン上で実行される。物理マシンのように、仮想マシンは、関連付けられた状態情報を有し、バックアップまたは復元されることができ、専用システムリソースを割り当てられ得る。ハイパーバイザシステムにおける仮想マシンの起動および破棄は、相当なオーバーヘッドを要求し、この理由から、確立されると、仮想マシンは、典型的には、相当な実行時間にわたって持続する。
【0005】
図1Bは、コンテナ管理システム(110)の例を描写する。コンテナシステムのハードウェア(15)は、例えば、X86ベースのコンピュータであり得る物理サーバまたは物理サーバのクラスタであり得る。Linux(登録商標)等のシステムのホストオペレーティングシステムカーネル(25)は、プラットフォームによって共有され、コンテナ(75)の組が、Docker等のコンテナ管理システム(35)を通してイネーブルにされる。特に、Linux(登録商標)カーネルの名前空間およびcgroup機能性は、コンテナ化のために使用され得る。コンテナ管理システムは、カーネル機能性の周囲のラッパとして提供され、展開等のコンテナ管理を可能にし得る。
【0006】
Amazon ACS、Azure Container Service、Cloud Foundry Diego、CoreOS Fleet、 Docker Swarm、Google Container Engine、もしくはMesosphere Marathonコンテナ管理システム、または他のコンテナ管理および編成システム等の他のコンテナ管理システムも、使用されることができる。コンテナ管理システム(35)および共有オペレーティングシステムライブラリ(85)の組は、コンテナ(75)の組が実行し得るプラットフォームを提供する。例えば、基本ファイル入力/出力(I/O)機能のために使用されるそれら等のいくつかの低レベルオペレーティングシステムライブラリ(35)は、個々のコンテナ内に常駐するのではなく、オペレーティングシステムカーネルまたはコンテナ管理システムを通して全てのコンテナによって共有され得る。
【0007】
仮想マシンの場合のように、バイナリおよびライブラリプログラム(55)の組および1つ以上のアプリケーション(65)が、コンテナ(75)の組内で実行される。例として、httpプロトコル等のウェブアクセスサービスを提供するライブラリは、いくつかのアプリケーションでのみ必要とされ、その他では必要とされないこともあり、したがって、特定のアプリケーションサービスのために要求されるとき、ライブラリプログラム(55)内に含まれるが、ウェブアクセスサービスを決して使用しないアプリケーションのみを伴うコンテナのライブラリプログラム(55)から省略されるであろう。
【0008】
仮想マシンと比較して、コンテナは、比較的に軽量の構造であり、それ自身の完全オペレーティングシステムのオーバーヘッドおよび物理または仮想マシンに関連付けられる状態情報の全てを負わせられない。結果として、コンテナの起動および破棄は、オーバーヘッドを殆ど要求せず、それは、コンテナの展開および終了をアプリケーションアップグレード、動的負荷分散、およびクラスタ内のリソース分配のための効果的な技法にする。
【0009】
特に、仮想マシンは、それら自身のオペレーティングシステム、ファイルシステム、プロセッサ、ネットワークアダプタ、および関連付けられる記憶ボリュームを有する。それらがハイパーバイザを経由してゲストオペレーティングシステムを実行するという事実は、互いに重なる2つのオペレーティングシステム(ハイパーバイザ+ゲストオペレーティングシステム)を実行するオーバーヘッドを伴う仮想マシンを鈍重なプロセスにし、鈍重なプロセスは、アプリケーションサービスの変化する要求に適応するために容易に起動および終了されることができない。一方、コンテナは、カーネルダイレクトアクセスおよび記憶ボリュームを含む他の物理リソースを通してコアオペレーティングシステム機能を共有する。記憶ボリュームは、典型的には、固定ディスクドライブ上に常駐するが、フラッシュドライブ、テープ、または他の固定もしくは取り外し可能な記憶媒体を含む他の大容量記憶装置内にも常駐し得る。異なるコンテナの挙動は、それらの特定のコンテナの中にロードされたイメージに組み込まれるバイナリおよびライブラリプログラムに基づいて異なり得るが、共有オペレーティングシステムサービスの使用は、コンテナの各個々のインスタンスに関連付けられるオーバーヘッドを有意に低減させる。この理由から、コンテナは、仮想マシンに対して軽量であり、それは、アプリケーション要求に応答するコンテナのインスタンス化および終了をより適したものにする。実際に、例えば、Dockerを実行するKubernetesコンテナ管理システムの場合、コンテナは、数分の1秒で起動されることができる。その理由から、大規模な展開は、毎秒数千のそれらのコンテナを起動および終了し得る。
【0010】
コンテナ管理システムは、ポッドも含み得る。ポッドは、コンテナシステムにおける展開単位であり、同じホストまたはクラスタ上で一緒に展開される1つ以上のコンテナを含む。Kubernetes等のいくつかのコンテナ管理システムでは、ポッド内のコンテナは、同じネットワーク名前空間およびポート空間を共有する。加えて、ポッドに取り付けられる記憶装置の共有ボリュームが、ポッドのコンテナのうちの1つ以上のものの中に搭載され得る。
【0011】
標準的Linux(登録商標)ディストリビューションは、数万(さらには数十万)の個々のファイルを含み、そのようなシステムが使用されるアプリケーションに応じて、プラットフォームに機能性を追加する数千の追加のシステムパッケージと組み合わせられ得る。そのようなパッケージの例は、Apacheウェブサーバ、Java(登録商標)仮想マシン、PostgreSQL、またはデータベースもしくは言語サポート等を提供するための他のパッケージを含む。これらのパッケージは、パッケージおよびパッケージと他のライブラリとの間の依存性を記述するプログラムコードおよびメタデータを含む。共有ライブラリは、膨大な機能性を提供するために動的にリンクされたパッケージによって使用されることができるが、Linux(登録商標)イメージのフットプリントおよびシステム管理の複雑性を大幅に増加させ得る。ごく少数のパッケージを組み込むLinux(登録商標)の最小インスタンスは、メモリの数メガバイトののみを占有し得る。一方、例えば、高度なデータベースサービスを伴う大規模アプリケーションウェブサーバをサポートするために使用される多くのパッケージを伴う大規模なインストールは、記憶装置の数百メガバイト以上を占有し得る。Linux(登録商標)ベースのプラットフォームの管理は、多くの場合、パッケージとライブラリとの間の依存性と、それらのライブラリおよびパッケージの定期的なアップグレードとを管理するために、パッケージマネージャソフトウェアの使用を含む。一度に複数の標的を供給する大きいイメージは、単純のものより管理が複雑である。
【0012】
マイクロサービスは、典型的には、アプリケーションの機能性を提供するために一緒に緊密に連携し得る小規模な自律的サービスである。マイクロサービスの自律的性質は、それらがネットワーク呼び出しを通して他のサービスと通信し得る分離されたサービスとして互いに独立して展開されることを可能にする。密接に関連するマイクロサービスの組、または、それらの動作時、共通ボリュームへのアクセスを共有するマイクロサービスは、同じポッド内で展開され得る。マイクロサービスアーキテクチャは、クラスタ化システム上での管理性、利用可能性、スケーラビリティ、および展開性の重量な利点を提供する。しかしながら、多くのレガシーアプリケーションのモノリシック性質は、そのようなモノリシックアプリケーションを最小限に相互依存性のマイクロサービスの組に変換することを困難にし、手作業の多いタスクにする。問題をさらに複雑にするものとして、Cobolで書き込まれ、それらの専用APIを伴うMVSまたはz/OS等のレガシーアーキテクチャ上で実行するようにコンパイルされたレガシーモノリシックアプリケーションは、概して、命令セットおよびAPIの差異に起因して、特に、x86サーバに基づくとき、レガシーアーキテクチャからエクスポートされず、Linux(登録商標)または他のオペレーティングシステムもしくはクラスタ上に実行されることができない。
【0013】
より一般的には、エミュレーション、クロスコンパイル、トランスコーディング、またはハイブリッドアプローチのどれを通すかにかかわらず、アプリケーションコードを1つの動作環境から別のものに変換するシステムが、コンパイルされたレガシープログラムの実行が、異なる基礎アーキテクチャを使用するゲストオペレーティングシステム上で実行されることを可能にするように開発されることができる。しかしながら、そのようなシステムは、それ自体が容易に拡張しない大規模プログラムである傾向があり、それは、大量のトランザクションボリュームを実施するアプリケーションを実行する場合、特に問題となる。加えて、エミュレーションまたはトランスコーディングシステムは、モノリシックアプリケーションに適している。何故なら、有用であるために、エミュレータまたはトランスコーダが、ゲスト環境内でレガシー環境の可能な命令の未知のサブセットを実行することが可能でなければならないからである。
【発明の概要】
【課題を解決するための手段】
【0014】
本発明は、非一過性媒体に記憶されたコンピュータ命令において実装されるスケーラブルコンテナベースのシステムを提供する。本発明は、複数のトランザクションを実施するためのレガシーコンピューティング環境において実行可能な複数のプログラムを含むモノリシックレガシーアプリケーションのソースコードを含むソースコードリポジトリを含む。システムは、ソースコードを解析し、複数のトランザクションにおける各トランザクションのために、トランザクション中に潜在的に呼び出される各プログラムを識別するトランザクション定義ベクトルを識別し、複数のトランザクション定義ベクトルを作成するように動作可能であるソースコードアナライザも含む。システムは、複数のトランザクション定義ベクトルを記憶するように動作可能であるトランザクション状態定義リポジトリも含む。システムは、複数のトランザクションの少なくとも一部において実施するときにモノリシックレガシーアプリケーションによって実際に使用されるプログラムを識別する動的定義リポジトリを作成するように動作可能であるアクティビティログアナライザも含む。システムは、複数のトランザクション定義ベクトルを動的定義リポジトリと比較し、使用されないプログラムをトランザクション定義ベクトルから除去し、複数のマイクロサービスを定義する複数のマイクロサービス定義ベクトルを作成するように動作可能であるマイクロサービス定義オプティマイザも含む。システムは、複数のマイクロサービス定義ベクトルの各マイクロサービス定義ベクトルのために、マイクロサービス定義ベクトルによって識別された各プログラムのために、レガシーコンピューティング環境において実行するようにコンパイルされたコンパイル済みソースコードバイナリを見つけ、マイクロサービス定義ベクトルに対応する複数のマイクロサービスイメージを形成するように動作可能であるマイクロサービスイメージビルダも含む。システムは、複数のマイクロサービスイメージを記憶するように動作可能であるマイクロサービスイメージリポジトリも含む。システムは、レガシーエミュレータのエミュレータ要素のバイナリイメージの組を記憶するように動作可能である相補的コンポーネントリポジトリであって、バイナリイメージの組は、合わせて、完全なレガシーエミュレータより小さく、イメージは、レガシーコンピューティング環境の複数の機能または機能の組に対応し、イメージは、レガシー環境の命令セットと異なる命令セットによって特徴付けられる異なるコンピュータ環境において実行可能である、相補的コンポーネントリポジトリも含む。システムはまた、コンテナビルダであって、コンテナビルダは、複数のマイクロサービスにおける各マイクロサービスまたはマイクロサービスの組のためのコンテナイメージを形成するように動作可能であり、複数のコンテナイメージを作成するために、コンテナビルダは、マイクロサービスイメージリポジトリからの対応するマイクロサービスイメージまたは複数のイメージを使用することと、レガシーエミュレータのエミュレータ要素のためのイメージファイルを相補的コンポーネントリポジトリから使用することとを行い、レガシーエミュレータのエミュレータ要素は、実行されるときにマイクロサービスまたはマイクロサービスの組によって採用される機能または機能の組に対応し、採用される機能または機能は、マイクロサービスまたはマイクロサービスの組におけるバイナリ内の呼び出しのシグネチャによって識別される、コンテナビルダも含む。システムは、異なるコンピューティング環境において実行可能な複数のコンテナイメージを記憶するように動作可能であるコンテナイメージリポジトリも含む。システムは、異なるコンピューティング環境における実行のための少なくとも1つのコンテナを作成し、少なくとも1つのコンテナにおけるコンテナイメージリポジトリに記憶された少なくとも1つのマイクロサービスを実行するように動作可能であるコンテナ管理システムも含む。
【0015】
明確に互いに排他的ではない限り、その全てが上記システムと互いに、および上記システムと任意の組み合わせで組み合わせられ得る、さらなる実施形態によると、本発明は、以下も提供する。
i)アクティビティログアナライザは、複数のトランザクション定義ベクトルの少なくとも一部に対応する複数の動的トランザクション定義ベクトルを作成するように動作可能であり、マイクロサービス定義オプティマイザは、各動的トランザクション定義ベクトルを各対応するトランザクション定義ベクトルと比較し、複数のマイクロサービス定義ベクトルを作成する。
ii)アクティビティログアナライザは、レガシーコンピューティング環境においてモノリシックレガシーアプリケーションを実行することによって生成されるモノリシックレガシーアプリケーションのレガシーアクティビティログを使用する。
iii)アクティビティログアナライザは、エミュレータを使用し、モノリシックレガシーアプリケーションを実行し、ログファイルを生成し、トランザクションの実行中にモノリシックレガシーアプリケーションによって使用されるプログラムを決定する。
iv)ソースコードアナライザは、アクティビティログアナライザからの情報を使用し、トランザクション定義ベクトルを識別するように動作可能である。
v)ソースコードアナライザは、複数の変換テーブルを作成するようにさらに動作可能である。
vi)マイクロサービス定義オプティマイザは、マイクロサービス定義ベクトルをさらに最適化するように動作可能である。
vii)マイクロサービス定義オプティマイザは、複数のトランザクションにおける2つ以上のトランザクションによって共有されるプログラムを含む追加のマイクロサービス定義ベクトルを作成することによって、マイクロサービス定義ベクトルをさらに最適化するように動作可能である。
viii)レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含むコンパイル済みソースコードを記憶するように動作可能なバイナリリポジトリをさらに含む。
ix)バイナリリポジトリ内のコンパイル済みソースコードは、ソースコードリポジトリ内のソースコードからバイナリファイルにコンパイルされる。
x)レガシーコンピューティング環境は、多重仮想記憶(MVS)またはz/OSコンピュータシステムを含む。
xi)相補的コンポーネントリポジトリは、レガシーエミュレータによって使用されるオペレーティングシステムソフトウェアパッケージの複数のイメージを記憶するようにさらに動作可能であり、コンテナビルダも、レガシーエミュレータの特定の要素によって使用される任意のソフトウェアパッケージのイメージをレガシーエミュレータの特定の要素を含む特定のコンテナイメージに設置する。
xii)コンテナビルダは、マイクロサービスまたはマイクロサービスの組におけるバイナリ内の呼び出しのシグネチャをレガシーエミュレータにおいて動作可能な呼び出しのための命令と置換するようにさらに動作可能である。
xiii)コンテナ管理システムは、複数のコンテナを作成するように動作可能である。
xiv)相補的イメージの組が、共通ポッド内の別個のコンテナの中でインスタンス化される。
xv)少なくとも1つのコンテナイメージの2つ以上のコピーが、2つ以上の別個のコンテナの中でアクティブにされる。
xvi)コンテナ管理システムは、複数のコンテナにおけるコンテナの数を変動させるように動作可能である。
xvii)コンテナ管理システムは、様々なリソースを別個のコンテナに分配するように動作可能である。
xviii)コンテナ管理システムは、アクティビティログアナライザからの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うように動作可能である。
xix)コンテナ管理システムは、スケーラブルコンテナベースのシステムの使用からの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うように動作可能である。
xx)ソースコードアナライザは、モノリシックレガシーアプリケーションのデータベースから1つ以上のサブデータベースまたはサブデータベースのクラスタを作成するようにさらに動作可能である。
xxi)コンテナビルダは、1つ以上のサブデータベースまたはサブデータベースのクラスタを1つ以上のコンテナの中に設置するように動作可能である。
xxii)ソースコードが変更されると、ソースコード変更に基づいて更新されたバイナリを含むために、コンテナベースのシステムは、少なくとも1つのマイクロサービスイメージ、少なくとも1つのコンテナイメージ、および少なくとも1つのコンテナを自動的に更新するように動作可能である。
【0016】
本発明はさらに、スケーラブルコンテナベースのシステムを作成し、動作させる方法を提供する。方法は、レガシーコンピューティング環境において実行可能なモノリシックレガシーアプリケーションを解析し、そのプログラムファイルを区分し、モノリシックレガシーアプリケーションによって実施可能な複数のトランザクションに対応する複数のトランザクション定義ベクトルを作成し、各トランザクションのために、そのトランザクションによって呼び出される全てのプログラムを識別することを含む。方法は、トランザクション状態リポジトリに複数のトランザクション定義ベクトルを記憶することをさらに含む。方法は、複数のトランザクションの少なくとも一部のために、トランザクションがモノリシックレガシーアプリケーションによって実施されるときに実際に使用されるプログラムを決定することによって、動的定義リポジトリを作成することをさらに含む。方法は、複数のトランザクション定義ベクトルを動的定義リポジトリと比較し、その対応するトランザクション定義ベクトルからトランザクションにおいて使用されないプログラムを除去し、複数のマイクロサービス定義ベクトルを作成することをさらに含む。方法は、複数のマイクロサービスベクトルの各マイクロサービス定義ベクトルのために、レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含む対応するコンパイル済みソースコードを見つけ、対応するコンパイル済みソースコードを含むマイクロサービスイメージを作成し、複数のマイクロサービスイメージを形成することをさらに含む。方法は、マイクロサービスイメージリポジトリに複数のマイクロサービスイメージを記憶することをさらに含む。方法は、相補的コンポーネントリポジトリにおいて、レガシーコンピューティング環境と異なるコンピューティング環境においてプログラムを実行するように動作可能なレガシーエミュレータの複数の要素のイメージを記憶することであって、レガシーエミュレータの要素は、モノリシックレガシーアプリケーションの複数の機能または機能の組に対応する、ことをさらに含む。方法は、複数のマイクロサービスにおける各マイクロサービスまたはマイクロサービスの組のためのコンテナイメージを形成することであって、複数のコンテナイメージを作成するために、マイクロサービスイメージリポジトリからの対応するマイクロサービスイメージまたは複数のイメージを使用することと、レガシーエミュレータの要素のためのイメージファイルを相補的コンポーネントリポジトリから使用することとを行い、レガシーエミュレータの要素は、実行されるときにマイクロサービスまたはマイクロサービスの組によって採用される機能または機能の組に対応し、採用される機能または機能の組は、マイクロサービスまたはマイクロサービスの組におけるバイナリ内の呼び出しのシグネチャによって識別される、ことをさらに含む。方法は、コンテナイメージリポジトリにコンテナイメージを記憶することをさらに含む。方法は、コンテナ管理システムを使用して異なるコンピューティング環境内に少なくとも1つのコンテナを作成し、異なるコンピューティング環境において実行可能な形態においてコンテナの中に少なくとも1つのコンテナイメージを記憶することをさらに含む。
【0017】
方法は、コンテナにおけるマイクロサービスまたはマイクロサービスの組を実行することをさらに含む。
【0018】
明確に互いに排他的ではない限り、その全てが上記方法と互いに、および上記方法と任意の組み合わせで組み合わせられ得る、さらなる実施形態によると、本発明は、
i)アクティビティログアナライザを使用して、複数のトランザクション定義ベクトルの少なくとも一部に対応する複数の動的トランザクション定義ベクトルを作成することと、マイクロサービス定義オプティマイザを使用して、各動的トランザクション定義ベクトルを各対応するトランザクション定義ベクトルと比較し、複数のマイクロサービス定義ベクトルを作成することと、
ii)アクティビティログアナライザが、レガシーコンピューティング環境においてモノリシックレガシーアプリケーションを実行することによって生成されるモノリシックレガシーアプリケーションのレガシーアクティビティログを使用することと、
iii)アクティビティログアナライザが、エミュレータを使用し、モノリシックレガシーアプリケーションを実行し、ログファイルを生成し、トランザクションの実行中にモノリシックレガシーアプリケーションによって使用されるプログラムを決定することと、
iv)ソースコードアナライザが、アクティビティログアナライザからの情報を使用し、トランザクション定義ベクトルを識別することと、
v)ソースコードアナライザを使用して、複数の変換テーブルを作成することと、
vi)マイクロサービス定義オプティマイザを使用して、マイクロサービス定義ベクトルをさらに最適化することと、
vii)マイクロサービス定義オプティマイザを使用して、複数のトランザクションにおける2つ以上のトランザクションによって共有されるプログラムを含む追加のマイクロサービス定義ベクトルを作成することによって、マイクロサービス定義ベクトルをさらに最適化することと、
viii)レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含むコンパイル済みソースコードをバイナリリポジトリに記憶することと、
ix)バイナリリポジトリ内のソースコードをソースコードリポジトリ内のソースコードからバイナリファイルにコンパイルすることと、
x)レガシーコンピューティング環境が、多重仮想記憶(MVS)またはz/OSコンピュータシステムを含むことと、
xi)相補的コンポーネントリポジトリが、レガシーエミュレータによって使用されるオペレーティングシステムソフトウェアパッケージの複数のイメージを記憶することと、コンテナビルダも、レガシーエミュレータの特定の要素によって使用される任意のソフトウェアパッケージのイメージをレガシーエミュレータの特定の要素を含む特定のコンテナイメージに設置することと、
xii)コンテナビルダが、マイクロサービスまたはマイクロサービスの組におけるバイナリ内の呼び出しのシグネチャをレガシーエミュレータにおいて動作可能な呼び出しのための命令と置換することと、
xiii)コンテナ管理システムを使用して、複数のコンテナを作成することと、
ix)相補的イメージの組を共通ポッド内の別個のコンテナの中でインスタンス化することと、
x)少なくとも1つのコンテナイメージの2つ以上のコピーを2つ以上の別個のコンテナの中でアクティブにすることと、
xi)コンテナ管理システムが、複数のコンテナにおけるコンテナの数を変動させることと、
xii)コンテナ管理システムが、様々なリソースを別個のコンテナに分配することと、xiii)コンテナ管理システムが、アクティビティログアナライザからの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うことと、
xiv)コンテナ管理システムが、スケーラブルコンテナベースのシステムの使用からの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うことと、
xv)ソースコードアナライザが、モノリシックレガシーアプリケーションのデータベースから1つ以上のサブデータベースまたはサブデータベースのクラスタを作成することと、
xvi)コンテナビルダが、1つ以上のサブデータベースまたはサブデータベースのクラスタを1つ以上のコンテナの中に設置することと、
xvii)ソースコードが変更されると、ソースコード変更に基づいて更新されたバイナリを含むために、少なくとも1つのマイクロサービスイメージ、少なくとも1つのコンテナイメージ、および少なくとも1つのコンテナを自動的に更新することと
も含む方法を提供する。
例えば、本願は以下の項目を提供する。
(項目1)
非一過性媒体に記憶されたコンピュータ命令において実装されるスケーラブルコンテナベースのシステムであって、前記システムは、
モノリシックレガシーアプリケーションのソースコードを含むソースコードリポジトリであって、前記ソースコードリポジトリは、複数のトランザクションを実施するためのレガシーコンピューティング環境において実行可能な複数のプログラムを含む、ソースコードリポジトリと、
前記ソースコードを解析し、前記複数のトランザクションにおける各トランザクションのために、トランザクション定義ベクトルを識別し、複数のトランザクション定義ベクトルを作成するように動作可能であるソースコードアナライザであって、前記トランザクション定義ベクトルは、前記トランザクション中に潜在的に呼び出される各プログラムを識
別する、ソースコードアナライザと、
前記複数のトランザクション定義ベクトルを記憶するように動作可能であるトランザクション状態定義リポジトリと、
動的定義リポジトリを作成するように動作可能であるアクティビティログアナライザであって、前記動的定義リポジトリは、前記複数のトランザクションの少なくとも一部において実施するときに前記モノリシックレガシーアプリケーションによって実際に使用されるプログラムを識別する、アクティビティログアナライザと、
前記複数のトランザクション定義ベクトルを前記動的定義リポジトリと比較し、使用されないプログラムを前記トランザクション定義ベクトルから除去し、複数のマイクロサービスを定義する複数のマイクロサービス定義ベクトルを作成するように動作可能であるマイクロサービス定義オプティマイザと、
前記複数のマイクロサービス定義ベクトルの各マイクロサービス定義ベクトルのために、前記マイクロサービス定義ベクトルによって識別された各プログラムのために、前記レガシーコンピューティング環境において実行するようにコンパイルされたコンパイル済みソースコードバイナリを見つけ、前記マイクロサービス定義ベクトルに対応する複数のマイクロサービスイメージを形成するように動作可能であるマイクロサービスイメージビルダと、
前記複数のマイクロサービスイメージを記憶するように動作可能であるマイクロサービスイメージリポジトリと、
レガシーエミュレータのエミュレータ要素のバイナリイメージの組を記憶するように動作可能である相補的コンポーネントリポジトリであって、前記バイナリイメージの組は、合わせて、完全なレガシーエミュレータより小さく、前記イメージは、前記レガシーコンピューティング環境の複数の機能または機能の組に対応し、前記イメージは、前記レガシー環境の命令セットと異なる命令セットによって特徴付けられる異なるコンピュータ環境において実行可能である、相補的コンポーネントリポジトリと、
コンテナビルダであって、前記コンテナビルダは、前記複数のマイクロサービスにおける各マイクロサービスまたはマイクロサービスの組のためのコンテナイメージを形成するように動作可能であり、複数のコンテナイメージを作成するために、前記コンテナビルダは、前記マイクロサービスイメージリポジトリからの前記対応するマイクロサービスイメージまたは複数のイメージを使用することと、前記レガシーエミュレータのエミュレータ要素のためのイメージファイルを前記相補的コンポーネントリポジトリから使用することとを行い、前記レガシーエミュレータの前記エミュレータ要素は、実行されるときに前記マイクロサービスまたはマイクロサービスの組によって採用される機能または機能の組に対応し、前記採用される機能または機能は、前記マイクロサービスまたはマイクロサービスの組における前記バイナリ内の呼び出しのシグネチャによって識別される、コンテナビルダと、
前記異なるコンピューティング環境において実行可能な前記複数のコンテナイメージを記憶するように動作可能であるコンテナイメージリポジトリと、
コンテナ管理システムと
を含み、
前記コンテナ管理システムは、前記異なるコンピューティング環境における実行のための少なくとも1つのコンテナを作成し、前記少なくとも1つのコンテナにおけるコンテナイメージリポジトリに記憶された少なくとも1つのマイクロサービスを実行するように動作可能である、システム。
(項目2)
前記アクティビティログアナライザは、前記複数のトランザクション定義ベクトルの少なくとも一部に対応する複数の動的トランザクション定義ベクトルを作成するように動作可能であり、前記マイクロサービス定義オプティマイザは、各動的トランザクション定義ベクトルを各対応するトランザクション定義ベクトルと比較し、前記複数のマイクロサービス定義ベクトルを作成する、項目1に記載のスケーラブルコンテナベースのシステム。
(項目3)
前記アクティビティログアナライザは、前記レガシーコンピューティング環境において前記モノリシックレガシーアプリケーションを実行することによって生成される前記モノリシックレガシーアプリケーションのレガシーアクティビティログを使用する、項目1または項目2に記載のスケーラブルコンテナベースのシステム。
(項目4)
前記アクティビティログアナライザは、エミュレータを使用し、前記モノリシックレガシーアプリケーションを実行し、ログファイルを生成し、トランザクションの実行中に前記モノリシックレガシーアプリケーションによって使用されるプログラムを決定する、項目1-3のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目5)
前記ソースコードアナライザは、前記アクティビティログアナライザからの情報を使用し、前記トランザクション定義ベクトルを識別するように動作可能である、項目1-4のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目6)
前記ソースコードアナライザは、複数の変換テーブルを作成するようにさらに動作可能である、項目1-5のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目7)
前記マイクロサービス定義オプティマイザは、前記マイクロサービス定義ベクトルをさらに最適化するように動作可能である、項目1-6のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目8)
前記マイクロサービス定義オプティマイザは、前記複数のトランザクションにおける2つ以上のトランザクションによって共有されるプログラムを含む追加のマイクロサービス定義ベクトルを作成することによって、前記マイクロサービス定義ベクトルをさらに最適化するように動作可能である、項目7に記載のスケーラブルコンテナベースのシステム。(項目9)
前記レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含む前記コンパイル済みソースコードを記憶するように動作可能なバイナリリポジトリをさらに含む、項目1-8のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目10)
前記バイナリリポジトリ内の前記コンパイル済みソースコードは、前記ソースコードリポジトリ内の前記ソースコードからバイナリファイルにコンパイルされる、項目9に記載のスケーラブルコンテナベースのシステム。
(項目11)
前記レガシーコンピューティング環境は、多重仮想記憶(MVS)またはz/OSコンピュータシステムを含む、項目1-10のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目12)
前記相補的コンポーネントリポジトリは、前記レガシーエミュレータによって使用されるオペレーティングシステムソフトウェアパッケージの複数のイメージを記憶するようにさらに動作可能であり、前記コンテナビルダも、前記レガシーエミュレータの特定の要素によって使用される任意のソフトウェアパッケージのイメージを前記レガシーエミュレータの前記特定の要素を含む特定のコンテナイメージに設置する、項目1-11のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目13)
前記コンテナビルダは、前記マイクロサービスまたはマイクロサービスの組における前記バイナリ内の前記呼び出しのシグネチャを前記レガシーエミュレータにおいて動作可能な呼び出しのための命令と置換するようにさらに動作可能である、項目1-12のいずれ
か1項に記載のスケーラブルコンテナベースのシステム。
(項目14)
前記コンテナ管理システムは、複数のコンテナを作成するように動作可能である、項目1-13のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目15)
相補的イメージの組が、共通ポッド内の別個のコンテナの中でインスタンス化される、項目14に記載のスケーラブルコンテナベースのシステム。
(項目16)
少なくとも1つのコンテナイメージの2つ以上のコピーが、2つ以上の別個のコンテナの中でアクティブにされる、項目14および15のいずれかに記載のスケーラブルコンテナベースのシステム。
(項目17)
前記コンテナ管理システムは、前記複数のコンテナにおけるコンテナの数を変動させるように動作可能である、項目14-16のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目18)
前記コンテナ管理システムは、様々なリソースを別個のコンテナに分配するように動作可能である、項目14-17のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目19)
前記コンテナ管理システムは、前記アクティビティログアナライザからの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うように動作可能である、項目14-18のいずれかに記載のスケーラブルコンテナベースのシステム。
(項目20)
前記コンテナ管理システムは、前記スケーラブルコンテナベースのシステムの使用からの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うように動作可能である、項目14-19のいずれかに記載のスケーラブルコンテナベースのシステム。
(項目21)
前記ソースコードアナライザは、前記モノリシックレガシーアプリケーションのデータベースから1つ以上のサブデータベースまたはサブデータベースのクラスタを作成するようにさらに動作可能である、項目1-20のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目22)
前記コンテナビルダは、前記1つ以上のサブデータベースまたはサブデータベースのクラスタを1つ以上のコンテナの中に設置するように動作可能である、項目1-21のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目23)
前記ソースコードが変更されると、前記ソースコード変更に基づいて更新されたバイナリを含むために、前記コンテナベースのシステムは、少なくとも1つのマイクロサービスイメージ、少なくとも1つのコンテナイメージ、および少なくとも1つのコンテナを自動的に更新するように動作可能である、項目1-22のいずれか1項に記載のスケーラブルコンテナベースのシステム。
(項目24)
スケーラブルコンテナベースのシステムを作成し、動作させる方法であって、前記方法は、
レガシーコンピューティング環境において実行可能なモノリシックレガシーアプリケーションを解析し、そのプログラムファイルを区分し、前記モノリシックレガシーアプリケーションによって実施可能な複数のトランザクションに対応する複数のトランザクション定義ベクトルを作成し、各トランザクションのために、そのトランザクションによって呼び出される全てのプログラムを識別することと、
トランザクション状態リポジトリに前記複数のトランザクション定義ベクトルを記憶することと、
前記複数のトランザクションの少なくとも一部のために、前記トランザクションが前記モノリシックレガシーアプリケーションによって実施されるときに実際に使用されるプログラムを決定することによって、動的定義リポジトリを作成することと、
前記複数のトランザクション定義ベクトルを前記動的定義リポジトリと比較し、その対応するトランザクション定義ベクトルからトランザクションにおいて使用されないプログラムを除去し、複数のマイクロサービス定義ベクトルを作成することと、
前記複数のマイクロサービスベクトルの各マイクロサービス定義ベクトルのために、前記レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含む対応するコンパイル済みソースコードを見つけ、前記対応するコンパイル済みソースコードを含むマイクロサービスイメージを作成し、複数のマイクロサービスイメージを形成することと、
マイクロサービスイメージリポジトリに前記複数のマイクロサービスイメージを記憶することと、
相補的コンポーネントリポジトリにおいて、前記レガシーコンピューティング環境と異なるコンピューティング環境においてプログラムを実行するように動作可能なレガシーエミュレータの複数の要素のイメージを記憶することであって、前記レガシーエミュレータの前記要素は、前記モノリシックレガシーアプリケーションの複数の機能または機能の組に対応する、ことと、
前記複数のマイクロサービスにおける各マイクロサービスまたはマイクロサービスの組のためのコンテナイメージを形成することであって、複数のコンテナイメージを作成するために、前記マイクロサービスイメージリポジトリからの前記対応するマイクロサービスイメージまたは複数のイメージを使用することと、前記レガシーエミュレータの要素のためのイメージファイルを前記相補的コンポーネントリポジトリから使用することとを行い、前記レガシーエミュレータの前記要素は、実行されるときに前記マイクロサービスまたはマイクロサービスの組によって採用される機能または機能の組に対応し、前記採用される機能または機能の組は、前記マイクロサービスまたはマイクロサービスの組における前記バイナリ内の呼び出しのシグネチャによって識別される、ことと、
コンテナイメージリポジトリに前記コンテナイメージを記憶することと、
コンテナ管理システムを使用して、前記異なるコンピューティング環境内に少なくとも1つのコンテナを作成し、前記異なるコンピューティング環境において実行可能な形態で前記コンテナの中に少なくとも1つのコンテナイメージを記憶することと、
前記コンテナにおける前記マイクロサービスまたはマイクロサービスの組を実行することと
を含む、方法。
(項目25)
前記アクティビティログアナライザを使用して、前記複数のトランザクション定義ベクトルの少なくとも一部に対応する複数の動的トランザクション定義ベクトルを作成することと、
前記マイクロサービス定義オプティマイザを使用して、各動的トランザクション定義ベクトルを各対応するトランザクション定義ベクトルと比較し、前記複数のマイクロサービス定義ベクトルを作成することと
を含む、項目24に記載の方法。
(項目26)
前記アクティビティログアナライザが、前記レガシーコンピューティング環境において前記モノリシックレガシーアプリケーションを実行することによって生成される前記モノリシックレガシーアプリケーションのレガシーアクティビティログを使用することを含む、項目24または項目25に記載の方法。
(項目27)
前記アクティビティログアナライザが、エミュレータを使用し、前記モノリシックレガシーアプリケーションを実行し、ログファイルを生成し、トランザクションの実行中に前記モノリシックレガシーアプリケーションによって使用されるプログラムを決定することを含む、項目24-26のいずれか1項に記載の方法。
(項目28)
前記ソースコードアナライザが、前記アクティビティログアナライザからの情報を使用し、前記トランザクション定義ベクトルを識別することを含む、項目24-27のいずれか1項に記載の方法。
(項目29)
前記ソースコードアナライザを使用して、複数の変換テーブルを作成することを含む、項目24-28のいずれか1項に記載の方法。
(項目30)
前記マイクロサービス定義オプティマイザを使用して、前記マイクロサービス定義ベクトルをさらに最適化することを含む、項目24-29のいずれか1項に記載の方法。
(項目31)
前記マイクロサービス定義オプティマイザを使用して、前記複数のトランザクションにおける2つ以上のトランザクションによって共有されるプログラムを含む追加のマイクロサービス定義ベクトルを作成することによって、前記マイクロサービス定義ベクトルをさらに最適化することを含む、項目30に記載の方法。
(項目32)
前記レガシーコンピューティング環境において実行するようにコンパイルされたバイナリを含む前記コンパイル済みソースコードをバイナリリポジトリに記憶することをさらに含む、項目24-31のいずれか1項に記載の方法。
(項目33)
前記バイナリリポジトリにおける前記ソースコードを前記ソースコードリポジトリにおける前記ソースコードからバイナリファイルにコンパイルすることを含む、項目32に記載の方法。
(項目34)
前記レガシーコンピューティング環境は、多重仮想記憶(MVS)またはz/OSコンピュータシステムを含む、項目24-33のいずれか1項に記載の方法。
(項目35)
前記相補的コンポーネントリポジトリが、前記レガシーエミュレータによって使用されるオペレーティングシステムソフトウェアパッケージの複数のイメージを記憶することと、前記コンテナビルダも、前記レガシーエミュレータの特定の要素によって使用される任意のソフトウェアパッケージのイメージを前記レガシーエミュレータの前記特定の要素を含む特定のコンテナイメージに設置することとを含む、項目24-34のいずれか1項に記載の方法。
(項目36)
前記コンテナビルダが、前記マイクロサービスまたはマイクロサービスの組における前記バイナリ内の前記呼び出しのシグネチャを前記レガシーエミュレータにおいて動作可能な呼び出しのための命令と置換することを含む、項目24-35のいずれか1項に記載の方法。
(項目37)
前記コンテナ管理システムを使用して、複数のコンテナを作成することを含む、項目24-36のいずれか1項に記載の方法。
(項目38)
相補的イメージの組を共通ポッド内の別個のコンテナの中でインスタンス化することを含む、項目37に記載の方法。
(項目39)
少なくとも1つのコンテナイメージの2つ以上のコピーを2つ以上の別個のコンテナの中でアクティブにすることを含む、項目37および38のいずれかに記載の方法。
(項目40)
前記コンテナ管理システムが、前記複数のコンテナにおけるコンテナの数を変動させることを含む、項目37-39のいずれか1項に記載の方法。
(項目41)
前記コンテナ管理システムが、様々なリソースを別個のコンテナに分配することを含む、項目37-40のいずれか1項に記載の方法。
(項目42)
前記コンテナ管理システムが、前記アクティビティログアナライザからの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うことを含む、項目37-41のいずれかに記載の方法。
(項目43)
前記コンテナ管理システムが、前記スケーラブルコンテナベースのシステムの使用からの情報を使用し、2つ以上の別個のコンテナの中に設置すべき少なくとも1つのコンテナイメージのコピーの数を決定すること、前記複数のコンテナにおけるコンテナの数を決定すること、および/または、別個のコンテナに分配すべきリソースを決定することを行うことを含む、項目37-42のいずれかに記載の方法。
(項目44)
前記ソースコードアナライザが、前記モノリシックレガシーアプリケーションのデータベースから1つ以上のサブデータベースまたはサブデータベースのクラスタを作成することを含む、項目24-43のいずれか1項に記載の方法。
(項目45)
前記コンテナビルダが、前記1つ以上のサブデータベースまたはサブデータベースのクラスタを1つ以上のコンテナの中に設置することを含む、項目24-44のいずれか1項に記載の方法。
(項目46)
前記ソースコードが変更されると、前記ソースコード変更に基づいて更新されたバイナリを含むために、少なくとも1つのマイクロサービスイメージ、少なくとも1つのコンテナイメージ、および少なくとも1つのコンテナを自動的に更新することを含む、項目24-45のいずれか1項に記載の方法。
【0019】
本発明の種々の実施形態ならびにその特徴および利点のより完全な理解のために、ここで、付随の図面と併せて検討される、以下の説明が参照される。
【図面の簡単な説明】
【0020】
図1A図1Aは、従来技術のハイパーバイザベースの仮想マシン環境の概略図である。
図1B図1Bは、修正され、本発明と併せて使用され得るコンテナベースの仮想化環境の概略図である。
図2A図2Aは、アプリケーションのトランザクションに対応するプログラムベクトルの組の概略図である。
図2B図2Bは、アプリケーションのトランザクションに対応する最適化されたプログラムベクトルの組の概略図である。
図3図3は、モノリシックレガシーアプリケーションのマイクロサービスへの区分化のためのスケーラブルコンテナベースのシステムのコンポーネントの描写である。
図4図4は、モノリシックレガシーアプリケーションにおける2つのトランザクションに関する呼び出しツリーのコンポーネントの描写である。
図5図5は、スケーラブルコンテナベースの環境内でマイクロサービスとして実装される図4の同一の2つのトランザクションに関する呼び出しツリーの描写である。
図6図6は、スケーラブルコンテナベースの環境内でマイクロサービスを展開するために、モノリシックレガシーアプリケーションを解析する方法のステップを描写する、フローチャートである。
【発明を実施するための形態】
【0021】
本発明の一側面によると、モノリシックレガシーアプリケーションをマイクロサービスの組に自動的に区分し、そのようなマイクロサービスをレガシーエミュレータの適切な要素とともにコンテナにおいて展開可能なスケーラブルコンテナベースのシステムが、提案される。
【0022】
異なるアーキテクチャを有するプロセッサは、異なるバイナリ表現を有する異なる命令セットをサポートし、その結果、ある命令セット(多くの場合、「バイナリ」または「バイナリイメージ」と称される)のマシン命令を含む実行可能プログラムは、概して、異なるアーキテクチャおよび異なる対応する命令セットを有する異なるプロセッサ上で実行しないであろう。故に、レガシープロセッサを含むレガシーメインフレームコンピューティング環境等のレガシーコンピューティング環境における特定のマシン命令セットを使用して、特定のアーキテクチャを伴うレガシープロセッサ上で実行されるように設計されるモノリシックレガシーアプリケーションは、異なるコンピューティング環境における異なるタイプのプロセッサ上で容易に実行可能ではない。特に、本明細書に説明されるスケーラブルコンテナベースのシステムは、モノリシックレガシーアプリケーションが実行するように設計されたレガシーコンピューティング環境と異なるプロセッサ、異なる命令セット、および異なるコンピューティング環境を使用して動作する。したがって、モノリシックレガシーアプリケーションは、本明細書に説明されるそれら等のモノリシックレガシーアプリケーションおよび/または異なるコンピューティング環境の修正なしに、スケーラブルコンテナベースのシステムの異なるコンピューティング環境において実行しないであろう。
【0023】
典型的には、異なるプロセッサを含む異なるコンピューティング環境においてモノリシックレガシーアプリケーションを実行するために、モノリシックレガシーアプリケーションは、異なるアーキテクチャのために設計されたコンパイラを使用して再コンパイルされ、その命令は、異なるアーキテクチャ上で実行されるようにトランスコーディングされるか、または、レガシーアーキテクチャトランスレータ(以降では、レガシーアプリケーションエミュレータ)上で実行され、レガシーアーキテクチャトランスレータは、モノリシックレガシーアプリケーションは、レガシーコンピューティング環境のためにコンパイルされるような実行可能プログラムを異なるアーキテクチャを有する異なるコンピューティング環境における実行することが可能である。これは、レガシーソースコードを異なるコンピューティング環境にコンパイルし得る好適なコンパイラが存在するときのみ、または、好適なトランスコーダもしくはレガシーエミュレータが存在するときのみ可能である。
【0024】
故に、本開示のスケーラブルコンテナベースのシステムは、少なくとも1つのレガシーエミュレータ要素を含む。しかしながら、スケーラブルコンテナベースのシステムは、モノリシックレガシーアプリケーションによって実施可能な全てのタスクを遂行するために、全てのコンテナ内の完全レガシーエミュレータのイメージを要求するのではなく、マイクロサービスがそれらの要素を使用するときのみコンテナ内にレガシーエミュレータの機能性コンポーネントのバイナリイメージ等のエミュレータ要素を設置することによって、レガシーエミュレータ使用を最適化する。別個のエミュレータ要素は、モノリシックレガシーアプリケーション機能の異なるサブセットをサポートする。
【0025】
レガシーエミュレータは、典型的には、入力/出力機能性等のオペレーティングシステムによって提供される種々の機能性も使用する。全てのコンテナ内にオペレーティングシステム全体のイメージを設置するのではなく、スケーラブルコンテナベースのシステムはまた、それらのOS要素を効果的に使用するマイクロサービスおよびエミュレータ要素をとともに、オペレーティングシステムの機能性コンポーネントのバイナリイメージ等のOS要素をコンテナ内に設置することによっても、オペレーティングシステム使用を最適化する。別個のOS要素は、レガシーエミュレータ機能および関連するモノリシックレガシーアプリケーション機能の異なるサブセットをサポートする。
【0026】
スケーラブルコンテナベースのシステムは、記録の作成、注文、クエリの実施等のモノリシックレガシーアプリケーションを使用して実施され得る個々のトランザクションを識別し得る。スケーラブルコンテナベースのシステムは、次いで、各個々のトランザクション内に含まれるプログラムを識別する。最後に、スケーラブルコンテナベースのシステムは、モノリシックレガシーアプリケーションの外側で同一のトランザクションを実施するために使用されるか、または組み合わせられ得るマイクロサービスを作成する。いくつかの事例では、モノリシックレガシーアプリケーションからのトランザクションを構成する個々のプログラムは、異なるマイクロサービス内に位置し得る。他の事例では、マイクロサービスは、モノリシックレガシーアプリケーションからの2つ以上のプログラムを含み得る。加えて、マイクロサービスは、モノリシックレガシーアプリケーションからのトランザクションを効率的に遂行するための任意の様式でプログラムをグループ化し得るので、モノリシックレガシーアプリケーションからのいずれか1つのプログラムは、スケーラブルコンテナベースのシステムの1つのみのマイクロサービス内に位置し得るか、または、それは、スケーラブルコンテナベースのシステムの複数の異なるマイクロサービス内に位置し得る。
【0027】
単一のコンテナイメージにおけるマイクロサービスは、スケーラブルコンテナベースのシステムを通して、典型的には、別個のコンテナにおける複数の並列インスタンスにおいて展開され得る。コンテナは、2つ以上のマイクロサービスのみならず、マイクロサービスが実行および機能することを可能にするために必要とされるような他の情報も含み得る。マイクロサービスは、好ましくは、最小限に相互依存性であるように、および/またはプログラムが更新されるとき、変更を要求するマイクロサービスの数を最小化するように構築され得る。マイクロサービスコンテナイメージは、アプリケーションバイナリに限定され、次いで、ポッドを形成するために汎用ユーティリティ(エラーロギング、アクティビティジャーナリング、セキュリティ等)コンテナに関連付けられ得る。
【0028】
スケーラブルコンテナベースのシステムは、高度にフレキシブルであり、他の因子の中でもとりわけ、トランザクション、プログラム、他の情報、またはトランザクションもしくはマイクロサービスの使用の変更に基づいて、マイクロサービス自体の変更のみならず、コンテナのタイプおよび数、特定のコンテナ内にグループ化されるマイクロサービス、および、コンテナ内に含まれるサポートプログラム(エミュレータ要素およびOS要素、および特定のコンテナまたはポッドに当てられるリソース等)の変更も可能にする。
【0029】
加えて、モノリシックレガシーアプリケーションまたはその一部から作成されるマイクロサービスの合計数は、モノリシックレガシーアプリケーションまたはその一部における個々のトランザクションの合計数より大きいこともある。
【0030】
図3は、スケーラブルコンテナベースのシステム(300)を図示する。スケーラブルコンテナベースのシステムは、モノリシックレガシーアプリケーションのソースコードを記憶するソースコードリポジトリ(305)を含み得る。モノリシックレガシーアプリケーションのソースコードは、例えば、数百の異なるトランザクションT,T,・・・・Tを個々に、またはグループで実施するように設計された数十、数百、またはさらには数万もの個々のプログラムを含み得るモノリシックCOBOLアプリケーションであり得る。そのようなトランザクションの例は、例えば、Database 2(「DB2」)リレーショナルデータベーストランザクションまたはデータ言語インターフェース(「DL/I」)階層化データベーストランザクションを実施するために、顧客情報管理システム(「CICS」)または情報管理システム(「IMS」)を使用し得る顧客記録の作成、更新、移動、または削除を含み得る。コンパイラ(310)が、ソースコードをバイナリリポジトリ(315)内に記憶される1つ以上のバイナリの組にコンパイルする。
【0031】
ある実施形態によると、ソースコードアナライザ(320)が、典型的には、依存性アナライザコンポーネントを介して、ソースコードリポジトリ(305)内に記憶されるようなモノリシックレガシーアプリケーションにおけるソースコードおよび関連付けられるファイルを解析し、ソースコード内の相互依存性(呼び出し元<>呼び出し先)を識別するコードツリーを生成する。好ましくは、ソースコードアナライザ(320)は、CICS、IMS等のトランザクションシステムの構成パラメータにおいて定義されるように、モノリシックレガシーアプリケーションの各トランザクションを反復する。一例では、ソースコードアナライザ(320)は、ソースコードリポジトリ(305)からの入力として、モノリシックレガシーアプリケーションとのそれらの相互作用においてユーザによって起動され得る利用可能なCICSトランザクション定義を識別するファイルを受信する。好ましくは、このファイルは、各トランザクションおよびそのルートまたはトランザクションを実施するときに起動される最初のプログラムを識別する。これは、トランザクションの多くにおいて使用されるようなEXEC CICS LINKの呼び出し先としてのルートプログラムを含み得る。この例では、ルートプログラムは、インターフェースを取り扱う(例えば、インターフェースが3270であるとき、SEND/RECEIVE MAPを行うが、インターフェースが異なるとき、他の同等のAPIを行う)プログラムによって呼び出される最初のプログラムを指す。トランザクションを識別する、またはそれらのサービスに寄与する他のファイルもしくはフォーマットも、使用され得、例えば、追加のビルドファイルは、メッセージ待ち行列およびデータソース等のトランザクションによって使用されるリソースのための定義ファイルを含み得る。
【0032】
加えて、ソースコードアナライザ(320)は、モノリシックレガシーアプリケーションに関連付けられるプログラムファイルの全てを解析し、モノリシックレガシーアプリケーションのトランザクションの全てに対するプログラムファイル間の相互依存関係(プログラムの呼び出し元<>呼び出し元またはコピーブックのようなリソースの包含)を検出し得る。ソースコードアナライザ(320)内の依存性アナライザが、トランザクションによって使用されるプログラム間の呼び出し元-呼び出し先または包含関係を識別する。静的アナライザは、ベクトルもしくはベクトルの組またはグラフの形態における呼び出しまたは包含ツリーを生成し得、それは、特定のトランザクションのためのソースコードが起動または含み得るプログラムもしくはモジュールを識別する。
【0033】
モノリシックレガシーアプリケーションの区分化が、例えば、SOAPまたはREST(JSONまたは他のデータフォーマットを伴う)を介してアクセス可能な最小限に相互依存性のトランザクションの組にアプリケーションを分割するために所望される。最小限に相互依存性のトランザクションの各々は、レガシーエミュレータ(325)の独立したインスタンスにおいて実行されることが可能であり得る。ソースコードアナライザ(320)の出力は、プログラム呼び出しまたは包含ツリーもしくはグラフであり得、それは、各トランザクションのために、各トランザクションを実施するために起動または使用され得るプログラムの完全セット、およびプログラム間の呼び出し元-呼び出し先または包含関係を識別する。図4は、第1のトランザクションT1がルートプログラムAから開始され、それが、次いで、プログラムFまたはプログラムDを呼び出し得るそのような呼び出しツリーの例である。さらに、トランザクションT1において、プログラムDは、次いで、プログラムEを呼び出し得る。第2のトランザクションT2は、ルートプログラムBから開始され、それは、次いで、プログラムCを呼び出すか、または、ルートプログラムBも、同じプログラムDを呼び出し得、それは、次いで、プログラムEを呼び出す。
【0034】
呼び出しツリーは、ベクトルの組(各トランザクションのために1つのベクトル)、または、モノリシックレガシーアプリケーションの可能なトランザクションの定義されたサブセットに変換され、トランザクションを実行するときに起動され得るプログラムを識別し得る。図2Aは、トランザクション定義ベクトルTa(210)、Tb(220)、・・・Tc(230)の組(200)の例を描写する。この例では、Ta(210)等の第1のベクトルは、第1のトランザクションを実行するときに潜在的に呼び出されるプログラムの組<P1,P2,・・・Px>を含む。図4の例を使用して、トランザクションは、T1であり得、プログラムの組は、プログラムA、F、D、およびEを含むであろう。第2のトランザクションおよび第3のトランザクションに対応する、プログラム<P2,P3,・・・Py>を含む第2の例証的ベクトルTb(220)およびプログラム<P1,P6,・・・・Pz>を含む第3の例証的ベクトルTc(230)も、示される。プログラムの異なる数および組み合わせが、モノリシックレガシーアプリケーションの異なるトランザクションを指定し得る。
【0035】
ソースコードアナライザ(320)は、ルートプログラムのインターフェース定義に基づいて、データタイプ、メッセージ、メッセージフォーマット/紐付け、ならびにメッセージ入力および出力の組を抽出または生成せることと、各トランザクションのアドレスおよびエンドポイントを定義することと、メッセージが、例えば、マイクロサービスイメージの一部として、コンテナビルダ(330)および/またはコンテナ管理システム(335)に提供されるとき、トランザクションへのインターフェースを構築および定義することにおいて使用するためのメッセージ構造にこの情報を変換することとも行い得る。加えて、ソースコードアナライザ(320)は、SOAPプロトコルが使用される場合、WSDLメッセージインターフェースも生成し得る。WSDLメッセージインターフェースは、定義されたデータタイプ、メッセージ、ポートタイプ、紐付け、ポート、およびサービス定義情報を記憶するための構造を含むW3C規格において定義されるフォーマット化ドキュメントであり得る。ソースコードアナライザ(320)は、他のプロトコル(REST等)および表現(JSON)が所与の状況のために好ましい場合、インターフェースメッセージの他の表現を生成することもできる。ソースコードアナライザは、双方向性データエンコーディング変換テーブルまたはプロシージャを生成し、UTF文字を8ビットEBCDIC文字に(逆もまた同様である)(またはASCIIを含む異なる文字セット間で)変換するようにもさらに構成され得、この変換は、トランザクションに基づいて、要求側に向かうそれらのインターフェースにおいて、マイクロサービスとともに使用されるべきスクリプト/プログラムを生成することによって実装され得る。
【0036】
トランザクション定義ベクトルの組(200)、通信インターフェース定義(WSDL、REST)、およびスクリプトを通した変換指示文は、トランザクション状態定義リポジトリ(340)内に記憶され得る。
【0037】
ソースコードアナライザ(320)は、スケーラブルコンテナベースのシステムの中へのトランスコードされたプログラムの使用のためのトランスコーダ経路を提示するために、トランスコーディングアプリケーションの一部も含み得る。このように、ソースコードアナライザはまた、Cobol等のその元々の言語からJava(登録商標)等の異なる言語へのソースコードの移行をサポートするためにも使用され得る。他のソースコード変換も、実施され得る。さらに、ソースコードアナライザ(320)は、トランスコーディングアプリケーションの一部ではないスタンドアロンプログラムの形態においても使用され得る。
【0038】
トランザクション状態定義リポジトリ(340)内の各トランザクション定義ベクトル(210)、(220)、(230)は、モノリシックレガシーアプリケーションを使用して一連の実際のトランザクションを実施することにおいて実際に起動されるプログラムのスーパーセットを含む。しばしば、トランザクションアプリケーションは、決して起動されない多くのプログラムを含む。これは、トランザクションアプリケーションの初期設計、設計変更、ユースケース変更、トランザクションアプリケーションの異なる部分におけるプログラムおよびその呼び出し先の共有、またはトランザクションアプリケーションの他の発展に起因して生じ得る。コード内のこれらの使用されないプログラムの包含は、永久記憶装置上で動き回るために要求されるオーバーヘッド、起動されない中央コンピュータメモリプログラムへのロードおよびアンロード、ならびにトランザクションコンテナへのネットワーク更新を経由するコンパイル、ビルド、または移送のときの追加の遅延を含むいくつかの理由からコンテナ化アプリケーションの低減させられた効率をもたらす。マイクロサービスアプリケーションイメージからこれらの使用されないプログラムを排除するために、マイクロサービス定義オプティマイザ(345)は、トランザクション状態定義リポジトリ(340)からトランザクション定義ベクトル、インターフェース定義、および変換テーブルを抽出し、動的定義リポジトリ(350)内に記憶される動的定義ベクトルを適用し、図2Bに示されるように、マイクロサービスのさらなる精緻化および定義を保留するマイクロサービス定義オプティマイザ(345)によって中間状態において記憶されるか、またはマイクロサービスイメージリポジトリ(355)内に記憶されるマイクロサービスイメージを作成するようにマイクロサービスイメージビルダ(350)によって処理され得る、対応するマイクロサービス定義ベクトル(260)、(270)、(280)に到達するようにトランザクション状態定義リポジトリ(340)のトランザクション定義ベクトル(210)、(220)、(230)内に含まれる使用されないプログラムを排除する。大規模モノリシックシステムレガシーアプリケーションでは、典型的には、この方式で排除され得る使用されないプログラムが存在するであろう。しかしながら、静的トランザクション状態分析によって識別されるプログラムの全てを使用するトランザクションに対して、マイクロサービス定義ベクトルは、初期トランザクション定義ベクトルと同一であろう。これは、図2Aのトランザクション定義ベクトル(220)および図2Bの対応するマイクロサービス定義ベクトル(270)によって図示される。
【0039】
動的定義ベクトルは、典型的には、異なるシステム上で実行されるか、またはレガシーアクティビティログを使用する動的定義プロセスによってトランザクション状態定義ベクトルとは別個に開発される。動的定義ベクトルは、以前から存在していることもあるか、または、それは、トランザクション定義ベクトルと並行して開発され得る。
【0040】
動的定義プロセスでは、モノリシックレガシーアプリケーションは、実行され、各トランザクションは、実際に呼び出されるプログラムとそうではないプログラムとを決定するために分析される。システムが十分な期間(例えば、アプリケーションの性質に応じて、週、月、四半期、年)にわたって実行されるとき、または全ての実際のユースケースを起動するデータの組を使用しているとき、動的定義ベクトルは、トランザクションを実施するときに実際に呼び出されるプログラムをより精密に識別するであろう。
【0041】
代替として、動的定義ベクトルは、静的トランザクション状態定義ベクトルから開始することによっても生成され得、静的トランザクション状態定義ベクトルは、プログラムを過剰に含み得、次いで、実際に起動されるそれらのプログラムのみを選択する。したがって、動的定義ベクトルは、プログラムが識別されるときに構築され得るか、または、それは、トランザクション状態定義ベクトルから必要とされないプログラムを排除することによって作成され得る。
【0042】
いくつかのシステムでは、そのレガシーコンピューティング環境において実行されるモノリシックレガシーアプリケーションの既存のレガシーアクティビティログ(360)が、実世界トランザクションの実行によって実際に起動されるプログラムを識別し、それによって、各トランザクションのために使用されるプログラムを示すプログラムベクトルを生成するために、アクティビティログアナライザ(365)によって使用される。
【0043】
あるシステムでは、モノリシックレガシーアプリケーションは、レガシーエミュレータ(325)上で実行され、エミュレータによって生成されるアクティビティログデータが、各トランザクションのために使用されるプログラムを示すプログラムベクトルを生成するためにアクティビティログアナライザ(365)によって分析される。いくつかの実施形態では、レガシーエミュレータ(325)は、トランザクション毎のユースケースの全ての実際の変形に遭遇したという信頼を達成するために十分な期間にわたって各トランザクションを実行する。代替として、各実際のユースケースを実行するように設計された試験トランザクションの定義された組が、実行され、アクティビティログアナライザ(365)が、モノリシックレガシーアプリケーションにおけるトランザクションによって実際に使用されるプログラムを同様に決定することを可能にし得る。
【0044】
いくつかのシステムでは、アクティビティログアナライザ(365)は、モノリシックレガシーアプリケーションにおけるトランザクションによって実際に使用されるプログラムを決定するために、レガシーアクティビティログ(360)およびレガシーエミュレータ(325)の両方からの情報を使用し得る。例えば、レガシーアクティビティログ(360)が、所与のトランザクションにおいて使用されているプログラムのいかなる例も含まない場合、レガシーエミュレータ(325)からのログが、プログラムがそのトランザクションによって使用されていないと結論を下すことに先立って参照され得、逆も同様である。別の例では、十分なレガシーデータが存在するトランザクションは、レガシーエミュレータ(325)によるさらなるエミュレーションを伴わずに、レガシーアクティビティログ(360)のみを使用して評価され得る。さらに別の例では、レガシーログデータは、マイクロサービスの定義への最初の手がかりとして使用され得る。
【0045】
アクティビティログアナライザの出力は、動的定義リポジトリ(370)内に記憶され、動的定義リポジトリ(370)は、各トランザクションのために、実際に使用されるプログラムに対応するベクトルを記憶する。
【0046】
ロードモジュールは、典型的には、メインフレームレガシーコンピューティング環境の文脈において実行可能なプログラムの全てまたは一部を指す。レガシーエミュレータ(325)は、Linux(登録商標)オペレーティングシステムを伴うx86プラットフォーム等の異なるコンピューティング環境において実行するためのz/OSまたは他のレガシーコンピューティング環境からのコンパイル済みレガシーアプリケーションまたはロードモジュールの実行を可能にするように開発されたエミュレータであり得る。レガシーエミュレータは、元々の実行可能プログラムの各ネイティブ命令またネイティブオペレーティングシステムサービス呼び出しを異なるコンピューティング環境の同等の命令およびシステム呼び出しに変換し得る。レガシーエミュレータ(325)は、個々のレガシー命令またはシステムサービス呼び出しのエミュレーションを可能にするために、ネイティブAPIの組を実装し得る。レガシーエミュレータ(325)は、エミュレータ全体の単一のイメージであり得る、またはこれは、本明細書にさらに議論されるような区分化イメージを含み得る。レガシーエミュレータ(325)は、レガシーエミュレータによって実際に使用されるオペレーティングシステムまたはそのコンポーネントへの動作可能なアクセスをさらに含むか、または有し得る。
【0047】
マイクロサービス定義オプティマイザ(345)は、マイクロサービスイメージを作成するためにマイクロサービスイメージビルダ(350)によって使用され得るマイクロサービス定義ベクトルに到達するために、動的定義リポジトリ(370)内に記憶される動的トランザクションベクトルをトランザクション状態定義リポジトリ(340)内に記憶されるトランザクション定義ベクトルに適用する。これらのイメージは、次いで、マイクロサービスイメージリポジトリ(355)内に記憶される。
【0048】
図2Bは、マイクロサービス定義ベクトルMSa(260)、MSb(270)、・・・MSc(280)の組(250)の例を描写する。この例では、第1のマイクロサービス定義ベクトルMsa(260)は、第1のトランザクションTaを実行するときに呼び出されるプログラムの組<P1b,・・・Px-qb>から作製される最適化されたベクトルを含む。この例では、プログラムP2は、トランザクションTaにおいて実際に使用されず、したがって、マイクロサービス定義ベクトルから排除される。第2の例証的マイクロサービス定義ベクトルMSb(270)は、プログラム<P2,P3,・・・Py>を含む。この例では、トランザクション定義ベクトルを構成する全てのプログラムが、使用され、したがって、それらは、マイクロサービス定義ベクトル内に保存される。第3の例証的マイクロサービス定義ベクトルMSc(280)は、プログラム<P1,P6,・・・・Pz-y>を含む。結果として生じるアーキテクチャは、各々が最小数のプログラムによって定義されるTxトランザクションの組を含む。モノリシックレガシーアプリケーションのTxトランザクションのうちのいずれかが、以前のモノリシックレガシーアプリケーションの変換された動作および定義されたマイクロサービスMSxを起動し得る拡張または修正されたアプリケーションの両方において、独立して呼び出し可能なマイクロサービスMSxとして定義されることができる。
【0049】
Txトランザクションのうちの任意のものも、独立して呼び出し可能なマイクロサービスの組として定義されることができる。モノリシックレガシーアプリケーションからのTxトランザクションの合計組に対して、いくつかのサブセットが1回のトランザクションあたり1つのマイクロサービスによって定義され得る一方、別のサブセットは、1回のトランザクションあたりマイクロサービスの組によって定義され得る。例えば、図5に図示されるように、トランザクションT1およびT2が共通のプログラムDおよびEを使用する場合、これらのトランザクションがマイクロサービス定義オプティマイザ(345)によってマイクロサービスに変換されると、それらの共通プログラムは、独立したマイクロサービスMS3としてグループ化され得、MS3は、T1の他のプログラムを含むMS1によって呼び出され得るか、またはT2の他のプログラムを含むMS2によって呼び出され得る。
【0050】
マイクロサービス定義オプティマイザ(345)は、マイクロサービスイメージベクトルまたは中間マイクロサービスイメージベクトルを記憶し得、マイクロサービス定義オプティマイザ(345)は、次いで、それらをさらに変更または最適化する。例えば、マイクロサービス定義オプティマイザ(345)は、図4のトランザクションのためのトランザクション定義ベクトルを提示されると、最初に、中間マイクロサービス定義ベクトルMS1およびMS2を作成し得、その両方は、トランザクション定義ベクトル内に同様に位置するプログラムを含む。マイクロサービス定義オプティマイザ(345)は、図4の要素DおよびEによって示されるように、これらのマイクロサービス定義ベクトルMS1およびMS2の共通コンポーネントを認識し、最初の2つのマイクロサービス定義ベクトルから共通コンポーネントを抽出し得る。図5に描写されるように、第1および第2のマイクロサービスMS1およびMS2に加えて、共通要素DおよびEは、これらの共通コンポーネントを含み、MS1またはMS2によって呼び出され得る第3のマイクロサービス定義ベクトルMS3を作成するために使用される。これらの最適化されたマイクロサービス定義ベクトルMS1、MS2、およびMS3は、次いで、マイクロサービスイメージビルダ(350)に提供される。
【0051】
代替として、中間マイクロサービス定義ベクトルは、中間リポジトリ(図示せず)内等のマイクロサービス定義オプティマイザ((345)内以外の場所に記憶され得る。ある実施形態では、中間マイクロサービス定義ベクトルは、マイクロサービスイメージビルダ(350)内に、またはマイクロサービスイメージリポジトリ(355)内に中間イメージとして記憶され、次いで、その後、最適化されたマイクロサービス定義ベクトルまたはマイクロサービスイメージによってアクセスされ、および/またはそれと置換され得る。
【0052】
コンパイラ(310)が、ソースコードリポジトリ(305)内のソースコードをコンパイルし、バイナリリポジトリ(315)内にバイナリを生産する。コンパイラ(310)は、システム390またはz/OSメインフレーム等のレガシーコンピューティング環境のためのバイナリを生成する。このように、本明細書に説明されるスケーラブルコンテナベースのシステム内にマイクロサービスイメージを構築するために使用されるバイナリは、レガシーコンピューティング環境において実行されるバイナリと同一であり、レガシーコンピューティング環境からスケーラブルコンテナベースのシステムへのモノリシックレガシーアプリケーションの相互運用性および漸進的な移行を促進し得る。
【0053】
マイクロサービスイメージビルダ(350)は、適宜、マイクロサービス定義ベクトルまたは最適化されたマイクロサービス定義ベクトル内で識別されるプログラムに対応するバイナリリポジトリ(315)からのコンパイル済みバイナリを読み出し、バイナリを組み合わせ、マイクロサービス定義ベクトルにおける各プログラムのためにバイナリイメージを含む各マイクロサービスのためのイメージを生成する。マイクロサービスイメージは、マイクロサービスイメージビルダ(350)によって読み出される、共有リソース定義等の関連付けられるアーチファクトおよび情報も含み得る。これらのマイクロサービスイメージは、マイクロサービスイメージリポジトリ(355)内に記憶される。
【0054】
コンテナビルダ(375)は、マイクロサービスイメージリポジトリ(355)内に記憶される特定のマイクロサービスに関連付けられるバイナリイメージを相補的コンポーネントリポジトリ(380)内に記憶されるバイナリイメージと組み合わせることによって、コンテナイメージを構築する。相補的コンポーネントリポジトリ(380)は、典型的には、スケーラブルコンテナベースのシステムによって別様に使用されるレガシーエミュレータ(325)と同一である、レガシーエミュレータを一緒に作り上げるエミュレータ要素のイメージファイルの組を記憶し得る。
【0055】
レガシーエミュレータは、レガシー要素を形成するために、機能または機能のサブセットに従って区分され得、それは、本明細書に説明されるコンテナベースのシステム内のレガシーエミュレータの展開のための利点を提供する。例えば、レガシーエミュレータによってサポートされるインターフェース上の命令のサブセットのためのサポートは、分離され得る。加えて、バッチ動作、CICSトランザクションサービス、DB2、または他のリレーショナルデータベースサービス、IMSサービス、セキュリティ、ロギング、もしくは他の能力のためのレガシーエミュレータのサポートは、区分され得る。このように、コンテナ内のマイクロサービスによって使用される個々のレガシー要素またはレガシーエミュレータの要素の組のみが、所与のコンテナの内側で実行し得る。加えて、ポッド内のコンテナによって使用されるあるレガシー要素は、別個のコンテナ内に記憶され、次いで、ポッド内の他のコンテナ内のマイクロサービスによってアクセスされ得る。好適なレガシー要素は、エミュレータの実行時間環境の追跡およびロギング機能を含む。そのような設定は、性能および/またはセキュリティを改良し得る。
【0056】
相補的コンポーネントリポジトリ(380)は、レガシーエミュレータが使用し得るオペレーティングシステムからのソフトウェアパッケージも記憶し得、それらは、OS要素と称され得る。例えば、個々のシステムAPIコンポーネントも、別個のイメージとして個々に記憶され得る。いくつかの例では、個々のパッケージおよびライブラリファイルは、Linux(登録商標)または別のオペレーティングシステムによって提供される機能性を増加させるために実行時間において組み合わせられることができ、バイナリは、相補的コンポーネントリポジトリ(380)内に記憶され得る。
【0057】
コンテナビルダ(375)は、マイクロサービスまたはマイクロサービスの組に関連付けられる機能性を提供するためのエミュレータ要素および/またはOS要素をそのマイクロサービスまたはマイクロサービスの組を含むコンテナイメージの中に選択的に組み込むことができる。このように、各コンテナに対する全体的イメージサイズは、完全レガシーエミュレータイメージまたは完全OSイメージが各コンテナ内に含まれる場合より小さくあり得る。
【0058】
レガシーエミュレータのイメージは、いくつかの事例では、数百メガバイトであり得る。一方、特定のバッチプロセスまたは特定のデータベーストランザクション等の特定の機能を実施するエミュレータ要素は、わずか数十メガバイトであり得る。同様に、完全オペレーティングシステムのイメージは、エミュレータ要素によって使用される実際のコンポーネントのイメージよりも数倍大きくあり得る。
【0059】
故に、エミュレータ要素へのレガシーエミュレータの区分化と、コンテナまたはポッド内のコンテナにおける全より少ないそのような要素の包含は、完全レガシーエミュレータまたはコンテナもしくはポッド内のマイクロサービスによって使用されないエミュレータ要素のイメージを含むそうでなければ同じコンテナまたはポッドと比較して、コンテナまたはポッドを格納するために使用されるメモリを5~7倍低減させ得る。
【0060】
コンテナまたはポッド内のコンテナにおける全より少ないOS要素の包含は、完全OSのイメージ、または、コンテナまたはポッド内のマイクロサービスおよび/またはエミュレータ要素によって使用されないOS要素のイメージを含むそうでなければ同じコンテナもしくはポッドと比較して、コンテナまたはポッドを格納するために使用されるメモリを5~7倍同様に低減させ得る。
【0061】
コンテナ内またはポッド内のコンテナ内の全てより少ないエミュレータ要素および全てより少ないOS要素の両方を含むことによって、コンテナまたはポッドを格納するために使用されるメモリも、全レガシーエミュレータまたはコンテナもしくはポッド内のマイクロサービスによって使用されないエミュレータ要素のイメージを含み、かつ、完全OSのイメージ、または、コンテナまたはポッド内のマイクロサービスおよび/またはエミュレータ要素によって使用されないOS要素のイメージを含むそうでなければ同じコンテナもしくはポッドと比較して、5~7倍低減させられ得る。この事例では、2つの組み合わせを格納するために使用されるメモリの低減に対するレガシーエミュレータサイズおよびオペレーティングシステムサイズの低減の相対的寄与は、レガシーエミュレータおよびオペレーティングシステムの相対的全体的サイズと両方の区分化の程度とに依存し得る。例えば、約10個の要素に区分される200MBレガシーエミュレータと約50個の要素に区分される50MBオペレーティングシステムとの場合、エミュレータ要素を除去する寄与は、典型的には、オペレーティングシステム要素を除去する寄与を上回るであろう。
【0062】
レガシーエミュレータは、マイクロサービスのあり得る必要性と対応するエミュレータ要素に区分され得る。例えば、管理コンソールおよびユーザインターフェース機能性等のある機能性は、マイクロサービスによって必要とされない可能性が高いか、または、それらは、このアーキテクチャ(385)により好適な形態においてコンテナ管理システムによってネイティブに提供されることができ、したがって、他のエミュレータ要素から分離され得、相補的コンポーネントリポジトリ(380)から省略されることさえあり得る。セキュリティ要素等の他のエミュレータ要素も、特に区分され得、したがって、それらは、他のエミュレータ要素およびマイクロサービスから別個のコンテナ内に設置されることができ、または、新しいシステムによって提供される類似するサービスと置換されることさえできる。
【0063】
レガシーエミュレータは、レガシーエミュレータの他のコンポーネントによって依拠されるコア機能性をコアエミュレータ要素の中に設置するためにも区分され得る。そのような要素は、全てではないが、殆どのコンテナまたはポッド内に含まれ得る。多くの場合、このコアエミュレータ要素は、合計レガシーエミュレータサイズの他のエミュレータ要素より大きい割合であろう。例えば、コアエミュレータ要素は、合計レガシーエミュレータのサイズの30%~40%であり得る。
【0064】
レガシーエミュレータは、セキュリティ機能性等、全てのコンテナではないが、ポッド内の1つまたはいくつかのコンテナ内で概して使用される可能性が高い機能性をセキュリティエミュレータ要素等の別個の要素内に設置するためにさらに区分され得る。
【0065】
例としてトランザクションエミュレータを使用すると、好適なエミュレータ要素は、オンライン/通信エミュレータ要素(トランザクションサービスのためのCICSおよびIMS-TMのためのサブプロダクトを含むもの等)、リレーショナルエミュレータ要素(DB2に関するもの等)、階層化データベースエミュレータ要素(IMS-DBのためのもの等)、データセット/日付管理エミュレータ要素(VSAMファイルおよびシーケンシャルファイルのためのもの等)、バッチサービスエミュレータ要素、および/または言語エミュレータ要素(CobolおよびPL/1のためのサブプロダクトを伴うもの等)、セキュリティエミュレータ要素、ならびにユーザインターフェース/管理コンソールエミュレータ要素も含み得る。
【0066】
サブプロダクトは、コンテナの中に実際に組み込まれるエミュレータ要素イメージから除外可能であり得る。例えば、オンライン/通信エミュレータ要素は、CICSのためのバイナリイメージのみを含み、IMS-TMのためのものを含まないこともある。
【0067】
エミュレータ要素は、合計レガシーエミュレータと比較してサイズが変動し得るが、典型的には、非コアエミュレータ要素の各々は、合計レガシーエミュレータサイズの1%~20%、より具体的には、3%~15%であり得る。合計レガシーエミュレータと比較したエミュレータ要素のサイズは、一緒の使用の可能性等の他の因子とともに、異なるエミュレータ要素に分離される機能性を決定することにおいて使用され得る。
【0068】
OS要素は、PostgresSQL、LLVM、node.js等のような種々のLinux(登録商標)パッケージ等の利用可能なパッケージの形態であり得る。
【0069】
エミュレータ要素に付随するOS要素のサイズも、異なるエミュレータ要素に分離されるレガシーエミュレータ機能性を決定することにおいて使用され得る。
【0070】
いくつかのスケーラブルコンテナベースのシステムでは、コンテナビルダ(375)は、ロードモジュールコンパイラを含み、ロードモジュールコンパイラは、入力として、マイクロサービスイメージリポジトリ(355)内に記憶されるSystem 390またはz/OS実行可能イメージファイル等のバイナリを受信する。ロードモジュールコンパイラは、一式のアセンブラ命令等、モノリシックレガシーアプリケーションによるレガシーコンピューティング環境のプログラム、サービス、または機能への呼び出しのバイナリにおける全てのシグネチャを検出する。ロードモジュールコンパイラは、この情報を使用し、マイクロサービスまたはマイクロサービスの組によって使用されるレガシーエミュレータ機能を決定し得る。コンテナビルダ(375)は、次いで、相補的コンポーネントリポジトリ(380)内のエミュレータ要素の中でこれらの機能を実施することが可能なエミュレータ要素を見つけ、マイクロサービスイメージまたはマイクロサービスイメージの組を伴う相補的コンポーネントリポジトリ(380)からの任意の関連付けられるOS要素とともに、コンテナイメージの中にエミュレータ要素を設置し得る。代替として、コンテナビルダ(375)は、両方のコンテナイメージがポッド内に設置されるであろうように、マイクロサービスイメージまたはイメージの組のコンテナイメージに関連付けられるコンテナイメージ内にエミュレータ要素およびOS要素のイメージを設置するであろう。
【0071】
加えて、ロードモジュールコンパイラは、代わりに、バイナリ内のシグネチャまたは複数のシグネチャをレガシーエミュレータ内のレガシーコンピューティング環境において呼び出される同一の機能または複数の機能を呼び出すための命令と置換し、それによって、コンテナイメージ内に記憶され得るレガシーエミュレータ最適化マイクロサービスイメージを形成し得る。モノリシックレガシーアプリケーションまたはレガシーコンピューティング環境およびスケーラブルコンテナベースのシステムのレガシーエミュレータまたは異なるコンピューティング環境のために作成される既存のデータベースを使用して、シグネチャが、識別され、置換命令が、見つけられ得る。加えて、コンテナビルダ(375)は、識別されたレガシー機能呼び出しをレガシーエミュレータのネイティブAPIへの呼び出しと置換し、修正されたイメージまたは複数のイメージを構築し得る。
【0072】
本明細書に説明されるようなマイクロサービスイメージまたはコンテナイメージの任意の最適化もしくは修正中、またはその後、コンテナビルダ(375)は、次いで、コンテナイメージリポジトリ(390)内にそれを記憶する。その後、コンテナイメージリポジトリ(390)内のコンテナイメージは、コンテナ管理システム(385)によって管理されるコンテナ(395)内で実行される。
【0073】
ある実施形態によると、コンテナイメージリポジトリ(390)は、構造において公共Docker Hubと類似するDockerリポジトリであり得る。コンテナ管理システム(385)は、次いで、好ましくは、Dockerコンテナをサポートし、それらの最適化された実行を可能にする。
【0074】
コンテナ管理システム(385)は、コンテナのインスタンス化をスケジューリングする機能、コンテナを実行する機能、それらに制御された量のコンピューティング/記憶/ネットワーク化リソースを分配する機能、それらをアップグレードする機能を組み合わせ得、および/または、システムの健全性を追跡し、管理するために追加のロギングおよび管理機能を実施し得る。ある実施形態によると、コンテナ管理システム(385)は、DockerコンテナのためのKubernetesコンテナ管理システムであり得る。しかし、Amazon ACS、Azure Container Service、Cloud Foundry Diego、CoreOS Fleet、Docker Swarm、Google Container Engine、もしくはMesosphere Marathonコンテナ管理システム、または他のコンテナ編成システム等の他のコンテナ管理システムも、使用され得る。コンテナ管理システム(385)は、本明細書に説明されるような修正および追加を伴って、図1Bに説明されるものと類似し得る。コンテナ管理システム(385)によるリソースの選択的分配は、コンテナがDockerに基づくとき、cgroupの使用によって行われ得る。
【0075】
コンテナ管理システム(385)のフロントの知的プロキシ(図示せず)は、エンドユーザのターミナルエミュレータまたは恒久的接続を要求する任意の他のクライアントインターフェースとの恒久的TCP接続を維持することができる。このプロキシは、次いで、恒久的接続上で要求をスキャンし、それらを適切なサービス要求に変換し、それは、次いで、Kubernetesによって適切なマイクロサービスに向かってルーティングされる。知的プロキシ内およびマイクロサービス内のアドホックラッパは、マイクロサービス要求および応答への3270トラフィックまたは任意の他の特定のトラフィックのカプセル化を可能にする。
【0076】
コンテナ(395)およびコンテナ管理システム(385)は、サブシステム(400)内に常駐し得る。サブシステム(400)は、残りのスケーラブルコンテナベースのシステム(300)とは物理的に別個であり得、スケーラブルコンテナベースのシステム(300)を使用するときに利用可能な同じ利益を達成することが可能であるスタンドアロンシステムにおいて動作し得る。例えば、サブシステム(400)は、本明細書に説明されるようなリソース分配およびコンテナ管理機能を実施し得る。特に、サブシステム(400)がコンテナイメージリポジトリ(390)も含む場合、コンテナ管理システム(385)は、コンテナイメージを使用して追加のまたは複製コンテナも作成し得る。サブシステム(400)は、依然として、マイクロサービスへのモノリシックレガシーアプリケーションの区分化から、およびコンテナイメージ内の必要とされるエミュレータ要素およびOS要素のみの包含から利益を享受し得る。しかしながら、サブシステム(400)は、マイクロサービス定義ベクトルおよびコンテナイメージを作成することに当てられるスケーラブルコンテナベースのシステム(300)の要素を欠くので、そのコンテナイメージおよびコンテナを自動的に更新することは、可能ではない。代わりに、それは、コンテナ管理システム(385)がコンテナ(395)に適用する、または存在する場合、コンテナイメージリポジトリ(390)内に記憶される更新されたコンテナイメージを受信し得る。
【0077】
図示されないが、別のサブシステムは、コンテナ(395)と、コンテナ管理システム(385)と、コンテナイメージリポジトリ(390)と、コンテナビルダ(375)と、相補的コンポーネントリポジトリ(380)とを含み得る。そのようなサブシステムは、残りのスケーラブルコンテナベースのシステム(300)とは物理的に別個であり得、システム(300)と関連して説明される利益の多くを達成し得る。そのようなサブシステムは、新しいマイクロサービスイメージを提供されると、コンテナイメージを更新する能力を有する。そのようなサブシステムは、マイクロサービスイメージリポジトリ(355)および/またはレガシーアプリケーションエミュレータ(325)をさらに含むが、最初に、またはモノリシックソースコードが更新されるとき、新しいマイクロサービス定義ベクトルおよび/またはマイクロサービスイメージを開発することに関与するコンポーネントを欠き得る。そのようなサブシステムは、レガシーアプリケーションエミュレータ(325)も含み得る。
【0078】
リレーショナルデータベースに基づく多くのレガシーアプリケーションが、その記事「A Relational Model of Data for Large Shared Data Banks」(CACM 13,No.6,June 1970)において最初に公開されたTedd Coddのリレーショナル理論に従って構築される。それらのレガシーデータベースは、最小限の冗長性を念頭に設計されており、それらの構造は、通常、可能な限り正規化されている。第5正規形(5NF)が、実生活がこの理想的形態を長年にわたって改変したとしても、殆どの人のための初期設計目標であった。高度な正規化の結果は、モノリシックレガシーアプリケーションによって使用されるデータの種々の区分にわたる高い相互依存性である。
【0079】
この錯綜したデータアーキテクチャは、直接的(同一のテーブルにアクセスするsql要求)または間接的(プログラムYによって更新されたテーブル上の参照一貫性の制約によって修正されたプログラムXによってアクセスするテーブル)のいずれかで同一のデータを共有するモノリシックレガシーアプリケーションにおけるプログラムのクラスタにわたる間接的相互依存性を生じる。
【0080】
しかし、殆どの場合、典型的な大規模モノリシックレガシーアプリケーションは、依然として、数千のテーブルから成るその大規模データベース内に独立したデータのクラスタを有する。スケーラブルコンテナベースのシステムでは、これらのクラスタは、種々のシステム能力を改良するために、各々がマイクロサービスの独立した組によって使用される独立したサブデータベースに分離されるべきである。これらのサブデータベースは、次いで、例えば、別個のデータベースサーバ内で分離されることができ、互いに独立して管理されることができる。これは、ローカルデータ構造変更が包括的なものよりも動作的観点から実行することが単純であるので、システム全体のフレキシビリティおよび敏捷性を増加させる。サブデータベースへのデータベースのこの分離は、1つのサブデータベースまたはその保守に関する問題が、他のデータベースおよびそれらを使用するマイクロサービスに影響を及ぼさないので、スケーラブルコンテナベースのシステムの包括的利用可能性も増加させる。
【0081】
プログラム依存性の識別と同様に、データは、対応するトランザクションまたはトランザクションの組におけるそれらの使用を通してデータクラスタを識別する依存性ツリーを作成することによって、マイクロサービスアーキテクチャに従って区分され得る。この識別は、ソースコードアナライザ(320)、特に、その依存性アナライザによって行われ得る。何故なら、依存性アナライザが、上で説明される利益のうちの少なくともいくつかを達成するために互いに分離可能である、典型的には、ベクトルまたはテーブルの形態におけるサブデータベースおよびサブデータベースクラスタを生産するためにモノリシックレガシーアプリケーションを解析するからである。
【0082】
種々のマイクロサービスイメージは、同一のサブデータベースへの類似するアクセスを共有し得る。特に、リレーショナルデータベースサービストランザクションは、例えば、処理サービスおよびデータベースサービスが、最終的に、別個のマイクロサービスにおいて定義されるように、レガシーエミュレータの他の機能性のためのトランザクションとは別個にパッケージ化され得る。
【0083】
完全データベースまたはサブデータベースは、いくつかのマイクロサービスにわたって共有され得る。完全データベースまたはサブデータベースは、短命処理コンテナによって遠隔でアクセスされる、別個の長期持続データベースコンテナ内に位置し得る。典型的には、処理マイクロサービスを伴うコンテナは、処理マイクロサービスによって使用されるリレーショナルデータベースサービスおよびサブデータベースを格納する1つ以上のコンテナを伴うポッド内にあり得る。
【0084】
類似するタイプの構造では、モノリシックレガシーアプリケーションにおけるトランザクションにわたって共有されるオブジェクトのためのサポートは、ソースコードアナライザを使用して共有オブジェクトを検出し、次いで、ソースコードアナライザによって通知されるようにコンテナビルダを使用して専門リソースコンテナ内にサポートオブジェクトを収集することによって実装され得る。例えば、いくつかのマイクロサービス内に存在するプログラム間で共有されるCICS TS待ち行列は、それらをホストする長命リソースコンテナ内に常駐し得る。これらの共有オブジェクト(例えば、メモリセッション、メッセージ待ち行列、共有データオブジェクト)は、レガシーコンピューティング環境の遠隔アクセス機能を複製する目的のために最初に開発されるレガシーエミュレータの遠隔アクセス機能を通して、遠隔であるが、透過的にアクセスされ得る。CICSレガシー環境の場合、それらの機能は、MRO、IPIC等のようなレガシー機能のエミュレートされたバージョンである。共有メモリゾーン(z/OSシステムの場合ではCSA、CICS CWA、CICS TCTUA等)が、検出され、分散共有キャッシュに設置され、種々のマイクロサービスにわたって共有されるとき、特定のリソースコンテナ上の同じ遠隔アクセス機能によって遠隔でアクセスされることができる。
【0085】
別の類似するタイプの構造では、データ分離を最大化するために、Kubernetesへの初期サービス要求後に、カスケードにおいて同期的に互いを呼び出すいくつかのマイクロサービスにわたっておよぶトランザクションが、構築され得る。この実施形態は、分散2フェーズコミットの関連する問題を伴うデータベース接続共有と分散トランザクションとの追加の複雑性を導入する。
【0086】
本明細書に説明されるコンテナベースのシステムは、生産環境にフレキシブルに結合される適応統合ビルドプロセスを提供することによって、ビルドの観点から変化した景観を提示する。ソースコードリポジトリ(305)内に記憶されるソースコードの修正が行われ、コンパイラ(310)によってコンパイルされ、バイナリリポジトリ(315)内に記憶されると、ソースコードアナライザ(320)、トランザクション状態定義リポジトリ(340)、マイクロサービス定義オプティマイザ(345)、およびマイクロサービスイメージビルダ(350)は、変更によって影響を受けるそれらのトランザクションにのみ対応するマイクロサービスまたは複数のマイクロサービスに関する更新されたマイクロサービスイメージまたはマイクロサービスイメージの組を構築するために使用されることができる。コンテナビルダ(375)は、次いで、コンテナビルダによって以前に抽出されたマイクロサービス定義ベクトルに基づいて自動的かつ最適に定義および設定される構築プロシージャをトリガし、更新されたマイクロサービスのためのコンテナイメージをトリガすることができ、それは、次いで、コンテナ管理システム(385)によって展開されることができる。コンテナイメージは、単純に、マイクロサービスまたはマイクロサービスの組のための更新されたイメージを含み得るが、それらは、必要に応じて、相補的コンポーネントリポジトリ(380)からのイメージの変更も含み得る。ソースコードのより極端な、または複数の変更の場合、マイクロサービス定義ベクトルは、異なるマイクロサービスまたはマイクロサービスの組が作成されるように、変更され得る。例えば、ソースコードが、プログラムの共通セットを使用する多数のトランザクションを提供するために変更される場合、そのプログラムの共通セットは、図5のMS3と同様に、別個のマイクロサービス内に新しく設置され得、他のマイクロサービスのための既存および新しいマイクロサービス定義ベクトルが、それに応じて修正または作成される。
【0087】
更新プロセス全体が、好ましくは、自動化されるが、更新されたマイクロサービスの展開も、運営管理コンソール(図示せず)の制御下で設置され得る。同様に、データ(例えば、コピーブック、sqlファイル等)等の他の情報の変更が存在する場合、変更の依存性が、識別され、ビルドプロシージャを自動的に適応させるように伝搬され得る。
【0088】
例証するために、更新プロセスの自動的ステップは、以下を含み得る:(1)ソースコードリポジトリ(310)の中に設置されるソースコード構造、(2)Jenkins(または他のDevOpsビルドシステム)ビルドジョブ定義、(3)メインフレームバイナリの適切なクラスタリングを通したDockerイメージ構築、および(4)Kubernetes管理パラメータ。
【0089】
スケーラブルコンテナベースのシステムのマイクロサービス構造は、更新するために必要とされる変更の数およびそのように行うことにおいて費やされる時間の観点からも利点を提供する。例えば、図5に図示されるように、プログラムDまたはEの変更は、トランザクションT1およびT2のために、2つの別個のマイクロサービスビルドMS1およびMS2においてではなく、マイクロサービスMS3のビルドにおいてのみ行われる必要がある。多数の独立したマイクロサービスによって提示される高レベルの粒度は、完全自動化を可能にし、好ましくは、その下で動作する。
【0090】
そのようなマイクロサービスの形成は、サブツリーを変更するアプリケーションコードのアップグレードまたは変更が、それを起動する全てのマイクロサービスではなく、内部マイクロサービスのための対応するコンテナのアップグレードのみを引き起こす必要があるので、全体的システム管理性を改良することができる。
【0091】
コンテナが構築され得る容易さと、それがより小さい場合にコンテナの中にコンテナイメージをロードするための短縮された時間とを所与として、多くのスケーラブルコンテナベースのシステムにおけるマイクロサービス定義オプティマイザ(345)は、特に、図4および図5に図示されるように、トランザクションが別個のマイクロサービス内に設置されることに適している共通プログラムまたはプログラムの組を使用する場合、トランザクション定義ベクトルあたり複数のマイクロサービス定義ベクトルを作成するための命令を実装し得る。例えば、T個のトランザクションは、P個のマイクロサービスに容易になることができ、Pは、プログラムの数であり、Tは、エントリポイントの必要性が、もはや各既存のトランザクションのルートプログラムではなく、アプリケーション内の任意の(例えば、CICS下でLINKを介して)呼び出し可能なプログラムである場合、モノリシックレガシーアプリケーションによってサポートされるトランザクションのためのエントリポイントの数であった。
【0092】
所与のスケーラブルコンテナベースのシステムがポッドを使用して実装されるであろうか、コンテナのみを使用して実装されるであろうかは、マイクロサービスが作成および定義される方法をさらに通知し得る。例えば、マイクロサービスへのトランザクションのさらなる解析およびより最小限のマイクロサービス定義ベクトルが、そのように設計されていないものよりもポッドを使用するように設計されたスケーラブルコンテナベースのシステムにおいて可能であり得る。
【0093】
いくつかの事例では、定義される別個のマイクロサービスの数に関する唯一の限定は、モノリシックレガシーアプリケーション内の別個のプログラムの数および/またはマイクロサービスイメージリポジトリ(355)および/またはコンテナ(395)を格納するためのスケーラブルコンテナベースのシステムにおいて利用可能なメモリであり得る。
【0094】
加えて、所与のコンテナイメージが、任意の数のアクティブコンテナ内に設置され得るので、スケーラブルコンテナベースのシステムは、更新のチェックおよび漸進的実装を可能にし、いくつかのコンテナは、古いバージョンのマイクロサービスまたはマイクロサービスの組を実行し、より新しいコンテナは、更新されたマイクロサービスまたはマイクロサービスの組を実行する。これは、更新が失敗に対してチェックおよび試験されることを可能にする一方、必要に応じて、古いバージョンのマイクロサービスまたはマイクロサービスの組を使用してトランザクションを実施する能力を維持する。古いバージョンのマイクロサービスを実行するコンテナは、更新が十分に検証されると、自動的に破棄される(またはユーザ命令に基づいて除去される)ことができる。
【0095】
加えて、コンテナが容易に構築および破棄されることができるので、トランザクションがいくつかのコンテナ内で実行されている場合、更新を伴う新しいコンテナは、そのトランザクションのための新しい要求を実施するように構築されることができる一方、そのトランザクションは、更新を欠く既存のコンテナ内で終了し、それは、次いで、それらが直ちに実行しているトランザクションを完了すると、自動的に破棄されることができる。したがって、例えば、10個のコンテナC1-C10がトランザクションT1を実行している場合、MS1に対応する更新が起こると、コンテナ管理システム(385)は、トランザクションのための新しい要求が受信されると、新しいコンテナC11を自動的に作成し得る。コンテナC11は、更新されたマイクロサービスMS1’のイメージを含む。コンテナC1が、それが実行しているトランザクションを完了すると、いかなる新しいトランザクションも、コンテナC1に割り当てられず、それは、破棄される。コンテナを作成および管理するためにコンテナ管理システム(385)によって適用されるパラメータに応じて、更新されたマイクロサービスMS1’を伴う新しいコンテナが、C1に取って代わるように直ちにビルドされ得るか、または、それは、トランザクションT1に関する新しい要求が到着するときにビルドされ得る。
【0096】
DockerおよびKubernetesのような技術は、ウェブスケールにおいて機能し、その結果、より多くの要求が到着するとき、より多くの追加されたx86マシン上で拡散され得るワークロードの非常に迅速な発展を可能にするように設計されている。それは、まさに、Kubernetesのようなオーケストレータを目的としている。オンライン顧客トランザクションが、トランザクションを完了する前にますます多くの数のクエリに回答することをますます要求しているので、オンラインコマースの要求は、オンライン市場へのレガシーコンピューティング環境の拡張にスケーラビリティの問題を導入している。本明細書に説明されるようなコンテナベースのシステムのスケーラビリティは、これらの顧客集約的クエリアプリケーション専用のコンテナの拡散を可能にすることによって、そのようなレガシーコンピューティング環境のスケーラビリティを増加させることにおいて特に有利である。さらに、各コンテナイメージ、またはいくつかの事例では、各ポッドが、いくつかのOS要素およびいくつかのエミュレータ要素を含むので、それは、Linux(登録商標)オペレーティングシステムの使用等の異なるコンピューティング環境が保存される限り、ハードウェアの一部から別のものに容易に複製または移動させられることができる。
【0097】
分離されたコンテナによって提供される分離は、サービスレベル管理においてはるかに洗練されたアプローチも提供する。各コンテナは、その他よりも良好にいくつかのマイクロサービス(特定のレガシートランザクションに対応するか、またはそれによって使用される)を提供するために、異なる量のリソースを分配されることができる。本明細書に説明されるようなスケーラブルコンテナベースのシステムは、コンテナによるリソース使用を自動的に検出および追跡し、使用に基づいてより多いまたはより少ないリソースを当てることができる。加えて、または代替として、コンテナ管理システムは、使用に基づいて、特定のマイクロサービスまたはマイクロサービスの組に当てられるコンテナの数をスケール変更し得る。ユーザ定義優先順位も、トランザクションまたはマイクロサービスに対応するリソース分配もしくはコンテナの数に関する計算において含まれ得る。所与のトランザクションに利用可能なリソースのこのユーザ定義調節は、モノリシックレガシーアプリケーションにおいて可能ではない。
【0098】
いくつかの変形例では、マイクロサービスまたはマイクロサービスの組を含むコンテナイメージのコンテナもしくはポッドの中への初期展開は、少なくとも部分的に、モノリシックレガシーアプリケーションがレガシーコンピューティング環境において実行されるときのトランザクションアクティビティ、またはそのエミュレーションに基づき得る。そのような情報は、図3に図示されるようなレガシーエミュレータ(325)等のレガシーエミュレータから導出され得る。そのような情報は、レガシーアクティビティログ(360)等のレガシーアクティビティログまたはアクティビティログアナライザ(365)(図3に図示せず)等のアクティビティログアナライザからも導出され得る。
【0099】
例えば、モノリシックレガシーアプリケーションを使用するときの所与のトランザクションのためのリソース消費量が、多くの場合、精密に監視される。リソース番号が、抽出され得、スケーラブルコンテナベースのシステム、特に、コンテナ管理システム(385)の展開定義パラメータのための基礎として、スケーラブルコンテナベースのシステムの異なるコンピューティング環境における類似するリソース番号への転置後、使用されることができる。
【0100】
さらに、別々のコンテナ内のセキュリティおよび個々のAPIまたはトランザクションサービスサポート特徴を実行することによって、スケーラブルコンテナベースのシステムは、必要に応じて、保護されたデータおよびリソースへのアクセスを限定することによって、セキュリティを増進する。加えて、初期レガシーアプリケーションのセキュリティ特徴は、利用可能なマイクロサービスの組の中に移植され、マイクロサービス定義オプティマイザ(345)によって特に識別され、マイクロサービスとともに含まれ得る。
【0101】
図1Bに描写される一般的タイプのもの等のスケーラブルコンテナベースのシステム内のコンテナは、ハイパーバイザを伴わずに動作し、スケーラブルコンテナベースのシステムが、ハイパーバイザまたは複数のOSコピー等の追加のコンポーネントも動作しなければならない図1Aに描写されるタイプ等の仮想マシン等のシステムよりも効率的に動作することを可能にし得る。
【0102】
上記説明によるシステムは、サーバまたはサーバクラスタもしくはサーバクラスタの組内のコンピュータ記憶媒体等の非一過性媒体に記憶されたコンピュータ命令において実装され得る。コンピュータ命令は、そのようなシステム上でのインストールのために、不揮発性固定または取り外し可能な記憶媒体上に記憶され得る。一実施形態では、ソースコードリポジトリ(310)、トランザクション状態定義リポジトリ(340)、および動的定義リポジトリ(440)は、共通リポジトリシステム内に記憶される一方、バイナリリポジトリ(330)、トランザクションイメージリポジトリ(360)、相補的コンポーネントリポジトリ(450)、およびコンテナイメージリポジトリ(370)は、共通バイナリイメージリポジトリシステム上に記憶される。別の実施形態では、コンテナイメージリポジトリ(370)は、別個のプラットフォーム内でインスタンス化される。システムのスケールおよび必要性に応じて、異なる数のリポジトリシステムが、使用され得、ソースおよびバイナリリポジトリは、共有される、または異なるリポジトリシステムに分離され得る。
【0103】
命令および/またはデータは、別様に典型的な様式で記憶され得る。例えば、バイナリイメージは、標準ファイルシステムの通常の階層化構造内のディスク上に記憶されることができる。アプリケーションデータは、通常のファイル内および/または構造化(リレーショナル、階層化等)データベース内のいずれかに記憶されることができる。
【0104】
本発明の別の側面によると、モノリシックレガシーアプリケーションの動作を実施するスケーラブルコンテナベースのシステムを生産および/または保守する方法が、提供される。図6は、そのような方法のあるステップのフローチャートである。しかしながら、スケーラブルコンテナベースのシステムと関連して上で説明される任意の機能も、方法に含まれ得る。加えて、方法は、任意の特定のシステムとの使用に限定されないが、それは、上で説明されるスケーラブルコンテナベースのシステム上に実装され得る。
【0105】
方法600は、モノリシックレガシーアプリケーションが解析され、プログラムファイルが自動的に区分されるステップ605を含む。ステップ610において、トランザクションルートプログラムが、識別される。ステップ610の前または後に起こり得るステップ615において、プログラム相互依存性が、識別される。ステップ610および615は、複数のトランザクションにおける異なるトランザクションのために同時に起こり得る。
【0106】
次に、ステップ620において、複数のトランザクション呼び出しツリーが、識別される。好ましくは、この複数のトランザクション呼び出しツリーは、モノリシックレガシーアプリケーションにおいて可能な全てのトランザクションまたはモノリシックレガシーアプリケーションの定義されたサブパーツにおいて可能な全てのトランザクションを表す。
【0107】
ステップ625において、複数のトランザクション呼び出しツリーは、例えば、トランザクション状態定義リポジトリ内に記憶される複数のトランザクション定義ベクトルを作成するために使用される。
【0108】
ステップ650において、アクティビティログアナライザが、モノリシックレガシーアプリケーションにおいて可能な全てのトランザクションまたはモノリシックレガシーアプリケーションの定義されたサブパーツにおいて可能な全てのトランザクションにおいて実際に使用されるプログラムを決定する。モノリシックレガシーアプリケーションの定義されたサブパーツのみが使用される場合、それは、典型的には、ステップ625のサブパーツと同一であるか、その全体を含むか、または少なくとも部分的にそれと重複するであろう。アクティビティログアナライザは、トランザクションにおいて実際に使用されるプログラムを決定するために、その元々の環境において実行されるようなモノリシックレガシーアプリケーションのレガシーアクティビティログを使用し得る。アクティビティログアナライザは、代替として、トランザクションにおいて実際に使用されるプログラムを決定するために、モノリシックレガシーアプリケーションを実行するためのエミュレータを使用し得る。いくつかの方法では、同一または異なるアクティビティログアナライザが、トランザクションにおいて実際に使用されるプログラムを決定するために、レガシーアクティビティログおよびエミュレータの両方を使用し得る。結果に基づいて、動的定義リポジトリが、作成される。動的定義リポジトリは、複数のトランザクションにおける各トランザクションのために使用されるプログラムのログを含む。いくつかの実施形態では、このログは、複数の動的定義ベクトルを含み得る。動的定義リポジトリは、トランザクション状態定義リポジトリに関して定義され得るか、または、それは、独立して作成され得る。
【0109】
ステップ630において、ステップ625からの複数のトランザクション定義ベクトルは、マイクロサービス定義オプティマイザによってステップ650からの動的定義リポジトリと比較され、トランザクションにおいて実際に使用されないプログラムが、各トランザクション定義ベクトルから除去され、複数のトランザクションに対応する複数のマイクロサービス定義ベクトルを作成する。
【0110】
ステップ635において、マイクロサービス定義オプティマイザは、さらなる最適化が起こるであろうかどうかを決定する。さらなる最適化が起こるであろう場合、ステップ640において、複数のマイクロサービス定義ベクトルのうちの少なくとも1つが、さらに最適化され、次いで、ステップ645において、それは、マイクロサービスイメージビルダに提供される。さらなる最適化が複数のマイクロサービス定義ベクトルのうちのいずれかに関して起こらないであろう場合、ステップ645において、マイクロサービス定義ベクトルは、マイクロサービスイメージビルダに提供される。最適化がマイクロサービス定義ベクトルのうちのいずれかに関して起こるかどうかにかかわらず、複数のトランザクションベクトルから導出される複数のマイクロサービス定義ベクトルは、ステップ645において、マイクロサービスイメージビルダに提供される。
【0111】
ステップ655において、マイクロサービスイメージビルダは、複数のマイクロサービス定義ベクトルの各マイクロサービス定義ベクトルを取得し、バイナリリポジトリからレガシーコンピューティング環境において実行するようにコンパイルされた対応するコンパイル済みソースコードを見つけ、マイクロサービスイメージリポジトリ内にマイクロサービスイメージを形成する。マイクロサービスイメージは、それが含むプログラムによって使用されるさらなる情報およびアーチファクトも含み得る。ステップ655が完了された後、マイクロサービスイメージリポジトリは、好ましくは、モノリシックレガシーアプリケーションまたはその定義されたサブパーツにおいて可能な複数のトランザクションの各々に対応する複数のマイクロサービスイメージを含む。
【0112】
ステップ660において、相補的コンポーネントリポジトリが、レガシーエミュレータの要素の別個のイメージから作成される。別個の要素は、レガシーエミュレータの異なる機能に対応する。レガシーエミュレータに関連付けられるOS要素のイメージも、相補的コンポーネントリポジトリ内に記憶され得る。
【0113】
ステップ665において、コンテナビルダが、マイクロサービスまたは複数のマイクロサービスを実行するために使用されるレガシーエミュレータのエミュレータ要素の相補的コンポーネントリポジトリからのイメージとともに、マイクロサービスイメージリポジトリからのイメージを使用して、各マイクロサービスまたはマイクロサービスの組のためのコンテナイメージを形成する。レガシーエミュレータの要素に関連付けられるOS要素のイメージ等の相補的コンポーネントリポジトリからの他のイメージも、コンテナイメージに設置され得る。エミュレータ要素は、マイクロサービスイメージのバイナリ内の機能またはプログラムへの呼び出しのシグネチャを識別し、呼び出された機能を実施すること、または呼び出されたプログラムとともに動作することが可能なエミュレータ要素を含むことによって選択され得る。ある実施形態では、各コンテナイメージ内の少なくとも1つのマイクロサービスイメージ内の少なくとも1つのバイナリは、レガシーエミュレータ最適化マイクロサービスイメージを形成するために改変され得、マイクロサービスバイナリイメージ内の呼び出しのシグネチャは、レガシーエミュレータ内の同一の機能または複数の機能を呼び出すための命令と置換される。
【0114】
ステップ670において、複数のコンテナイメージは、コンテナイメージリポジトリに記憶される。
【0115】
ステップ675において、コンテナイメージリポジトリ内の少なくとも1つのコンテナイメージが、コンテナ管理システムによってコンテナ内に記憶される。アクティビティログアナライザからの情報のみならず、マイクロサービスイメージ自体も、コンテナ管理システムによって使用され得る。好ましくは、各コンテナイメージは、少なくとも1つのコンテナ内でアクティブにされる。各コンテナイメージは、それが含まれるコンテナまたは複数のコンテナに分配されるリソースに反映されるリソース分配を割り当てられ得る。
【0116】
ステップ680において、少なくとも1つのマイクロサービスが、コンテナ管理システム内のコンテナ内で実行される。
【0117】
多くの例が、本明細書に提供される。これらの例は、本発明の精神から逸脱することなく修正され得る。例えば、種々の例および実施形態のうちのいずれかが、それらが明確に互いに排他的ではない限り、互いに組み合わせられ得る。本明細書に説明される例および実施形態は、例として提供され、他のコンポーネント、ルーチン、またはモジュールも、使用され得る。
図1A
図1B
図2A
図2B
図3
図4
図5
図6