JP2023510951A - モノリシック・アプリケーションのマイクロサービス分解戦略 - Google Patents

モノリシック・アプリケーションのマイクロサービス分解戦略 Download PDF

Info

Publication number
JP2023510951A
JP2023510951A JP2022544034A JP2022544034A JP2023510951A JP 2023510951 A JP2023510951 A JP 2023510951A JP 2022544034 A JP2022544034 A JP 2022544034A JP 2022544034 A JP2022544034 A JP 2022544034A JP 2023510951 A JP2023510951 A JP 2023510951A
Authority
JP
Japan
Prior art keywords
code
computer
monolithic application
graph
component
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022544034A
Other languages
English (en)
Inventor
フワン、ジンホ
カーリア、アナップ
シャオ、ジン
ジャクソン、マリク
ブコヴィッチ、マハ
ロフラーノ、ジョン
マニ、センシル、クマール クマラサミー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2023510951A publication Critical patent/JP2023510951A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/226Microinstruction function, e.g. input/output microinstruction; diagnostic microinstruction; microinstruction format
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/16Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks using machine learning or artificial intelligence
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/40Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks using virtualisation of network functions or resources, e.g. SDN or NFV entities

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Machine Translation (AREA)

Abstract

モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするシステムおよび技法が提供される。さまざまな実施形態において、コミュニティ検出構成要素は、モノリシック・アプリケーションの中の素なコード・クラスタを、モノリシック・アプリケーションを特徴付けるコード特性グラフに基づいて検出することができる。さまざまな態様において、コード特性グラフは、モノリシック・アプリケーションの時間的コード進展に基づくことができる。さまざまな実施形態において、トピック・モデリング構成要素は、モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて素なコード・クラスタの機能目的を識別することができる。さまざまな実施形態において、マイクロサービス構成要素は、機能目的に基づいて、素なコード・クラスタを置き換えるためのマイクロサービスを推奨することができる。

Description

本主題開示はマイクロサービスの分解(microservice decomposition)に関し、より詳細には、モノリシック・アプリケーション(monolithic application)に対するマイクロサービス分解戦略を自動的に推奨することに関する。
以下に、本発明の1つまたは複数の実施形態の基本的理解を提供する概要を示す。この概要が、鍵となる要素もしくは決定的に重要な要素を識別すること、または、この概要が、特定の実施形態の範囲もしくは特許請求の範囲を規定することは意図されていない。この概要の唯一の目的は、後に示すより詳細な説明に対する前置きとして、概念を簡略化された形で示すことにある。本明細書に記載された1つまたは複数の実施形態では、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするデバイス、システム、コンピュータ実施方法、装置もしくはコンピュータ・プログラム製品、またはこれらの組合せが説明される。
1つまたは複数の実施形態によればシステムが提供される。このシステムは、コンピュータ実行可能構成要素を格納することができるメモリを含むことができる。このシステムはさらに、メモリに動作可能に結合することができるプロセッサであり、メモリに格納されたコンピュータ実行可能構成要素を実行することができるプロセッサを含むことができる。さまざまな実施形態において、コンピュータ実行可能構成要素は、モノリシック・アプリケーションの中の素なコード・クラスタ(disjoint code cluster)を、モノリシック・アプリケーションを特徴付けるコード特性グラフ(code property graph)に基づいて検出することができるコミュニティ検出構成要素(community detection component)を含むことができる。さまざまな実施形態において、コード特性グラフは、モノリシック・アプリケーションの時間的なコードの進展(temporal code evolution)に基づくことができる。さまざまな実施形態において、コンピュータ実行可能構成要素は、モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて素なコード・クラスタの機能目的(functional purpose)を識別することができるトピック・モデリング構成要素(topic modeling component)を含むことができる。さまざまな実施形態では、マイクロサービス構成要素(microservices component)は、機能目的に基づいて、素なコード・クラスタを置き換えるためのマイクロサービスを推奨することができる。
1つまたは複数の実施形態によれば、上で説明したシステムを、コンピュータ実施方法として実施することができる。
1つまたは複数の実施形態によれば、上で説明したシステムを、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするためのコンピュータ・プログラム製品として実施することができる。このコンピュータ・プログラム製品は、プログラム命令が実装されたコンピュータ可読ストレージ媒体を含むことができる。このプログラム命令は、処理構成要素によって実行可能なものとすることができ、これによって、処理構成要素はさまざまな動作を実行することができる。
1つまたは複数の実施形態によれば装置が提供される。この装置は、コンピュータ実行可能構成要素を格納することができるメモリを含むことができる。この装置はさらに、メモリに動作可能に結合することができるプロセッサであり、メモリに格納されたコンピュータ実行可能構成要素を実行することができるプロセッサを含むことができる。さまざまな実施形態において、コンピュータ実行可能構成要素は、モノリシック・アプリケーションの中のマイクロサービス分解の候補を、モノリシック・アプリケーションに対応するコード特性グラフに基づいて識別することができるコミュニティ検出構成要素を含むことができる。さまざまな実施形態において、コンピュータ実行可能構成要素は、モノリシック・アプリケーションに対応するビジネス文書に基づいて、識別された候補によってそれぞれ実行される機能を識別することができるトピック・モデリング構成要素を含むことができる。
1つまたは複数の実施形態によれば、上で説明したシステムを、コンピュータ実施方法として実施することができる。
一態様によれば、システムが提供され、このシステムは、コンピュータ実行可能構成要素を格納するメモリと、メモリに動作可能に結合されたプロセッサであり、メモリに格納されたコンピュータ実行可能構成要素を実行する、プロセッサとを含み、コンピュータ実行可能構成要素は、モノリシック・アプリケーションの中の素なコード・クラスタを、モノリシック・アプリケーションを特徴付けるコード特性グラフに基づいて検出するコミュニティ検出構成要素、モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて素なコード・クラスタの機能目的を識別するトピック・モデリング構成要素、および機能目的に基づいて、素なコード・クラスタを置き換えるためのマイクロサービスを推奨するマイクロサービス構成要素を含む。
別の態様によれば、コンピュータ実施方法が提供され、このコンピュータ実施方法は、プロセッサに動作可能に結合されたデバイスによって、モノリシック・アプリケーションの中の素なコード・クラスタを、モノリシック・アプリケーションを特徴付けるコード特性グラフに基づいて検出すること、このデバイスによって、モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて素なコード・クラスタの機能目的を識別すること、およびこのデバイスによって、機能目的に基づいて、素なコード・クラスタを置き換えるためのマイクロサービスを推奨することを含む。
別の態様によれば、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするためのコンピュータ・プログラム製品が提供され、このコンピュータ・プログラム製品は、プログラム命令が実装されたコンピュータ可読メモリを含み、プログラム命令は、モノリシック・アプリケーションの中の素なコード・クラスタを、モノリシック・アプリケーションを特徴付けるコード特性グラフに基づいて検出すること、モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて素なコード・クラスタの機能目的を識別すること、および機能目的に基づいて、素なコード・クラスタを置き換えるためのマイクロサービスを推奨すること、を処理構成要素に実行させるように処理構成要素によって実行可能である。
別の態様によれば、装置が提供され、この装置は、メモリに動作可能に結合されたプロセッサであり、メモリに格納されたコンピュータ実行可能構成要素を実行する、プロセッサを含み、コンピュータ実行可能構成要素は、モノリシック・アプリケーションの中のマイクロサービス分解の候補を、モノリシック・アプリケーションに対応するコード特性グラフに基づいて識別するコミュニティ検出構成要素、およびモノリシック・アプリケーションに対応するビジネス文書に基づいて、識別された候補によってそれぞれ実行される機能を識別するトピック・モデリング構成要素を含む。
別の態様によれば、コンピュータ実施方法が提供され、このコンピュータ実施方法は、プロセッサに通信可能に結合されたデバイスによって、モノリシック・アプリケーションの中のマイクロサービス分解の候補を、モノリシック・アプリケーションに対応するコード特性グラフに基づいて識別すること、およびこのデバイスによって、モノリシック・アプリケーションに対応するビジネス文書に基づいて、識別された候補によってそれぞれ実行される機能を識別することを含む。
次に、添付図面を参照して本発明の実施形態を単なる例として説明する。
本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なシステムのブロック図である。 本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の高レベル流れ図である。 コード特性グラフを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なシステムのブロック図である。 コミュニティ検出アルゴリズムを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なシステムのブロック図である。 本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコード特性グラフの中の例示的で非限定的な互いに素なコード・クラスタのブロック図である。 トピック・モデリング・アルゴリズムを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なシステムのブロック図である。 推奨されたマイクロサービスを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なシステムのブロック図である。 本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするための例示的なワークフロー処理を示す高レベル・ブロック図である。 フィードバック構成要素を含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なシステムのブロック図である。 依存関係パターン格納構成要素(dependency pattern storage component)を含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なシステムのブロック図である。 本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の流れ図である。 コード特性グラフを増強することを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の流れ図である。 ユーザ・フィードバックを受け取ることを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の流れ図である。 依存関係パターンを格納することを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の流れ図である。 素なコード・クラスタを置き換えることを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の流れ図である。 本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の流れ図である。 コード特性グラフを修正することを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にする例示的で非限定的なコンピュータ実施方法の流れ図である。 本明細書に記載された1つまたは複数の実施形態を容易にすることができる例示的で非限定的な動作環境のブロック図である。
以下の詳細な説明は単に例示のためのものであり、以下の詳細な説明が、実施形態または実施形態の用途もしくは使用、あるいはこれらの組合せを限定することは意図されていない。さらに、上記の技術分野もしくは発明の概要の項または発明を実施するための形態の項に提示された明示または暗示の情報によって拘束されることは意図されていない。
次に、1つまたは複数の実施形態を図面を参照して説明する。それらの図面では、全体を通じて、同じ要素を指すために同じ参照符号が使用されている。以下の説明には、説明の目的上、1つまたは複数の実施形態のより完全な理解を提供するために、数多くの具体的な詳細が記載されている。しかしながら、さまざまなケースにおいて、それらの具体的な詳細がなくても、この1つまたは複数の実施形態を実施することができることは明白である。
レガシー・アプリケーションは、古い、時代遅れである、もしくは更新が必要である、またはこれらの組合せであると考えられてはいるが、それでも多くの理由(例えば、そのレガシー・アプリケーションが満足のいく結果を提供するため、そのレガシー・アプリケーションを置き換える際もしくはそのレガシー・アプリケーションのユーザ/オペレータを再訓練する際またはその両方の際にかかるコストが非常に大きいため、など)から依然として使用されているソフトウェア(例えばコンピュータ実行可能プログラムもしくはコンピュータ実行可能アプリケーションまたはその両方)であることがある。レガシー・アプリケーションはしばしばモノリシック・アーキテクチャとして構築されている。モノリシック・アプリケーションは、自己内蔵型のアプリケーション、すなわち、他のコンピューティング・アプリケーションから独立しており、特定の機能を容易にするのに必要な全てのおよび/または実質的に全てのコンピュータ実行可能構成要素および/またはコンピュータ実行可能命令を、単一のコンピュータ・プログラムもしくはコンピュータ・プラットホームまたはその両方に結合したアプリケーション、であることがある。これらのモノリシック・アプリケーションは一般に、クラウド・ネイティブの環境に適合させるのにはあまりに大きく、もしくはあまりに扱いにくく、またはその両方である。それらはしばしば、クラウド・ネイティブのアプリケーションが提供する利点(例えばスケーラビリティ、連続的な展開(continuous deployment)、ステートレスな展開(stateless deployment)、アジリティなど)を示さない。さまざまな状況において、モノリシック・アプリケーション(例えばレガシー・アプリケーションであるのか否かは問わない)を1つまたは複数のマイクロサービスに完全にもしくは部分的にまたはその両方で分解することは有益であることがある。マイクロサービスは、特定の機能もしくはビジネス・タスクまたはその両方を実行する、独立して開発可能な、もしくは独立して展開可能な、または独立して開発および展開が可能なサブアプリケーションであることがある。例えば、1つのモノリシック・アプリケーションが、動作A、BおよびCを実行するコンピュータ・プログラムである場合には、そのモノリシック・アプリケーションを、3つのマイクロサービス、すなわち動作Aを実行する第1のマイクロサービス、動作Bを実行する第2のマイクロサービスおよび動作Cを実行する第3のマイクロサービスに完全に分解することができる。いくつかのケースでは、モノリシック・アプリケーションの一部分だけがマイクロサービスに置き換えられ、モノリシック・アプリケーションの残りの部分は維持され、もしくは依然として使用され、またはその両方となるように、1つのモノリシック・アプリケーションを部分的に分解すること(例えば、上記の例示的なモノリシック・アプリケーションを、3つのマイクロサービスに分解するのではなく、1つまたは2つのマイクロサービスにしか分解しないこと)ができる。さまざまな例において、マイクロサービスはクラウド・ベースであることができる。さまざまな状況において、モノリシック・アプリケーションのマイクロサービス分解は、モノリシック・アプリケーションの改良された性能(例えば、分離された構成要素、増大した複雑さ、不変のアーキテクチャ、より高速な計算、より短い開発時間枠、最小化された依存関係もしくは分担された懸念またはその両方、より小さいもしくはより集中した、またはより小さくより集中したアプリケーション、関係エンティティ間のデータ契約(data contract)もしくはその欠如またはその両方、など)に帰着し得る。
しかしながら、モノリシック・アプリケーションを1つまたは複数のマイクロサービスに分解することは難しいタスクであることがある。このような分解は一般に、手動で効果的に実行するのにはあまりに複雑であり、もしくはあまりに時間がかかり、またはその両方である。したがって、マイクロサービス分解を容易にするための自動化されたシステム/技術が有益である。
マイクロサービス分解の自動化されたシステム/技術はいくつか存在するが、それらは普通、単純な発見的手法(heuristics)を利用して、モノリシック・アプリケーションのコール・グラフ(call graph)だけに基づいてコード・クラスおよび方法をクラスタ化およびマージする。他の既存のシステム/技術は単に、プロセス・マイニングおよびプロセス・ログ・ファイルを利用して代替スライシング解決策を推奨する。他の既存のシステム/技術は、ソース・コードの自然言語処理だけを利用して、分解の候補を識別する。自然言語処理は、モノリシック・アプリケーションのソース・コードにはしばしば示されていない良好なプログラミング・スタイルおよび最良のプラクティスに依存するため、これは最適とは言えないことがある。
このような既存のシステム/技術は多くの不都合を経験する。例えば、このような既存のシステム/技術は、モノリシック・アプリケーションの意味論的構造(semantic structure)(例えばアプリケーションのソース・コードの構造)を決定するのに統計学的方法を使用せず、モノリシック・アプリケーションのデータ依存関係もしくは制御依存関係またはその両方を考慮せず、マイクロサービス分解の候補を識別するのにモノリシック・アプリケーションの時間的なコードの進展(例えばモノリシック・アプリケーションのコードに対する経時的な変更)を利用しない。さらに、このようなシステム/技術は、モノリシック・アプリケーションのソース・コードだけに焦点を合わせ、また、識別されたコード・クラスタを置き換えるための適当なマイクロサービスを推奨するときに、識別されたコード・クラスタに関連した機能トピックもしくは機能目的またはその両方を判定もしくは推論し、または判定および推論するのに、モノリシック・アプリケーションに関連したビジネス文書を利用しない。本発明のさまざまな実施形態はこれらの課題のうちの1つまたは複数の課題に対処することができる。
本発明の1つまたは複数の実施形態は、レガシー・モノリシック・アプリケーションのモダナイゼーションに特に有用であることがあるが、本発明のさまざまな実施形態を利用して、非レガシー・モノリシック・アプリケーション(例えば、古いとも、時代遅れであるとも、もしくは更新が必要であるとも、またはこれらの組合せであるとも考えられていないモノリシック・アプリケーション)に対するマイクロサービス分解戦略を推奨もしくは実施すること、または推奨および実施することもできることに留意されたい。
本明細書に記載された実施形態は、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨もしくは実施またはその両方を容易にする、システム、コンピュータ実施方法、装置もしくはコンピュータ・プログラム製品、またはこれらの組合せを含む。さまざまな実施形態では、モノリシック・アプリケーションが、技術文書コーパス(例えばソース・コード、バイナリ・コード、展開スクリプト、実行インスタンスに関する統計量、異なる異型(variant)/構成、コード・リポジトリなど)、およびビジネス文書コーパス(例えば設計文書、ユーザ・ガイド/マニュアル、訓練ガイド/マニュアル、トラブルシューティング・ガイド/マニュアル、READMEページ、Wikiページ、GitHubページなど)に関連付けられていることがある。
さまざまな実施形態では、グラフ構成要素(graph component)が、技術文書コーパスに基づいて、モノリシック・アプリケーションを特徴付けるコード特性グラフを生成することができる(例えば、グラフ構成要素は、コード特性グラフを作成するために、モノリシック・アプリケーションに対応するソース・コードもしくはスクリプトまたはその両方を分析することができる)。コード特性グラフは、モノリシック・アプリケーションに対応する抽象構文木、モノリシック・アプリケーションに対応する制御フロー・グラフ、およびモノリシック・アプリケーションに対応するプログラム依存グラフの組合せによる結合データ構造体であることができる。すなわち、コード特性グラフは、モノリシック・アプリケーションの構造、制御フローおよびデータ依存関係の包括的概観を同時に提供するマルチグラフであることができる。このような結合データ構造体は、モノリシック・アプリケーションを分析する際に有用であることがある。
さまざまな実施形態において、グラフ構成要素は、モノリシック・アプリケーションの時間的コード進展に基づいて、コード特性グラフを増強もしくは修正し、または増強および修正することができる(例えば、コード特性グラフの中のエッジ重みもしくはエッジ特性またはその両方を増強もしくは修正し、または増強および修正すること、コード特性グラフの中のノード重みもしくはノード特性またはその両方を増強もしくは修正し、または増強および修正すること、コード特性グラフの中のエッジもしくはノードまたはその両方を追加しもしくは取り去ること、または追加し、取り去ることなどができる)。さまざまな実施形態において、時間的コード進展は、モノリシック・アプリケーションに対応するコード・リポジトリの中に記録もしくは格納され、もしくは記録および格納された、モノリシック・アプリケーションのソース・コードに対する変更のタイムラインもしくは経時記録またはその両方であることができる。さまざまな例において、同時に変更されたコードの部分/クラスタ、もしくは実質的に同様の時刻に変更されたコードの部分/クラスタ、またはその両方を、実質的に異なる時刻に変更されたコードの部分/クラスタよりも、互いに密接に関係付けられている、もしくは互いに緊密に結合されている、またはその両方であると推論することができる。
例えば、モノリシック・アプリケーションのソース・コードが、コード・グルーピングA、コード・グルーピングBおよびコード・グルーピングCを含むとする。その場合、モノリシック・アプリケーションのコード特性グラフは、コード・グルーピングAに対応するノード、コード・グルーピングBに対応する他のノード、およびコード・グルーピングCに対応する他のノードを含むことができる。所与の期間内にコード・グルーピングAとコード・グルーピングCが、ユーザ/オペレータによって、同時にもしくは実質的に同時に、または同時におよび実質的に同時に変更/更新されたこと(例えば、所与の2週間の間に、コード・グルーピングAおよびコード・グルーピングCがともに、それぞれが実質的に同時もしくは同日であり、またはそれぞれが実質的に同時および同日である、別々の5回にわたって変更されたこと)をコード・リポジトリが示しているとする。さらに、コード・グルーピングBが全く変更されなかったこと、もしくはコード・グルーピングBが、コード・グルーピングAおよびコード・グルーピングCとは実質的に異なる時刻(例えば異なる日)に変更されたこと、またはその両方であることをコード・リポジトリが示しているとする。モノリシック・アプリケーションのソース・コードに対するこのような時間的変更は、コード・グルーピングAとコード・グルーピングCが、コード・グルーピングAおよびコード・グルーピングCがコード・グルーピングBに関係付けられているよりも互いに密接に関係付けられていることを示し得る。したがって、グラフ構成要素は、この関係性(relatedness)を示すために、(例えば、コード・グルーピングAを表すノードとコード・グルーピングCを表すノードとの間のエッジ重みを増大させること、コード・グルーピングAを表すノードとコード・グルーピングCを表すノードとの間により多くのエッジを追加すること、コード・グルーピングBを表すノードとコード・グルーピングAおよびCを表すノードとの間のエッジ重みを低減させること、コード・グルーピングBを表すノードとコード・グルーピングAおよびCを表すノードとの間のエッジを取り去ることなどにより、)コード特性グラフを増強/修正することができる。このような増強は、コード・グルーピングAとコード・グルーピングCが、単一のコード・クラスタとして一緒に取り扱われるべきであるような十分に凝集度が高い(cohesive)ものであること、およびコード・グルーピングBが、独自の独立したコード・クラスタとして単独で取り扱われるべきであるような、残りのコード・グルーピングとは十分に無関係なものであることを反映させることができる。
さまざまな実施形態では、コミュニティ検出構成要素が、(例えば時間的コード進展に基づいてコード特性グラフを増強した後に、)適当な任意のグラフ理論技術(graph theory technique)によって、コード特性グラフの中の素なコード・クラスタを検出することができる。さまざまな例において、素なコード・クラスタを、マイクロサービス分解の候補(例えば、潜在的にマイクロサービスに置き換えることができるソース・コードの部分)と考えることができる。さまざまな実施形態では、素なコード・クラスタを、(例えば、コード特性グラフの中の素なコード・クラスタを表すノードが、それらが単一のクラスタとして一緒に取り扱われるに値する、互いに十分に関係付けられたもの、もしくは互いに十分に連結されたもの、またはその両方であるような)所定のレベルの凝集度(cohesiveness)、および(例えば、コード特性グラフの中の素なコード・クラスタを表すノードが、それらが他のクラスタとは別個に取り扱われるに値する、モノリシック・アプリケーションの中の他のコード・クラスタを表す他のノードから十分に分断されたもの、十分に隔離されための、もしくは十分に独立したもの、またはこれらの組合せであるような)所定のレベルの結合度(coupling)を示す、モノリシック・アプリケーションのソース・コードの任意の部分とすることができる。さまざまな実施形態において、凝集度もしくは結合度またはその両方のこのような所定のしきい値/レベルは、ユーザ/オペレータによって希望通りに選択することができる。
上で述べたとおり、さまざまな例において、モノリシック・アプリケーションの時間的コード進展は、モノリシック・アプリケーションのソース・コードのさまざまな部分の相互関係性に関する価値ある情報を提供することができる。このような情報に基づいてコード特性グラフを増強することによって、コード特性グラフのコミュニティ検出を、より正確にもしくはより効果的に、またはより正確かつより効果的に実行することができる(例えば、コード特性グラフが時間的コード進展に基づいているとき、コード特性グラフは、ソース・コードのどの部分が、互いにより密接にもしくは互いにより緊密に、または互いにより密接かつ緊密に関係付けられているかをより正確に示すことができ、このことは、より正確なコミュニティ検出もしくはコミュニティ・クラスタ化またはその両方に帰着し得る)。
さまざまな実施形態では、トピック・モデリング構成要素が、適当な任意のトピック・モデリング技術によって、モノリシック・アプリケーションのビジネス文書コーパスに基づいて、素なコード・クラスタの機能目的(例えば、素なコード・クラスタによって実行されもしくは容易にされ、または実行され容易にされる、ビジネス・タスク、ビジネス機能、ビジネス能力もしくはビジネス動作またはこれらの組合せ)を識別することができる。例えば、トピック・モデリング構成要素は、素なコード・クラスタがどんなタスク、機能、能力もしくは動作またはこれらの組合せを実行するのかを判定するために、モノリシック・アプリケーションに関する設計文書、ユーザ・ガイド/マニュアル、READMEファイル、Wikiファイル、GitHubファイルなどを分析することができる。例えば、ビジネス文書コーパスは、モノリシック・アプリケーションのソース・コードのさまざまな部分が実行すること(例えば、1つのコード・クラスタがユーザを認証し、別のコード・クラスタが推奨機能を実行し、別のコード・クラスタが課金情報の収集を容易にすることなど)を説明もしくは示唆し、または説明および示唆する自然言語テキストを含むことができる。さまざまなケースにおいて、トピック・モデリング構成要素は、検出された素なコード・クラスタによって実行される機能(例えば素なコード・クラスタの機能目的)を判定するために、このような情報を分析することができる。
さまざまな実施形態では、マイクロサービス構成要素が、機能目的に基づいて、素なコード・クラスタを置き換えるためのマイクロサービスを推奨することができる(例えば、素なコード・クラスタを、素なコード・クラスタと同じおよび/または同様のタスク、機能、能力および/または動作を容易にする/実行するマイクロサービスに置き換えることができる)。さまざまな例において、マイクロサービス構成要素の推奨をマイクロサービス分解戦略と考えることができる(例えば、マイクロサービス構成要素は、ユーザ/オペレータに対して、モノリシック・アプリケーションのソース・コードの置き換えることができる部分を強調することができ、さらに、ソース・コードのそれらの部分を置き換えるためにどのマイクロサービスを取得すべきかを提案することができる)。さまざまな実施形態において、マイクロサービス構成要素は実際に、このような分解戦略を実行もしくは実施し、または実行および実施することができる(例えば、マイクロサービス構成要素は、ソース・コード中での自動化された消去もしくはコメント化またはその両方などにより素なコード・クラスタを作動不能にすることができ、推奨されたマイクロサービスをスケジューリングし、注文し、もしくは他のやり方で取得し、またはこれらの組合せを実行することができる)。
上で述べたとおり、マイクロサービス分解を容易にし、もしくはマイクロサービス分解戦略を推奨し、またはその両方を達成する既存のシステム/技術は、単純に、モノリシック・アプリケーションのデータ依存関係を考慮せず(例えば、アプリケーションのコール・グラフだけを使用し、コード特性グラフを使用せず)、モノリシック・アプリケーションのソース・コードが経時的にどのように変更されたのかを考慮せず(例えば、時間的コード進展に基づいてコード特性グラフを増強することを全くせず)、モノリシック・アプリケーションに関連したビジネス文書を分析することによって、検出されたコード・クラスタの機能目的/トピックを識別もしくは推論すること、または識別および推論することをしない(例えば、ユーザ・ガイド、GitHubファイル、コード・アノテーション(code annotation)などを利用することによって、識別されたコード・クラスタが実行する機能を推論することを試みない)。
能動的に維持されてはいないが、それにもかかわらずユーザ/オペレータにとって商業的に重要である多数のレガシー・アプリケーションのモダナイゼーションに役立てるために、本発明のさまざまな実施形態を使用することができる。クラウド・ネイティブ環境への移行の促進に役立てるため、およびコスト削減もしくは性能向上またはその両方をユーザ/オペレータにもたらすために、本発明のさまざまな例を使用することができる。連続コード最適化もしくは分解またはその両方を必要に応じて容易にするのに役立つアプリケーション管理ツールの部分として、本発明のさまざまな実施形態を使用することができる。さまざまなケースにおいて、本発明の実施形態を、クラウド・ネイティブのマイクロサービスに置き換えることができるレガシー・ソース・コードの潜在的部分、もしくはクラウド・ネイティブのマイクロサービスに置き換えるべきレガシー・ソース・コードの潜在的部分、またはその両方を識別することができ、どのマイクロサービスを置き換え対象として選択すべきかを推奨もしくは識別しまたは推奨および識別することができるモダナイゼーション分析エンジンと考えることができる。
ハードウェアもしくはソフトウェアまたはその両方を使用して、(例えばモノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするのに)その性質において高度に技術的であり、抽象的ではなく、人間による一組の頭脳行為として実行することができない課題を解決するために、本発明のさまざまな実施形態を使用することができる。さらに、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨に関係した定義されたタスク(例えば、モノリシック・アプリケーションのソース・コードに基づいて、モノリシック・アプリケーションを特徴付けるコード特性グラフを生成すること、モノリシック・アプリケーションの時間的コード進展に基づいてコード特性グラフを増強すること、コード特性グラフに基づいて、モノリシック・アプリケーションのソース・コードの中の素なコード・クラスタを検出すること、モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて素なコード・クラスタの機能目的を識別することなど)を実行する専門コンピュータ(例えばコード特性グラフ生成器、コミュニティ検出器、トピック・モデリング器など)によって、実行されるプロセスの一部を実行することができる。さまざまな例において、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨の分野に対する技術的改良を提供することができ、当該分野で生じる課題を解決することができる実際的アプリケーションにグラフ生成、コミュニティ検出およびトピック・モデリング技術を実装するために、本発明の実施形態を使用することができる。技術文書ソースとビジネス文書ソースの両方を利用すること、およびデータ依存関係と経時的なコード変更の両方を考慮することによって、本発明の実施形態は、既存のマイクロサービス分解システムよりも改良された分解推奨/戦略を、モノリシック・アプリケーションのユーザ/オペレータに提供することができる。したがって、このような実施形態は、先行技術の具体的で有形の技術的改良を構成する。
図1は、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なシステム100のブロック図を示している。示されているとおり、マイクロサービス分解戦略システム102は、モノリシック・アプリケーション104を分析することができ、結果として、モノリシック・アプリケーション104をどのようにマイクロサービスに分解すべきかに関する推奨を出力することができる。より詳細には、さまざまな実施形態において、マイクロサービス分解戦略システム102は、モノリシック・アプリケーション104のソース・コードの中の1つまたは複数の素なコード・クラスタを(例えば、モノリシック・アプリケーション104を特徴付けるコード特性グラフを分析することによって)検出することができ、それらの1つまたは複数の素なコード・クラスタにそれぞれ対応する1つまたは複数の機能目的(例えば、それらの1つまたは複数の素なコード・クラスタによって容易にされる1つもしくは複数のタスク、機能、能力もしくは動作またはこれらの組合せ)を識別することができ、それらの1つまたは複数の機能目的に基づいて、それらの1つまたは複数の素なコード・クラスタをそれぞれ置き換えるための1つまたは複数のマイクロサービスを推奨することができる(例えば、特定のタスク、機能、能力もしくは動作またはこれらの組合せを容易にする素なコード・クラスタを、実質的に同じタスク、機能、能力もしくは動作またはこれらの組合せを容易にするマイクロサービスに置き換えることができる)。
さまざまな実施形態において、モノリシック・アプリケーション104は、モノリシック・アーキテクチャを示す適当な任意のコンピュータ・ソフトウェア・プログラムとすることができ、そのコンピュータ・ソフトウェア・プログラムが、レガシー・アプリケーションとみなされるか否かは問わない。
さまざまな実施形態において、モノリシック・アプリケーション104は、技術文書コーパス106およびビジネス文書コーパス108に対応する、もしくは技術文書コーパス106およびビジネス文書コーパス108に関連付けられる、またはその両方とすることができる。図は、技術文書コーパス106およびビジネス文書コーパス108を、モノリシック・アプリケーション104の内部に格納されているものとして示しているが、それは単に例であり、限定するものではなく、図示を容易にするためであることを認識すべきである。さまざまな実施形態において、技術文書コーパス106もしくはビジネス文書コーパス108またはその両方は、希望に応じて、モノリシック・アプリケーション104の外部もしくは内部またはその両方に、適宜、中央にもしくは分散させて、またはその両方で、別々にもしくは一緒に、またはその両方で、格納されることができる。
さまざまな実施形態において、技術文書コーパス106は、モノリシック・アプリケーション104に関する技術情報および/もしくはコーディング情報を表す文書の集合体、ならびに/またはモノリシック・アプリケーション104に関する技術情報および/もしくはコーディング情報を含む文書の集合体であることができる。例えば、1つまたは複数の実施形態では、技術文書コーパス106が、モノリシック・アプリケーション104に対応するソース・ファイルもしくはソース・コード・ファイルまたはその両方、モノリシック・アプリケーション104に対応するバイナリ・ファイルもしくはバイナリ・コード・ファイルまたはその両方、モノリシック・アプリケーション104の実行インスタンスの統計量、モノリシック・アプリケーション104に対応する展開スクリプト、モノリシック・アプリケーション104に対応するコード・リポジトリに格納された情報、モノリシック・アプリケーション104の時間的コード進展(例えばソース・コードに対する経時的な変更)などを含むことができる。
さまざまな実施形態において、ビジネス文書コーパス108は、モノリシック・アプリケーション104に関するビジネス情報、訓練情報、トラブルシューティング情報、説明/解説情報および/もしくは非技術的情報などを表す文書(例えば自然言語文書など)の集合体、ならびに/またはモノリシック・アプリケーション104に関するビジネス情報、訓練情報、トラブルシューティング情報、説明/解説情報および/もしくは非技術的情報などを含む文書(例えば自然言語文書など)の集合体であることができる。例えば、1つまたは複数の実施形態では、ビジネス文書コーパス108が、モノリシック・アプリケーション104に対応する設計文書、モノリシック・アプリケーション104に対応するユーザ・ガイドもしくはユーザ・マニュアルまたはその両方、モノリシック・アプリケーション104に対応する訓練/トラブルシューティング・ガイドもしくは訓練/トラブルシューティング・マニュアルまたはその両方、モノリシック・アプリケーション104に対応するREADMEファイルもしくはページまたはその両方、モノリシック・アプリケーション104に対応するGitHubファイルもしくはページまたはその両方、モノリシック・アプリケーション104に対応するWikiファイルもしくはページまたはその両方などを含むことができる。
さまざまな実施形態において、マイクロサービス分解戦略システム102は、プロセッサ110(例えばコンピュータ処理ユニット、マイクロプロセッサなど)、およびプロセッサ110に動作可能に接続されたコンピュータ可読メモリ112を含むことができる。メモリ112は、プロセッサ110によって実行されたときにプロセッサ110もしくはマイクロサービス分解システム102の他の構成要素またはその両方(例えばグラフ構成要素114、コミュニティ検出構成要素116、トピック・モデリング構成要素118、マイクロサービス構成要素120など)に1つまたは複数の動作を実行させることができる、コンピュータ実行可能命令を格納することができる。さまざまな実施形態において、メモリ112は、コンピュータ実行可能構成要素(例えばグラフ構成要素114、コミュニティ検出構成要素116、トピック・モデリング構成要素118、マイクロサービス構成要素120など)を格納することができ、プロセッサ110は、それらのコンピュータ実行可能構成要素を実行することができる。
さまざまな実施形態において、マイクロサービス分解システム102はグラフ構成要素114を含むことができる。さまざまな実施形態において、グラフ構成要素114は、技術文書コーパス106を分析する(例えば、モノリシック・アプリケーション104のソース・コードもしくはスクリプトまたはその両方などを分析する)ことができ、それに従って、技術文書コーパス106に基づいて(例えばモノリシック・アプリケーション104のソース・コードもしくはスクリプトまたはその両方に基づいて)、モノリシック・アプリケーション104を特徴付けるコード特性グラフを生成することができる。さまざまな例において、グラフ構成要素114は、モノリシック・アプリケーション104の構造もしくは情報フローまたはその両方の異なる態様をそれぞれが要約した、抽象構文木、制御フロー・グラフおよびプログラム依存グラフを、モノリシック・アプリケーション104のソース・コードから生成することができる。さまざまなケースにおいて、グラフ構成要素114は、それらの抽象構文木、制御フロー・グラフおよびプログラム依存グラフを結合して単一の結合データ構造体(例えばコード特性グラフ)にすることができる。さまざまな実施形態において、コード特性グラフは、モノリシック・アプリケーション104の構造、制御フローおよびデータ依存関係を同時に示すマルチグラフであることができる。さまざまな例において、グラフ構成要素114はさらに、モノリシック・アプリケーション104の時間的コード進展に基づいて(例えば、モノリシック・アプリケーション104のソース・コードのどの部分が時間的に一致した変更を受けたのかを詳細に示す、コード・リポジトリからの経時記録に基づいて)、コード特性グラフを増強もしくは修正すること、または増強および修正することができる。さまざまなケースにおいて、モノリシック・アプリケーション104のソース・コードのどの部分をマイクロサービスに置き換えることができるのか、もしくはモノリシック・アプリケーション104のソース・コードのどの部分をマイクロサービスに置き換えるべきか、またはその両方を判定するために、増強/修正されたコード特性グラフ(例えば、増強/修正されたコード特性グラフの中のノードおよびエッジ)を分析することができる。
さまざまな実施形態において、マイクロサービス分解戦略システム102はコミュニティ検出構成要素116を含むことができる。さまざまな実施形態において、コミュニティ検出構成要素116は、増強/修正されたコード特性グラフを分析することができ、モノリシック・アプリケーション104のソース・コードの中の1つまたは複数の素なコード・クラスタを検出もしくは識別すること、または検出および識別することができる。より詳細には、コミュニティ検出構成要素116は、増強/修正されたコード特性グラフの中の1つまたは複数の素なノード・クラスタ(例えば、十分に高い凝集度もしくは他のノード・クラスタとの十分に低い結合度、またはその両方をエッジ密度によって示す、コード特性グラフの中のノード・クラスタ)を検出するために、グラフ理論技術を利用することができる。コード特性グラフのノードおよびエッジは、モノリシック・アプリケーション104のソース・コードの中のコードの実際の部分および/もしくは行に対応し、ならびに/またはモノリシック・アプリケーション104のソース・コードの中のコードの実際の部分および/もしくは行を表し得るため、コード特性グラフの中の素なノード・クラスタの検出は、ソース・コード自体の中の素なコード・クラスタの検出に対応し得る。さまざまなケースにおいて、コミュニティ検出構成要素116は、適当な任意の数学的技術もしくは統計学的技術またはその両方の技術(例えばルーヴェン(Louvain)アルゴリズム、ラベル伝播(label propagation)アルゴリズム、連結成分(connected components)アルゴリズム、強連結成分(strongly connected components)アルゴリズム、トライアングル・カウンティング(triangle counting)アルゴリズム、クラスタ化係数(clustering coefficient)アルゴリズム、バランスト・トライアド(balanced triad)アルゴリズムなど)によって、素なコード・クラスタのそのような検出を容易にすることができる。
さまざまな実施形態において、マイクロサービス分解戦略システム102はトピック・モデリング構成要素118を含むことができる。さまざまな実施形態において、トピック・モデリング構成要素118は、ビジネス文書コーパス108を分析する(例えば、設計文書、ユーザ・ガイド/マニュアルもしくはGitHubファイルまたはこれらの組合せなどを分析する)ことができ、それに従って、モノリシック・アプリケーション104のソース・コードの中の検出された1つまたは複数の素なコード・クラスタにそれぞれ対応する1つまたは複数の機能目的を識別することができる。より詳細には、トピック・モデリング構成要素118は、コミュニティ検出構成要素116によって検出された素なコード・クラスタの各々によって実行されもしくは容易にされ、または実行され容易にされる、特定のタスク、機能、能力もしくは動作またはこれらの組合せを判定するために、ビジネス文書コーパス108に含まれる自然言語テキストを分析することができる。例えば、コミュニティ検出構成要素116が、モノリシック・アプリケーション104のソース・コードの中の3つの素なコード・クラスタA、BおよびCを検出した場合、トピック・モデリング構成要素118は、3つの素なコード・クラスタA、BおよびCの各々が何を実行するのかを判定するために、ビジネス文書コーパス108を分析することができる。非限定的な例では、トピック・モデリング構成要素118が、モノリシック・アプリケーション104に対応するユーザ・マニュアル、READMEファイルなどの分析に基づいて、素なコード・クラスタAがユーザ認証機能を容易にし、素なコード・クラスタBがフォールト・トレランス、妥当性確認もしくはフールプルーフィング機能またはこれらの組合せを容易にし、素なコード・クラスタCがセキュリティ・スクリーニング機能を容易にする、と判定もしくは推論、または判定かつ推論することができる。さまざまなケースにおいて、トピック・モデリング構成要素118は、適当な任意の数学的技術もしくは統計学的技術またはその両方(例えば潜在的ディリクレ配分アルゴリズム(latent Dirichlet allocation algorithm)など)によって、検出された素なコード・クラスタの機能目的のそのような識別、判定もしくは推論またはこれらの組合せを容易にすることができる。
さまざまな実施形態において、マイクロサービス分解戦略システム102はマイクロサービス構成要素120を含むことができる。さまざまな実施形態において、マイクロサービス構成要素120は、トピック・モデリング構成要素118によって識別された1つまたは複数の機能目的に基づいて、コミュニティ検出構成要素116によって検出された1つまたは複数の素なコード・クラスタを置き換えるための1つまたは複数のマイクロサービスを推奨することができる。さまざまなケースにおいて、特定のタスク、機能、能力もしくは動作またはこれらの組合せを実行しもしくは容易にし、または実行し容易にする素なコード・クラスタを、実質的に同じ特定のタスク、機能、能力もしくは動作またはこれらの組合せを実行しもしくは容易にし、または実行し容易にするマイクロサービスに置き換える(例えば分解する)ことができる。素なコード・クラスタAがユーザ認証機能を容易にするとトピック・モデリング構成要素118が判定する上記の例を続けると、マイクロサービス構成要素120は、素なコード・クラスタAを、ユーザ認証を容易にするマイクロサービスに置き換えることを推奨することができる。さらに、トピック・モデリング構成要素118は、素なコード・クラスタBがフォールト・トレランス、妥当性確認もしくはフールプルーフィング機能またはこれらの組合せを容易にすると判定するため、マイクロサービス構成要素120は、素なコード・クラスタBを、フールプルーフィングを容易にするマイクロサービスに置き換えることを推奨することができる。さらに、トピック・モデリング構成要素118は、素なコード・クラスタCがセキュリティ・スクリーニング機能を容易にすると判定するため、マイクロサービス構成要素120は、素なコード・クラスタCを、セキュリティ・スクリーニングを容易にするマイクロサービスに置き換えることを推奨することができる。さまざまな実施形態において、マイクロサービス構成要素120は、モノリシック・アプリケーション104のユーザ/オペレータに分解戦略を推奨することができるだけでなく、そのような分解戦略を実施することもできる。上記の例を続けると、さまざまな例において、マイクロサービス構成要素120は、モノリシック・アプリケーション104のソース・コードの中の素なコード・クラスタAを(例えば、素なコード・クラスタAを含むソース・コードの行を自動的に消去および/またはコメントアウトすることによって)作動不能にすることができ、ユーザ認証を容易にするマイクロサービスを注文、購入、賃借し、もしくは他のやり方で入手し、またはこれらの組合せを実行するために、マイクロサービスの提供者/販売者と自動的に通信することができる。さまざまな実施形態において、マイクロサービス構成要素120は、残りの素なコード・クラスタに関する同様の動作を実行することができる(例えば、素なコード・クラスタBおよびCを作動不能にすることができ、それに応じて、フールプルーフィングもしくはセキュリティ・スクリーニングまたはその両方を容易にするマイクロサービスを注文、購入、賃借し、もしくは他のやり方で入手し、またはこれらの組合せを実行するために、マイクロサービスの提供者/販売者と自動的に通信することができる)。
図1の高レベルの非限定的で例示的な概要として、モノリシック・アプリケーション104は、技術文書コーパス106(例えばソース・コード・ファイルなど)およびビジネス文書コーパス108(例えばユーザ・ガイド/マニュアル、READMEファイルなど)に関連付けられたコンピュータ・ソフトウェア・プログラムとすることができる。さまざまな例において、マイクロサービス分解戦略システム102は、入力として、技術文書コーパス106およびビジネス文書コーパス108を受け取ることができ、出力として、1つまたは複数のマイクロサービスを識別する推奨であって、それらの識別されたマイクロサービスに置き換えることができ、もしくはそれらの識別されたマイクロサービスに置き換えるべきであり、またはその両方である、モノリシック・アプリケーション104のソース・コードの特定の行もしくは部分またはその両方を識別する推奨、を生成することができる。マイクロサービス分解戦略システム102は、(i)モノリシック・アプリケーション104を記述する/特徴付けるコード特性グラフを生成し、(ii)コード特性グラフ上でコミュニティ検出を実行することよって、ソース・コードの中のマイクロサービス分解の候補(例えば素なコード・クラスタ)を検出し、(iii)検出されたそれらの候補によって実行されるタスク/動作(例えば機能目的)を識別し、(iv)識別されたそれらのタスク/動作を実行する/容易にするマイクロサービスを識別もしくは入手し、または識別かつ入手することによって、そのような推奨を容易にすることができる。より詳細には、マイクロサービス分解戦略システム102は、グラフ構成要素114によって、モノリシック・アプリケーション104の構造、制御フローおよびデータ依存関係を記述するコード特性グラフを生成することができる。上で説明したとおり、コード特性グラフは、技術文書コーパス106の自動化された分析に基づいて(例えばソース・コードに基づいて)生成することができる。このコード特性グラフに基づいて、マイクロサービス分解戦略システム102は、コミュニティ検出構成要素116によって、モノリシック・アプリケーション104のソース・コードの中の1つまたは複数の素なコード・クラスタを検出することができる。上で述べたとおり、コード特性グラフのノードおよびエッジは、モノリシック・アプリケーション104のソース・コードの中のコードの行および/もしくはコードの部分に対応し、ならびに/またはモノリシック・アプリケーション104のソース・コードの中のコードの行および/もしくはコードの部分を表し得る。したがって、コミュニティ検出構成要素116によってコード特性グラフの中のノードの素なクラスタを検出することは、ソース・コード自体の中のコードの素なクラスタを検出することに対応し得る。マイクロサービス分解戦略システム102は、トピック・モデリング構成要素118によって、モノリシック・アプリケーション104の1つまたは複数の素なコード・クラスタによって実行される1つまたは複数の機能目的を識別することができる。上で説明したとおり、この識別は、ビジネス文書コーパス108の自動化された分析に基づくことができる。最後に、マイクロサービス分解戦略システム102は、マイクロサービス構成要素120によって、1つまたは複数の機能目的に基づいて、1つまたは複数の素なコード・クラスタを置き換えるための1つまたは複数のマイクロサービスを推奨することができる(例えば、動作Xを実行する素なコード・クラスタを動作Xを実行するマイクロサービスに置き換えることができる)。
図2は、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法200の高レベル流れ図を示している。さまざまな実施形態において、コンピュータ実施方法200は、システム100によって実行することができる。
さまざまな実施形態において、動作202は、プロセッサに動作可能に結合されたデバイスによって(例えばグラフ構成要素114によって)、モノリシック・アプリケーション(例えばモノリシック・アプリケーション104)の技術データ(例えば技術文書コーパス106)を収集することを含むことができる。さまざまなケースにおいて、この技術データは、例えば、ソース・コード、バイナリ・コード、展開スクリプト、実行インスタンスに関する統計量、アプリケーションの異なる異型/構成などを含む。
さまざまな例において、動作204は、デバイスによって(例えばグラフ構成要素114によって)、技術データに基づいてコード特性グラフを生成することを含むことができる。
さまざまな実施形態において、動作206は、デバイスによって(例えばグラフ構成要素114によって)、モノリシック・アプリケーションの時間的コード進展に基づいて(例えば、ソース・コードに対する経時的な一致する変更に基づいて)、コード特性グラフを増強することを含むことができる。
さまざまな実施形態において、動作208は、デバイスによって(例えばコミュニティ検出構成要素116によって)、コード特性グラフ上でコミュニティ検出を実行して、モノリシック・アプリケーションのソース・コードの中の素なコード・クラスタを検出することを含むことができる。さまざまなケースにおいて、素なコード・クラスタを、マイクロサービス分解の候補(例えば潜在的にマイクロサービスに置き換えることができるソース・コードの部分)と考えることができる。
さまざまな例において、動作210は、デバイスによって(例えばトピック・モデリング構成要素118によって)、モノリシック・アプリケーションのビジネス・データ(例えばビジネス文書コーパス108)を収集することを含むことができる。さまざまなケースにおいて、ビジネス・データは、例えば、設計文書、ユーザ・ガイド、コード・アノテーション、READMEファイル、Wikiファイル、GitHubファイルなどを含むことができる。
さまざまな実施形態において、動作212は、デバイスによって(例えばトピック・モデリング構成要素118によって)、ビジネス・データに基づいてトピック・モデリングを実行して、素なコード・クラスタの機能目的(例えば、素なコード・クラスタによって実行されるタスク、機能、能力もしくは動作またはこれらの組合せ)を識別することを含むことができる。
さまざまな実施形態において、動作214は、デバイスによって(例えばマイクロサービス構成要素120によって)、機能目的に基づいて、素なコード・クラスタを置き換えることができるマイクロサービスを推奨することを含むことができる(例えば、タスクYを容易にする素なコード・クラスタをタスクYを容易にするマイクロサービスによって置き換えることができる)。
図3は、コード特性グラフを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なシステム300のブロック図を示している。示されているとおり、システム300は、さまざまな実施形態において、システム100と同じ構成要素を含むことができ、コード特性グラフ306をさらに含むことができる。
示されているとおり、さまざまな実施形態において、技術文書コーパス106は、ソース・コード302もしくは時間的コード進展304またはその両方を含むことができる。さまざまな例において、ソース・コード302は、人間が読める適当な任意のプログラミング言語(例えばC、C++、Pythonなど)で書かれた、モノリシック・アプリケーション104によって実行されるコンピュータ化された動作/機能を指定する、コメント付きのコンピュータ・コードもしくはコメントなしのコンピュータ・コードまたはその両方の、適当な任意の集合体とすることができる。さまざまな実施形態において、ソース・コード302は、モノリシック・アプリケーション104を定義する(例えばforループ、ifループ、whileループ、関数定義、変数定義もしくは変数初期化またはその両方、計算などを含む)プログラミング・スクリプトとすることができる。
さまざまな実施形態において、グラフ構成要素114は、当技術分野で知られている適当な任意の技術によってソース・コード302を受け取ることもしくは分析すること、または受け取りかつ分析することができ、それに従って、当技術分野で知られている適当な任意の技術によって、ソース・コード302に基づいてコード特性グラフ306を生成することができる。さまざまな実施形態において、コード特性グラフ306は、モノリシック・アプリケーション104のソース・コード302にそれぞれが対応し、もしくはモノリシック・アプリケーション104のソース・コード302をそれぞれが特徴付け、またはその両方である、抽象構文木308、制御フロー・グラフ310およびプログラム依存グラフ312の組合せとすることができる。さまざまな例において、抽象構文木308は、演算子(例えば加算、代入など)を表すインナー・ノードおよびオペランド(例えば定数、識別子など)を表すリーフ・ノードを有する順序木とすることができる。抽象構文木308は、ソース・コード302の中の文もしくは式またはその両方がどのように入れ子にされているのかをコード化もしくは表示すること、またはコード化かつ表示することができる。さまざまな例において、制御フロー・グラフ310は、コード文が実行され、ソース・コード302の中で計算条件が満たされる必要がある順序を明示的に記述もしくは表示すること、または記述かつ表示することができる。さまざまな実施形態において、制御フロー・グラフ310は、文もしくは述語またはその両方を表すノードを有することができ、制御の移動を示すためにそれらのノードをエッジによって連結することができる。さまざまな例において、プログラム依存グラフ312は、文および述語間の依存関係を明示的に表すことができ、指定された文の所与の変数の値に影響を及ぼすソース・コード302内の全ての文もしくは述語またはその両方を描写しもしくは示すこと、または描写しかつ示すことができる。さまざまな実施形態において、プログラム依存グラフ312は、データ依存関係を表すエッジおよび制御依存関係を表すエッジを有することができる。さまざまな実施形態において、グラフ構成要素114は、当技術分野で知られている適当な任意の技術を使用して、ソース・コード302に基づいて抽象構文木308を生成することができ、抽象構文木308に基づいて制御フロー・グラフ310を生成することができ、制御フロー・グラフ310に基づいてプログラム依存グラフ312を生成することができる。さまざまな実施形態において、グラフ構成要素114は、当技術分野で知られている適当な任意の技術によって、抽象構文木308、制御フロー・グラフ310およびプログラム依存グラフ312を結合して、単一の結合データ構造体(例えばコード特性グラフ306)にすることができる。
すなわち、さまざまな実施形態において、グラフ構成要素114は、入力として、ソース・コード302を受け取ることができ、出力として、ソース・コード302の構造、制御フローおよびデータ依存関係を同時に示すことができるコード特性グラフ306を生成することができる。さまざまな実施形態において、コード特性グラフ306は、ソース・コード302の中のコードの異なる行、部分もしくはセグメントまたはこれらの組合せを表すノードもしくはエッジまたはその両方を含むことができる。さまざまなケースにおいて、ソース・コード302の中の関心のコード行、部分もしくはセグメントまたはこれらの組合せを識別するために(例えばマイクロサービス分解の候補を検出するために)、コード特性グラフ306を(例えばグラフ理論技術によって)分析することができる。
上で説明したとおり、グラフ構成要素114は、さまざまな実施形態において、時間的コード進展304に基づいて、コード特性グラフ306のエッジ重みもしくは特性またはその両方を修正もしくは増強すること、または修正かつ増強することができる。さまざまな例において、時間的コード進展304は、ソース・コード302に対する過去の経時的な変更を記録し、格納し、もしくは他のやり方で示し、またはこれらの組合せを実行する、適当な任意の文書、タイムラインもしくは経時記録またはこれらの組合せとすることができる。例えば、ソース・コード302が、コード部分X(例えばソース・コード302の中のコードの行の第1のグルーピング)、コード部分Y(例えばソース・コード302の中のコードの行の第2のグルーピング)、およびコード部分Z(例えばソース・コード302の中のコードの行の第3のグルーピング)を含むとする。その場合には、時間的コード進展304が、ソース・コード302が過去に訂正/更新されたときに、コード部分Xとコード部分Yが同時に、実質的に同時に、もしくは同様の時刻に、またはこれらの組合せで履歴上、変更された(例えば同じ日に変更された)ことを示す文書であることがあり得る。この情報から、コード部分Xとコード部分Yは凝集度が高く、もしくは一緒に緊密に結合されており、またはその両方であると推論することができ、あるいは、少なくとも、コード部分Xとコード部分Yは、それらが概して異なる時刻に履歴上、変更された場合よりも互いに密接に関係していると推論することができる。そのため、後続のコミュニティ検出の間、さまざまなケースにおいて、コード部分Xとコード部分Yを、2つの別個の素なコード・クラスタとして取り扱うのではなく、単一の素なコード・クラスタとして取り扱うことが理にかない得る。同様に、時間的コード進展304が、ソース・コード302が過去に訂正/更新されたときに、コード部分Yとコード部分Zが実質的に異なる時刻に履歴上、変更された(例えば別の日に変更された)ことを示すことがあり得る。この情報から、コード部分Yとコード部分Zは凝集度があまり高くなく、もしくは一緒に緊密に結合されておらず、またはその両方であると推論することができ、あるいは、少なくとも、コード部分Yとコード部分Zは、それらが概して同時に履歴上、変更された場合ほどには密接に互いに関係していないと推論することができる。そのため、後続のコミュニティ検出の間、さまざまなケースにおいて、コード部分Yとコード部分Zを、同じ素なコード・クラスタにグループ分けするのではなく、別個の素なコード・クラスタにグループ分けすることが理にかない得る。さまざまな実施形態において、グラフ構成要素114は、そのような関係性を反映させるために、コード特性グラフ306のエッジ重みを増強することができる(例えば、そのより高い関係性を反映させるために、コード部分Xを表すノードとコード部分Yを表すノードとの間のエッジ重みを増大させることができ、そのより低い関係性を反映させるために、コード部分Yを表すノードとコード部分Zを表すノードとの間のエッジ重みを低減させることができる)。いくつかのケースでは、グラフ構成要素114が、コード特性グラフ306から全てのエッジを完全に追加すること、もしくは取り去ること、またはその両方を実行することができる。さまざまな例において、コード特性グラフ306のそのような増強もしくは修正またはその両方によって、後続のコミュニティ検出を改良もしくは強化すること、または改良かつ強化することができる(例えば、時間的コード進展304からの情報は、コミュニティ検出構成要素116によってソース・コード302が正確にもしくは適切にまたは正確かつ適切にクラスタ化されることを保証するのに役立ち得る)。さまざまな例において、時間的コード進展304は、モノリシック・アプリケーション104に対応する1つもしくは複数のコード・リポジトリに格納することができ、またはモノリシック・アプリケーション104に対応する1つもしくは複数のコード・リポジトリから取得することができ、あるいはこの両方を実施することができる。
図4は、コミュニティ検出アルゴリズムを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なシステム400のブロック図を示している。示されているとおり、システム400は、さまざまな実施形態において、システム300と同じ構成要素を含むことができ、コミュニティ検出アルゴリズム402をさらに含むことができる。
さまざまな実施形態において、コミュニティ検出アルゴリズム402は、コード特性グラフ306を分析することができ、それに従って、コード特性グラフ306の中のノードを連結しているエッジに基づいて、コード特性グラフ306の中のノードの素である性質(disjointment)もしくは連結性(connectedness)またはその両方を判定することができる、適当な任意の機械学習、ディープ・ラーニングもしくはパターン認識アルゴリズムまたはこれらの組合せとすることができる。コード特性グラフ306の中の異なるノードはソース・コード302の中のコードの異なる部分に対応し得るため、コード特性グラフ306の中のノードの素である性質もしくは連結性またはその両方を判定することは、ソース・コード302の中のコードのさまざまな部分の素である性質もしくは連結性またはその両方を判定することに対応し得る。言い換えると、コミュニティ検出構成要素116は、コミュニティ検出アルゴリズム402によってコード特性グラフ306を分析することができ、この分析は、コード特性グラフ306の中のノードのさまざまな素なコミュニティの検出もしくは識別またはその両方に帰着し得る。ノードの素なコミュニティは、ソース・コード302の中のコードの対応する素なコミュニティを表す。さまざまなケースにおいて、素なコード・クラスタ404を、ソース・コード302の中のコードの検出/識別されたコミュニティの1つと考えることができる。さまざまな例において、素なコード・クラスタ404(もしくは検出/識別されたコードの素なコミュニティ/クラスタのうちの他の任意の素なコミュニティ/クラスタまたはその両方)を、マイクロサービス分解の候補(例えば潜在的にマイクロサービスに置き換えることができるソース・コード302の部分)と考えることができる。
さまざまな実施形態において、コミュニティ検出アルゴリズム402は、下限度(lower bound degree)、コミュニティ・サイズなどのパラメータをとることができる。さまざまな実施形態において、検出/識別されたコミュニティを、潜在的に、カスタマイズされたパラメータを用いて、より細粒のコミュニティに分割することができる。さまざまな例において、コミュニティ検出アルゴリズム402は、グループ(例えば、ソース・コード302の中のコードの対応するグループを表すコード特性グラフ306の中のノードのグループ)がどのようにクラスタ化および/または分割されるのか、およびその強くなる傾向もしくは分解する傾向またはその両方、を評価することができる。さまざまな実施形態において、コミュニティ検出アルゴリズム402は、コミュニティ検出を容易にする適当な任意の数学的技術もしくは統計学的技術またはその両方(例えばルーヴェン・アルゴリズム、ラベル伝播アルゴリズム、連結成分アルゴリズム、強連結成分アルゴリズム、トライアングル・カウンティング・アルゴリズム、クラスタ化係数アルゴリズム、バランスト・トライアド・アルゴリズムなど)を含むことができる。
さまざまな実施形態において、他の機械学習技術もしくは人工知能技術またはその両方を実施することができる。本明細書に記載された本発明のさまざまな実施形態は、人工知能(AI)を使用して、本発明の1つまたは複数の特徴を自動化することを容易にすることができる。構成要素は、本明細書に開示されたさまざまな実施形態/例を実行するためのAIベースのさまざまなスキームを使用することができる。本発明の多数の決定(determination)(例えば判定、確認、推論、算定、予測、予知、推定、導出、予報、検出、計算など)を提供するため、またはそのような決定を助けるため、本発明の構成要素は、その構成要素がアクセスすることができるデータの全体またはサブセットを調べることができ、イベントもしくはデータまたはその両方を介して取り込まれた一組の観察から、システム、環境などの状態に関する推論を提供することができ、またはシステム、環境などの状態を判定することができる。決定を使用して特定の文脈もしくは動作を識別することができ、または決定は、例えば状態の確率分布を生成することができる。それらの決定は確率的、すなわちデータおよびイベントの検討に基づく関心の状態の確率分布の計算であり得る。決定が、一組のイベントもしくはデータまたはその両方からより高レベルのイベントを構成するために使用される技術を指すこともあり得る。
このような決定は、イベントが時間的に近接して相関しているか否かに関わらず、ならびにイベントおよびデータが、1つのイベントおよびデータ源からのものであるのかまたは複数のイベントおよびデータ源からのものであるのかに関わらず、観察された一組のイベントもしくは格納された一組のイベント・データまたはその両方から新たなイベントまたは動作を構築することに帰着し得る。本明細書に開示された構成要素は、請求された主題に関連した自動動作もしくは決定された動作またはその両方を実行することに関連した、(明示的に(例えば訓練データによって)訓練された、および暗黙のうちに(例えば振る舞い、好み、履歴情報を観察すること、外部からの情報を受け取ることなどによって)訓練された)さまざまな分類スキームもしくはシステムまたはその両方(例えば、サポート・ベクター・マシン、ニューラル・ネットワーク、エキスパート・システム、ベイジアン信念ネットワーク、ファジー論理、データ融合エンジンなど)を使用することができる。したがって、分類スキームもしくはシステムまたその両方を使用して、いくつかの機能、動作もしくは決定またはその組合せを自動的に学習および実行することができる。
分類器は、入力属性ベクトルz=(z1,z2,z3,z4,zn)を、この入力がクラスに属する信頼度に、f(z)=信頼度(クラス)によってマップすることができる。そのような分類は、(例えば分析ユーティリティおよびコストの考慮に入れる)確率論ベースの分析もしくは統計学ベースの分析またはその両方を使用して、自動的に実行される動作を決定することができる。サポート・ベクター・マシン(SVM)は、使用することができる分類器の例であることができる。SVMは、可能な入力の空間中で超曲面(hyper-surface)を見つけることによって動作する。ここで、超曲面は、非トリガリング・イベントからトリガリング判定基準を分離することを試みる。直観的に、このことは、この分類を、訓練データに近いが全く同じではないデータを試験するのに適切なものにする。他の有向および無向モデル分類アプローチは例えば、独立の異なるパターンを提供するナイーブ・ベイズ、ベイジアン・ネットワーク、決定木、ニューラル・ネットワーク、ファジー論理モデルもしくは確率論的分類モデル、またはこれらの組合せを含み、これらのうちのいずれかを使用することができる。本明細書で使用される分類はさらに、優先のモデルを開発するために利用される統計学的回帰を含む。
図5は、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコード特性グラフの中の例示的で非限定的な素なコード・クラスタのブロック図を示している。
図5は、コード特性グラフ306の例示的な視覚的表現を示している。示されているとおり、コード特性グラフ306は、多数のノード(例えば図5の小円)およびノードを連結する多数のエッジ(例えば図5の小円を連結する直線もしくは曲線またはその両方)を含み得る。上で説明したとおり、コミュニティ検出アルゴリズム402は、コード特性グラフ306の中のノードの素なクラスタを検出もしくは識別し、または検出かつ識別することができ、それらの素なクラスタはそれぞれ、ソース・コード302の中のコードの素なクラスタに対応し得る。ノードの素なクラスタは、(例えばエッジ密度によって評価された)十分に高い内部凝集度および十分に低い外部結合度を示すノードのコミュニティであることができる。示されているとおり、図5は、ノードの少なくとも2つの素なクラスタ、すなわちノード・グルーピング502およびノード・グルーピング504を示している。グルーピング502は、高い内部凝集度(例えば、グルーピング502の中の全てのノードは、互いに直接にもしくは間接的にまたは直接および間接的に連結されている)、および低い外部結合度(例えば、グルーピング502の中のノードは、グルーピング502の外側のノードに直接にもしくは間接的にまたは直接および間接的にあまり連結されていない)を示すノードのコミュニティである。同様の理由で、グルーピング504の中のノードも、ノードの素なクラスタであると考えることができる。上で述べたとおり、ノードのこれらの素なクラスタは、ソース・コード302の中の素なコード・クラスタに対応し、もしくはソース・コード302の中の素なコード・クラスタを表し、またはその両方であり得る(例えば、コード特性グラフ306の中のグルーピング502は、ソース・コード302の中の素なコード・クラスタ404を表し得る)。対照的に、いくつかのケースでは、ノードのグルーピング506をノードの素なクラスタと考えることはできない(そのため、グルーピング506に対応するソース・コード302の中のコードのグルーピングは、おそらく、素なコード・クラスタもしくはマイクロサービス分解の候補またはその両方とは考えられないであろう)。これは、グルーピング506の中のノードは、高い内部凝集度を示している(例えば、それらのノードは互いに直接にもしくは間接的にまたはその両方でかなり連結されている)が、高い外部結合度も示している(例えば、それらのノードはグルーピング506の外側のノードにかなり連結されている)ためである。
凝集度しきい値もしくは結合度しきい値またはその両方は、ユーザ/オペレータによって希望通りに設定することができることが理解されよう。したがって、さまざまな実施形態において、ノードの1つのグルーピングが、そのグルーピングの中のいくつかのノードがグルーピングの外部のノードとの連結を有するにも関わらず、十分に低い結合度を示すと判定されることがあり得る(例えば、いくつかのケースでは、最大結合度を定義するしきい値が十分に高い場合に、グルーピング506をノードの素なクラスタと考えることができ、したがって、グルーピング506は、対応する素なコード・クラスタを表し得る)。
図6は、トピック・モデリング・アルゴリズムを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なシステム600のブロック図を示している。示されているとおり、システム600は、さまざまな実施形態において、システム400と同じ構成要素を含むことができ、トピック・モデリング・アルゴリズム610をさらに含むことができる。
示されているとおり、ビジネス文書コーパス108は、さまざまな例において、モノリシック・アプリケーション104に関する情報を含む設計文書602、ユーザ・ガイド604、コード・アノテーション606、READMEファイル608、ならびに/または他の適当な任意の文書および/もしくはファイル(例えばWikiファイル、GitHubファイル、訓練/トラブルシューティング・マニュアルなど)を含むことができる。さまざまな実施形態において、トピック・モデリング・アルゴリズム610は、ビジネス文書コーパス108を分析することができ、それに従って素なコード・クラスタ404に対応する機能目的612を識別することができる、適当な任意の機械学習、ディープ・ラーニングもしくはパターン認識アルゴリズムまたはこれらの組合せとすることができる。さまざまなケースにおいて、機能目的612を、ソース・コード302の中の素なコード・クラスタ404によって実行されもしくは容易にされ、または実行されかつ容易にされる、主要なタスク、機能、能力もしくは動作またはこれらの組合せと考えることができる。例えば、機能目的612がユーザ認証であることがあり得、これは、素なコード・クラスタ404が、モノリシック・アプリケーション104のユーザを認証する、ソース・コード302のセクションであることを意味する。別の例として、機能目的612がオブジェクト検出であることがあり得、これは、素なコード・クラスタ404が、モノリシック・アプリケーション104のためにオブジェクト検出を実行する、ソース・コード302のセクションであることを意味する。さまざまな実施形態において、トピック・モデリング・アルゴリズム610は、機能トピック/目的を判定するための当技術分野で知られている適当な任意の数学的技術もしくは統計学的技術またはその両方(例えば潜在的ディリクレ配分アルゴリズム(LDA)など)を含むことができる。
LDAは、文書コーパスの生成的確率モデルであり、そこでは、文書が、潜在的トピック(例えばビジネス機能)にわたるランダム混合体として表され、それぞれのトピックは、データにわたる分布によって特徴付けられる。LDAが実施される場合には、以下によって特徴抽出を実行することができる。ストップ・ワードの除去およびトークン化の後にそれぞれの属性を連結することによって、それぞれのデータ単位を文書として表すことができ、履歴構造体を使用してLDAモデルを訓練することができ、コード特性グラフ306およびビジネス文書コーパス108からの推論特徴ベクトルを使用して、素なコード・クラスタ404のビジネス機能を見つけ出すことができる。高レベルの非限定的な概要として、LDAは、コード特性グラフ306の中で識別されたコミュニティ/クラスタによって実行されるビジネス機能を判定もしくは推論するためまたは判定かつ推論するために、コード特性グラフ306およびビジネス文書コーパス108から特徴を抽出するためのアルゴリズムである。さまざまな例において、発見された機能目的(例えばトピック)とビジネス記述との間の類似性測度(例えば見つけられたトピックとクラスとの間の類似性)を確立することができる。
図7は、推奨されたマイクロサービスを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なシステム700のブロック図を示している。示されているとおり、システム700は、さまざまな実施形態において、システム600と同じ構成要素を含むことができ、推奨されたマイクロサービス702をさらに含むことができる。
図7に示し、上で説明したとおり、トピック・モデリング構成要素118は、コミュニティ検出構成要素116によって検出された素なコード・クラスタ404の機能目的612を識別した後、マイクロサービス構成要素120は、機能目的612を実行することもしくは容易にすることができ、または機能目的612を実行しかつ容易にすることができる特定のマイクロサービスを、(例えば使用可能なマイクロサービスのデータベース、ディレクトリもしくはリストまたはこれらの組合せの中から)識別することができる。さまざまな例において、マイクロサービス構成要素120は、素なコード・クラスタ404を置き換えるための識別されたマイクロサービス(例えば推奨されたマイクロサービス702)を(例えばユーザ/オペレータとの電子通信によって)推奨することができる。言い換えると、推奨されたマイクロサービス702は、素なコード・クラスタ404と同じタスク、機能、能力もしくは動作またはこれらの組合せを実行することができるため、素なコード・クラスタ404を、成功のうちに、推奨されたマイクロサービス702に置き換えることができる。さまざまなケースにおいて、マイクロサービス構成要素120を、モノリシック・アプリケーション104を分解するための推奨された戦略をユーザ/オペレータに提供する(例えば、素なコード・クラスタ404を、推奨されたマイクロサービス702に置き換える/置換することを提案する)ものと考えることができる。さまざまな実施形態において、マイクロサービス構成要素120は、素なコード・クラスタ404を(例えばソース・コード302中での消去もしくはコメントアウトまたはその両方により)作動不能にすること、および推奨されたマイクロサービス702をスケジューリング、注文、購入、賃借し、もしくは他のやり方で入手し(例えばマイクロサービス販売者から)、またはこれらの組合せを実行することなどによって、推奨された分解戦略を実際に実施することができる。さまざまなケースにおいて、マイクロサービス構成要素120は、素なコード・クラスタ404を、推奨されたマイクロサービス702に置き換えることができる。
図8は、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするための例示的なワークフロー処理を示す高レベル・ブロック図を示している。
示されているとおり、図8は、本発明のさまざまな実施形態の高レベル概要を示している。全般的な目標は、モノリシック・アプリケーション104の少なくとも一部分をマイクロサービスに分解することであり得る。そうするために、技術文書コーパス106(例えばソース・コード302、時間的コード進展304など)を利用して、モノリシック・アプリケーション104に固有の構造、制御フローおよびデータ依存関係を説明する/示すことができるコード特性グラフ306を生成することができる。コード特性グラフ306を利用して、素なコード・クラスタ404を識別/検出することができ、識別/検出された素なコード・クラスタ404を、マイクロサービス分解の候補(例えば潜在的にマイクロサービスに置き換えることができるソース・コード302の部分)と考えることができる。ビジネス文書コーパス108を利用して、素なコード・クラスタ404に対応する機能目的612(例えば素なコード・クラスタ404によって実行される動作/機能)を識別することができる。さまざまなケースにおいて、素なコード・クラスタ404を置き換えるために、機能目的612を実行する/容易にすることができるマイクロサービスを推奨することができる(例えば、推奨されたマイクロサービス702は、素なコード・クラスタ404と同じジョブを実行し、したがって素なコード・クラスタ404を置き換えることができる)。
このようにすると、大きくて扱いにくいモノリシック・コンピュータ・プログラム(例えばモノリシック・アプリケーション104)を分解するための推奨/戦略を迅速かつ効率的に生成することができる。上で述べたとおり、マイクロサービス分解を容易にする既存のシステム/技術は、単純に、コード特性グラフを利用せず(例えば、その代わりにコール・グラフだけを使用し)、時間的コード進展を利用してコードのさまざまなクラスタの関係性を知らせることをせず、ビジネス文書のトピック・モデリングを利用して、識別されたコード・クラスタの機能目的/トピックを識別もしくは推論し、または識別かつ推論することをしない。
図9は、フィードバック構成要素を含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なシステム900のブロック図を示している。示されているとおり、システム900は、さまざまな実施形態において、システム700と同じ構成要素を含むことができ、フィードバック構成要素902をさらに含むことができる。
さまざまな実施形態において、フィードバック構成要素902は、ユーザ/オペレータ(例えばその分野の専門家(subject matter expert)、コード開発者など)が、マイクロサービス分解戦略システム102によって出力された推奨の有効性に関して採点すること、評価すること、格付けすること、もしくは他のやり方でマイクロサービス分解戦略システム102によって出力された推奨の有効性に関するフィードバックを提供すること、またはこれらの組合せを実行することを可能にする、適当な任意のヒューマン-コンピュータ・インタフェースとすることができる。さまざまなケースにおいて、マイクロサービス分解戦略システム102が、どれくらい巧く、またはどれくらい拙くソース・コード302をクラスタ化し、もしくは機能目的612を識別/推論し、またはこの両方を実行したのかを、このフィードバックを使用して定量化することができる。さまざまな例において、フィードバック構成要素902は、コミュニティ検出アルゴリズム402のパラメータ(例えば重み、バイアス、活性化関数など)もしくはトピック・モデリング・アルゴリズム610のパラメータ、またはその両方を修正することができる。このようにすると、コミュニティ検出構成要素116もしくはトピック・モデリング構成要素118またはその両方は、ユーザ/オペレータからのリアルタイム・フィードバックもしくはリアルタイムに近いフィードバックまたはその両方から学習することができる。これを、人間知識の取り込み(例えば、フィードバックを学習して、マイクロサービス分解戦略システム102によって生成される推奨の正確さもしくは有用性またはその両方を向上させることができる、クラスタ化のリアルタイム洞察、トピック・モデリングのリアルタイム洞察もしくは分解の他のリアルタイム洞察、またはこれらの組合せをこの分野の専門家から取り込むこと)を可能にする能動学習法と考えることができる。言い換えると、フィードバック構成要素902は、マイクロサービス分解戦略システム102の教師あり学習/訓練の一形態を容易にすることができる。
図10は、依存関係パターン格納構成要素を含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なシステム1000のブロック図を示している。示されているとおり、システム1000は、さまざまな実施形態において、システム900と同じ構成要素を含むことができ、依存関係パターン格納構成要素1002をさらに含むことができる。
さまざまな実施形態において、コミュニティ検出構成要素116およびトピック・モデリング構成要素118が、他のモノリシック・アプリケーションのコード特性グラフから学習された依存関係パターンから学習することができるように(例えば、コミュニティ検出構成要素116およびトピック・モデリング構成要素118が、他のモノリシック・アプリケーションのコード特性グラフから学習された依存関係パターンを利用して、素なコード・クラスタ404もしくは機能目的612またはその両方をより迅速にもしくはより正確にまたはより迅速かつより正確に識別することができるように)、依存関係パターン格納構成要素1002は、他のモノリシック・アプリケーションのコード特性グラフから学習された依存関係パターンを格納することができる。さまざまなケースにおいて、それらの依存関係パターンを依存関係パターン格納構成要素1002に取り込むことができ、続いて、それらの依存関係パターンを使用して、正しいコミュニティもしくは正しい機能目的/トピックまたはその両方を識別するための再現可能なパターンを収集することができる。すなわち、マイクロサービス分解戦略システム102が、フィードバックを受け取り、それに従って所与の入力コード特性グラフ(もしくは入力コード特性グラフの部分またはその両方)に対する適正なコミュニティ検出およびトピック・モデリング結果を学習するときに、その入力-結果対から依存関係パターンを抽出し、依存関係パターン格納構成要素1002に格納することができる。次いで、マイクロサービス分解戦略システム102は、将来のアプリケーションをクラスタ化もしくはトピック-モデリングし、またはクラスタ化かつトピック-モデリングするときに、格納されたそのような依存関係パターンを利用することができる。いくつかのケースでは、これによって、システムの性能を高めることもしくは改良することができ、またはその両方を達成することができる。現在のコード特性グラフと依存関係パターンとの間(または例えば現在のコード特性グラフの中の現在のコミュニティと依存関係パターンとの間)の一致レベルが十分に高い場合(例えばユーザ/オペレータによって希望通りに定義されたしきい値)、マイクロサービス分解戦略システム102は、コミュニティ検出もしくはトピック・モデリング、またはその両方を最初から実行することに時間およびリソースを費やす代わりに、単純に、依存関係パターン格納構成要素1002の中に格納された結果を出力することができる。さまざまな実施形態において、この一致レベルを、格納された依存関係パターンが示すエッジ密度と比較した、現在のコード特性グラフまたはコード特性グラフの中のコミュニティの現在のエッジ密度に基づく確率値もしくは類似度値またはその両方として表現することができる。さまざまな実施形態において、現在の依存関係パターンと格納された依存関係パターンとを比較するために、適当な任意の数学的技術もしくは統計学的技術またはその両方を使用することができる。
さまざまな実施形態において、依存関係パターンの学習/取り込みを容易にするために、適当な任意の幅優先探索(breadth-first-search)アルゴリズムもしくは深さ優先探索(depth-first-search)アルゴリズムまたはその両方を使用して、あるルート・ノード(例えばコードの中のREST APIが始まるノード)から始めて、グラフ(例えばコード特性グラフ)の中の全てのノードを調べることができる。さまざまな実施形態において、コード特性グラフの中のカテゴリ・ベースのグループ(例えば依存関係パターン)を見つけるための当技術分野で知られている適当な任意のアルゴリズムを実施することができる。さまざまな実施形態において、グラフの中のカテゴリ・グループを識別するために損失低減ベースの予測法によってマルチラベル・サポート・ベクター・マシンを訓練する適当な任意のアルゴリズム(もしくは他の適当な任意の分類器またはその両方)によって、依存関係パターンの学習を容易にすることができる。
図11は、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法1100の流れ図を示している。
さまざまな実施形態において、動作1102は、プロセッサに動作可能に結合されたデバイス(例えば116)によって、モノリシック・アプリケーション(例えば104)の中の素なコード・クラスタ(例えば404)を、モノリシック・アプリケーションを特徴付けるコード特性グラフ(例えば306)に基づいて検出することを含むことができ、コード特性グラフは、モノリシック・アプリケーションの時間的コード進展(例えば304)に基づく。
さまざまな実施形態において、動作1104は、デバイス(例えば118)によって、モノリシック・アプリケーションに対応するビジネス文書コーパス(例えば108)に基づいて素なコード・クラスタの機能目的(例えば612)を識別することを含むことができる。
さまざまな例において、動作1106は、デバイス(例えば120)によって、機能目的に基づいて、素なコード・クラスタを置き換えるためのマイクロサービス(例えば702)を推奨することを含むことができる。
図12は、コード特性グラフを増強することを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法1200の流れ図を示している。示されているとおり、コンピュータ実施方法1200は、さまざまな例において、コンピュータ実施方法1100と同じ動作を含むことができ、動作1202および1204をさらに含むことができる。
さまざまな実施形態において、動作1202は、デバイス(例えば114)によって、モノリシック・アプリケーションのソース・コード(例えば302)に基づいてコード特性グラフを生成することを含むことができ、コード特性グラフは、モノリシック・アプリケーションを特徴付ける、抽象構文木(例えば308)、制御フロー・グラフ(例えば310)およびプログラム依存グラフ(例えば312)の組合せを含む。
さまざまな例において、動作1204は、デバイス(例えば114)によって、時間的コード進展に基づいてコード特性グラフのエッジ重みを増強することを含むことができ、時間的コード進展は、モノリシック・アプリケーションのソース・コードに対する経時的な変更を含む。
図13は、ユーザ・フィードバックを受け取ることを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法1300の流れ図を示している。示されているとおり、コンピュータ実施方法1300は、さまざまな例において、コンピュータ実施方法1100と同じ動作を含むことができ、動作1302および1304をさらに含むことができる。
さまざまな実施形態において、動作1302は、デバイス(例えば902)によって、推奨されたマイクロサービスおよび素なコード・クラスタに関連したユーザ・フィードバックを収集することを含むことができる。
さまざまな実施形態において、動作1304は、デバイス(例えば902)によって、収集されたユーザ・フィードバックに基づいて、素なコード・クラスタを検出することを容易にするアルゴリズム(例えば402)のパラメータまたは機能目的を識別することを容易にするアルゴリズム(例えば610)のパラメータを修正することを含むことができる。
図14は、依存関係パターンを格納することを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法1400の流れ図を示している。示されているとおり、コンピュータ実施方法1400は、さまざまな例において、コンピュータ実施方法1100と同じ動作を含むことができ、動作1402をさらに含むことができる。
さまざまな実施形態において、動作1402は、デバイス(例えば1002)によって、他のモノリシック・アプリケーションのコード特性グラフから学習された依存関係パターンを格納することを含むことができ、依存関係パターンは、素なコード・クラスタを検出することおよび機能目的を識別することを容易にする。
図15は、素なコード・クラスタを置き換えることを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法1500の流れ図を示している。示されているとおり、コンピュータ実施方法1500は、さまざまな例において、コンピュータ実施方法1100と同じ動作を含むことができ、動作1502をさらに含むことができる。
さまざまな実施形態において、動作1502は、デバイス(例えば120)によって、素なコード・クラスタを、推奨されたマイクロサービスに置き換えることを含むことができる。
図16は、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法1600の流れ図を示している。
さまざまな実施形態において、動作1602は、プロセッサに通信可能に結合されたデバイス(例えば116)によって、モノリシック・アプリケーション(例えば104)の中のマイクロサービス分解の候補(例えば404)を、モノリシック・アプリケーションに対応するコード特性グラフ(例えば306)に基づいて識別することを含むことができる。
さまざまな実施形態において、動作1604は、デバイス(例えば118)によって、モノリシック・アプリケーションに対応するビジネス文書(例えば108)に基づいて、識別された候補によってそれぞれ実行される機能(例えば612)を識別することができる。
図17は、コード特性グラフを修正することを含む、本明細書に記載された1つまたは複数の実施形態による、モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にすることができる例示的で非限定的なコンピュータ実施方法1700の流れ図を示している。示されているとおり、コンピュータ実施方法1700は、さまざまな例において、コンピュータ実施方法1600と同じ動作を含むことができ、動作1702および1704をさらに含むことができる。
さまざまな実施形態において、動作1702は、デバイス(例えば114)によって、モノリシック・アプリケーションのソース・コード(例えば302)に基づいてコード特性グラフを生成することを含むことができる。
さまざまな実施形態において、動作1704は、デバイス(例えば114)によって、モノリシック・アプリケーションの時間的コード進展(例えば304)に基づいてコード特性グラフを修正することを含むことができる。
本明細書に記載されたさまざまな実施形態の追加の文脈を提供するため、図18および以下の考察は、本明細書に記載された実施形態のさまざまな実施形態を実施することができる適当なコンピューティング環境1800の簡潔な全般的な説明を提供することが意図されている。以上では、1台または数台のコンピュータ上で実行することができるコンピュータ実行可能命令の一般的な文脈で実施形態を説明したが、他のプログラム・モジュールと組み合わせて、もしくはハードウェアおよびソフトウェアの組合せとして、またはその両方で、実施形態を実施することもできることを当業者は認識するであろう。
一般に、プログラム・モジュールは、特定のタスクを実行し、または特定の抽象データ型を実装する、ルーチン、プログラム、構成要素、データ構造などを含む。さらに、本発明の方法は、シングルプロセッサまたはマルチプロセッサ・コンピュータ・システム、ミニコンピュータ、メインフレーム・コンピュータ、モノのインターネット(IoT)・デバイス、分散コンピューティング・システム、パーソナル・コンピュータ、ハンドヘルド・コンピューティング・デバイス、マイクロプロセッサ・ベースのまたはプログラム可能な家庭用電子機器などを含む、他のコンピュータ・システム構成を用いて実施することもできることを当業者は認識するであろう。これらのコンピュータ・システム構成の各々は、1つまたは複数の関連デバイスに動作可能に結合されていることがあり得る。
本明細書の実施形態の示された実施形態は、通信ネットワークを通してリンクされたリモート処理デバイスによってある種のタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、ローカル・メモリ・ストレージ・デバイスとリモート・メモリ・ストレージ・デバイスの両方にプログラム・モジュールを置くことができる。
コンピューティング・デバイスは通常、さまざまな媒体を含み、それらの媒体は、コンピュータ可読ストレージ媒体、機械可読ストレージ媒体もしくは通信媒体またはこれらの組合せを含み得る。本明細書ではこれらの2つの用語が、以下のように互いに異なって使用される。コンピュータ可読ストレージ媒体または機械可読ストレージ媒体は、コンピュータがアクセスすることができる使用可能な任意のストレージ媒体であることができ、揮発性媒体と不揮発性媒体、取外し可能媒体と取外し不能媒体の両方を含む。例として、限定はされないが、コンピュータ可読ストレージ媒体または機械可読ストレージ媒体は、コンピュータ可読または機械可読の命令、プログラム・モジュール、構造化データまたは非構造化データなどの情報を格納するための任意の方法または技術に関連して実装することができる。
コンピュータ可読ストレージ媒体は、限定はされないが、ランダム・アクセス・メモリ(RAM)、リード・オンリー・メモリ(ROM)、電気的に消去可能なプログラマブル・リード・オンリー・メモリ(EEPROM)、フラッシュ・メモリもしくは他のメモリ技術、コンパクト・ディスク・リード・オンリー・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、Blu-rayディスク(BD)もしくは他の光学ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージもしくは他の磁気ストレージ・デバイス、ソリッドステート・ドライブもしくは他のソリッドステート・ストレージ・デバイス、あるいは所望の情報を格納する目的に使用することができる他の有形もしくは非一過性の媒体または有形かつ非一過性の媒体を含み得る。この点に関して、ストレージ、メモリまたはコンピュータ可読媒体に対して使用される本明細書における用語「有形」または「非一過性」は、修飾語(modifier)として、伝搬するだけの一過性の信号自体を排除し、それ自体が伝搬するだけの一過性の信号ではない全ての標準ストレージ、メモリまたはコンピュータ可読媒体に対する権利を放棄しないと理解される。
コンピュータ可読ストレージ媒体には、その媒体によって格納された情報に対するさまざまな操作のために、例えばアクセス要求、問合せまたは他のデータ検索プロトコルを介して、1台または数台のローカルまたはリモート・コンピューティング・デバイスがアクセスすることができる。
通信媒体は通常、変調されたデータ信号などのデータ信号、例えば搬送波または他の輸送機構の中のコンピュータ可読命令、データ構造体、プログラム・モジュール、または他の構造化データもしくは非構造化データを具体化し、任意の情報送達または移送媒体を含む。用語「変調されたデータ信号」は、データ信号の特性のうちの1つまたは複数の特性を有する信号であって、1つまたは複数の信号の中に情報をコード化するように設定または変更された信号を指す。例として、通信媒体は、限定はされないが、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響、RF、赤外線および他の無線媒体などの無線媒体を含む。
再び図18を参照すると、本明細書に記載された実施形態のさまざまな実施形態を実施するための例示的な環境1800はコンピュータ1802を含み、コンピュータ1802は、処理ユニット1804、システム・メモリ1806およびシステム・バス1808を含む。システム・バス1808は、限定はされないがシステム・メモリ1806を含むシステム構成要素を処理ユニット1804に結合する。処理ユニット1804は、市販のさまざまなプロセッサのうちの任意のプロセッサとすることができる。デュアル・マイクロプロセッサおよびその他のマルチ・プロセッサ・アーキテクチャを処理ユニット1804として使用することもできる。
システム・バス1808は、いくつかのタイプのバス構造体のうちの任意のバス構造体とすることができ、そのバス構造体はさらに、市販のさまざまなバス・アーキテクチャのうちの任意のバス・アーキテクチャを使用してメモリ・バス(メモリ・コントローラ有りまたは無し)、周辺バスおよびローカル・バスと相互接続することができる。システム・メモリ1806はROM1810およびRAM1812を含む。ROM、消去可能なプログラマブル・リード・オンリー・メモリ(EPROM)、EEPROMなどの不揮発性メモリに基本入出力システム(BIOS)を格納することができ、BIOSは、起動中などにコンピュータ1802内の要素間の情報転送を助ける基本ルーチンを含む。RAM1812はさらに、スタティックRAMなど、データをキャッシュするための高速RAMを含むことができる。
コンピュータ1802はさらに、内部ハード・ディスク・ドライブ(HDD)1814(例えばEIDE、SATA)、1つまたは複数の外部ストレージ・デバイス1816(例えば、磁気フロッピー(R)・ディスク・ドライブ(FDD)1816、メモリ・スティックまたはフラッシュ・ドライブ・リーダ、メモリ・カード・リーダなど)、および例えばソリッドステート・ドライブ、光ディスク・ドライブなどのドライブ1820を含み、ドライブ1820は、CD-ROMディスク、DVD、BDなどのディスク1822からの読出しまたは書込みができる。あるいは、ソリッドステート・ドライブが含まれている場合、別個にあるのでなければディスク1822は含まれないであろう。内部HDD1814はコンピュータ1802内に置かれているように示されているが、適当なシャーシ(図示せず)内で外部使用されるように内部HDD1814を構成することもできる。さらに、環境1800には示されていないが、HDD1814に加えてまたはHDD1814の代わりに、ソリッドステート・ドライブ(SSD)を使用することもできる。HDD1814、外部ストレージ・デバイス1816およびドライブ1820を、それぞれHDDインタフェース1824、外部ストレージ・インタフェース1826およびドライブ・インタフェース1828によってシステム・バス1808に接続することができる。外部ドライブ実装用のインタフェース1824は、ユニバーサル・シリアル・バス(USB)インタフェース技術と米国電気電子技術者協会(IEEE)1394インタフェース技術のうちの少なくとも一方または両方を含むことができる。他の外部ドライブ接続技術も本明細書に記載された実施形態の企図に含まれる。
これらのドライブおよびそれらの関連コンピュータ可読ストレージ媒体は、データ、データ構造体、コンピュータ実行可能命令などの不揮発性ストレージを提供する。コンピュータ1802に関して、これらのドライブおよびストレージ媒体は、適当なデジタル形式のデータの格納に対応する。上記のコンピュータ可読ストレージ媒体の説明は、対応するそれぞれのタイプのストレージ・デバイスに関するものであるが、現在存在しているものであるのかまたは将来に開発されるものであるのかを問わず、コンピュータが読むことができる他のタイプのストレージ媒体を、この例示的な動作環境で使用することもできること、さらに、そのようなストレージ媒体は、本明細書に記載された方法を実行するためのコンピュータ実行可能命令を含むことができることを当業者は理解すべきである。
これらのドライブおよびRAM1812に、オペレーティング・システム1830、1つまたは複数のアプリケーション・プログラム1832、他のプログラム・モジュール1834およびプログラム・データ1836を含む、いくつかのプログラム・モジュールを格納することができる。これらのオペレーティング・システム、アプリケーション、モジュールもしくはデータまたはこれらの組合せの全部または部分をRAM1812にキャッシュすることもできる。本明細書に記載されたシステムおよび方法は、市販のさまざまなオペレーティング・システムまたはオペレーティング・システムの組合せを利用して実施することができる。
任意選択で、コンピュータ1802はエミュレーション技術を含むことができる。例えば、オペレーティング・システム1830のハードウェア環境をハイパーバイザ(図示せず)または他の中間物がエミュレートすることができ、任意選択で、エミュレートされたハードウェアが、図18に示されたハードウェアとは異なることができる。そのような実施形態では、オペレーティング・システム1830が、コンピュータ1802にホストされた多数の仮想機械(VM)のうちの1つのVMを含むことができる。さらに、オペレーティング・システム1830は、Java(R)実行時環境またはNETフレームワークなどの実行時環境をアプリケーション1832に対して提供することができる。実行時環境は、その実行時環境を含む任意のオペレーティング・システム上でアプリケーション1832を実行することを可能にする首尾一貫した実行環境である。同様に、オペレーティング・システム1830はコンテナをサポートすることができ、アプリケーション1832はコンテナの形態をとることができ、コンテナは、例えばアプリケーションのためのコード、実行時、システム・ツール、システム・ライブラリおよび設定を含む、ソフトウェアの軽量の独立型実行可能パッケージである。
さらに、コンピュータ1802は、トラステッド・プロセシング・モジュール(trusted processing module)(TPM)などのセキュリティ・モジュールで有効にすることができる。例えば、TPMを用いて、ブート構成要素は、時間的に次のブート構成要素をハッシュし、セキュアな値との結果の一致を待ってから次のブート構成要素をロードする。このプロセスは、コンピュータ1802のコード実行スタックの中の任意の層で起こることができ、例えば、アプリケーション実行レベルまたはオペレーティング・システム(OS)カーネル・レベルで適用され、それによってコード実行の任意のレベルでセキュリティを有効にする。
ユーザは、1つまたは複数の有線/無線入力デバイス、例えばキーボード1838、タッチ・スクリーン1840およびポインティング・デバイス、例えばマウス1842によってコンピュータ1802にコマンドおよび情報を入力することができる。他の入力デバイス(図示せず)は、マイクロフォン、赤外線(IR)リモート・コントロール、無線周波(RF)リモート・コントロールまたは他のリモート・コントロール、ジョイスティック、仮想現実コントローラもしくは仮想現実ヘッドセットまたはその両方、ゲーム・パッド、スタイラス・ペン、イメージ入力デバイス、例えばカメラ、ジェスチャ・センサ入力デバイス、視覚運動センサ入力デバイス、感情または顔検出デバイス、バイオメトリック入力デバイス、例えば指紋または虹彩スキャナなどを含み得る。これらの入力デバイスおよび他の入力デバイスはしばしば、システム・バス1808に結合することができる入力デバイス・インタフェース1844を通して処理ユニット1804に接続されるが、それらの入力デバイスを、パラレル・ポート、IEEE1394シリアル・ポート、ゲーム・ポート、USBポート、IRインタフェース、BLUETOOTH(R)インタフェースなどの他のインタフェースによって接続することもできる。
モニタ1846または他のタイプのディスプレイ・デバイスを、ビデオ・アダプタ1848などのインタフェースを介してシステム・バス1808に接続することもできる。モニタ1846に加えて、コンピュータは通常、スピーカ、プリンタなどの他の周辺出力デバイス(図示せず)を含む。
コンピュータ1802は、リモート・コンピュータ1850などの1台または数台のリモート・コンピュータへの有線通信もしくは無線通信またはその両方を介した論理接続を使用して、ネットワーク化された環境で動作することができる。リモート・コンピュータ1850は、ワークステーション、サーバ・コンピュータ、ルータ、パーソナル・コンピュータ、ポータブル・コンピュータ、マイクロプロセッサ・ベースのエンターテイメント機器、ピア・デバイスまたは他の一般的なネットワーク・ノードであることができ、通常は、コンピュータ1802に関して説明した多くの要素または全ての要素を含むが、簡潔にするため、メモリ/ストレージ・デバイス1852だけが示されている。図示された論理接続は、ローカル・エリア・ネットワーク(LAN)1854もしくはより大きなネットワーク、例えばワイド・エリア・ネットワーク(WAN)1856、またはその両方への有線/無線接続性を含む。そのようなLANおよびWANネットワーキング環境は、事業所および会社では普通であり、イントラネットなどの企業内コンピュータ・ネットワークを容易にし、それらのネットワークは全て、グローバル通信ネットワーク、例えばインターネットに接続することができる。
LANネットワーキング環境で使用されるときには、有線通信ネットワーク・インタフェースもしくはアダプタ1858または無線通信ネットワーク・インタフェースもしくはアダプタ1858、あるいはその両方を通して、コンピュータ1802をローカル・ネットワーク1854に接続することができる。アダプタ1858は、LAN1854への有線または無線通信を容易にすることができ、LAN1854はさらに、アダプタ1858と無線モードで通信するためにLAN1854上に配置されたワイヤレス・アクセス・ポイント(AP)を含むことができる。
WANネットワーキング環境で使用されるときには、コンピュータ1802はモデム1860を含むことができ、またはコンピュータ1802を、WAN1856上での通信、例えばインターネットを経由した通信を確立するための他の手段を介してWAN1856上の通信サーバに接続することができる。モデム1860は、内部または外部の有線または無線デバイスであることができ、入力デバイス・インタフェース1844を介してモデム1860をシステム・バス1808に接続することができる。ネットワーク化された環境では、コンピュータ1802に関して示されたプログラム・モジュールまたはその部分を、リモート・メモリ/ストレージ・デバイス1852に格納することができる。示されたネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用することもできることが理解されよう。
LANまたはWANネットワーキング環境で使用されるとき、コンピュータ1802は、上で説明した外部ストレージ・デバイス1816に加えて、または外部ストレージ・デバイス1816の代わりに、限定はされないが、情報の格納または処理の1つまたは複数の実施形態を提供するネットワーク仮想機械などの、クラウド・ストレージ・システムまたは他のネットワーク・ベースのストレージ・システムにアクセスすることができる。一般に、コンピュータ1802とクラウド・ストレージ・システムとの間の接続は、LAN1854またはWAN1856上で、例えばそれぞれアダプタ1858またはモデム1860によって確立することができる。コンピュータ1802を関連クラウド・ストレージ・システムに接続すると、外部ストレージ・インタフェース1826は、アダプタ1858もしくはモデム1860またはその両方の助けを借りて、クラウド・ストレージ・システムによって提供されたストレージを、他のタイプの外部ストレージと同様に管理することができる。例えば、クラウド・ストレージ・ソースがあたかもコンピュータ1802に物理的に接続されているかのようなクラウド・ストレージ・ソースへのアクセスを提供するように、外部ストレージ・インタフェース1826を構成することができる。
コンピュータ1802は、無線通信するように動作可能に配置された任意の無線デバイスまたはエンティティ、例えばプリンタ、スキャナ、デスクトップ・コンピュータもしくはポータブル・コンピュータまたはその両方、ポータブル・データ・アシスタント、通信衛星、無線で検出可能なタグに関連付けられた任意の機器または位置(例えばキオスク、新聞販売所、商店の棚など)、および電話機と通信するように動作可能であることができる。これは、ワイヤレス・フィデリティ(Wireless Fidelity)(Wi-Fi)およびBLUETOOTH(R)無線技術を含むことができる。したがって、この通信を、従来のネットワークと同様の予め定められた構造、または単純に少なくとも2台のデバイス間のアドホック通信とすることができる。
本発明は、インテグレーションの可能な任意の技術的詳細レベルにおいて、システム、方法、装置もしくはコンピュータ・プログラム製品、またはこれらの組合せであることがある。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体を含むことができる。このコンピュータ可読ストレージ媒体は、命令実行デバイスが使用するための命令を保持および格納することができる有形のデバイスとすることができる。このコンピュータ可読ストレージ媒体は例えば、限定はされないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイスまたはこれらの任意の適当な組合せとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストはさらに、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリー・メモリ(ROM)、消去可能なプログラマブル・リードオンリー・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリー・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック(R)、フロッピー(R)・ディスク、機械的にコード化されたデバイス、例えばパンチカードまたはその上に命令が記録された溝の中の一段高くなった構造体、およびこれらの任意の適当な組合せを含み得る。本明細書で使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が一過性の信号、例えば電波もしくは他の自由に伝搬する電磁波、ウェーブガイドもしくは他の伝送体内を伝搬する電磁波(例えば光ファイバ・ケーブル内を通る光パルス)、または電線を通して伝送される電気信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスにダウンロードすることができ、またはネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくは無線ネットワークまたはこれらの組合せを介して外部コンピュータもしくは外部ストレージ・デバイスにダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータもしくはエッジ・サーバ、またはこれらの組合せを含むことができる。それぞれのコンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インタフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、もしくは集積回路用のコンフィギュレーション・データであってもよく、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同種のプログラミング言語などの手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードであることができる。このコンピュータ可読プログラム命令は、全体がユーザのコンピュータ上で実行されてもよく、一部がユーザのコンピュータ上で実行されてもよく、独立型ソフトウェア・パッケージとして実行されてもよく、一部がユーザのコンピュータ上で、一部がリモート・コンピュータ上で実行されてもよく、または全体がリモート・コンピュータもしくはリモート・サーバ上で実行することができる。上記の最後のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されたものとすることができ、またはこの接続を、外部コンピュータに対して(例えばインターネット・サービス・プロバイダを使用してインターネットを介して)実施することができる。いくつかの実施形態では、本発明の態様を実行するために、例えばプログラム可能論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA)またはプログラム可能論理アレイ(PLA)を含む電子回路が、このコンピュータ可読プログラム命令の状態情報を利用してその電子回路をパーソナライズすることにより、このコンピュータ可読プログラム命令を実行することができる。
本明細書では、本発明の態様が、本発明の実施形態による方法、装置(システム)およびコンピュータ・プログラム製品の流れ図もしくはブロック図またはその両方の図を参照して説明される。それらの流れ図もしくはブロック図またはその両方の図のそれぞれのブロック、およびそれらの流れ図もしくはブロック図またはその両方の図のブロックの組合せは、コンピュータ可読プログラム命令によって実施することができることが理解されよう。これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサによって実行される命令が、流れ図もしくはブロック図またはその両方の図の1つまたは複数のブロックに指定される機能/動作を実施する手段を生成するように、機械を形成する汎用コンピュータ、専用コンピュータまたは他のプログラム可能データ処理装置のプロセッサに提供することができる。これらのコンピュータ可読プログラム命令はさらに、その中に命令が格納されたコンピュータ可読ストレージ媒体が、流れ図もしくはブロック図またはその両方の図の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含む製品を含むように、特定の方式で機能するようにコンピュータ、プログラム可能データ処理装置もしくは他のデバイスまたはこれらの組合せに指図することができるコンピュータ可読ストレージ媒体に格納することができる。これらのコンピュータ可読プログラム命令はさらに、コンピュータ、他のプログラム可能装置または他のデバイス上で実施されるこれらの命令が、流れ図もしくはブロック図またはその両方の図の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータによって実施されるプロセスを生成するために、コンピュータ、他のプログラム可能データ処理装置または他のデバイスにロードされ、コンピュータ、他のプログラム可能装置または他のデバイス上で一連の動作行為を実行させることができる。
添付図中の流れ図およびブロック図は、本発明のさまざまな実施形態によるシステム、方法およびコンピュータ・プログラム製品の可能な実施態様のアーキテクチャ、機能および動作を示している。この点に関して、それらの流れ図またはブロック図のそれぞれのブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメントまたは部分を表し得る。いくつかの代替実施態様では、これらのブロックに示された機能を、図に示された順序とは異なる順序で実施することができる。例えば、連続して示された2つのブロックを、実際には、実質的に同時に実行することができ、または、関連する機能によってはそれらのブロックを逆の順序で実行することもできる。それらのブロック図もしくは流れ図またはその両方の図のそれぞれのブロック、ならびにそれらのブロック図もしくは流れ図またはその両方の図のブロックの組合せを、指定された機能もしくは動作を実行しまたは専用ハードウェアとコンピュータ命令の組合せを実行する専用のハードウェアベースのシステムによって実施することができることにも留意されたい。
以上に、1台のコンピュータ上もしくは複数のコンピュータ上またはその両方で実行されるコンピュータ・プログラム製品のコンピュータ実行命令の一般的な文脈で主題を説明したが、他のプログラム・モジュールと組み合わせて本開示を実施することもできることを当業者は認識するであろう。一般に、プログラム・モジュールは、特定のタスクを実行し、もしくは特定の抽象データ型を実装し、またはその両方を実行する、ルーチン、プログラム、構成要素、データ構造体などを含む。さらに、本発明のコンピュータ実施方法は、シングルプロセッサまたはマルチプロセッサ・コンピュータ・システム、ミニコンピューティング・デバイス、メインフレーム・コンピュータ、コンピュータ、ハンドヘルド・コンピューティング・デバイス(例えばPDA、電話機)、マイクロプロセッサ・ベースのまたはプログラム可能な家庭用または産業用電子機器などを含む、他のコンピュータ・システム構成を用いて実施することもできることを当業者は認識するであろう。示された態様は、通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実施することもできる。しかしながら、全部ではないにせよ、本開示の一部の態様を、独立型コンピュータ上で実施することもできる。分散コンピューティング環境では、ローカル・メモリ・ストレージ・デバイスとリモート・メモリ・ストレージ・デバイスの両方にプログラム・モジュールを置くことができる。
本出願で使用されるとき、用語「構成要素」、「システム」、「プラットホーム」、「インタフェース」などは、1つもしくは複数の特定の機能を有する、コンピュータに関係したエンティティもしくはオペレーショナル・マシン(operational machine)に関係したエンティティを指すことができ、またはそのようはエンティティを含むことができ、あるいはその両方であることができる。本明細書に開示されたエンティティは、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアであることができる。例えば、構成要素は、限定はされないが、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラムもしくはコンピュータ、またはこれらの組合せであることができる。例として、サーバ上で実行されるアプリケーションとサーバの両方が構成要素であることがある。プロセスもしくは実行スレッドまたはその両方の中に、1つまたは複数の構成要素が存在することができ、構成要素は、1つのコンピュータ上に限局されていること、もしくは2つ以上のコンピュータ間に分散化されていること、またはその両方であることができる。別の例では、さまざまなデータ構造がその上に格納されたさまざまなコンピュータ可読媒体から、それぞれの構成要素を実行することができる。構成要素は、ローカル・プロセスもしくはリモート・プロセスまたはその両方を介して、例えば1つまたは複数のデータ・パケット(例えば、ローカル・システム内で、分散システム内で、もしくはインターネットなどのネットワークを経由して、またはこれらの組合せで、他のシステムとともに、信号を介して別の構成要素と対話している1つの構成要素からのデータ)を有する信号に従って通信することができる。別の例として、構成要素は、電気または電子回路によって操作される機械部品によって提供される特定の機能を有する装置であることができ、この電気または電子回路は、プロセッサによって実行されるソフトウェアまたはファームウェア・アプリケーションによって操作される。このような場合、プロセッサは、装置内または装置外に置くことができ、ソフトウェア・アプリケーションまたはファームウェア・アプリケーションの少なくとも一部を実行することができる。別の例として、構成要素は、機械部品を含まない電子構成要素を介して特定の機能を提供する装置であることができ、それらの電子構成要素は、電子構成要素の機能を少なくとも部分的に与えるソフトウェアまたはファームウェアを実行するためのプロセッサまたは他の手段を含むことができる。一態様では、構成要素が、例えばクラウド・コンピューティング・システム内で、仮想機械を介して電子構成要素をエミュレートすることができる。
さらに、用語「または」は、排他的な「または」ではなく包括的な「または」を意味することが意図されている。すなわち、特段の記載がある場合、または文脈から明白である場合を除き、「XがAまたはBを使用する」は、自然な包括的置換(natural inclusive permutation)のうちのいずれかを意味することが意図されている。すなわち、XがAを使用する場合、XがBを使用する場合、またはXがAとBの両方を使用する場合、「Xが、AまたはBを使用する」は、上記のいずれの事例の下でも満たされる。さらに、特段の記載がある場合、または単数形を指示していることが文脈から明白である場合を除き、本明細書および添付図面で使用される冠詞「a」および「an」は、一般に、「1つまたは複数」を意味すると解釈すべきである。本明細書で使用されるとき、用語「例」もしくは「例示的な」またはその両方は、例、事例または例示として役に立つものであることを意味するために利用される。誤解を避けるために言うと、本明細書に開示された主題はこのような例によって限定されない。さらに、「例」もしくは「例示的な」またはその両方として本明細書に記載された任意の態様または設計を、他の態様または設計よりも好ましいまたは有利であると解釈する必要は必ずしもなく、あるいは、そのような態様または設計が、当業者に知られている等価の例示的な構造体および技術を排除することも意味しない。
本明細書で使用されるとき、「プロセッサ」という用語は、限定はされないが、シングルコア・プロセッサ、ソフトウェア・マルチスレッド実行機能を有するシングルコア・プロセッサ、マルチコア・プロセッサ、ソフトウェア・マルチスレッド実行機能を有するマルチコア・プロセッサ、ハードウェア・マルチスレッド技術を有するマルチコア・プロセッサ、パラレル・プラットホーム、および分散共用メモリを有するパラレル・プラットホームを含む、実質的に任意のコンピューティング処理ユニットまたはデバイスを指し得る。さらに、プロセッサは、本明細書に記載された機能を実行するように設計された集積回路、特定用途向け集積回路(ASIC)、デジタル信号処理プロセッサ(DSP)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、プログラマブル・ロジック・コントローラ(PLC)、複合プログラマブル・ロジック・デバイス(CPLD)、ディスクリート・ゲートまたはトランジスタ・ロジック、ディスクリート・ハードウェア構成要素、またはこれらの任意の組合せを指し得る。さらに、プロセッサは、空間使用を最適化し、またはユーザ機器の性能を強化するために、限定はされないが、分子ベースおよび量子ドット・ベースのトランジスタ、スイッチおよびゲートなどのナノスケール・アーキテクチャを利用することができる。プロセッサを、コンピューティング処理ユニットの組合せとして実施することもできる。本開示では、「ストア」、「ストレージ」、「データ・ストア」、「データ・ストレージ」、「データベース」などの用語、ならびに構成要素の動作および機能に関連する実質的に任意の他の情報ストレージ構成要素が、「メモリ」またはメモリを含む構成要素として具体化された実体である「メモリ構成要素」を指すために利用される。本明細書に記載されたメモリもしくはメモリ構成要素またはその両方は、揮発性メモリもしくは不揮発性メモリであることができ、または揮発性メモリと不揮発性メモリの両方を含むことができることを認識すべきである。例として、不揮発性メモリは、限定はされないが、リード・オンリー・メモリ(ROM)、プログラマブルROM(PROM)、消去可能なプログラマブルROM(EPROM)、電気的に消去可能なプログラマブルROM(EEPROM)、フラッシュ・メモリまたは不揮発性のランダム・アクセス・メモリ(RAM)(例えば強誘電体RAM(FeRAM))を含むことができる。揮発性メモリはRAMを含むことができ、RAMは、例えば外部キャッシュ・メモリとして機能することができる。例として、限定はされないが、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、ダブル・データ・レートSDRAM(DDR SDRAM)、エンハンストSDRAM(ESDRAM)、SyncLink DRAM(SLDRAM)、ダイレクトRambus RAM(DRRAM)、ダイレクトRambusダイナミックRAM(DRDRAM)およびRambusダイナミックRAM(RDRAM)など、多くの形態で使用可能である。さらに、本明細書のシステムまたはコンピュータ実施方法の開示されたメモリ構成要素は、含むことに限定はされないが、これらのタイプのメモリおよび他の適当なタイプのメモリを含むことが意図されている。
以上に説明したことは、システムおよびコンピュータ実施方法の単なる例を含む。当然ながら、本開示を説明するために、構成要素またはコンピュータ実施方法の考え得るあらゆる組合せを記載することは不可能だが、本開示の他の多くの組合せおよび置換が可能であることを当業者は理解することができる。さらに、詳細な説明、特許請求の範囲、付録および図面において用語「含む(includes)」、「有する(has)」、「所有する(possesses)」などが使用される範囲で、そのような用語は、用語「備える/含む(comprising)」が、請求項中で転換語(transitional word)として使用されているときに解釈されるのと同様に、包括的であることが意図されている。
さまざまな実施形態の以上の説明は例示のために示したものであり、以上の説明が網羅的であること、または、以上の説明が、開示された実施形態だけに限定されることは意図されていない。当業者には、記載された実施形態の範囲および思想を逸脱しない多くの変更および変形が明らかとなろう。本明細書で使用した用語は、実施形態の原理、実用的用途、もしくは市販されている技術にはない技術的改善点を最もよく説明するように、または本明細書に開示された実施形態を当業者が理解できるように選択した。

Claims (26)

  1. システムであって、
    コンピュータ実行可能構成要素を格納するメモリと、
    前記メモリに動作可能に結合されたプロセッサであり、前記メモリに格納された前記コンピュータ実行可能構成要素を実行する、前記プロセッサと
    を含み、前記コンピュータ実行可能構成要素が、
    モノリシック・アプリケーションを特徴付けるコード特性グラフに基づいて、前記モノリシック・アプリケーションの中の素なコード・クラスタを検出するコミュニティ検出構成要素、
    前記モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて、前記素なコード・クラスタの機能目的を識別するトピック・モデリング構成要素、および
    前記機能目的に基づいて、前記素なコード・クラスタを置き換えるためのマイクロサービスを推奨するマイクロサービス構成要素
    を含む、システム。
  2. 前記ビジネス文書コーパスが、前記モノリシック・アプリケーションに対応する設計文書、ユーザ・ガイド、コード・アノテーション、wiki文書、github文書およびreadme文書からなるグループからの少なくとも1つを含む、請求項1に記載のシステム。
  3. 前記コード特性グラフが、前記モノリシック・アプリケーションの時間的コード進展に基づく、請求項1に記載のシステム。
  4. グラフ構成要素であり、
    前記モノリシック・アプリケーションのソース・コードに基づいて前記コード特性グラフを生成し、前記コード特性グラフが、前記モノリシック・アプリケーションを特徴付ける、抽象構文木、制御フロー・グラフおよびプログラム依存グラフの組合せを含み、
    前記時間的コード進展に基づいて前記コード特性グラフのエッジ重みを増強し、前記時間的コード進展が、前記モノリシック・アプリケーションの前記ソース・コードに対する経時的な変更を含む、
    前記グラフ構成要素
    をさらに含む、請求項3に記載のシステム。
  5. 前記トピック・モデリング構成要素が、潜在的ディリクレ配分アルゴリズムを使用することによって前記素なコード・クラスタの前記機能目的を識別する、請求項1に記載のシステム。
  6. 推奨された前記マイクロサービスおよび前記素なコード・クラスタに関連したユーザ・フィードバックを収集するフィードバック構成要素であり、前記フィードバック構成要素が、収集された前記ユーザ・フィードバックに基づいて、前記コミュニティ検出構成要素のパラメータまたは前記トピック・モデリング構成要素のパラメータを修正する、前記フィードバック構成要素
    をさらに含む、請求項1に記載のシステム。
  7. 他のモノリシック・アプリケーションのコード特性グラフから学習された依存関係パターンを格納する依存関係パターン格納構成要素であり、前記コミュニティ検出構成要素および前記トピック・モデリング構成要素が、前記依存関係パターンを利用して前記素なコード・クラスタおよび前記機能目的を識別する、前記依存関係パターン格納構成要素
    をさらに含む、請求項1に記載のシステム。
  8. 前記マイクロサービス構成要素が、前記素なコード・クラスタを、推奨された前記マイクロサービスに置き換える、請求項1に記載のシステム。
  9. コンピュータ実施方法であって、
    プロセッサに動作可能に結合されたデバイスによって、モノリシック・アプリケーションを特徴付けるコード特性グラフに基づいて、前記モノリシック・アプリケーションの中の素なコード・クラスタを検出すること、
    前記デバイスによって、前記モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて、前記素なコード・クラスタの機能目的を識別すること、および
    前記デバイスによって、前記機能目的に基づいて、前記素なコード・クラスタを置き換えるためのマイクロサービスを推奨すること
    を含むコンピュータ実施方法。
  10. 前記ビジネス文書コーパスが、前記モノリシック・アプリケーションに対応する設計文書、ユーザ・ガイド、コード・アノテーション、wiki文書、github文書およびreadme文書からなるグループからの少なくとも1つを含む、請求項9に記載のコンピュータ実施方法。
  11. 前記コード特性グラフが、前記モノリシック・アプリケーションの時間的コード進展に基づく、請求項9に記載のコンピュータ実施方法。
  12. 前記デバイスによって、前記モノリシック・アプリケーションのソース・コードに基づいて前記コード特性グラフを生成することであり、前記コード特性グラフが、前記モノリシック・アプリケーションを特徴付ける、抽象構文木、制御フロー・グラフおよびプログラム依存グラフの組合せを含む、前記生成すること、ならびに
    前記デバイスによって、前記時間的コード進展に基づいて前記コード特性グラフのエッジ重みを増強することであり、前記時間的コード進展が、前記モノリシック・アプリケーションの前記ソース・コードに対する経時的な変更を含む、前記増強すること
    をさらに含む、請求項11に記載のコンピュータ実施方法。
  13. 前記素なコード・クラスタの前記機能目的を前記識別することが、潜在的ディリクレ配分アルゴリズムを使用する、請求項9に記載のコンピュータ実施方法。
  14. 前記デバイスによって、推奨された前記マイクロサービスおよび前記素なコード・クラスタに関連したユーザ・フィードバックを収集すること、ならびに
    前記デバイスによって、収集された前記ユーザ・フィードバックに基づいて、前記素なコード・クラスタを前記検出することを容易にするアルゴリズムのパラメータまたは前記機能目的を前記識別することを容易にするアルゴリズムのパラメータを修正すること
    をさらに含む、請求項9に記載のコンピュータ実施方法。
  15. 前記デバイスによって、他のモノリシック・アプリケーションのコード特性グラフから学習された依存関係パターンを格納することであり、前記依存関係パターンが、前記素なコード・クラスタを前記検出することおよび前記機能目的を前記識別することを容易にする、前記格納すること
    をさらに含む、請求項9に記載のコンピュータ実施方法。
  16. 前記デバイスによって、前記素なコード・クラスタを、推奨された前記マイクロサービスに置き換えること
    をさらに含む、請求項9に記載のコンピュータ実施方法。
  17. モノリシック・アプリケーションに対するマイクロサービス分解戦略の自動化された推奨を容易にするためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、プログラム命令が実装されたコンピュータ可読メモリを含み、前記プログラム命令が、
    モノリシック・アプリケーションを特徴付けるコード特性グラフに基づいて、前記モノリシック・アプリケーションの中の素なコード・クラスタを検出すること、
    前記モノリシック・アプリケーションに対応するビジネス文書コーパスに基づいて、前記素なコード・クラスタの機能目的を識別すること、および
    前記機能目的に基づいて、前記素なコード・クラスタを置き換えるためのマイクロサービスを推奨すること
    を処理構成要素に実行させるように前記処理構成要素によって実行可能である、
    コンピュータ・プログラム製品。
  18. 前記ビジネス文書コーパスが、前記モノリシック・アプリケーションに対応する設計文書、ユーザ・ガイド、コード・アノテーション、wiki文書、github文書およびreadme文書からなるグループからの少なくとも1つを含む、請求項17に記載のコンピュータ・プログラム製品。
  19. 前記コード特性グラフが、前記モノリシック・アプリケーションの時間的コード進展に基づく、請求項17に記載のコンピュータ・プログラム製品。
  20. 前記プログラム命令がさらに、
    前記モノリシック・アプリケーションのソース・コードに基づいて前記コード特性グラフを生成することであり、前記コード特性グラフが、前記モノリシック・アプリケーションを特徴付ける、抽象構文木、制御フロー・グラフおよびプログラム依存グラフの組合せを含む、前記生成すること、ならびに
    前記時間的コード進展に基づいて前記コード特性グラフのエッジ重みを増強することであり、前記時間的コード進展が、前記モノリシック・アプリケーションの前記ソース・コードに対する経時的な変更を含む、前記増強すること
    を前記処理構成要素に実行させるように実行可能である、請求項19に記載のコンピュータ・プログラム製品。
  21. 装置であって、
    メモリに動作可能に結合されたプロセッサであり、前記メモリに格納されたコンピュータ実行可能構成要素を実行する、前記プロセッサ
    を含み、前記コンピュータ実行可能構成要素が、
    モノリシック・アプリケーションに対応するコード特性グラフに基づいて、前記モノリシック・アプリケーションの中のマイクロサービス分解の候補を識別するコミュニティ検出構成要素、および
    前記モノリシック・アプリケーションに対応するビジネス文書に基づいて、識別された前記候補によってそれぞれ実行される機能を識別するトピック・モデリング構成要素
    を含む、装置。
  22. 前記ビジネス文書が、前記モノリシック・アプリケーションに対応する設計文書、ユーザ・ガイド、コード・アノテーション、wiki文書、github文書およびreadme文書からなるグループからの少なくとも1つを含む、請求項21に記載の装置。
  23. 前記モノリシック・アプリケーションのソース・コードに基づいて前記コード特性グラフを生成し、前記モノリシック・アプリケーションの時間的コード進展に基づいて前記コード特性グラフを修正するグラフ構成要素
    をさらに含む、請求項21に記載の装置。
  24. コンピュータ実施方法であって、
    プロセッサに通信可能に結合されたデバイスによって、モノリシック・アプリケーションに対応するコード特性グラフに基づいて、前記モノリシック・アプリケーションの中のマイクロサービス分解の候補を、識別すること、および
    前記デバイスによって、前記モノリシック・アプリケーションに対応するビジネス文書に基づいて、識別された前記候補によってそれぞれ実行される機能を識別すること
    を含むコンピュータ実施方法。
  25. 前記デバイスによって、前記モノリシック・アプリケーションのソース・コードに基づいて前記コード特性グラフを生成すること、および
    前記デバイスによって、前記モノリシック・アプリケーションの時間的コード進展に基づいて前記コード特性グラフを修正すること
    をさらに含む、請求項24に記載のコンピュータ実施方法。
  26. コンピュータ・プログラムであって、前記プログラムがコンピュータ上で実行されたときに請求項9ないし16のいずれかに記載の方法または請求項24もしくは25に記載の方法を実行するように適合されたプログラム・コード手段を含む、コンピュータ・プログラム。
JP2022544034A 2020-01-23 2021-01-18 モノリシック・アプリケーションのマイクロサービス分解戦略 Pending JP2023510951A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/750,532 2020-01-23
US16/750,532 US11416243B2 (en) 2020-01-23 2020-01-23 Microservice decomposition strategy of monolithic applications
PCT/IB2021/050351 WO2021148927A1 (en) 2020-01-23 2021-01-18 Microservice decomposition strategy of monolithic applications

Publications (1)

Publication Number Publication Date
JP2023510951A true JP2023510951A (ja) 2023-03-15

Family

ID=76970068

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022544034A Pending JP2023510951A (ja) 2020-01-23 2021-01-18 モノリシック・アプリケーションのマイクロサービス分解戦略

Country Status (6)

Country Link
US (1) US11416243B2 (ja)
JP (1) JP2023510951A (ja)
CN (1) CN114830091A (ja)
DE (1) DE112021000189T5 (ja)
GB (1) GB2607528A (ja)
WO (1) WO2021148927A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11288053B2 (en) * 2019-08-15 2022-03-29 Microstrategy Incorporated Conversion and restoration of computer environments to container-based implementations
US11397576B2 (en) * 2020-03-18 2022-07-26 Hcl Technologies Limited Decomposing a monolithic application into one or more micro services
US11496610B2 (en) * 2020-06-26 2022-11-08 Verizon Patent And Licensing Inc. Network management data translation, querying, and discrepancy detection
US11442725B1 (en) * 2020-12-03 2022-09-13 Amazon Technologies, Inc. Software modernization refactoring of local calls to network calls
US11500628B1 (en) * 2020-12-03 2022-11-15 Amazon Technologies, Inc. Isolated code detection from application code analysis
EP4113939B1 (en) * 2021-07-02 2024-04-03 Tata Consultancy Services Limited Management and orchestration of heterogeneous network environment using dynamic, robust and network aware microservices
US11853753B1 (en) * 2021-08-23 2023-12-26 Amazon Technologies, Inc. Detection, presentation, and resolution of bottlenecks in monolith decomposition
US11847443B2 (en) 2021-09-07 2023-12-19 International Business Machines Corporation Constraints-based refactoring of monolith applications through attributed graph embeddings
US11726778B2 (en) 2021-09-29 2023-08-15 International Business Machines Corporation Translating clusters of a monolith application to microservices
US11836538B2 (en) * 2021-10-11 2023-12-05 International Business Machines Corporation Heterogeneous graph generation for application microservices
US11768679B2 (en) 2021-11-30 2023-09-26 International Business Machines Corporation Identifying microservices for a monolith application through static code analysis
US11853725B2 (en) 2021-12-06 2023-12-26 International Business Machines Corporation Microservices recommendation framework
US11860980B2 (en) * 2022-01-05 2024-01-02 International Business Machines Corporation Cognitive method to split monolithic architecture into microservice architecture
US11893369B2 (en) 2022-01-21 2024-02-06 Red Hat, Inc. Determining a distributed system topology from a single application deployment
US11900087B1 (en) * 2022-03-23 2024-02-13 Amazon Technologies, Inc. Application binary replatforming as a service
US11758010B1 (en) 2022-09-14 2023-09-12 International Business Machines Corporation Transforming an application into a microservice architecture
CN117311801B (zh) * 2023-11-27 2024-04-09 湖南科技大学 一种基于网络化结构特征的微服务拆分方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8973008B2 (en) 2005-05-10 2015-03-03 Oracle America, Inc. Combining different resource types
WO2007129224A2 (en) 2006-02-10 2007-11-15 Make Technologies, Inc. Legacy software modernization system
US7509298B2 (en) 2006-03-31 2009-03-24 International Business Machines Corporation System and method for a logical-model based application understanding and transformation
US10129078B2 (en) * 2014-10-30 2018-11-13 Equinix, Inc. Orchestration engine for real-time configuration and management of interconnections within a cloud-based services exchange
CN107667517B (zh) 2015-06-03 2021-03-19 瑞典爱立信有限公司 用于能够实现第二容器上的反向代理的在第一服务容器内的被植入代理器
US9842045B2 (en) * 2016-02-19 2017-12-12 International Business Machines Corporation Failure recovery testing framework for microservice-based applications
US20180136931A1 (en) * 2016-11-14 2018-05-17 Ca, Inc. Affinity of microservice containers
US10356214B2 (en) * 2017-03-29 2019-07-16 Ca, Inc. Composing monolithic applications based on multi-container applications
US10412154B2 (en) 2017-04-17 2019-09-10 Red Hat, Inc. Configuration recommendation for a microservice architecture
US10430250B2 (en) 2017-10-11 2019-10-01 International Business Machines Corporation Decomposing monolithic application into microservices
US10338913B2 (en) 2017-12-05 2019-07-02 Archemy, Inc. Active adaptation of networked compute devices using vetted reusable software components
US10620947B2 (en) * 2018-02-15 2020-04-14 Wipro Limited Method and system for migrating monolithic enterprise applications to microservice architecture
US10956680B1 (en) * 2018-10-01 2021-03-23 Knexus Research Corporation System and method for temporal expressions processing
US10637952B1 (en) * 2018-12-19 2020-04-28 Sap Se Transition architecture from monolithic systems to microservice-based systems
US20200285451A1 (en) * 2019-03-05 2020-09-10 Sap Se Decoupling microservices from a monolithic application
US11088914B2 (en) * 2019-07-31 2021-08-10 T-Mobile Usa, Inc. Migrating a monolithic software application to a microservices architecture

Also Published As

Publication number Publication date
US20210232390A1 (en) 2021-07-29
US11416243B2 (en) 2022-08-16
WO2021148927A1 (en) 2021-07-29
GB202212227D0 (en) 2022-10-05
GB2607528A (en) 2022-12-07
DE112021000189T5 (de) 2022-09-29
CN114830091A (zh) 2022-07-29

Similar Documents

Publication Publication Date Title
US11416243B2 (en) Microservice decomposition strategy of monolithic applications
Pan et al. Detecting web attacks with end-to-end deep learning
US11755843B2 (en) Filtering spurious knowledge graph relationships between labeled entities
Watson et al. A systematic literature review on the use of deep learning in software engineering research
US10515002B2 (en) Utilizing artificial intelligence to test cloud applications
Linares-Vásquez et al. On using machine learning to automatically classify software applications into domain categories
Althar et al. The realist approach for evaluation of computational intelligence in software engineering
US11720826B2 (en) Feedback loop learning between artificial intelligence systems
US11106801B1 (en) Utilizing orchestration and augmented vulnerability triage for software security testing
US20220374218A1 (en) Software application container hosting
US20220303302A1 (en) Shift-left security risk analysis
Albarghouthi et al. Repairing decision-making programs under uncertainty
Althar et al. Design and development of artificial intelligence knowledge processing system for optimizing security of software system
Sankar et al. Prediction of code fault using Naive Bayes and SVM classifiers
US20210149793A1 (en) Weighted code coverage
US11373220B2 (en) Facilitating responding to multiple product or service reviews associated with multiple sources
Gao et al. PANDA: facilitating usable AI development
WO2023066237A1 (en) Artificial intelligence model learning introspection
US20210019141A1 (en) Intelligent application management and decommissioning in a computing environment
US20200302017A1 (en) Chat analysis using machine learning
Shahidi et al. A semantic malware detection model based on the GMDH neural networks
Karakati et al. Software code refactoring based on deep neural network‐based fitness function
US20230281470A1 (en) Machine learning classification of object store workloads
Dam Empowering software engineering with artificial intelligence
Wu et al. Understanding and Predicting Docker Build Duration: An Empirical Study of Containerized Workflow of OSS Projects

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221226

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230622

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240605