JP7324165B2 - アプリケーション開発支援システム及びアプリケーション開発支援方法 - Google Patents

アプリケーション開発支援システム及びアプリケーション開発支援方法 Download PDF

Info

Publication number
JP7324165B2
JP7324165B2 JP2020047644A JP2020047644A JP7324165B2 JP 7324165 B2 JP7324165 B2 JP 7324165B2 JP 2020047644 A JP2020047644 A JP 2020047644A JP 2020047644 A JP2020047644 A JP 2020047644A JP 7324165 B2 JP7324165 B2 JP 7324165B2
Authority
JP
Japan
Prior art keywords
container
event
driven
api
time
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.)
Active
Application number
JP2020047644A
Other languages
English (en)
Other versions
JP2021149409A (ja
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2020047644A priority Critical patent/JP7324165B2/ja
Priority to US17/022,234 priority patent/US11263107B2/en
Publication of JP2021149409A publication Critical patent/JP2021149409A/ja
Application granted granted Critical
Publication of JP7324165B2 publication Critical patent/JP7324165B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/77Software metrics
    • 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/46Multiprogramming arrangements
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • G06Q10/067Enterprise or organisation modelling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Stored Programmes (AREA)

Description

本発明は、アプリケーション開発支援システム及びアプリケーション開発支援方法に関し、マイクロサービスで構成されるアプリケーションソフトウェア(以後、アプリケーション)の開発においてサーバレスを利用する際の支援を行うアプリケーション開発支援システム及びアプリケーション開発支援方法に適用して好適なものである。
マイクロサービスで構成されるアプリケーションの開発において、アプリケーションリソース利用の効率化のために、サーバレス(またはFaaS(Function as a Service))の利用が広がっている。サーバレスとは、アプリケーション実行のためのサーバリソースを常時起動せずに、アプリケーションのAPI(Application Programming Interface)呼出し等の所定のイベントを契機として、必要に応じて動的に、CPUやメモリ等の計算リソースを確保してサーバを起動するアプリケーション実行環境の仕組みである。
従来、マイクロサービスで構成されるアプリケーションの実行環境(コンテナ)に上記のサーバレスを適用することにより、アプリケーションが使用するリソース量を削減できるだけでなく、リソースの常時管理や常時監視が不要となることから、リソースの使用コストや運用コストを削減できることが知られている(例えば特許文献1)。
米国特許出願公開第2019/0205186号明細書
しかし、マイクロサービスで構成されるアプリケーションの実行環境にサーバレスを適用した場合、上述したようにアプリケーションが使用するリソース量の削減に期待できる一方で、以下のようにAPI応答性能が低下するおそれがあった。すなわち、サーバレスを適用した場合、所定のイベントを契機としたコンテナの駆動(以後、イベント駆動と称する)によってサーバリソースが確保されて初めて、アプリケーションがAPIに応答できる状態となるため、リソース確保に要する時間の分だけ、API呼出しに応答する時間が遅延してしまう。この結果、API呼出しの性能要件を満たせなくなるおそれがあった。
したがって、アプリケーション開発者は、サーバレスを適用しようとする際、アプリケーションリソース使用量の最適化とAPI応答性能の維持との両立を考慮しながら、サーバレス適用の可否を判断しなければならず、この判断の見極めは容易ではなかった。
本発明は以上の点を考慮してなされたもので、マイクロサービスで構成されるアプリケーションの開発において、アプリケーションリソース使用量の最適化とAPI応答性能の維持との両立を考慮したサーバレスの適用可否の検討を支援することができる、アプリケーション開発支援システム及びアプリケーション開発支援方法を提案しようとするものである。
かかる課題を解決するため本発明においては、複数のコンテナから構成されるアプリケーションソフトウェアを実行するシステムにおいて前記アプリケーションソフトウェアの開発を支援するアプリケーション開発支援システムであって、前記複数のコンテナのリソースを提供するコンテナ実行基盤は、前記複数のコンテナの任意のコンテナにサーバレスを適用してイベント駆動コンテナとする機能を有し、前記コンテナ実行基盤のプロセッサがプログラムを実行することにより、前記イベント駆動コンテナがAPI呼出しを受けてからAPIレスポンスを応答するまでに要するAPI処理時間の予測値を算出し、当該算出した予測値と前記複数のコンテナの間のAPI呼出しの順序とに基づいて、前記複数のコンテナの全体におけるAPI処理時間の予測値を算出するAPI処理時間予測処理と、所定の単位期間当たりに前記複数のコンテナが使用するリソースの使用量を算出するリソース使用量算出処理と、前記API処理時間予測処理によって算出された前記複数のコンテナの全体におけるAPI処理時間の予測値を出力するAPI処理時間出力処理と、前記リソース使用量算出処理によって算出された前記複数のコンテナが使用するリソースの使用量を出力するリソース使用量出力処理と、前記イベント駆動コンテナの動作履歴に基づいて、前記イベント駆動コンテナの起動に伴うオーバヘッドの総量を削減するように、前記イベント駆動コンテナの生存時間を調整するコンテナ起動回数オーバヘッド削減処理と、を実行するアプリケーション開発支援システムが提供される。
また、かかる課題を解決するため本発明においては、複数のコンテナから構成されるアプリケーションソフトウェアを実行するシステムに対するアプリケーション開発支援方法であって、前記複数のコンテナのリソースを提供するコンテナ実行基盤は、前記複数のコンテナの任意のコンテナにサーバレスを適用してイベント駆動コンテナとする機能を有し、前記コンテナ実行基盤のプロセッサが、前記イベント駆動コンテナがAPI呼出しを受けてからAPIレスポンスを応答するまでに要するAPI処理時間の予測値を算出し、当該算出した予測値と前記複数のコンテナの間のAPI呼出しの順序とに基づいて、前記複数のコンテナの全体におけるAPI処理時間の予測値を算出するAPI処理時間予測ステップと、前記コンテナ実行基盤のプロセッサが、所定の単位期間当たりに前記複数のコンテナが使用するリソースの使用量を算出するリソース使用量算出ステップと、前記コンテナ実行基盤のプロセッサが、前記API処理時間予測ステップで算出された前記複数のコンテナの全体におけるAPI処理時間の予測値を出力するAPI処理時間出力ステップと、前記コンテナ実行基盤のプロセッサが、前記リソース使用量算出ステップで算出された前記複数のコンテナが使用するリソースの使用量を出力するリソース使用量出力ステップと、前記コンテナ実行基盤のプロセッサが、前記イベント駆動コンテナの動作履歴に基づいて、前記イベント駆動コンテナの起動に伴うオーバヘッドの総量を削減するように、前記イベント駆動コンテナの生存時間を調整するコンテナ起動回数オーバヘッド削減ステップと、を備えるアプリケーション開発支援方法が提供される。
本発明によれば、マイクロサービスで構成されるアプリケーションの開発において、アプリケーションリソース使用量の最適化とAPI応答性能の維持との両立を考慮したサーバレスの適用可否の検討を支援することができる。
本発明の一実施形態に係るアプリケーション開発支援システム1を含む全体システムの構成例を示すブロック図である。 ユーザ端末10の構成例を示すブロック図である。 コンテナ実行基盤20の構成例を示すブロック図である。 コンテナイメージリポジトリマネージャ30の構成例を示すブロック図である。 コンテナテーブル225の一例を示す図である。 コンテナ実行基盤リソーステーブル226の一例を示す図である。 イベント駆動コンテナ設定テーブル227の一例を示す図である。 コンテナAPI呼出しログファイル2310の一例を示す図である。 イベント駆動コンテナ起動/削除ログファイル2320の一例を示す図である。 コンテナイメージテーブル322の一例を示す図である。 1のアプリケーションのコンテナに関するリソースの構成例を示す図である。 APIリクエストヘッダ処理の処理手順例を示すフローチャートである。 イベント駆動コンテナ起動処理の処理手順例を示すフローチャートである。 イベント駆動コンテナ削除処理の処理手順例を示すフローチャートである。 イベント駆動コンテナAPI処理時間予測処理の処理手順例を示すフローチャートである。 コンテナ起動回数オーバヘッド削減処理の処理手順例を示すフローチャートである。 第1のコンテナ生存時間延長処理の処理手順例を示すフローチャートである。 第1のコンテナ生存時間短縮処理の処理手順例を示すフローチャートである。 第2のコンテナ生存時間延長処理の処理手順例を示すフローチャートである。 第2のコンテナ生存時間短縮処理の処理手順例を示すフローチャートである。 単位期間メモリ使用量算出処理の処理手順例を示すフローチャートである。 単位期間CPUメモリ使用量算出処理の処理手順例を示すフローチャートである。 API処理時間表示画面の具体例を示す図(その1)である。 API処理時間表示画面の具体例を示す図(その2)である。 メモリ使用量表示画面の一例を示す図である。 CPU使用量表示画面の一例を示す図である。
以下の説明において、「インターフェース装置」は、1以上のインターフェースデバイスである。この「1以上のインターフェースデバイス」は、下記のI/O(Input/Output)インターフェースデバイス又は通信インターフェースデバイスのうちの少なくとも何れかであればよい。
I/Oインターフェースデバイスは、I/Oデバイスと遠隔の表示用計算機とのうちの少なくとも一つに対するインターフェースデバイスである。表示用計算機に対するI/Oインターフェースデバイスは、通信インターフェースデバイスでよい。少なくとも一つのI/Oデバイスは、ユーザインターフェースデバイス(例えば、キーボード及びポインティングデバイスのような入力デバイス)、または表示デバイスのような出力デバイスの何れでもよい。
通信インターフェースデバイスは、1以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし、2以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以下の説明において、「メモリ」は、1以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも1つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
また、以下の説明において、「永続記憶装置」は、1以上の永続記憶デバイスである。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)であり、具体的には例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)である。
また、以下の説明において、「記憶装置」は、上記「メモリ」と上記「永続記憶装置」の何れであってもよい。
また、以下の説明において、「プロセッサ」は、1以上のプロセッサデバイスである。少なくとも1つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスであるが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。また、少なくとも1つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。また、少なくとも1つのプロセッサデバイスは、プロセッサコアでもよい。また、少なくとも1つのプロセッサデバイスは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサデバイスでもよい。
また、以下の説明では、「xxxテーブル」等の表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。したがって、「xxxテーブル」を「xxx情報」と言い換えることができる。また、以下の説明において、各テーブルの構成は一例であり、1のテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部又は一部が1のテーブルであってもよい。
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置及び/又はインターフェース装置等を用いながら行うため、処理の主語が、プロセッサ(あるいは、そのプロセッサを有するコントローラのようなデバイス)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、2以上のプログラムが1のプログラムとして実現されてもよいし、1のプログラムが2以上のプログラムとして実現されてもよい。
また、以下の説明では、「xxx部」等の表現にて機能を説明することがあるが、当該機能は、1以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、1以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び/又はインターフェース装置等を用いながら行われるため、当該機能はプロセッサの少なくとも一部とされてもよい。また、機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。また、プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしてもよい。
また、以下の説明では、「計算機システム」は、1以上の物理的な計算機を含んだシステムである。物理的な計算機は、汎用計算機でも専用計算機でもよい。
以下、図面を参照して、本発明の一実施形態を詳述する。
(1)システム構成
図1は、本発明の一実施形態に係るアプリケーション開発支援システム1を含む全体システムの構成例を示すブロック図である。図1に示したように全体システムは、ユーザ端末10と、コンテナ実行基盤20と、コンテナイメージリポジトリマネージャ30とが、ネットワークスイッチ40(個別には例えばネットワークスイッチ40A,40B)で集線されるネットワーク41に接続されて構成される。本実施形態に係るアプリケーション開発支援システム1は、主にコンテナ実行基盤20及びコンテナイメージリポジトリマネージャ30から構成されるが、ユーザ端末10を含む構成と考えてもよい。
ユーザ端末10は、ユーザ2が操作する計算機である。ユーザ2は、ユーザ端末10で動作するウェブブラウザ(図2のウェブブラウザ122参照)に、コンテナ実行基盤20が提供するGUI(Graphical User Interface)を表示させ、当該GUI上で、情報の確認または情報の更新を実施する。
コンテナ実行基盤20は、コンテナを実行する機能と、イベント駆動でのコンテナ起動及び自動的にコンテナを削除する自動コンテナ削除を実施するサーバレス機能とを有する計算機(サーバ)である。
本実施形態では、コンテナ実行基盤20のリソースを利用して、個々に独立したマイクロサービス(以降、単に「サービス」ともいう)で構成されるアプリケーションの実行環境(コンテナ)が提供される。アプリケーションのマイクロサービス構成の具体例は、後述する図11に示す。また、コンテナ実行基盤20は、上記サーバレス機能を有することによって、コンテナにサーバレスを適用することができる。サーバレスが適用されるコンテナは、イベント(例えばAPI呼出し)をトリガとして、サーバリソースを確保した上で駆動される(イベント駆動)。本実施形態では、イベント駆動されるコンテナをイベント駆動コンテナと称する。
コンテナイメージリポジトリマネージャ30は、コンテナ実行基盤20で実行されるコンテナのコンテナイメージを管理する機能を有する計算機である。コンテナイメージリポジトリマネージャは、コンテナレジストリとも呼ばれる。
ネットワークスイッチ40は、ユーザ端末10、コンテナ実行基盤20、及びコンテナイメージリポジトリマネージャ30が接続されるネットワーク41のスイッチである。ネットワークスイッチ40は具体的には例えば、ローカルネットワーク(例えばLAN(Local Area Network))におけるスイッチでよい。
図2は、ユーザ端末10の構成例を示すブロック図である。図2に例示したユーザ端末10は、プロセッサ11と、メモリ12と、永続記憶装置13と、インターフェース装置14と、これらの構成要素を接続するバス15とを有する。
図3は、コンテナ実行基盤20の構成例を示すブロック図である。図3に例示したコンテナ実行基盤20は、プロセッサ21と、メモリ22と、永続記憶装置23と、インターフェース装置24と、これらの構成要素を接続するバス25とを有する。
図4は、コンテナイメージリポジトリマネージャ30の構成例を示すブロック図である。図4に例示したコンテナイメージリポジトリマネージャ30は、プロセッサ31と、メモリ32と、永続記憶装置33と、インターフェース装置34と、これらの構成要素を接続するバス35とを有する。
図2~図4では、ユーザ端末10、コンテナ実行基盤20、及びコンテナイメージリポジトリマネージャ30のそれぞれについて、符号は異なるものの、共通する構成としてプロセッサ、メモリ、永続記憶装置、インターフェース装置、及びバスが示されている。これらは物理的な装置としては同様であると考えてよい。
例えば、ユーザ端末10において、プロセッサ11は、メモリ12に記憶されているプログラムを実行することによって、所定の機能を実現する。メモリ12は、プロセッサ11によって実行されるプログラム及び当該プログラムの実行に必要なデータを記憶する。上記プログラムは、永続記憶装置13からメモリ12にロードされる。インターフェース装置14は、ネットワークスイッチ40(40A)に接続される。このように構成されたユーザ端末10は、インターフェース装置14を介して、システム内の他の計算機と通信することができる。
なお、図2~図4は、ユーザ端末、コンテナ実行基盤、及びコンテナイメージリポジトリマネージャがそれぞれ物理的な計算機で実現される場合の各ノードのハードウェア構成例を示したものであるが、これらの計算機は必ずしも全てが物理的な計算機で実現される必要はなく、少なくとも一部が仮想マシンやコンテナ等の仮想環境に置き換えて実現されてもよい。
(2)プログラム及びデータ
図2~図4に示したように、ユーザ端末10、コンテナ実行基盤20、及びコンテナイメージリポジトリマネージャ30は、それぞれのメモリや永続記憶装置に、異なるプログラムやデータを記憶している。以下では、各ノードに記憶される特徴的なプログラムやデータについて説明する。
(2-1)ユーザ端末10のプログラム及びデータ
図2に示したように、ユーザ端末10のメモリ12には、OS(Operating System)121及びウェブブラウザ122が記憶される。
(2-2)コンテナ実行基盤20のプログラム及びデータ
図3に示したように、コンテナ実行基盤20のメモリ22には、OS221、コンテナ管理プログラム222、イベント駆動コンテナ管理プログラム223、コンテナログ管理プログラム224、コンテナテーブル225、コンテナ実行基盤リソーステーブル226、イベント駆動コンテナ設定テーブル227、及び複数のコンテナ228が記憶される。また、コンテナ実行基盤20の永続記憶装置23には、コンテナAPI呼出しログ格納ファイルシステム231、及びコンテナ起動/削除ログ格納ファイルシステム232が記憶される。
コンテナ管理プログラム222は、コンテナ228の起動等、コンテナ228に関する全般的な管理を行うプログラムである。
イベント駆動コンテナ管理プログラム223は、コンテナ228のイベント駆動を管理するプログラムである。
コンテナログ管理プログラム224は、コンテナ228に関して記録されるログを管理するプログラムであって、例えば、永続記憶装置23に記憶されているファイルシステムを呼び出してログの記録を行わせる。
図5は、コンテナテーブル225の一例を示す図である。コンテナテーブル225は、コンテナ228に関する情報を管理するためのテーブルであって、コンテナ228ごとにエントリを有する。図5の場合、コンテナテーブル225は、コンテナID欄2251、コンテナイメージID欄2252、コンテナ名欄2253、コンテナ起動状態欄2254、コンテナ起動時間欄2255、イベント駆動欄2256、及びコンテナ生存時間欄2257のデータ項目を有して構成される。
コンテナテーブル225の各データ項目について説明する。コンテナID欄2251は、コンテナ228を識別可能な識別子(コンテナID)を格納する。コンテナイメージID欄2252は、コンテナ228のコンテナイメージを識別可能な識別子(コンテナイメージID)を格納する。コンテナ名欄2253は、コンテナ228の名称を格納する。コンテナ起動状態欄2254は、コンテナ228の起動状態を格納する。例えばコンテナ228が起動している状態のとき、コンテナ起動状態欄2254に「running」と記録される。コンテナ起動時間欄2255は、コンテナ228の起動に要した時間(コンテナ起動時間)を格納する。イベント駆動欄2256は、コンテナ228がサーバレス適用(イベント駆動)の対象か否かを示す情報を格納する。例えば、コンテナ228がサーバレス適用であれば、イベント駆動欄2256に「true」と記録され、コンテナ228がサーバレス適用外であれば、イベント駆動欄2256に「false」と記録される。コンテナ生存時間欄2257は、コンテナ228の生存時間(コンテナ生存時間)が格納される。コンテナ生存時間とは、起動コンテナの削除を判断するために設定される時間であって、初期値は既定される。コンテナ生存時間は、例えば、コンテナが起動した後の最後のAPIリクエスト(APIレスポンスとしてもよい)を起点とする経過時間で表される。
図6は、コンテナ実行基盤リソーステーブル226の一例を示す図である。コンテナ実行基盤リソーステーブル226は、コンテナ実行基盤20のコンテナ228に関連するリソースに関する情報を管理するためのテーブルであって、コンテナ228ごとにエントリを有する。図6の場合、コンテナ実行基盤リソーステーブル226は、ネームスペース名欄2261、サービス名欄2262、コンテナグループ名欄2263、コンテナID欄2264、及びコンテナイメージID欄2265のデータ項目を有して構成される。
コンテナ実行基盤リソーステーブル226の各データ項目について説明する。ネームスペース名欄2261は、リソースの全体のグループを定義するネームスペース名を格納する。サービス名欄2262は、コンテナ228へのアクセスポイントを定義するサービス名を格納する。コンテナグループ名欄2263は、コンテナ228のグループを定義するコンテナグループ名を格納する。コンテナID欄2264は、コンテナ228のコンテナIDを格納する。コンテナイメージID欄2265は、コンテナ228のコンテナイメージIDを格納する。
図7は、イベント駆動コンテナ設定テーブル227の一例を示す図である。イベント駆動コンテナ設定テーブル227は、イベント駆動コンテナに関する設定値を管理するためのテーブルである。図7の場合、イベント駆動コンテナ設定テーブル227は、コンテナ生存時間初期値欄2271、コンテナ生存時間下限閾値欄2272、コンテナ生存時間上限閾値欄2273、コンテナ生存時間増減単位欄2274、コンテナ起動回数下限閾値欄2275、及びコンテナ起動回数上限閾値欄2276のデータ項目を有して構成される。
イベント駆動コンテナ設定テーブル227の各データ項目について説明する。コンテナ生存時間初期値欄2271は、コンテナ生存時間の初期値を格納する。コンテナ生存時間下限閾値欄2272は、コンテナ生存時間の下限閾値の時間を格納する。コンテナ生存時間上限閾値欄2273は、コンテナ生存時間の上限閾値の時間を格納する。コンテナ生存時間増減単位欄2274は、コンテナ生存時間の増減単位時間を格納する。コンテナ起動回数下限閾値欄2275は、コンテナ起動回数の下限閾値回数を格納する。コンテナ起動回数上限閾値欄2276は、コンテナ起動回数の上限閾値回数を格納する。イベント駆動コンテナ設定テーブル227の各項目値は、予め定義され、すべてのコンテナ228に共通して適用されるとする。
コンテナ228は、マイクロサービスで構成されるアプリケーションの実行環境であり、アプリケーションを構成するマイクロサービスごとに1以上のコンテナ228が存在する。アプリケーションのマイクロサービス構成の具体例は、後述する図11に示す。コンテナ228は、サーバレス機能が適用されない場合は、コンテナ実行基盤20のリソースを割り当てられて常時起動し、サーバレス機能が適用される場合は、イベント(例えばAPI呼出し)をトリガとして、コンテナ実行基盤20のリソースが割り当てられて起動する(イベント駆動)。前述した通り、イベント駆動されるコンテナ228をイベント駆動コンテナと呼ぶ。
コンテナAPI呼出しログ格納ファイルシステム231は、コンテナ228のAPI呼出しに関するログを記録するファイルシステムである。本実施形態では、コンテナ228のAPI呼出しが行われる場合に、イベント駆動コンテナ管理プログラム223がコンテナAPI呼出しログ格納ファイルシステム231を呼び出してログを記録させることにより、永続記憶装置23内にコンテナAPI呼出しログファイル2310(図8参照)が生成/更新される。
図8は、コンテナAPI呼出しログファイル2310の一例を示す図である。コンテナAPI呼出しログファイル2310は、コンテナ228のAPI呼出しのログを記録するファイルであって、API呼出しの履歴ごとにエントリを有する。図8の場合、コンテナAPI呼出しログファイル2310は、時刻欄2311、サービスID欄2312、API欄2313、リクエスト/レスポンス欄2314、リクエストID欄2315、SpanID欄2316、及び親SpanID欄2317のデータ項目を有して構成される。
コンテナAPI呼出しログファイル2310の各データ項目について説明する。時刻欄2311は、API呼出しが実施された時刻の情報を格納する。サービスID欄2312は、API呼出し先のエンドポイントとなるサービスを識別可能な識別子(サービスID)を格納する。API欄2313は、APIのメソッドとURI(Uniform Resource Identifier)を格納する。リクエスト/レスポンス欄2314は、APIの種別がリクエスト(request)であるかレスポンス(response)であるかを示す情報を格納する。リクエストID欄2315は、APIリクエストの識別子となるリクエストIDを格納する。SpanID欄2316は、APIリクエストの処理を識別する識別子(SpanID)を格納する。親SpanID欄2317は、APIの呼出し元の処理を識別するSpanID(親SpanID)を格納する。
コンテナ起動/削除ログ格納ファイルシステム232は、イベント駆動されるコンテナ228(イベント駆動コンテナ)に関するログを記録するファイルシステムである。本実施形態では、イベント駆動コンテナが起動または削除される場合(または、起動/削除を確認する場合)に、コンテナログ管理プログラム224がコンテナ起動/削除ログ格納ファイルシステム232を呼び出してログを記録させることにより、永続記憶装置23内にイベント駆動コンテナ起動/削除ログファイル2320(図9参照)が生成/更新される。
図9は、イベント駆動コンテナ起動/削除ログファイル2320の一例を示す図である。イベント駆動コンテナ起動/削除ログファイル2320は、イベント駆動コンテナの起動/削除のログを記録するファイルであって、イベント駆動コンテナの起動または削除の履歴ごとにエントリを有する。図9の場合、イベント駆動コンテナ起動/削除ログファイル2320は、時刻欄2321、サービスID欄2322、コンテナID欄2323、コンテナイメージID欄2324、及びコンテナ起動/削除欄2325のデータ項目を有して構成される。
イベント駆動コンテナ起動/削除ログファイル2320の各データ項目について説明する。時刻欄2321は、イベント駆動コンテナが起動または削除された時刻の情報を格納する。サービスID欄2322は、イベント駆動コンテナのエンドポイントとなるサービスのサービスIDを格納する。コンテナID欄2323は、イベント駆動コンテナのコンテナIDを格納する。コンテナイメージID欄2324は、イベント駆動コンテナのコンテナイメージIDを格納する。コンテナ起動/削除欄2325は、イベント駆動コンテナが行った動作が起動であるか削除であるかを示す情報を格納する。
(2-3)コンテナイメージリポジトリマネージャ30のプログラム及びデータ
図4に示したように、コンテナイメージリポジトリマネージャ30のメモリ32には、OS321及びコンテナイメージテーブル322が記憶される。また、コンテナイメージリポジトリマネージャ30の永続記憶装置33には、コンテナイメージの実体の他に、コンテナイメージ格納ファイルシステム331が記憶される。
図10は、コンテナイメージテーブル322の一例を示す図である。コンテナイメージテーブル322は、永続記憶装置33に格納されるコンテナイメージの情報を管理するためのテーブルであって、コンテナイメージごとにエントリを有する。図10の場合、コンテナイメージテーブル322は、パス欄3221、コンテナイメージID欄3222、及びtag欄3223のデータ項目を有して構成される。
コンテナイメージテーブル322の各データ項目について説明する。パス欄3221は、コンテナイメージの名前情報を格納する。コンテナイメージID欄3222は、コンテナイメージのコンテナイメージIDを格納する。tag欄3223は、コンテナイメージのメタ情報の配列を格納する。
(3)アプリケーションのマイクロサービス構成
本実施形態では、上述した構成を有するコンテナ実行基盤20及びコンテナイメージリポジトリマネージャ30が、アプリケーションの実行環境を、マイクロサービスで構成されるコンテナ228で提供する。そして、本実施形態に係るアプリケーション開発支援システム1は、このようなアプリケーションの実行環境(コンテナ)について、サーバレスを適用した際のAPI応答性能(API処理時間)の予測値を算出することができ、さらに、サーバレス適用前後のアプリケーションのリソース使用量を算出することができる。
図11は、1のアプリケーションのコンテナに関するリソースの構成例を示す図である。図11には、マイクロサービスで構成される1つのアプリケーションの実行環境として4つのコンテナ228(個別には、コンテナ288a~228d)が示されている。図11において、1のアプリケーションのコンテナ228に関するリソースの全体(グループ)はネームスペース410で表され、ネームスペース410は、サービス420、コンテナグループ430、及びコンテナ228等を備えて構成される。
ネームスペース410は、リソースのグループを示すものであり、本例では「app1」の名称が付されている。
サービス420(個別にはサービス420a~420d)は、各コンテナ228へアクセスする際のエンドポイントとなり、本例では、アクセス先のコンテナ228と同じ名称(「frontend1」、「backend1」、「backend2」、「backend3」)が付されている。
コンテナグループ430は、マイクロサービスを単位とするコンテナ228のグループであり、それぞれプロキシコンテナ431及びコンテナ228を含んで構成される。個別には、コンテナグループ430aは、プロキシコンテナ431aとコンテナ228aを含んで構成され、コンテナグループ430bは、プロキシコンテナ431bとコンテナ228bを含んで構成され、コンテナグループ430cは、プロキシコンテナ431cとコンテナ228cを含んで構成され、コンテナグループ430dは、プロキシコンテナ431dとコンテナ228dを含んで構成される。
各コンテナグループ430のコンテナ228は、同じコンテナグループ430のプロキシコンテナ431を経由して、自コンテナグループ430外のコンポーネントとの通信440を行う。各プロキシコンテナ431は、コンテナ228に対する通信を管理するものであり、例えば、後述するAPIリクエストヘッダ処理(図12参照)を実行する。
図11の場合、通信440は、コンテナ実行基盤20の外部からフロントエンドのコンテナ228aへの通信から始まり、その後、コンテナ228aからコンテナ228b、コンテナ228bからコンテナ228c、コンテナ228cからコンテナ228dの順に実施されることを想定している。但し、図11に示したリソース構成及び通信440の経路は一例に過ぎず、本実施形態はこれに限定されるものではない。例えば、コンテナグループ430の個数は4以外であってもよいし、1のコンテナグループ430のなかに複数のコンテナ228が含まれてもよいし、ネームスペース410内における通信440の経路が図11と異なるものであってもよい。
(4)処理
本実施形態に係るアプリケーション開発支援システム1が実行する処理について、詳しく説明する。なお、以降の説明では、アプリケーションのコンテナ228のリソース構成は、図11に例示したリソース構成を想定している。
(4-1)APIリクエストヘッダ処理
図12は、APIリクエストヘッダ処理の処理手順例を示すフローチャートである。APIリクエストヘッダ処理は、APIリクエストに対して、API呼出しログの分析をするためのヘッダ情報を付与する処理であって、コンテナ実行基盤20のプロキシコンテナ431によって実行される。APIリクエストヘッダ処理は、後述する他の処理とは独立したタイミングで実行される。APIリクエストヘッダ処理において付与される具体的なヘッダは、各APIリクエストを識別するためのリクエストIDを設定する「X-REQUEST-ID」ヘッダ、各APIリクエストの処理を識別するSpanIDを設定する「X-SPAN-ID」ヘッダ、及び、各APIリクエストの呼出し元の処理を識別する親SpanIDを設定する「X-PARENT-SPAN-ID」ヘッダである。
図12によればまず、プロキシコンテナ431は、受信したAPIリクエストのヘッダに「X-REQUEST-ID」ヘッダが含まれるか否かを確認する(ステップS101)。「X-REQUEST-ID」ヘッダが含まれる場合には(ステップS101のYES)、ステップS106に進み、「X-REQUEST-ID」ヘッダが含まれない場合には(ステップS101のNO)、ステップS102に進む。
ステップS102では、プロキシコンテナ431は、APIリクエストを識別するためのリクエストIDを、UUID(Universally Unique Identifier)等のグローバルユニークなIDで発行する。
次に、プロキシコンテナ431は、ステップS102で発行したリクエストIDを「X-REQUEST-ID」ヘッダに設定し(ステップS103)、「X-PARENT-SPAN-ID」ヘッダに空文字列を設定し(ステップS104)、「X-SPAN-ID」ヘッダに空文字列を設定する(ステップS105)。
ステップS106では、プロキシコンテナ431は、「X-PARENT-SPAN-ID」ヘッダに、「X-SPAN-ID」ヘッダに設定された文字列を設定する。なお、ステップS101のNOを経由してステップS106の処理が行われる場合は、先に実行されたステップS104,S105の処理によって、「X-PARENT-SPAN-ID」ヘッダ及び「X-SPAN-ID」ヘッダに空文字列が設定されているため、特段の処理を行わずにステップS107に進んでもよい。
次に、プロキシコンテナ431は、SpanIDを、UUID等のグローバルユニークなIDで発行する(ステップS107)。
次に、プロキシコンテナ431は、ステップS107で発行したSpanIDを「X-SPAN-ID」ヘッダに設定し(ステップS108)、APIリクエストヘッダ処理を終了する。
(4-2)イベント駆動コンテナ起動処理
図13は、イベント駆動コンテナ起動処理の処理手順例を示すフローチャートである。イベント駆動コンテナ起動処理は、イベントのAPIリクエストに対して、サーバレスを適用するコンテナ(イベント駆動コンテナ)を起動する処理であって、イベント駆動コンテナ管理プログラム223によって実行される。
図13によればまず、イベント駆動コンテナ管理プログラム223は、APIリクエストを検知する(ステップS201)。
次に、イベント駆動コンテナ管理プログラム223は、ステップS201で検知したAPIリクエストの送信先のコンテナ228について、当該コンテナ228のためのサーバリソースをコンテナ実行基盤20に確保した上で、当該コンテナ228を起動し(ステップS202)、イベント駆動コンテナ起動処理を終了する。なお、イベント駆動コンテナは、イベント駆動によってサーバリソースが確保された後、APIレスポンスを返すことによって、API呼出しに応答する。
(4-3)イベント駆動コンテナ削除処理
図14は、イベント駆動コンテナ削除処理の処理手順例を示すフローチャートである。イベント駆動コンテナ削除処理は、イベント駆動によって起動されたイベント駆動コンテナを削除する処理であって、イベント駆動コンテナ管理プログラム223によって実行される。
図14によればまず、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225で管理されている複数のコンテナ228のうちから1つのコンテナ228を選択し(以後、本処理において当該コンテナと称する)、当該コンテナが起動中のイベント駆動コンテナであるか否かを判定する(ステップS301)。具体的には、イベント駆動コンテナ管理プログラム223は、当該コンテナに対応するコンテナテーブル225のエントリにおいて、コンテナ起動状態欄2254の記録内容が「running」であり、かつ、イベント駆動欄2256の記録内容が「true」であるか否かを判定する。ここで、コンテナ起動状態欄2254の「running」は当該コンテナが起動中であることを意味し、イベント駆動欄2256の「true」は当該コンテナがサーバレス適用対象である、すなわちイベント対象コンテナであることを意味する。
そして、ステップS301において上記の2つの判定基準がともに満たされる場合、イベント駆動コンテナ管理プログラム223は、当該コンテナが起動中のイベント駆動コンテナであると判定し(ステップS301のYES)、ステップS302の処理に進む。一方、ステップS301において上記の2つの判定基準の少なくとも一方が満たされない場合には、イベント駆動コンテナ管理プログラム223は、当該コンテナは起動中のイベント駆動コンテナではないと判定し(ステップS301のNO)、ステップS308の処理に進む。
ステップS302では、イベント駆動コンテナ管理プログラム223は、現在時刻を取得する。
次に、イベント駆動コンテナ管理プログラム223は、当該コンテナにおけるAPIリクエストの最新の受信時刻を取得する(ステップS303)。APIリクエストの最新の受信時刻は、コンテナAPI呼出しログファイル2310の時刻欄2311の記録内容から取得できる(図8参照)。
次に、イベント駆動コンテナ管理プログラム223は、イベント駆動コンテナの生存時間を取得する(ステップS304)。イベント駆動コンテナの生存時間は、イベント駆動コンテナ設定テーブル227のコンテナ生存時間初期値欄2271の記録内容から取得できる。
次に、イベント駆動コンテナ管理プログラム223は、ステップS303で取得したAPIリクエストの最新の受信時刻からステップS302で取得した現在時刻までの経過時間(コンテナ稼働時間)を算出する(ステップS305)。
次に、イベント駆動コンテナ管理プログラム223は、ステップS305で算出したコンテナ稼働時間(稼働時間)が、ステップS304で取得したイベント駆動コンテナ生存時間(生存時間)よりも大きいか否かを判定する(ステップS306)。稼働時間が生存時間よりも大きい場合は(ステップS306のYES)、ステップS307に進み、稼働時間が生存時間以下である場合は(ステップS306のNO)、ステップS307をスキップしてステップS308に進む。
ステップS307では、ステップS306の判定によって当該コンテナの稼働時間が生存時間を超過していることが確認されていることから、イベント駆動コンテナ管理プログラム223は、当該コンテナを削除し、ステップS308に進む。
ステップS308では、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225で管理されている複数のコンテナ228に、ステップS301~S307の処理を行っていないコンテナ228が存在するか否かを確認する。未処理のコンテナ228が存在する場合(ステップS308のYES)、イベント駆動コンテナ管理プログラム223は、未処理のコンテナ228のうちの1つを選択し、ステップS301からの処理を繰り返す。一方、全てのコンテナ228について処理済みである場合は(ステップS308のNO)、イベント駆動コンテナ管理プログラム223はイベント駆動コンテナ削除処理を終了する。
(4-4)イベント駆動コンテナAPI処理時間予測処理
図15は、イベント駆動コンテナAPI処理時間予測処理の処理手順例を示すフローチャートである。イベント駆動コンテナAPI処理時間予測処理は、イベント駆動コンテナがAPI呼出しを受けてからAPIレスポンスを返して応答するまでに要するAPI処理時間の予測値(API処理時間予測値)を算出し、算出したAPI処理時間予測値を用いて、アプリケーションを構成するコンテナ全体におけるAPI処理時間の予測値(全API処理時間予測値)を算出する処理であって、イベント駆動コンテナ管理プログラム223によって実行される。
イベント駆動コンテナAPI処理時間予測処理は、後述するAPI処理時間表示画面(図24,図25参照)において何れかのコンテナがイベント駆動の対象としてユーザから選択された場合、具体的には「サーバレス適用」のチェックボックスにチェックが付けられた場合に、処理が開始される。
図15によればまず、イベント駆動コンテナ管理プログラム223は、イベント駆動の対象として選択されたコンテナ(以後、対象コンテナ)を選択する(ステップS401)。
次に、イベント駆動コンテナ管理プログラム223は、対象コンテナを呼び出すAPIについてのAPI情報を取得する(ステップS402)。API情報は、コンテナAPI呼出しログファイル2310において、対象コンテナに対応するサービスID(サービスID欄2312)を有するエントリを検索することによって、当該エントリのAPI欄2313の記録内容から取得することができる。
次に、イベント駆動コンテナ管理プログラム223は、ステップS402でAPI情報を取得したAPIについて、対象コンテナがAPIリクエストを受け取ってからAPIレスポンスを返すまでに要する応答時間(API応答時間)を算出する(ステップS403)。API応答時間は、ステップS402で検索したコンテナAPI呼出しログファイル2310のエントリのうち、同一のAPI情報についてリクエスト/レスポンス欄2314に「response」が記録されたエントリの時刻(時刻欄2311)からリクエスト/レスポンス欄2314に「request」が記録されたエントリの時刻(時刻欄2311)を差し引くことによって算出できる。なお、イベント駆動コンテナは、イベント駆動によって起動されるまでは、サーバリソースが割り当てられていないため、APIリクエストの受信やAPIレスポンスの送信を行うことはできない。
次に、イベント駆動コンテナ管理プログラム223は、対象コンテナのコンテナ起動時間を取得する(ステップS404)。コンテナ起動時間は、コンテナテーブル225のコンテナ起動時間欄2255の記録内容から取得することができる。
次に、イベント駆動コンテナ管理プログラム223は、ステップS403で算出したAPI応答時間とステップS404で取得したコンテナ起動時間とを合計することによって、API呼出しが行われてから対象コンテナが応答するまでに要するAPI処理時間の予測値を算出する(ステップS405)。
そして最後に、イベント駆動コンテナ管理プログラム223は、ステップS405で算出した対象コンテナにおけるAPI処理時間予測値に基づいて、アプリケーションのコンテナ228全体におけるAPI処理時間の予測値(全API処理時間予測値)を算出し、ユーザ端末10のウェブブラウザ122に表示されるAPI処理時間表示画面の表示内容に反映させ(ステップS406)、イベント駆動コンテナAPI処理時間予測処理を終了する。API処理時間表示画面については、図24,図25を参照しながら後述する。
なお、本例では、アプリケーションのコンテナ228全体におけるAPI処理時間の予測値をAPI処理時間表示画面に反映させる処理(ステップS406)までをイベント駆動コンテナAPI処理時間予測処理における一連の処理として説明したが、イベント駆動コンテナ管理プログラム223は、ステップS406に相当する処理を、上記一連の処理とは別の出力処理として実行するようにしてもよい。
(4-5)コンテナ起動回数オーバヘッド削減処理
図16は、コンテナ起動回数オーバヘッド削減処理の処理手順例を示すフローチャートである。
図13及び図14を参照しながら説明したように、イベント駆動コンテナは、イベント(例えばAPI呼出し)をトリガとしてイベント駆動し、その後、生存時間が経過した場合に削除される。したがって、イベント駆動コンテナは、起動及び削除の処理が行われるごとにオーバヘッドが発生し、起動回数に応じてオーバヘッドの総量が増加する。ところで、同一のイベント駆動コンテナに対して所定期間内に複数回のイベント(例えばAPI呼出し)が発生する場合には、イベント駆動コンテナの起動及び削除を複数回繰り返すよりも、生存時間を延長して起動状態を維持しておく方が、オーバヘッドの総量を削減できるケースが想定される。また一方で、イベント駆動コンテナの生存時間が必要以上に長い場合は、起動回数は減少するものの、イベント駆動コンテナの起動状態が無用に続くことによりコンテナ実行基盤20のリソースを無駄に確保してしまうため、生存時間を短縮したほうが好ましいケースが想定される。
そこで、本実施形態では、イベント駆動コンテナの起動に伴うオーバヘッドの総量を削減するために、イベント駆動コンテナ管理プログラム223が、図16に示すコンテナ起動回数オーバヘッド削減処理を実行することができるようにしている。詳細な処理手順は以下に説明するが、コンテナ起動回数オーバヘッド削減処理において、イベント駆動コンテナ管理プログラム223は、イベント駆動コンテナの過去の動作履歴に基づいてイベント駆動コンテナの生存時間を延長または短縮することによってコンテナ起動回数を調整し、アプリケーションにおけるイベント駆動コンテナの起動に伴うオーバヘッドを削減する。コンテナ起動回数オーバヘッド削減処理は、任意のタイミング(例えば1日に1回)で実行される。
図16において、ステップS501~S507の処理は1つのイベント駆動コンテナに関する処理であって、処理対象となる1つのイベント駆動コンテナは、イベント駆動コンテナ管理プログラム223が、コンテナテーブル225のイベント駆動欄2256に「true」と記録されているコンテナから1つを選択することによって決定される。
まず、ステップS501において、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナの起動回数(コンテナ起動回数)を取得する(ステップS501)。コンテナ起動回数は、所定期間(例えば、前回のコンテナ起動回数オーバヘッド削減処理が実行されてから現時点まで)を対象として取得され、具体的な回数は、イベント駆動コンテナ起動/削除ログファイル2320を参照することによって取得できる。
次に、イベント駆動コンテナ管理プログラム223は、ステップS501で取得したコンテナ起動回数がコンテナ起動回数上限閾値より大きいか否かを判定する(ステップS502)。コンテナ起動回数上限閾値は、イベント駆動コンテナ設定テーブル227のコンテナ起動回数上限閾値欄2276に記録されている。ステップS502においてコンテナ起動回数がコンテナ起動回数上限閾値より大きい場合は(ステップS502のYES)、ステップS503に進み、コンテナ起動回数がコンテナ起動回数上限閾値以下である場合は(ステップS502のNO)、ステップS505に進む。
ステップS503では、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナにおけるコンテナ生存時間が、コンテナ生存時間上限閾値より小さいか否かを判定する。コンテナ生存時間は、コンテナテーブル225のコンテナ生存時間欄2257を参照することによって取得でき、初期値は、イベント駆動コンテナ設定テーブル227のコンテナ生存時間初期値欄2271の記録内容となっている。また、コンテナ生存時間上限閾値は、イベント駆動コンテナ設定テーブル227のコンテナ生存時間上限閾値欄2273に記録されている。
ステップS503においてコンテナ生存時間がコンテナ生存時間上限閾値より小さい場合は(ステップS503のYES)、処理対象のイベント駆動コンテナについてコンテナ生存時間を延長する余地があることから、イベント駆動コンテナ管理プログラム223は、コンテナ生存時間を延長するコンテナ生存時間延長処理を実行し(ステップS504)、その終了後にステップS508に進む。コンテナ生存時間延長処理の具体的な処理手順については、後述する図17に第1の処理手順例を示し、図19に第2の処理手順例を示す。
一方、ステップS503においてコンテナ生存時間がコンテナ生存時間上限閾値以上である場合は(ステップS503のNO)、コンテナ起動回数が上限閾値を超えているものの、コンテナ生存時間も上限閾値を超えており、コンテナ生存時間をこれ以上延長することは許容されないため、特段の処理を行わずにステップS508に進む。
ステップS505では、イベント駆動コンテナ管理プログラム223は、ステップS501で取得したコンテナ起動回数がコンテナ起動回数下限閾値より小さいか否かを判定する。コンテナ起動回数下限閾値は、イベント駆動コンテナ設定テーブル227のコンテナ起動回数下限閾値欄2275に記録されている。ステップS505においてコンテナ起動回数がコンテナ起動回数下限閾値より小さい場合は(ステップS505のYES)、ステップS506に進む。一方、ステップS505においてコンテナ起動回数がコンテナ起動回数下限閾値以上である場合は(ステップS505のNO)、処理対象のイベント駆動コンテナにおけるコンテナ起動回数が適正な範囲内であるため、特段の処理を行わずにステップS508に進む。
ステップS506では、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナにおけるコンテナ生存時間が、コンテナ生存時間下限閾値より大きいか否かを判定する。コンテナ生存時間下限閾値は、イベント駆動コンテナ設定テーブル227のコンテナ生存時間下限閾値欄2272に記録されている。
ステップS506においてコンテナ生存時間がコンテナ生存時間下限閾値より大きい場合は(ステップS506のYES)、処理対象のイベント駆動コンテナについてコンテナ生存時間を短縮する余地があることから、イベント駆動コンテナ管理プログラム223は、コンテナ生存時間を短縮するコンテナ生存時間短縮処理を実行し(ステップS507)、その終了後にステップS508に進む。コンテナ生存時間短縮処理の具体的な処理手順については、後述する図18に第1の処理手順例を示し、図20に第2の処理手順例を示す。
一方、ステップS506においてコンテナ生存時間がコンテナ生存時間下限閾値以下である場合は(ステップS506のNO)、コンテナ起動回数が下限閾値を下回っているものの、コンテナ生存時間も下限閾値を超えており、コンテナ生存時間をこれ以上短縮することは許容されないため、特段の処理を行わずにステップS508に進む。
以上のようにステップS501~S507の処理が終了すると、イベント駆動コンテナ管理プログラム223は、未処理のイベント駆動コンテナが存在するか否かを判定し(ステップS508)、未処理のイベント駆動コンテナが存在する場合には(ステップS508のYES)、未処理のイベント駆動コンテナの1つを処理対象に選択し直して、ステップS501からの処理を繰り返す。一方、ステップS508において未処理のイベント駆動コンテナが存在しない場合には(ステップS508のNO)、全てのイベント駆動コンテナについてステップS501~S507の処理が終了したことから、コンテナ起動回数オーバヘッド削減処理を終了する。
次に、ステップS504のコンテナ生存時間延長処理、及びステップS507のコンテナ生存時間短縮処理について、それぞれ2つの処理手順例を説明する。
(4-5-1)第1のコンテナ生存時間延長/短縮処理
図17は、第1のコンテナ生存時間延長処理の第1の処理手順例を示すフローチャートである。図17に示した第1のコンテナ生存時間延長処理では、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナのコンテナ生存時間をコンテナ生存時間増減単位の分だけ増加させ(ステップS601)、その後、処理を終了する。
コンテナ生存時間増減単位の値は、イベント駆動コンテナ設定テーブル227のコンテナ生存時間増減単位欄2274に記録されている。そこで、ステップS601において、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225において処理対象のイベント駆動コンテナに対応するエントリ(コンテナIDが一致するエントリ)のコンテナ生存時間欄2257の値を、コンテナ生存時間増減単位の値を加算した後の値で更新する。
以上のように第1のコンテナ生存時間延長処理を実行することにより、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナのコンテナ生存時間をコンテナ生存時間増減単位の1単位分だけ延長することができる。
図18は、第1のコンテナ生存時間短縮処理の処理手順例を示すフローチャートである。図18に示した第1のコンテナ生存時間短縮処理では、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナのコンテナ生存時間をコンテナ生存時間増減単位の分だけ減少させ(ステップS701)、その後、処理を終了する。具体的には、ステップS701において、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225において処理対象のイベント駆動コンテナに対応するエントリ(コンテナIDが一致するエントリ)のコンテナ生存時間欄2257の値を、コンテナ生存時間増減単位の値を減算した後の値で更新する。
以上のように第1のコンテナ生存時間短縮処理を実行することにより、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナのコンテナ生存時間をコンテナ生存時間増減単位の1単位分だけ短縮することができる。
(4-5-2)第2のコンテナ生存時間延長/短縮処理
図19は、第2のコンテナ生存時間延長処理の処理手順例を示すフローチャートである。図19に示した第2のコンテナ生存時間延長処理において、イベント駆動コンテナ管理プログラム223は、単位時間あたりのコンテナ起動回数がコンテナ起動回数上限閾値以下に収まるようなコンテナ生存時間を決定する。
図19によればまず、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナにおいてコンテナ削除から次のコンテナ起動までに要した時間(コンテナ起動間隔時間)を全て算出し、それらを昇順に整列する(ステップS801)。より具体的には、イベント駆動コンテナ管理プログラム223は、イベント駆動コンテナ起動/削除ログファイル2320を参照して、処理対象のイベント駆動コンテナに対応するエントリ(コンテナIDが一致するエントリ)のログを抽出し、時系列で、コンテナが削除されたときの時刻と次にコンテナが起動されたときの時刻との差分を順次算出し、各算出結果を昇順に整列したものを配列「ContainerBootInterval[n](n=0,1,2,…)」に格納する。
次に、イベント駆動コンテナ管理プログラム223は、ステップS801で生成した配列「ContainerBootInterval[n]」から、コンテナ生存時間を加算した値がコンテナ生存時間上限閾値よりも大きくなる要素を破棄する(ステップS802)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナ起動回数からコンテナ起動回数上限閾値を減算することによって値「ContainerBootCount」を算出する(ステップS803)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナ起動回数上限閾値以下でコンテナ起動回数を最大とする、コンテナ生存時間の最大値「ContainerSurvivalTime」を算出する(ステップS804)。具体的には、「ContainerSurvivalTime」は、「コンテナ生存時間+コンテナ生存時間増減単位×(Q1+1)」を計算することによって算出される。なお、「Q1」は、「ContainerBootInterval[ContainerBootCount+1]÷コンテナ生存時間増減単位」の商に相当する。
次に、イベント駆動コンテナ管理プログラム223は、ステップS804で算出した「ContainerSurvivalTime」がコンテナ生存時間上限閾値以下であるか否かを判定する(ステップS805)。ステップS805において「ContainerSurvivalTime」がコンテナ生存時間上限閾値以下である場合は、ステップS806に進み、「ContainerSurvivalTime」がコンテナ生存時間上限閾値より大きい場合は、ステップS807に進む。
そしてステップS806では、イベント駆動コンテナ管理プログラム223は、「ContainerSurvivalTime」の値をコンテナ生存時間に設定し、処理を終了する。
一方、ステップS807では、イベント駆動コンテナ管理プログラム223は、コンテナ生存時間上限閾値をコンテナ生存時間に設定し、処理を終了する。
以上のように第2のコンテナ生存時間延長処理を実行することにより、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナのコンテナ生存時間を、単位時間あたりのコンテナ起動回数がコンテナ起動回数上限閾値以下で最大となるような値に延長することができる。
図20は、第2のコンテナ生存時間短縮処理の処理手順例を示すフローチャートである。図20に示した第2のコンテナ生存時間短縮処理において、イベント駆動コンテナ管理プログラム223は、単位時間あたりのコンテナ起動回数がコンテナ起動回数下限閾値以上に収まるようなコンテナ生存時間を決定する。
図20によればまず、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナにおいてAPI呼出しが行われた時間間隔(API呼出し間隔時間)を全て算出し、降順に整列する(ステップS901)。より具体的には、イベント駆動コンテナ管理プログラム223は、コンテナAPI呼出しログファイル2310を参照して、処理対象のイベント駆動コンテナに対応するエントリ(対応するサービスIDが記録されたエントリ)のログを抽出し、時系列で、「request」のAPI呼出し時刻の間隔を順次算出し、各算出結果を降順に整列したものを配列「APICallInterval[n](n=0,1,2,…)」に格納する。
次に、イベント駆動コンテナ管理プログラム223は、ステップS901で生成した配列「APICallInterval[n]」から、コンテナ生存時間を超える要素を破棄する(ステップS902)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナ起動回数下限閾値からコンテナ起動回数を減算することによって値「ContainerBootCount」を算出する(ステップS903)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナ起動回数下限閾値以上でコンテナ起動回数を最小とする、コンテナ生存時間の最小値「ContainerSurvivalTime」を算出する(ステップS904)。具体的には、「ContainerSurvivalTime」は、「コンテナ生存時間-コンテナ生存時間増減単位×(Q2+1)」を計算することによって算出される。なお、「Q2」は、「APICallInterval[ContainerBootCount-1]÷コンテナ生存時間増減単位」の商に相当する。
次に、イベント駆動コンテナ管理プログラム223は、ステップS904で算出した「ContainerSurvivalTime」がコンテナ生存時間下限閾値以上であるか否かを判定する(ステップS905)。ステップS905において「ContainerSurvivalTime」がコンテナ生存時間下限閾値以上である場合は、ステップS906に進み、「ContainerSurvivalTime」がコンテナ生存時間下限閾値より小さい場合は、ステップS907に進む。
そしてステップS906では、イベント駆動コンテナ管理プログラム223は、「ContainerSurvivalTime」の値をコンテナ生存時間に設定し、処理を終了する。
一方、ステップS907では、イベント駆動コンテナ管理プログラム223は、コンテナ生存時間下限閾値をコンテナ生存時間に設定し、処理を終了する。
以上のように第2のコンテナ生存時間短縮処理を実行することにより、イベント駆動コンテナ管理プログラム223は、処理対象のイベント駆動コンテナのコンテナ生存時間を、単位時間あたりのコンテナ起動回数がコンテナ起動回数下限閾値以上で最小となるような値に短縮することができる。
(4-6)アプリケーションリソース使用量の算出処理
本実施形態に係るアプリケーション開発支援システム1が、アプリケーションの実行時のコンテナ(イベント駆動コンテナを含む)によるリソースの使用量(アプリケーションリソース使用量)を算出する処理の例として、単位期間メモリ使用量算出処理及び単位期間CPU使用量算出処理を説明する。
(4-6-1)単位期間メモリ使用量算出処理
図21は、単位期間メモリ使用量算出処理の処理手順例を示すフローチャートである。単位期間メモリ使用量算出処理は、単位期間当たりのイベント駆動コンテナによるメモリ使用量(単位期間メモリ使用量)を算出する処理であって、イベント駆動コンテナ管理プログラム223によって実行される。単位期間には、1時間、1日、1週間等、任意の期間(時間)を指定することができ、イベント駆動コンテナ管理プログラム223は、単位期間ごとに、単位期間メモリ使用量算出処理を実行する。
図21によればまず、イベント駆動コンテナ管理プログラム223は、単位期間メモリ使用量の算出に用いる変数「MemoryUsageTime」に「0」を代入して初期化する(ステップS1001)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225を参照して、アプリケーションの実行環境を構成するコンテナ228のうちから1つのイベント駆動コンテナを選択し(以後、対象コンテナ)、コンテナ実行基盤20のOS221から、対象コンテナによる現在のメモリ22の使用量(コンテナメモリ使用量)を取得する(ステップS1002)。
次に、イベント駆動コンテナ管理プログラム223は、イベント駆動コンテナ起動/削除ログファイル2320を参照して、今回の単位期間における対象コンテナの起動回数を算出する(ステップS1003)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225を参照して、対象コンテナのコンテナ生存時間を取得する(ステップS1004)。
次に、イベント駆動コンテナ管理プログラム223は、対象コンテナによる単位期間メモリ使用量を算出し、変数「MemoryUsageTime」の値に加算する(ステップS1005)。対象コンテナによる単位期間メモリ使用量は、ステップS1002~S1004で取得した各値(コンテナ起動回数、コンテナ生存時間、コンテナメモリ使用量)の積によって表される。したがって、ステップS1005においてイベント駆動コンテナ管理プログラム223は、「MemoryUsageTime+コンテナ起動回数×コンテナ生存時間×コンテナメモリ使用量」の値を計算し、その算出値を変数「MemoryUsageTime」に代入する。
次に、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225を参照して、アプリケーションの実行環境を構成するコンテナ228のうち、単位期間メモリ使用量を算出していない他のイベント駆動コンテナが存在するか否かを確認する(ステップS1006)。他のイベント駆動コンテナが存在する場合は(ステップS1006のYES)、1つのイベント駆動コンテナを次の対象コンテナに選択し、ステップS1002に戻って以降の処理を繰り返す。一方、ステップS1006において未処理のイベント駆動コンテナが存在しない場合には(ステップS1006のNO)、ステップS1007に進む。
そしてステップS1007では、イベント駆動コンテナ管理プログラム223は、変数「MemoryUsageTime」の値を返し、処理を終了する。
以上のように単位期間メモリ使用量算出処理が実行されることにより、アプリケーションの実行環境を構成する全てのイベント駆動コンテナによる単位期間メモリ使用量が「MemoryUsageTime」の値で返される。
そして、イベント駆動コンテナ管理プログラム223は、単位期間ごとに実行する単位期間メモリ使用量算出処理によってステップS1007で返された変数「MemoryUsageTime」の値を用いて、ユーザ端末10のウェブブラウザ122にメモリ使用量表示画面(図25で後述する)を表示する出力処理を実行することによって、アプリケーションの実行環境を構成するコンテナ228による、単位期間あたりのメモリ22のアプリケーションリソース使用量を時系列に並べて提示することができる。
(4-6-2)単位期間CPU使用量算出処理
図22は、単位期間CPUメモリ使用量算出処理の処理手順例を示すフローチャートである。単位期間CPU使用量算出処理は、単位期間当たりのイベント駆動コンテナによるCPU使用率の総量(単位期間CPU使用量)を算出する処理であって、イベント駆動コンテナ管理プログラム223によって実行される。単位期間には、1時間、1日、1週間等、任意の期間(時間)を指定することができ、イベント駆動コンテナ管理プログラム223は、単位期間ごとに、単位期間CPU使用量算出処理を実行する。
図22によればまず、イベント駆動コンテナ管理プログラム223は、単位期間CPU使用量の算出に用いる変数「CPUUsageTime」に「0」を代入して初期化する(ステップS1101)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225を参照して、アプリケーションの実行環境を構成するコンテナ228のうちから1つのイベント駆動コンテナを選択し(以後、対象コンテナ)、コンテナ実行基盤20のOS221から、対象コンテナによる現在のプロセッサ21の使用率(コンテナCPU使用率)を取得する(ステップS1102)。
次に、イベント駆動コンテナ管理プログラム223は、イベント駆動コンテナ起動/削除ログファイル2320を参照して、今回の単位期間における対象コンテナの起動回数を算出する(ステップS1103)。
次に、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225を参照して、対象コンテナのコンテナ生存時間を取得する(ステップS1104)。
次に、イベント駆動コンテナ管理プログラム223は、対象コンテナによる単位期間CPU使用量を算出し、変数「CPUUsageTime」の値に加算する(ステップS1105)。対象コンテナによる単位期間CPU使用量は、ステップS1102~S1104で取得した各値(コンテナ起動回数、コンテナ生存時間、コンテナCPU使用率)の積によって表される。したがって、ステップS1105においてイベント駆動コンテナ管理プログラム223は、「CPUUsageTime+コンテナ起動回数×コンテナ生存時間×コンテナCPU使用率」の値を計算し、その算出値を変数「CPUUsageTime」に代入する。
次に、イベント駆動コンテナ管理プログラム223は、コンテナテーブル225を参照して、アプリケーションの実行環境を構成するコンテナ228のうち、単位期間CPU使用量を算出していない他のイベント駆動コンテナが存在するか否かを確認する(ステップS1106)。他のイベント駆動コンテナが存在する場合は(ステップS1106のYES)、1つのイベント駆動コンテナを次の対象コンテナに選択し、ステップS1102に戻って以降の処理を繰り返す。一方、ステップS1106において未処理のイベント駆動コンテナが存在しない場合には(ステップS1106のNO)、ステップS1107に進む。
そしてステップS1107では、イベント駆動コンテナ管理プログラム223は、変数「CPUUsageTime」の値を返し、処理を終了する。
以上のように単位期間CPU使用量算出処理が実行されることにより、アプリケーションの実行環境を構成する全てのイベント駆動コンテナによる単位期間CPU使用量が「CPUUsageTime」の値で返される。
そして、イベント駆動コンテナ管理プログラム223は、単位期間ごとに実行する単位期間CPU使用量算出処理によってステップS1107で返された変数「CPUUsageTime」の値を用いて、ユーザ端末10のウェブブラウザ122にCPU使用量表示画面(図26で後述する)を表示する出力処理を実行することによって、アプリケーションの実行環境を構成するコンテナ228による、単位期間あたりのプロセッサ21(CPU)のアプリケーションリソース使用量を時系列に並べて提示することができる。
(5)表示画面
本実施形態に係るアプリケーション開発支援システム1では、ユーザ2が、ユーザ端末10のウェブブラウザ122でイベント駆動コンテナ管理プログラム223にアクセスすることにより、イベント駆動コンテナ管理プログラム223によって実行された処理の結果に基づく画面をウェブブラウザ122に表示させることができる。このような表示画面の具体例を以下に説明する。
(5-1)API処理時間表示画面
図23及び図24は、API処理時間表示画面の具体例を示す図(その1、その2)である。API処理時間表示画面は、アプリケーションのサービス間(コンテナ間)のAPI呼出しの関係図に加えて、各コンテナにおけるAPI処理時間を表示する画面であって、任意のコンテナにサーバレスを適用した際のAPI処理時間の見積もり(予測値)も表示することができる。本例では、図11で示したアプリケーションのリソース構成例を用いている。
図23のAPI処理時間表示画面510は、サーバレス非適用時の表示画面例である。API処理時間表示画面510の表示構成を説明すると(図24のAPI処理時間表示画面540も同様)、4つのグループ520は、「frontend1」及び「backend1」~「backend3」の4つのサービス(コンテナ)に相当する。そして、各グループ520は、サーバレス適用の可否を選択可能なチェックボックス521と、当該サービス(コンテナ)における処理時間及び起動時間を示す時間表示522とを備えて構成されている。時間表示522において、「処理時間」は、対象のコンテナがAPIリクエストを受信してからレスポンスを返すまでに要する時間(API処理時間)を意味し、「起動時間」は、対象のコンテナの起動に要する時間を意味する。また、通信531,532は、グループ520における送受信を、横方向の時間軸(図中の「time」)に対応して表すものである。
ここで、図23の場合は、何れのグループ520においてもチェックボックス521にチェックが付いていないことから、全てのコンテナ228がサーバレス非適用である状態を表している。このとき、各グループ520のコンテナ228は常時起動状態にあり、時間表示522に示された起動時間は、実際のAPI処理時間に対して影響を与えない。例えば、外部からのAPI呼出しのフロントエンドとなる「frontend1」のグループ520(コンテナ)は、APIリクエストを受信してから6.0秒でレスポンスを返すことが示されている。
一方、1以上のコンテナ228にサーバレスを適用する場合には、イベント駆動コンテナは、イベント駆動で起動した後にAPIレスポンスを返すことができるため、API処理時間の予測値には、イベント駆動コンテナの起動時間が加算されることになる。図24のAPI処理時間表示画面540は、このようなサーバレスの適用を想定した場合の予測値を反映させた表示画面の一例である。具体的には、図23のAPI処理時間表示画面510において「backend2」のグループ520のチェックボックス521にチェックが付けられた場合(すなわち、図11に示した「backend2」のコンテナ228cにサーバレスを適用するとした場合)のAPI処理時間の見積もり(予測値)が反映されている。
このとき、ウェブブラウザ122においてAPI処理時間表示画面510の上記チェックボックス521にチェックが付けられると、イベント駆動コンテナ管理プログラム223が前述したイベント駆動コンテナAPI処理時間予測処理(図15参照)を実行する。当該処理によって、ステップS405では、対象コンテナ(「backend2」)におけるサーバレス非適用時の処理時間「2.0秒」にイベント駆動による起動時間「5.0秒」を加算して、対象コンテナにおけるAPI処理時間予測値「7.0秒」が算出される。そして、ステップS406では、「frontend1」における処理時間「6.0秒」にステップS405で算出されたAPI処理時間予測値「7.0秒」が加算されることにより、全API処理時間予測値「11.0秒」が算出される。
API処理時間表示画面540では、上記算出値が反映されており、具体的には、「backend2」のグループ520の処理時間が「2.0sec→7.0sec」と表示され、「frontend1」のグループ520の処理時間が「6.0sec→11.0sec」と表示される。この結果、ユーザは、API処理時間表示画面540を参照することによって、「backend2」のコンテナ228cにサーバレスを適用した場合に、アプリケーション全体のAPI処理時間が5.0秒増加して11.0秒になるという予測値を確認することができる。
また、図11のリソース構成におけるAPI呼出しの順序を考慮すると、「backend2」のコンテナ228cと「frontend1」のコンテナ228aと間には「backend1」のコンテナ228bが介在することから、「backend2」のコンテナ228cをサーバレス化した場合には、その起動時間は、「backend1」のコンテナ228bの処理時間にも影響を与える。したがって、API処理時間表示画面540では、「backend1」のグループ520の処理時間も「frontend1」のグループ520の処理時間と同様に5.0秒増加して、「2.0sec→7.0sec」と表示されている。一方で、「backend3」のグループ520は、「backend2」のグループとは直接に通信しないことから、処理時間は変更されない。
このように、本実施形態では、API処理時間表示画面510においてサーバレスを適用する候補のコンテナが選択された場合に、選択されたコンテナを対象としてイベント駆動コンテナAPI処理時間予測処理が実行され、算出されたイベント駆動コンテナのAPI処理時間の予測値が、コンテナ間のAPI呼出しの順序を考慮して、各コンテナの処理時間に反映される。したがって、ユーザ2は、API処理時間表示画面510において任意のコンテナ(グループ520のチェックボックス521)を選択することによって、サーバレス適用時の全体のAPI処理時間の見積もりを確認することができ、サーバレスを適用するコンテナ228の好適な組み合わせを検討することができる。
(5-2)アプリケーションリソース使用量の表示画面
次に、アプリケーションの実行環境を構成するコンテナ228が使用した計算リソースの使用量(アプリケーションリソース使用量)を示す表示画面について説明する。
図25は、メモリ使用量表示画面の一例を示す図である。メモリ使用量表示画面は、アプリケーションリソース使用量の表示画面の一例であって、アプリケーションの実行環境を構成するコンテナ228による、単位期間当たりのコンテナ実行基盤20のメモリ22の使用量(単位期間メモリ使用量)を時系列で表示する画面である。本例では単位期間を1日としている。
図25の場合、メモリ使用量表示画面610には、1日単位で、アプリケーションの全コンテナ228によるメモリ使用量に時間を掛けた総量(単位期間メモリ使用量)が表示されている。ユーザ2は、ユーザ端末10のウェブブラウザ122で所定の操作を行って、イベント駆動コンテナ管理プログラム223にアクセスすることにより、メモリ使用量表示画面610をウェブブラウザ122に呼び出すことができる。このとき、イベント駆動コンテナ管理プログラム223は、自身が定期的に実行した単位期間メモリ使用量算出処理(図21参照)で返された「MemoryUsageTime」の値を、当該処理の実行タイミングに対応する単位期間ごとに時系列に並べて表示することにより、メモリ使用量表示画面610をウェブブラウザ122に表示することができる。
このようなメモリ使用量表示画面610の利用方法として、例えば前述したAPI処理時間表示画面510,540によるAPI処理時間の予測値の表示を考慮して、任意のコンテナ228にサーバレスを適用した場合に、その後のメモリ使用量がどのように変化したかを確認することが挙げられる。
図26は、CPU使用量表示画面の一例を示す図である。CPU使用量表示画面は、アプリケーションリソース使用量の表示画面の一例であって、アプリケーションの実行環境を構成するコンテナ228による、単位期間当たりのコンテナ実行基盤20のCPU21の使用率の総量(単位期間CPU使用量)を時系列で表示する画面である。本例では単位期間を1日としている。
図26の場合、CPU使用量表示画面620には、1日単位で、アプリケーションの全コンテナ228によるCPU使用率に時間を掛けた総量(単位期間CPU使用量)が表示されている。ユーザ2は、ユーザ端末10のウェブブラウザ122で所定の操作を行って、イベント駆動コンテナ管理プログラム223にアクセスすることにより、CPU使用量表示画面620をウェブブラウザ122に呼び出すことができる。このとき、イベント駆動コンテナ管理プログラム223は、自身が定期的に実行した単位期間CPU使用量算出処理(図22参照)で返された「CPUUsageTime」の値を、当該処理の実行タイミングに対応する単位期間ごとに時系列に並べて表示することにより、CPU使用量表示画面620をウェブブラウザ122に表示することができる。
このようなCPU使用量表示画面620の利用方法として、例えば前述したAPI処理時間表示画面510,540によるAPI処理時間の予測値の表示を考慮して、任意のコンテナ228にサーバレスを適用した場合に、その後のCPU使用量(CPU使用率)がどのように変化したかを確認することが挙げられる。
以上に説明したように、本実施形態に係るアプリケーション開発支援システム1は、マイクロサービスで構成されるアプリケーションの開発において、アプリケーションの実行環境として提供されるコンテナの少なくとも一部にサーバレスを適用可能とするなかで、イベント駆動コンテナAPI処理時間予測処理の実行結果を用いたAPI処理時間表示画面540の表示によって、上記コンテナにサーバレスを適用する際のAPI応答性能(API処理時間)の変化を見積もることができ、さらに、単位期間メモリ使用量算出処理の実行結果を用いたメモリ使用量表示画面610の表示や、単位期間CPU使用量算出処理の実行結果を用いたCPU使用量表示画面620の表示によって、上記コンテナにサーバレスを適用した後のリソース使用量の変化を確認することができる。かくして、本実施形態に係るアプリケーション開発支援システム1によれば、API応答性能の維持とアプリケーションリソース使用量の最適化との両立を考慮したサーバレスの適用可否の検討を支援することができる。
また、本実施形態に係るアプリケーション開発支援システム1は、イベント駆動コンテナにおける過去の動作履歴に基づいてイベント駆動コンテナの生存時間を延長または短縮するコンテナ起動回数オーバヘッド削減処理を実行することにより、イベント駆動コンテナの起動に伴うオーバヘッドの総量を削減するようにイベント駆動コンテナの起動回数を調整することができる。かくして、本実施形態に係るアプリケーション開発支援システム1によれば、イベント駆動コンテナの起動に伴うオーバヘッドの低減と、イベント駆動コンテナの起動状態の維持に伴うリソース使用量の抑制とを、好適なバランスで両立させる効果が得られる。
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、図面において制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実施には殆ど全ての構成が相互に接続されていると考えてもよい。
1 アプリケーション開発支援システム
2 ユーザ
10 ユーザ端末
11,21,31 プロセッサ
12,22,32 メモリ
13,23,33 永続記憶装置
14,24,34 インターフェース装置
15,25,35 バス
20 コンテナ実行基盤
30 コンテナイメージリポジトリマネージャ
40(40A,40B) ネットワークスイッチ
41 ネットワーク
121 OS
122 ウェブブラウザ
221 OS
222 コンテナ管理プログラム
223 イベント駆動コンテナ管理プログラム
224 コンテナログ管理プログラム
225 コンテナテーブル
226 コンテナ実行基盤リソーステーブル
227 イベント駆動コンテナ設定テーブル
228(228a~228d) コンテナ
231 コンテナAPI呼出しログ格納ファイルシステム
232 コンテナ起動/削除ログ格納ファイルシステム
321 OS
322 コンテナイメージテーブル
331 コンテナイメージ格納ファイルシステム
410 ネームスペース
420(420a~420d) サービス
430(430a~430d) コンテナグループ
431(431a~431d) プロキシコンテナ
440 通信
510,540 API処理時間表示画面
610 メモリ使用量表示画面
620 CPU使用量表示画面
2310 コンテナAPI呼出しログファイル
2320 イベント駆動コンテナ起動/削除ログファイル

Claims (9)

  1. 複数のコンテナから構成されるアプリケーションソフトウェアを実行するシステムにおいて前記アプリケーションソフトウェアの開発を支援するアプリケーション開発支援システムであって、
    前記複数のコンテナのリソースを提供するコンテナ実行基盤は、前記複数のコンテナの任意のコンテナにサーバレスを適用してイベント駆動コンテナとする機能を有し、
    前記コンテナ実行基盤のプロセッサがプログラムを実行することにより、
    前記イベント駆動コンテナがAPI呼出しを受けてからAPIレスポンスを応答するまでに要するAPI処理時間の予測値を算出し、当該算出した予測値と前記複数のコンテナの間のAPI呼出しの順序とに基づいて、前記複数のコンテナの全体におけるAPI処理時間の予測値を算出するAPI処理時間予測処理と、
    所定の単位期間当たりに前記複数のコンテナが使用するリソースの使用量を算出するリソース使用量算出処理と、
    前記API処理時間予測処理によって算出された前記複数のコンテナの全体におけるAPI処理時間の予測値を出力するAPI処理時間出力処理と、
    前記リソース使用量算出処理によって算出された前記複数のコンテナが使用するリソースの使用量を出力するリソース使用量出力処理と、
    前記イベント駆動コンテナの動作履歴に基づいて、前記イベント駆動コンテナの起動に伴うオーバヘッドの総量を削減するように、前記イベント駆動コンテナの生存時間を調整するコンテナ起動回数オーバヘッド削減処理と、
    を実行する
    ことを特徴とするアプリケーション開発支援システム。
  2. 前記コンテナ実行基盤は、
    前記複数のコンテナからサーバレスを適用する候補のコンテナが選択された場合に、当該選択されたコンテナを前記イベント駆動コンテナとして前記API処理時間予測処理を実行し、
    前記API処理時間出力処理において、前記複数のコンテナの間のAPI呼出しの順序を表す情報とともに、前記複数のコンテナの全体におけるAPI処理時間の予測値を出力する
    ことを特徴とする請求項1に記載のアプリケーション開発支援システム。
  3. 前記コンテナ実行基盤は、
    前記複数のコンテナの任意のコンテナにサーバレスが適用された前後で、所定の単位期間ごとに前記リソース使用量算出処理を実行し、
    前記リソース使用量出力処理において、複数回の前記リソース使用量算出処理で算出された前記リソースの使用量を時系列に並べて出力する
    ことを特徴とする請求項1に記載のアプリケーション開発支援システム。
  4. 前記リソース使用量算出処理で使用量が算出されるリソースには、前記コンテナ実行基盤におけるメモリまたはプロセッサの少なくとも何れかが含まれる
    ことを特徴とする請求項1に記載のアプリケーション開発支援システム。
  5. 前記コンテナ起動回数オーバヘッド削減処理では、
    所定期間における前記イベント駆動コンテナの起動回数が所定の上限閾値を超え、かつ前記イベント駆動コンテナの生存時間が所定の上限閾値を下回る場合に、前記イベント駆動コンテナの生存時間を延長し、
    所定期間における前記イベント駆動コンテナの起動回数が所定の下限閾値を下回り、かつ前記イベント駆動コンテナの生存時間が所定の下限閾値を上回る場合に、前記イベント駆動コンテナの生存時間を短縮する
    ことを特徴とする請求項に記載のアプリケーション開発支援システム。
  6. 前記コンテナ起動回数オーバヘッド削減処理において前記イベント駆動コンテナの生存時間を延長する場合、前記イベント駆動コンテナの動作履歴においてコンテナが削除されてから次に起動されるまでに要した起動間隔に基づいて、前記生存時間の延長時間を決定する
    ことを特徴とする請求項に記載のアプリケーション開発支援システム。
  7. 前記コンテナ起動回数オーバヘッド削減処理において前記イベント駆動コンテナの生存時間を短縮する場合、前記イベント駆動コンテナの動作履歴においてAPI呼出しが行われた時間間隔に基づいて、前記生存時間の短縮時間を決定する
    ことを特徴とする請求項に記載のアプリケーション開発支援システム。
  8. 前記コンテナ起動回数オーバヘッド削減処理において前記イベント駆動コンテナの生存時間を延長または短縮する場合、予め定められた単位時間を用いて、前記生存時間の延長時間または短縮時間を決定する
    ことを特徴とする請求項に記載のアプリケーション開発支援システム。
  9. 複数のコンテナから構成されるアプリケーションソフトウェアを実行するシステムに対するアプリケーション開発支援方法であって、
    前記複数のコンテナのリソースを提供するコンテナ実行基盤は、前記複数のコンテナの任意のコンテナにサーバレスを適用してイベント駆動コンテナとする機能を有し、
    前記コンテナ実行基盤のプロセッサが、前記イベント駆動コンテナがAPI呼出しを受けてからAPIレスポンスを応答するまでに要するAPI処理時間の予測値を算出し、当該算出した予測値と前記複数のコンテナの間のAPI呼出しの順序とに基づいて、前記複数のコンテナの全体におけるAPI処理時間の予測値を算出するAPI処理時間予測ステップと、
    前記コンテナ実行基盤のプロセッサが、所定の単位期間当たりに前記複数のコンテナが使用するリソースの使用量を算出するリソース使用量算出ステップと、
    前記コンテナ実行基盤のプロセッサが、前記API処理時間予測ステップで算出された前記複数のコンテナの全体におけるAPI処理時間の予測値を出力するAPI処理時間出力ステップと、
    前記コンテナ実行基盤のプロセッサが、前記リソース使用量算出ステップで算出された前記複数のコンテナが使用するリソースの使用量を出力するリソース使用量出力ステップと、
    前記コンテナ実行基盤のプロセッサが、前記イベント駆動コンテナの動作履歴に基づいて、前記イベント駆動コンテナの起動に伴うオーバヘッドの総量を削減するように、前記イベント駆動コンテナの生存時間を調整するコンテナ起動回数オーバヘッド削減ステップと、
    を備えることを特徴とするアプリケーション開発支援方法。
JP2020047644A 2020-03-18 2020-03-18 アプリケーション開発支援システム及びアプリケーション開発支援方法 Active JP7324165B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020047644A JP7324165B2 (ja) 2020-03-18 2020-03-18 アプリケーション開発支援システム及びアプリケーション開発支援方法
US17/022,234 US11263107B2 (en) 2020-03-18 2020-09-16 Application development support system and application development support method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020047644A JP7324165B2 (ja) 2020-03-18 2020-03-18 アプリケーション開発支援システム及びアプリケーション開発支援方法

Publications (2)

Publication Number Publication Date
JP2021149409A JP2021149409A (ja) 2021-09-27
JP7324165B2 true JP7324165B2 (ja) 2023-08-09

Family

ID=77748099

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020047644A Active JP7324165B2 (ja) 2020-03-18 2020-03-18 アプリケーション開発支援システム及びアプリケーション開発支援方法

Country Status (2)

Country Link
US (1) US11263107B2 (ja)
JP (1) JP7324165B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11366648B2 (en) * 2020-05-28 2022-06-21 Red Hat, Inc. Compiling monoglot function compositions into a single entity
US20220100636A1 (en) * 2020-09-29 2022-03-31 Amazon Technologies, Inc. Assisted detection of application performance issues using serverless compute templates
US11886921B2 (en) * 2021-03-04 2024-01-30 International Business Machines Corporation Serverless runtime container allocation
US11809877B2 (en) * 2021-08-02 2023-11-07 Dell Products L.P. Dynamically tuning a computing device's performance for a containerized application

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015060279A (ja) 2013-09-17 2015-03-30 株式会社日立システムズ スケール制御サーバ、スケール制御方法、およびスケール制御プログラム
JP2019109874A (ja) 2017-12-15 2019-07-04 富士通株式会社 情報処理方法、情報処理装置および情報処理プログラム
JP2020021160A (ja) 2018-07-30 2020-02-06 富士ゼロックス株式会社 情報処理装置、プログラム、及び情報処理システム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050289265A1 (en) * 2004-06-08 2005-12-29 Daniel Illowsky System method and model for social synchronization interoperability among intermittently connected interoperating devices
US9904899B2 (en) * 2014-08-27 2018-02-27 Software Ag Systems and/or methods for reactive, distributable, and extensible process execution
WO2016183028A2 (en) * 2015-05-10 2016-11-17 Apl Software Inc. Methods and architecture for enhanced computer performance
US10691514B2 (en) * 2017-05-08 2020-06-23 Datapipe, Inc. System and method for integration, testing, deployment, orchestration, and management of applications
US10565034B2 (en) 2017-12-29 2020-02-18 Futurewei Technologies, Inc. Event-driven serverless function orchestration
US11922220B2 (en) * 2018-11-08 2024-03-05 Intel Corporation Function as a service (FaaS) system enhancements

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015060279A (ja) 2013-09-17 2015-03-30 株式会社日立システムズ スケール制御サーバ、スケール制御方法、およびスケール制御プログラム
JP2019109874A (ja) 2017-12-15 2019-07-04 富士通株式会社 情報処理方法、情報処理装置および情報処理プログラム
JP2020021160A (ja) 2018-07-30 2020-02-06 富士ゼロックス株式会社 情報処理装置、プログラム、及び情報処理システム

Also Published As

Publication number Publication date
JP2021149409A (ja) 2021-09-27
US20210294597A1 (en) 2021-09-23
US11263107B2 (en) 2022-03-01

Similar Documents

Publication Publication Date Title
JP7324165B2 (ja) アプリケーション開発支援システム及びアプリケーション開発支援方法
US11425194B1 (en) Dynamically modifying a cluster of computing nodes used for distributed execution of a program
CN110062924B (zh) 用于虚拟化图形处理的容量预留
JP6961844B2 (ja) ストレージボリューム作成方法および装置、サーバ、並びに記憶媒体
US10642653B2 (en) Dynamically modifying program execution capacity
US8966030B1 (en) Use of temporarily available computing nodes for dynamic scaling of a cluster
US9276987B1 (en) Identifying nodes already storing indicated input data to perform distributed execution of an indicated program in a node cluster
JP2019530095A (ja) 管理されたコンテナインスタンス
US20130132953A1 (en) Method and System for Providing Application by Virtual Machine and Computer-Readable Storage Medium to Execute the Method
US9117002B1 (en) Remote browsing session management
US10019293B2 (en) Enhanced command selection in a networked computing environment
CN109144619B (zh) 图标字体信息处理方法、装置及系统
US20140237088A1 (en) Managing imaging of computing devices
JP5315128B2 (ja) 処理依頼先管理装置、処理依頼先管理プログラムおよび処理依頼先管理方法
CN113302901A (zh) 使用基于模式的发现进行云应用程序和服务集成的方法及系统
CN112235132A (zh) 动态配置服务的方法、装置、介质以及服务器
CN106550002B (zh) 一种paas云托管系统及方法
US11870706B2 (en) Method and system for allocating and managing cloud resources
JP6093315B2 (ja) コンピュータリソース管理装置、コンピュータリソース管理方法及びコンピュータリソース管理プログラム
CN114257505B (zh) 服务器节点配置方法、装置、设备及存储介质
CN114860350B (zh) 基于云无盘树状镜像的数据处理的方法及装置
US11755534B2 (en) Data caching method and node based on hyper-converged infrastructure
JP5390947B2 (ja) ジョブ管理システム、ジョブ管理装置及びそのプログラム
US10628307B2 (en) Coordinating heap contraction of multiple runtimes in the cloud environment
Kumari et al. Mitigating Serverless Tail Latency: A Comprehensive Study of Factors and Strategies

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220520

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230317

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230328

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20230526

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230629

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230704

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230728

R150 Certificate of patent or registration of utility model

Ref document number: 7324165

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150