JP2023035466A - 情報処理プログラム、情報処理方法、および情報処理装置 - Google Patents

情報処理プログラム、情報処理方法、および情報処理装置 Download PDF

Info

Publication number
JP2023035466A
JP2023035466A JP2021142339A JP2021142339A JP2023035466A JP 2023035466 A JP2023035466 A JP 2023035466A JP 2021142339 A JP2021142339 A JP 2021142339A JP 2021142339 A JP2021142339 A JP 2021142339A JP 2023035466 A JP2023035466 A JP 2023035466A
Authority
JP
Japan
Prior art keywords
software component
function
functions
software
microservice
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
JP2021142339A
Other languages
English (en)
Inventor
真也 廣石
Masaya Hiroishi
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2021142339A priority Critical patent/JP2023035466A/ja
Publication of JP2023035466A publication Critical patent/JP2023035466A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】マイクロサービス化に適した部分を容易に把握できるようにする。【解決手段】情報処理装置10は、複数のソフトウェア部品3a,3b,・・・を含むソフトウェア2実行時にソフトウェア部品3a,3b,・・・それぞれにより実現される機能4a~4lの呼び出し頻度を示す呼び出し頻度情報に基づいて、呼び出される頻度が第1の基準より高い第1の機能4g,4hに対応する第1のソフトウェア部品を特定する。情報処理装置10は、ソフトウェア2実行時の複数の機能4a~4l間での呼び出し関係に基づいて、第2の基準より多くの呼び出し元が存在する第2の機能4hに対応する第2のソフトウェア部品を特定する。そして情報処理装置10は、第1のソフトウェア部品に該当し、かつ第2のソフトウェア部品に該当しない第3のソフトウェア部品を、マイクロサービス化の対象として提示する。【選択図】図1

Description

本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
コンピュータシステムのソフトウェア構築に関するアーキテクチャとして、モノリシックなアーキテクチャがある。モノリシックなアーキテクチャは、ソフトウェアで実現される複数の機能が1つのソフトウェアモジュールで実現されたものである。モノリシックなアーキテクチャは、一枚岩のアーキテクチャとも呼ばれる。
それに対してマイクロサービスアーキテクチャという概念が広がってきている。マイクロサービスアーキテクチャは、従来のような一枚岩のアーキテクチャではなく、独立性の高い機能単位のサービスの組み合わせによりソフトウェアを開発・提供する考え方である。マイクロサービスアーキテクチャで設計されたソフトウェアは機能間が疎結合になっている。そのため、ソフトウェア改修時の影響調査やソースファイルの修正が容易となる。またソフトウェア改修時のテストの範囲を限定でき、短期間での新規機能の提供または柔軟なスケールアウトが可能となる。
モノリシックなアーキテクチャで作成された既存のシステム(モノリシックシステム)についても、マイクロサービスアーキテクチャのシステムに変更することで、システムのソースの修正やスケールアウトの柔軟性を向上させることができる。このようなマイクロサービス化に関する技術としては、例えばコンテナ化、スケーラブル、かつフレキシブルな動作環境において実行されるマイクロサービスとしての展開のためにモノリシックレガシーアプリケーションを区分するためのシステムが提案されている。
特表2020-518073号公報
既存のモノリシックシステムのマイクロサービス化は、システムの作り替えが発生するため移行コストが高く、作り直し後の機能不全や入替え時の一時業務停止などのリスクを伴う。そこで例えば、最小限のコスト・リスクで顧客ニーズに素早く対応できるシステムに作り替えるために、アクセス頻度が高く修正が頻繁する部分のみをマイクロサービス化することが求められる。
しかし、従来の技術では、既存のシステムのなかからマイクロサービス化するのに適した部分を正しく特定することは困難である。そのため既存のモノリシックシステムの部分的なマイクロサービス化によるシステム改修時の柔軟性などの性能向上が困難となっている。
1つの側面では、本件は、マイクロサービス化に適した部分を容易に把握できるようにすることを目的とする。
1つの案では、以下の処理をコンピュータに実行させる情報処理プログラムが提供される。
コンピュータは、複数のソフトウェア部品を含むソフトウェア実行時に複数のソフトウェア部品それぞれにより実現される機能の呼び出し頻度を示す呼び出し頻度情報に基づいて、呼び出される頻度が第1の基準より高い第1の機能に対応する第1のソフトウェア部品を特定する。コンピュータは、ソフトウェア実行時の機能間での呼び出し関係に基づいて、第2の基準より多くの呼び出し元が存在する第2の機能に対応する第2のソフトウェア部品を特定する。そしてコンピュータは、第1のソフトウェア部品に該当し、かつ第2のソフトウェア部品に該当しない第3のソフトウェア部品を、マイクロサービス化の対象として提示する。
1態様によれば、マイクロサービス化に適した部分の特定が可能となる。
第1の実施の形態に係る情報処理方法の一例を示す図である。 システム構成の一例を示す図である。 サーバのハードウェアの一例を示す図である。 モノリシックアーキテクチャとマイクロサービスアーキテクチャとのスケールアウトの例を示す図である。 部分的なマイクロサービス化の一例を示す図である。 修正頻度の多い機能抽出の一例を示す図である。 処理頻度の多い機能抽出の一例を示す図である。 コア部分または共通処理部分の除外の一例を示す図である。 呼び出しシーケンス内の機能抽出の一例を示す図である。 マイクロサービス化を支援するためのサーバの機能の一例を示す図である。 マイクロサービス化対象機能の特定のために取得する情報の一例を示す図である。 修正頻度情報の一例を示す図である。 アクセス先情報の一例を示す図である。 JOIN情報の一例を示す図である。 マイクロサービス化候補機能からのマスタテーブルへアクセスする機能の除外処理の一例を示す図である。 API呼び出し頻度情報の一例を示す図である。 画面別API呼び出し情報の一例を示す図である。 呼び出しシーケンス情報の一例を示す図である。 特定されたマイクロサービス化対象機能の一例を示す図である。 マイクロサービス化機能提案処理の手順の一例を示すフローチャートである。 マイクロサービス化対象特定処理の手順の一例を示すフローチャートである。
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
まず第1の実施の形態について説明する。第1の実施の形態は、既存のシステムにおけるマイクロサービス化に適した部分を検出し、提示する情報処理方法である。
図1は、第1の実施の形態に係る情報処理方法の一例を示す図である。図1には、第1の実施の形態に係る情報処理方法を実現する情報処理装置10が示されている。情報処理装置10は、例えば所定の情報処理プログラムを実行することにより、第1の実施の形態に係る情報処理方法を実施することができる。
情報処理装置10は、記憶部11と処理部12とを有する。記憶部11は、例えば情報処理装置10が有するメモリまたはストレージ装置である。処理部12は、例えば情報処理装置10が有するプロセッサまたは演算回路である。
記憶部11は、複数のソースファイル1a,1b,・・・と、複数のソースファイル1a,1b,・・・に基づいて生成されたソフトウェア2とを記憶する。ソフトウェア2は、例えば3階層の各階層に対応する実行形式のプログラム2a,2b,2cが含まれる。例えばソースファイル1a,1b,・・・に対してコンパイルおよびリンクなどの処理を行った結果、プログラム2a,2b,2cが生成される。
プログラム2a,2b,2cには、複数のソフトウェア部品3a,3b,・・・が含まれる。ソフトウェア部品3a,3b,・・・それぞれは、いずれかのソースファイル1a,1b,・・・に基づいて生成される。そのためソフトウェア部品3a,3b,・・・は、例えば生成元となったソースファイルのファイル名によって識別できる。
処理部12は、ソフトウェア2を実行することで既存システム4を動作させる。既存システム4は、プレゼンテーション層、アプリケーション層、およびデータ層を有する3階層のシステムである。プレゼンテーション層の機能4a~4cは、例えば処理部12がプログラム2aを実行することにより実現される。アプリケーション層の機能4d~4jは、例えば処理部12がプログラム2bを実行することにより実現される。データ層の機能4k~4lは、例えば処理部12がプログラム2cを実行することにより実現される。
既存システム4が有する各機能4a~4lは、ソフトウェア2内のソフトウェア部品3a,3b,・・・によって実現されている機能である。各機能4a~4lが実行する処理の手順は、対応するソフトウェア部品の生成元となるソースファイルに定義されている。したがって、既存システム4の一部の機能を修正する場合、その機能を実現するためのソフトウェア部品に対応するソースファイルを修正することとなる。
情報処理装置10は、既存システム4によりユーザにサービスを提供する。既存システム4を利用するユーザから提供されるサービスに対するニーズは随時変化する。そのため情報処理装置10の管理者は、ユーザのニーズに応じて、既存システム4により提供するサービスの機能を適宜修正する。
なお図1に示す既存システム4は例えばモノリシックシステムである。この場合、既存システム4の一部の機能を修正する場合、その機能を含むプログラム全体の作り直しが行われる。また修正後の機能を実装するには、既存システム4全体が一時的に停止される。
既存システム4の機能の修正を容易にする方法の1つとして、既存システム4をマイクロサービス化しておくことが考えられる。なお既存システム4全体をマイクロサービス化すると膨大な移行コストが発生する上に、安定稼働しているシステムの品質低下リスクもある。他方、ユーザのニーズに応じた修正が発生しやすい機能は、既存システム4内の機能4a~4lのうちの一部である。そこで情報処理装置10の処理部12は、ユーザのニーズに応じた修正が発生しやすい機能に対応するプログラム部品を特定し、マイクロサービス化が有効なプログラム部品として情報処理装置10の管理者に提示する。
例えば処理部12は、ソフトウェア2実行時に複数のソフトウェア部品3a,3b,・・・それぞれにより実現される機能4a~4lの呼び出し頻度を示す呼び出し頻度情報を取得する。そして処理部12は、呼び出し頻度情報に基づいて、呼び出される頻度が第1の基準より高い機能4g,4h(第1の機能)に対応する第1のソフトウェア部品を特定する。第1の基準は、例えば機能4a~4lを呼び出し頻度の高い順にソートした場合における、上位から所定の順番の機能の呼び出し頻度で表される。この場合、例えば呼び出し頻度でソートしたときの機能の順番が上位から所定の割合以内であれば、その機能に対応するソフトウェア部品は第1のソフトウェア部品として特定される。図1の例では、機能4gと機能4hとに対応するソフトウェア部品が、第1のソフトウェア部品として特定されたものとする。
また処理部12は、ソフトウェア2実行時の機能4a~4l間での呼び出し関係に基づいて、第2の基準より多くの呼び出し元が存在する機能4h(第2の機能)に対応する第2のソフトウェア部品を特定する。第2の基準は、例えば機能を呼び出すことのある上位の層の機能の数の、上位の層の機能の総数に占める割合で表される。この場合、機能を呼び出すことのある上位の層の機能の数が、上位の層の機能の総数の所定の割合以上であれば、その機能に対応するプログラム部品は第2のソフトウェア部品として特定される。
図1の例では、アプリケーション層の機能4hは、1つ上の層であるプレゼンテーション層の3つの機能4a~4cのいずれからも呼び出される。第2の基準が、上位の層の機能のうちの半数と定められている場合、機能4hに対応するソフトウェア部品は第2のソフトウェア部品として特定される。
処理部12は、第1のソフトウェア部品に該当し、かつ第2のソフトウェア部品に該当しない第3のソフトウェア部品を、マイクロサービス化の対象として提示する。図1の例では、機能4g,4hに対応するソフトウェア部品が第1のソフトウェア部品であり、機能4hに対応するソフトウェア部品が第2のソフトウェア部品である。そのため機能4gに対応するソフトウェア部品が第3のソフトウェア部品である。この場合、機能4gに対応するソフトウェア部品を示す情報(例えばそのソフトウェア部品に対応するソースファイルのファイル名)が、マイクロサービス化が有効なソフトウェア部品として提示される。
このようにして、上位の所定数以上の機能から呼び出させるコアな機能ではないものの、呼び出される頻度が所定以上に高い機能のソフトウェア部品が、マイクロサービス化が有効なソフトウェア部品として提示される。これにより、マイクロサービス化に有効な最小限のソフトウェア部品が提示され、管理者は、提示内容に基づいて、効率的にマイクロサービス化を実施することができる。
また処理部12は、複数のソフトウェア部品3a,3b,・・・それぞれの修正頻度を示す修正頻度情報に基づいて、修正頻度が第3の基準より高い第4のソフトウェア部品を特定してもよい。この場合、処理部12は、第3のソフトウェア部品の提示では、第1のソフトウェア部品と第4のソフトウェア部品とに該当し、第2のソフトウェア部品に該当しないソフトウェア部品を、第3のソフトウェア部品とする。なお第3の基準は、例えば修正頻度によって機能を降順にソートした場合の上位から所定の順番の機能の修正頻度である。これにより第3のソフトウェア部品を、修正頻度が上位の所定の割合に含まれるソフトウェア部品に限定することができる。その結果、過去にほとんど修正されていないソフトウェア部品について、マイクロサービス化が有効なソフトウェア部品であると提示されることが抑止され、マイクロサービス化が有効なソフトウェア部品の判定精度が向上する。
また処理部12は、データベースへのデータアクセスログに基づいて、データベース内のマスタデータにアクセスする第5の機能に対応する第5のソフトウェア部品を特定することもできる。この場合、処理部12は、第5のソフトウェア部品を第3のソフトウェア部品から除外する。マスタデータにアクセスする機能は、既存システム4におけるコア機能または多数の処理で利用される共通機能である可能性がある。コア機能または共通機能は、ユーザのニーズに応じて修正する部分ではない。そのため、マスタデータにアクセスする機能に対応する第5のソフトウェア部品を第3のソフトウェア部品から除外することで、コア機能または共通機能に対応するソフトウェア部品は、マイクロサービス化が有効なソフトウェア部品であると提示されずに済む。その結果、マイクロサービス化が有効なソフトウェア部品の判定精度が向上する。
処理部12は、データベースに含まれる複数のデータテーブル間での結合関係に基づいて、第4の基準より多くのデータテーブルに結合されたデータテーブルをマスタデータとして特定することができる。第4の基準は、例えばデータベース内のデータテーブル全体に対する結合されたデータテーブルが占める割合で示される。これによりマスタデータを自動で判別することが可能となる。
また処理部12は、第3のソフトウェア部品に対応する機能(第3の機能)を含む呼び出しシーケンスに含まれる他の機能(第6の機能)に対応する第6のソフトウェア部品を特定することもできる。例えば処理部12は、第3のソフトウェア部品に対応する機能を起点として、同一の層内での呼び出し関係を辿って到達可能な他の機能に対応するソフトウェア部品を第6のソフトウェア部品とする。また処理部12は、第3のソフトウェア部品に対応する機能の呼び出し元となる上位の層の機能に対応するソフトウェア部品を第6のソフトウェア部品に加えてもよい。さらに処理部12は、第3のソフトウェア部品に対応する機能を含む呼び出しシーケンスによって呼び出される下位の層の機能を第6のソフトウェア部品に加えてもよい。第6のソフトウェア部品を特定した場合、処理部12は、第3のソフトウェア部品と共に第6のソフトウェア部品を、マイクロサービス化が有効なソフトウェア部品として提示する。
第6のソフトウェア部品は、第3のソフトウェア部品の修正に伴って修正することとなる可能性が高い。そのため第3のソフトウェア部品をマイクロサービス化する場合、第6のソフトウェア部品もマイクロサービス化が有効なソフトウェア部品として提示することで、マイクロサービス化が有効なソフトウェア部品を漏らさず提示することができる。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、3階層のモノリシックシステム内の一部の機能をマイクロサービス化する際に、マイクロサービス化が有効なソフトウェア部品を提示するものである。3階層のシステムとは、画面制御を行うフロント部分のプレゼンテーション層、および画面から要求を受け付けて処理するアプリケーション層、および処理したデータを管理するデータ層で構成されるシステムである。なお第2の実施の形態におけるメソッドは、第1の実施の形態に示した機能4a~4lの一例である。
図2は、システム構成の一例を示す図である。例えば3階層のモノリシックシステムが構築されたサーバ100がネットワーク20に接続されている。サーバ100は、3階層となるように構築されたソフトウェアを実行することでサービスを提供する、1台または複数台のコンピュータである。ネットワーク20には、さらに端末31,32,・・・が接続されている。端末31,32,・・・は、サーバ100で提供されるサービスを利用するユーザが操作するコンピュータである。例えばユーザは端末31,32,・・・を操作することで、端末31,32,・・・に対して、サーバ100へサービス提供の要求を送信させることができる。サーバ100は、端末31,32,・・・のいずれかからの要求に応じて処理を実行し、処理の結果を要求の送信元の端末に送信する。
図3は、サーバのハードウェアの一例を示す図である。サーバ100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
メモリ102は、サーバ100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に利用する各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
バス109に接続されている周辺機器としては、ストレージ装置103、GPU(Graphics Processing Unit)104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、サーバ100の補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
GPU104は画像処理を行う演算装置であり、グラフィックコントローラとも呼ばれる。GPU104には、モニタ21が接続されている。GPU104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、有機EL(Electro Luminescence)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取り、または光ディスク24へのデータの書き込みを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD-RAM、CD-ROM(Compact Disc Read Only Memory)、CD-R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、サーバ100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。ネットワークインタフェース108は、例えばスイッチやルータなどの有線通信装置にケーブルで接続される有線通信インタフェースである。またネットワークインタフェース108は、基地局やアクセスポイントなどの無線通信装置に電波によって通信接続される無線通信インタフェースであってもよい。
サーバ100は、以上のようなハードウェアによって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した情報処理装置10も、図3に示したサーバ100と同様のハードウェアにより実現することができる。
サーバ100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。サーバ100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、サーバ100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またサーバ100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
以上のようなハードウェア構成のサーバ100に構築された3階層のモノリシックシステムは、機能の修正のしやすさ、スケールアップのしやすさなどの点でマイクロサービスアーキテクチャのシステムに劣る。
図4は、モノリシックアーキテクチャとマイクロサービスアーキテクチャとのスケールアウトの例を示す図である。例えばモノリシックアーキテクチャ200では、複数の機能41~44を含むプログラム211が、サーバ210に実装されている。プログラム211は、複数の機能41~44が1つの実行体として開発されており、機能41~44間の境界もあいまいである。
ここでサーバ210の性能が不十分となると、サーバ210のスケールアウトが行われる。モノリシックアーキテクチャ200におけるスケールアウトでは、複数機能の分離が困難である。そのためプログラム211と同じ機能41~44を有する複数のプログラム221,231,241が複数のサーバ220,230,240に実装される。
マイクロサービスアーキテクチャ300では、独立性の高いサービスとして、複数の機能41~44それぞれが開発される。サーバ310には、複数の機能41~44を実現するために複数のプログラム311~314が実装される。複数のプログラム311~314それぞれは、複数の機能41~44のうちの異なる機能を含んでいる。
サーバ310をスケールアウトする場合、機能単位に、要求される性能に応じた数の機能を複数のサーバ320,330,340のいずれかに実装することができる。図4の例では、機能41は不要になったため、サーバ320,330,340のいずれにも実装されていない。サーバ320には、それぞれが機能42を含む3つのプログラム321~323が実装されている。サーバ330には、それぞれが機能43を含む3つのプログラム331~333が実装されている。サーバ340には、それぞれが機能44を含む2つのプログラム341~342が実装されている。
このようにマイクロサービスアーキテクチャ300のシステムでは機能間が疎結合になっているため、モノリシックアーキテクチャ200のシステムに比べて柔軟かつ効率的なスケールアウトが可能となる。
またマイクロサービスアーキテクチャ300では、機能間が疎結合であることにより、機能の改修時の影響調査、ソースプログラムの修正が容易となる。さらにテストの範囲を限定することもでき、短期間での機能改修が可能である。
なおマイクロサービスアーキテクチャ300における各プログラムで提供されるマイクロサービスの呼び出しは、例えばRestfull API(Application Programming Interface)により実施可能である。
以下、モノリシックアーキテクチャ200で構築された既存の業務システムの一部をマイクロサービスアーキテクチャ300に置き換えることの重要性についてさらに具体的に説明する。
既存の業務システムはSoR(System of Record)と呼ばれ、データを正確に記録することを重視したシステムである。一方、最近はSoE(System of Engagement)と呼ばれるシステムが注目されている。SoEは、ユーザとのつながりを重視して設計されるシステムである。
例えばクラウドサービス登場やスマートデバイスの浸透でICT(Information and Communication Technology)が身近になり、ICTシステムに対する顧客ニーズが多様化している。顧客ニーズに応えるために顧客とのつながりを重視したSoEシステム開発が適切となる。しかも、通信性能の向上や、アジャイル開発・DevOpsなどの新たな開発手法や考え方、それを支えるRESTful APIやコンテナ技術など、SoEに利用可能な様々な技術が発展している。これらの技術の発展と浸透がSoEシステム開発を促進させている。
既存のSoRと言われる業務システムは、正確性、信頼性、安定性を重視し、開発段階において、機能が大きく変化することを想定していないシステムである。しかしSoRで開発された業務システムの中にも、本来は顧客ニーズに素早く応えることで、サービスの質を向上させることができるシステムが存在する。このようなSoRシステムをSoEシステムに容易に移行できることが望まれる。
既存のSoRシステムの多くは、システム内が密に連携したモノリシックシステムである。他方、SoEシステムにはマイクロサービスアーキテクチャが適している。すなわち、システム内が密に連携したモノリシックシステムでは、システムの一部修正もしくは機能を追加する場合はシステム全体の起動・停止を伴う。そのためモノリシックシステムの機能を修正する場合、最小限の修正にとどめて安定運用を重視することも少なくない。それに対してSoEシステムでは顧客ニーズに素早く応えるため、機能の修正が高頻度で行われるため、マイクロサービスアーキテクチャによりマイクロサービス化しておけば、修正対象の機能に対応するプログラムと、その関連部分を修正するだけですむ。
なお、システムを機能単位に分割して連結するサービス指向アーキテクチャ(SOA:Service Oriented Architecture)という考え方も存在する。ただし、SOAを支える技術(CORBA(Common Object Request Broker Architecture)やSOAP(Simple Object Access Protocol)など)は使いこなすことが難しく、分割したシステム間の通信で性能上の問題もあり、浸透していない。そこでSOAと考え方はほぼ同等であるがRESTful APIというシンプルな技術を活用するマイクロサービスアーキテクチャが注目されている。クラウドサービスの発達や通信性能の向上により遠隔のシステム間を連携が容易になったこともあり、遠隔のシステム間でもマイクロサービスを適用する事例も増え始めている。
既存のシステムをマイクロサービス化することにより修正スピードおよび可用性が向上するが、システム全体を作り替えたのでは移行コストが高く、作り直し後の機能不全や入替え時の一時業務停止などのリスクを伴う。そこで最小限のコスト・リスクで、顧客ニーズに素早く対応できるシステムに作り替えるには、アクセス頻度が高く・修正が頻繁する部分に限定してマイクロサービス化するのが適切である。そこでサーバ100は、SoRである既存業務システムからマイクロサービス化が有効な部分を特定する。
図5は、部分的なマイクロサービス化の一例を示す図である。既存のシステム用のソフトウェア(既存システムソフトウェア400)は、プレゼンテーション層、アプリケーション層、およびデータ層の3階層のSoRである。既存業務システムはSoRの下、層ごとのプログラム410,420,440が実装されている。複数のプログラム410,420,440それぞれには、複数の機能が含まれる。
このような3階層システムで構築された既存システムソフトウェア400内の機能の一部を、マイクロサービス化することができる。例えばシステムの管理者は、プログラム410,420,440それぞれ内の一部の機能に対応する独立のプログラム510,520,530を生成する。生成したプログラム510,520,530は、SoEによる作り替え後のシステム用のソフトウェア(作り替えシステムソフトウェア500)としてサーバ100に実装される。このようにして生成されたプログラム510,520,530が、マイクロサービスとなる。
この際、SoEシステムとして抽出することで修正スピード向上・可用性向上が見込まれる機能をマイクロサービス化することが重要となる。そこでサーバ100は、既存システムソフトウェア400の運用状況を解析し、マイクロサービス化が有用な機能を特定する。サーバ100の管理者は、特定した機能をマイクロサービス化するためのプログラム510,520,530の作成、サーバ100へのデプロイなどの作業を行う。
次に、マイクロサービス化が有用な機能の特定の困難性について説明する。
マイクロサービス化の対象となる既存システムソフトウェア400は10年以上前に作られたシステムであることが多い。そのため、既存システムソフトウェア400の設計・開発した担当者がすでに不在であったり、既存システムソフトウェア400の設計書が残っていなかったりする。従って、開発時の資料だけからマイクロサービス化が適切な部分を特定するのは困難である。
なおマイクロサービス化の対象の決定手法としては、ドメイン駆動設計(DDD:Domain-Driven Design)の適用などが良いとされている。DDDは、システム開発する対象業務を、業務内容を詳細に把握する専門家とソフトウェア開発技術者との間で、意味のある単位(ドメイン)で分割した上でモデル化し、それをマイクロサービスに反映するという考え方である。このDDDは、新規にシステムを設計・開発する際に有効なアプローチである。しかしながらDDDでは、既存システムソフトウェア400からマイクロサービス化するのに適した機能を抽出するのは困難である。
ここで、既存システムソフトウェア400において機能を修正する場合、安定稼働を維持しながら修正することが求められる。そのため、修正頻度が多い機能をマイクロサービス化することで、その後の修正の容易性が増す。しかし、修正が多いというだけでは顧客ニーズに応えて頻繁に改修される機能であるとは言い切れない。
顧客ニーズに応えて頻繁に改修される機能(マイクロサービス化対象機能)の特定に利用可能な情報取得技術として、以下の5つの技術が考えられる。
[第1の情報取得技術]
ソースファイルに対する修正内容を蓄積する技術がある。この技術の一例として、後述の継続的インテグレーション(CI:Continuous Integration)/継続的デリバリー(CD:Continuous Delivery)技術がある。この技術を利用すれば、修正頻度が多い機能をマイクロサービス化対象機能として特定することができる。修正頻度が多い機能は、マイクロサービス化の効果が高い部分の可能性がある。
ただし既存のSoRシステムは修正による影響が大きい。そのため、頻繁に修正は行われず、以下のように必ずしも修正が多い機能であっても、顧客ニーズに応えて改修を行うことが求められる機能とは限らない。
修正頻度のみでの判断が不適切な第1の理由は、修正頻度が多い機能の修正が、顧客ニーズに応えるための修正ではなく、品質問題で障害修正が頻繁に発生している可能性がある点である。障害発生の抑止のためには、修正頻度が高い機能であっても、安定運用を重視した一枚岩のモノリシックなアーキテクチャのシステム内に留めて置く方がよい。
修正頻度のみでの判断が不適切な第2の理由は、修正頻度が多い機能の修正が、セキュリティ脆弱性対応のために行われている可能性がある点である。セキュリティの脆弱性に応じた修正例としては、顧客の要求を受け付けるプレゼンテーション層でセキュリティ脆弱性が見つかった場合、オープンソースの重大障害や脆弱性の問題が公知となった場合などがある。セキュリティ脆弱性対応のためには、修正頻度が高い機能であっても、一枚岩のモノリシックなアーキテクチャのシステム内に留めておく方がよい。
このように修正頻度のみでは、顧客ニーズに応えて修正される機能を正しく判断できない。そのため、修正頻度のみでマイクロサービス化対象機能を判断するのは適切ではない。
[第2の情報取得技術]
プレゼンテーション層がWebサイトの場合、Webサイトの動線分析により、どの画面のどの操作が利用者によく利用されているかを分析する技術がある。この技術を利用すると、動線分析によりよく利用された機能を抽出し、その機能をマイクロサービス化対象機能とすることも可能である。
しかし第2の情報取得技術は、Webサイトにしか利用できない。さらに第2の情報取得技術は、Webサイトの動線分析で利用頻度が高い画面・操作をマイクロサービス化対象機能として特定しても、その修正箇所から呼び出されるアプリケーション層・データ層内のマイクロサービス化対象機能が分からない。そのため第2の情報取得技術によるマイクロサービス化対象機能の特定は、操作性の向上という限定的な顧客ニーズへの対応にしかならない。
[第3の情報取得技術]
プレゼンテーション層からアプリケーション層へのAPI呼び出しを監視して、何の処理(API)がどれくらいの頻度で実行されているかを観測し、可視化する技術がある。このようなAPI呼び出しの監視は、例えばAPI管理ツールと呼ばれるソフトウェアで実現されている。この技術を利用すると、API管理ツールで見える化された結果から、呼び出しが多い機能をマイクロサービス化が有効な機能と特定することが可能である。
しかし、第3の情報取得技術では、通信頻度を減らしてネットワークへの負荷を軽減させるため、1回の要求でなるべく多くの情報を共通APIで送信する。そしてアプリケーション層のプログラム内において、実行する処理をいずれかの機能に振り分けている場合が多い。そのため第3の情報取得技術だけでマイクロサービス化対象機能を特定すると、共通APIに応じた処理を実行する可能性があるすべての機能がマイクロサービス化対象機能となり、マイクロサービス化の対象範囲が広くなりすぎてしまう。
[第4の情報取得技術]
1つのプログラム内でのクラスの呼び出し回数を集計する技術がある。例えばJAVA(登録商標)であればスタックトレースと呼ばれる機能を用いてクラスの呼び出し頻度を集計できる。この技術を利用することにより、アクセス回数が多いクラスをマイクロサービス化対象機能として特定することが可能である。
しかし保守対象を減らすため、再利用可能な処理は共通クラスとすることが多い。そのため、アクセス回数が多いクラスが必ずしも修正頻度が高いとは判断できない。
[第5の情報取得技術]
データ層のアクセスログから、どのデータに対するアクセス回数が多いかを分析する技術がある。この技術を利用することにより、アクセス回数が多いデータの呼び出し元の機能をマイクロサービス化対象機能と特定することが可能である。
しかし、データ層には、業務運用上で重要なコア情報(例えば従業員名簿・商品管理情報など)を格納するマスタデータと、それに付随して顧客要件に合わせて構成の更新が行われる一般データとが存在する。マスタデータはコア情報となるためアクセス回数が多いものの、基本情報であるためほぼ修正することはない。逆にコア情報を扱う部分に修正を加えてしまうとシステムの基本品質低下のリスクを伴う。このため、アクセス回数が多いデータの呼び出し元の機能をマイクロサービス化対象機能としてしまうと、マイクロサービス化のリスクを回避すべき機能もマイクロサービス化の対象となってしまう。
以上が利用可能な5つの技術である。これらの情報取得技術を個別に適用しても、マイクロサービス化対象機能を適切に特定することは困難である。そこでサーバ100は、情報取得技術の2つ以上を組み合わせてマイクロサービス化対象機能を特定する。
例えば処理の実行回数が多い機能は、ユーザによる利用頻度が高いと言える。そのため、顧客ニーズの変化によって改修を加えるマイクロサービス化の効果が高い機能である可能性がある。しかし実行頻度の高い機能のなかには、システムの根幹を支えるコア部分、またはどの業務処理でも共通に利用する共通処理部分が含まれる。これらの制御部分は業務の不変的な部分である可能性があり、実行回数が多くても頻繁に改修は発生しないものと推定できる。逆にこれらの制御部分を改修してしまうと、システムの安定稼働についての品質低下リスクを招く。
そこでサーバ100は、既存システムソフトウェア400で実装されたプログラム410,420,440で実現される機能のなかから以下の3つの要件を満たす機能を特定する。
[第1の要件]修正頻度が高い(可用性向上・修正スピード向上の必要性が高い)こと。
[第2の要件]処理頻度が高いこと。
[第3の要件]コア部分または共通処理部分に該当しないこと。
サーバ100は、これらの要件を満たした機能と、その機能を含むメソッド呼び出しシーケンスに含まれる機能とを顧客ニーズの変化に応じて修正する可能性の高い機能として特定する。そしてサーバ100は、特定した機能を、マイクロサービス化に有効な機能であるとして、管理者に提示する。
図6は、修正頻度の多い機能抽出の一例を示す図である。図6の例では、プレゼンテーション層のプログラム410には、6個の機能411~416が含まれている。アプリケーション層のプログラム420には、18個の機能421~438が含まれている。データ層のプログラム440には、3個の機能441~443が含まれている。データ層の各機能441~443は、例えばデータテーブルに対応しており、対応するデータテーブルへのデータの入出力を行う機能である。図6において、矩形の内部にばつ印が示されている機能413,426,428,432,436は、修正頻度が所定の閾値より多い機能である。
顧客ニーズに素早く対応するためには、例えばアジャイル開発やDevOpsという短サイクルで製品やサービスに取り込んで顧客ニーズにアジャストしていく開発手法が採られる。このような開発のために、ビルド・検証・リリース作業をバックグラウンドで自動的に実行するCI/CD技術が発展している。
このCI/CD技術を利用することで、ソースファイルの修正頻度を把握することができる。例えばサーバ100は、CI/CD技術を用いたソース管理ツールで、プログラム410,420,440のソースファイルを管理する。サーバ100は、ソース管理ツールによりソースファイルが修正されたことを検知する。そしてサーバ100は、ソースファイルが修正されたタイミングで、CI/CDツールに対して、修正が発生したことと合わせて修正箇所を通知する。この際、サーバ100は、この修正タイミング・修正箇所を蓄積しておく。これにより、修正頻度の多い修正箇所(機能413,426,428,432,436)を特定することができる。
次にサーバ100は、修正頻度が多い機能413,426,428,432,436のうち、処理頻度が多い機能を、マイクロサービス化対象機能の候補(マイクロサービス化候補機能)として抽出する。
図7は、処理頻度の多い機能抽出の一例を示す図である。図7の例では、修正頻度が多い機能413,426,428,432,436のうちの2つの機能428,432が、修正頻度が多い機能として抽出されている。
例えばサーバ100は、API呼び出しを検知することで、処理頻度が多い機能を抽出することができる。すなわち、サーバ100は、プレゼンテーション層のプログラム410を実行するプロセスから出力されたAPI呼び出しを検出する。このAPI呼び出しは、例えばアプリケーション層のプログラム420で提供されるAPIを呼び出すAPI呼び出しである。サーバ100は、検出したAPI呼び出しの内容を解読し、プログラム410内のどの機能からプログラム420内のどの機能への呼び出しなのかを把握する。そしてサーバ100は、どの画面処理で、どの処理が多く実行されているかを把握する。
なお共通APIでAPI呼び出しが行われる場合がある。その場合、アプリケーション層内の最上位の機能が共通APIを取得し、処理を実行するべきAPIを有する機能に処理を依頼する。このときのAPI呼び出しの実質的な呼び出し先は、アプリケーション層内の下位の層となる。例えばプレゼンテーション層内の機能411からのAPI呼び出しが、アプリケーション層内の2段目の機能428によって提供されているAPIの呼び出しであることがあり得る。
またサーバ100は、スタックトレースの機能を用いて、1つのプログラム内での機能間の呼び出しの発生を検知できる。サーバ100は、機能間の呼び出し回数を計数することで、同一プログラム内での呼び出しも含めて、処理頻度が多い機能を識別することができる。そしてサーバ100は、前述のCI/CD技術により修正頻度が高いと判定された機能のうち処理頻度が多い機能を特定する。
次にサーバ100は、コア部分または共通処理部分を、マイクロサービス化候補機能から除外する。
図8は、コア部分または共通処理部分の除外の一例を示す図である。図8の例では、機能432が共通処理部分として抽出されている。プレゼンテーション層もプログラム410またはアプリケーション層のプログラム420内におけるコア部分または共通処理部分は、例えばトラックトレース機能を用いて抽出できる。またデータ層のプログラム440におけるコア部分または共通処理部分は、データのアクセスログを用いて抽出できる。そこでサーバ100は、どんな処理でも共通で処理されているコア部分または共通処理部分を、マイクロサービス化候補機能から除外する。
例えばサーバ100は、API管理ツールおよびプログラム410,420に対するトラックトレースの情報を利用して、プレゼンテーション層のプログラム410内の各機能411~416に対応する画面内の操作に基づいて処理を実行した機能を判定する。そして、所定数以上の画面の操作に基づいて処理を実行している機能をコア部分または共通処理部として抽出する。
またサーバ100は、データベースを解析して、JOIN処理によるデータテーブル間の関連付けを示す情報を取得する。サーバ100は、所定数以上のデータテーブルにJOIN処理で関連付けられているデータテーブルをマスタデータと判断する。そしてサーバ100は、データ層内のマスタデータの管理機能とマスタデータにアクセスするアプリケーション層内の機能とをコア部分または共通部分として抽出する。
サーバ100は、コア部分または共通処理部として抽出した機能をマイクロサービス化候補機能から除外する。
さらにサーバ100は、マイクロサービス化候補機能への処理の依頼元となっている画面を起点とする呼び出しシーケンスを辿り、その呼び出しシーケンスで呼び出される機能を、すべてのマイクロサービス化対象機能に含める。
図9は、呼び出しシーケンス内の機能抽出の一例を示す図である。図9の例では、アプリケーション層のプログラム420内の機能428が、マイクロサービス化候補機能のための上記3つの要件を満たしているものとして抽出されている。またサーバ100は、すべての機能間の呼び出し関係に基づいて、呼び出しシーケンスを把握する。例えばJavaランタイムではメソッドの呼び出しシーケンス(メソッドトレース)が把握できる。
機能間の呼び出し関係を辿ると、機能428は、プレゼンテーション層のプログラム410内の機能411からアプリケーション層のプログラム420内の機能421へのAPI呼び出しに基づいて処理を実行していることが分かる。すなわち機能411で提供される画面に対するユーザからの操作に応じた機能421の呼び出しの結果、機能428が処理を実行している。
このときサーバ100は、機能411から機能421の呼び出しに起因する呼び出しシーケンスを判別する。図9の例では、機能421から機能428,429が呼び出され、機能428,429から機能435が呼び出され、機能435からデータ層のプログラム440内の機能442が呼び出されている。
サーバ100は、このような呼び出しシーケンスに含まれるすべての機能を抽出する。図9の例では、機能411,421,428,429,435,442が抽出される。そしてサーバ100は、抽出したすべての機能をマイクロサービス化対象機能に特定する。
このようにしてマイクロサービス化対象機能を特定することができる。サーバ100は、マイクロサービス化対象機能をサーバ100の管理者に提示し、マイクロサービス化を提案する。
図10は、マイクロサービス化を支援するためのサーバの機能の一例を示す図である。サーバ100は、既存システム110、ソースファイル記憶部120、ソースファイル管理部130、およびマイクロサービス化支援部140を有する。
既存システム110は、SoRの設計思想で開発され、運用されているシステムである。既存システム110は、プレゼンテーション部111、アプリケーション部112、データ管理部113、およびDB114を有する。
プレゼンテーション部111は、プレゼンテーション層のプログラム410をプロセッサ101が実行することで実現される機能である。プログラム410内の機能411~416は、プレゼンテーション部111に含まれる。プレゼンテーション部111は、例えば端末31,32,・・・からの要求に応じて、機能411~416のうちのいずれかの機能を実行し、画面データを生成し、要求元の端末に画面データを送信する。プレゼンテーション部111は、送信した画面データに基づいて表示された画面への操作に基づく処理要求を受信すると、その処理要求に応じたAPI呼び出しを行うことで、アプリケーション部112に処理の実行を要求する。
アプリケーション部112は、アプリケーション層のプログラム420をプロセッサ101が実行することで実現される機能である。プログラム420内の機能421~438は、アプリケーション部112に含まれる。アプリケーション部112は、プレゼンテーション層からのAPI呼び出しに応じて処理を実行する。アプリケーション部112は、処理の過程でDB114へのデータアクセスが発生すると、データ管理部113にデータアクセス要求を送信する。
データ管理部113は、データ層のプログラム440をプロセッサ101が実行することで実現される機能である。プログラム440内の機能441~443は、データ管理部113に含まれる。データ管理部113は、アプリケーション部112からのデータアクセス要求に応じてDB114へのデータ書き込みまたはDB114からのデータ読取りを行う。
DB114は、複数のデータテーブルにより構成されるデータベースである。DB114に格納されるデータテーブルの一部はコア部分を構成する。DB114内のデータテーブルは、他のデータテーブルとJOINにより結合することができる。データ管理部113からのDB114へのアクセスがあるとそのアクセスを示すデータアクセスログがメモリ102またはストレージ装置103に格納される。データアクセスにおいて複数のデータテーブルのJOINが指示されている場合には、例えばJOINによりデータテーブルが結合されたことがデータアクセスログとして記録される。
ソースファイル記憶部120は、3階層の各プログラム410,420,440の作成に用いられたソースファイルを記憶する。ソースファイルは、プログラム410,420,440内の機能ごとに作成されている。3階層の各プログラム410,420,440を修正する場合、修正対象の機能に対応するソースファイルが更新される。
ソースファイル管理部130は、ソースファイル記憶部120に格納されているソースファイルを管理する。例えばソースファイル記憶部120は、CI/CDを利用して、ソースファイルごとに、そのソースファイルの修正頻度などを管理する。
マイクロサービス化支援部140は、既存システム110内の各機能の処理状況に基づいて、マイクロサービス化をすることで適切な機能(マイクロサービス化対象機能)を特定する。なお、マイクロサービス化支援部140は、マイクロサービス化対象機能の特定の際には、ソースファイル管理部130から、各機能に対応するソースファイルの修正頻度の情報を取得する。マイクロサービス化支援部140は、マイクロサービス化対象機能を特定すると、マイクロサービス化対象機能を示してマイクロサービス化を提案する情報を出力する。
なお、図10に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図10に示した各要素の機能は、例えば、その要素に対応するプログラムをコンピュータに実行させることで実現することができる。
マイクロサービス化支援部140は、マイクロサービス化対象機能を特定するために、既存システム110から各機能処理状況に関する情報を取得すると共に、ソースファイル管理部130からソースファイルの更新頻度に関する情報を取得する。
図11は、マイクロサービス化対象機能の特定のために取得する情報の一例を示す図である。マイクロサービス化支援部140は、ソースファイル管理部130からは修正頻度情報141を取得する。
例えばソースファイル管理部130は、ソースファイル記憶部120に格納されたソースファイル121,122,・・・のいずれかが修正された場合に、その修正履歴を管理する。そしてソースファイル管理部130は、マイクロサービス化支援部140からの要求に応じて、ソースファイル121,122,・・・それぞれについての修正頻度を示す修正頻度情報141を出力する。
マイクロサービス化支援部140は、既存システム110による処理を監視することでアクセス先情報142、JOIN情報143、API呼び出し頻度情報144、画面別API呼び出し情報145、および呼び出しシーケンス情報146を取得する。アクセス先情報142には、機能ごとに、該当機能を実行することでアクセスされるデータテーブルが示されている。JOIN情報143には、データテーブル間のJOINによる結合関係に関する情報が示されている。API呼び出し頻度情報144には、機能ごとのAPI呼び出しの頻度に関する情報が示されている。画面別API呼び出し情報145には、プレゼンテーション部111によって表示される画面ごとに、その画面に対する入力に応じて実行されるAPI呼び出しに関する情報が示されている。呼び出しシーケンス情報146には、プレゼンテーション部111からのAPI呼び出しによってアプリケーション部112内で実行される一連の機能に関する情報が示されている。
以下、図12~図19を参照し、マイクロサービス化支援部140がマイクロサービス化対象機能を特定するために取得する情報と取得した情報の用途について具体的に説明する。
図12は、修正頻度情報の一例を示す図である。例えば修正頻度情報141には、ソースファイルのファイル名に対応付けて、その修正頻度が設定されている。ソースファイルのファイル名には、そのソースファイルで実装されるAPIのリストが示されている。例えばファイル名「aaa.java」のソースファイルにより、API「A1,A2」がサーバ100に実装される。修正頻度は、所定の期間内にソースファイルが修正された回数である。
マイクロサービス化支援部140は、例えばCI/CD技術を利用して、APIの実装に用いられるソースファイルの修正頻度を蓄積して、修正頻度情報141を生成することができる。マイクロサービス化支援部140は、修正頻度情報141に基づいて、修正頻度が高いソースファイルを抽出することができる。例えばマイクロサービス化支援部140は、すべてのソースファイルのうち修正頻度が多い方から上位1割のソースファイルを抽出する。
図13は、アクセス先情報の一例を示す図である。例えばアクセス先情報142には、ソースファイルのファイル名に対応付けて、そのソースファイルを実行することで実現される機能がアクセスするDB114内のデータテーブルのテーブル名が設定されている。例えばファイル名「aaa.java」のソースファイルを実行することで実現される機能は、データテーブル「T1」と「T2」にアクセスする。
図14は、JOIN情報の一例を示す図である。例えばJOIN情報143には、データテーブルのテーブル名それぞれに対応付けて、そのデータテーブルにJOINされているデータテーブルのテーブル名が設定されている。図14の例では、テーブル名「T3」のデータテーブルには、テーブル名「T4」のデータテーブルがJOINされている。またテーブル名「T8」のデータテーブルには、テーブル名「T1」、「T2」、「T5」、「T6」、「T9」などの多くのデータテーブルがJOINされている。
JOIN情報143に基づいて、DB114のコア部分(マスタデータを格納する部分)であるマスタテーブルを判別することができる。すなわちマスタテーブルは様々な用途で利用されるため、用途に応じてのデータテーブルがJOINされる。そのため、全体のデータテーブルに対するJOINされるデータテーブルの割合が所定値以上(例えば50%以上)となるデータテーブルは,マスタテーブルであると判断できる。マイクロサービス化支援部140は、マスタテーブルにアクセスする機能については、マイクロサービス化候補機能から除外する。
図15は、マイクロサービス化候補機能からのマスタテーブルへアクセスする機能の除外処理の一例を示す図である。図15の例では、テーブル名「T8」のデータテーブルは、50%以上のデータテーブルがJOINされているものとする。この場合、マイクロサービス化支援部140は、テーブル名「T8」のデータテーブルをマスタテーブルであると判断する。そしてマイクロサービス化支援部140は、アクセス先情報142に示される各ソースファイルのうち、テーブル名「T8」のマスタテーブルにアクセスするソースファイルを抽出する。マイクロサービス化支援部140は、抽出したソースファイルを実行することで実現する機能については、マイクロサービス化候補機能から除外する。
図16は、API呼び出し頻度情報の一例を示す図である。例えばAPI呼び出し頻度情報144には、ソースファイルのファイル名に対応付けて、そのソースファイルによって実装されるAPIに対するAPI呼び出し頻度(所定期間内のAPI呼び出し回数)が設定されている。図16の例では、ファイル名「aaa.java」のソースファイルにより実装されるAPI「A1」、「A2」に対するAPI呼び出しが、合計で「112,000」回行われていることが示されている。
このようなAPI呼び出し頻度は、例えばAPI管理ツールを利用して取得することができる。マイクロサービス化支援部140は、ソースファイルにより実装されるAPIの呼び出し頻度が多い方から所定数のソースファイルで実現される機能を、マイクロサービス化候補機能とする。例えばマイクロサービス化支援部140は、修正頻度が上位1割に入り、マスタテーブルへのアクセスを行わない機能のうち、API呼び出し頻度が上位から2分の1以内のソースファイルで実現される機能を、マイクロサービス化候補機能とする。
図16の例では、修正頻度が上位1割に入り、マスタテーブルへのアクセスを行う機能を含まないソースファイルは、「aaa.java」、「bbb.java」、「ccc.java」、「ddd.java」、「fff.java」の5個である。このうちAPI呼び出し頻度が上位の2分の1以下に入るのは、「aaa.java」(API呼び出し頻度「112,000」)と「ccc.java」(API呼び出し頻度「650,000」)である。
図17は、画面別API呼び出し情報の一例を示す図である。画面別API呼び出し情報145には、マイクロサービス化候補機能に対応するソースファイルのファイル名に対応付けて、そのソースファイルにより実装されるAPIを、プレゼンテーション部111における各画面からの呼び出しの有無が示されている。例えば画面API呼び出し情報145の各行には、ソースファイルのファイル名が対応付けられ、各列にはプレゼンテーション部111における画面の画面番号が対応付けられている。具体的には、画面別API呼び出し情報145には、各行と各列との交差する位置に、列に示される画面に対するユーザ操作に応じた処理により、行に示されるソースファイルにより実装されるAPIの呼び出しが行われるか否かが示されている。図17の例では、API呼び出しが行われている場合には丸印が示されている。
図17の例では、ファイル名「aaa.java」は2個の画面に基づいてAPI呼び出しが行われる。またファイル名「ccc.java」は10個の画面に基づいてAPI呼び出しが行われる。
マイクロサービス化支援部140は、プレゼンテーション層(GUI)のソースファイルを検索し、各ソースファイルを実行することで表示される画面に画面番号を付与する。そして、マイクロサービス化支援部140は、API管理ツールなどにより抽出したAPIの呼び出し元を確認することで、その画面からどのAPI呼び出しが行われているのかを判断する。
マイクロサービス化支援部140は、例えば50%以上の画面からAPI呼び出しが行われている機能は、どこからも実行される共通処理(コア部分)だと判断して、そのAPIを有する機能は、マイクロサービス化候補機能から除外する。図17の例では、10個の画面からAPI呼び出しが行われているファイル名「ccc.java」のソースファイルに対応する機能は、マイクロサービス化候補機能から除外される。
画面別API呼び出し情報145に基づいて多くの画面からAPI呼び出しが行われる機能を除外した後にマイクロサービス化候補機能として残っている機能は、マイクロサービス化対象機能として特定される。またマイクロサービス化支援部140は、特定されたマイクロサービス化候補機能のAPI呼び出し元となる画面に対応するプレゼンテーション部111内の機能も、マイクロサービス化対象機能として特定する。さらにマイクロサービス化支援部140は、データ管理部113内のマイクロサービス化対象機能が有するAPIの処理においてアクセスするデータテーブルを管理する機能についても、マイクロサービス化対象機能として特定する。
図18は、呼び出しシーケンス情報の一例を示す図である。呼び出しシーケンス情報146には、マイクロサービス化候補機能が有するAPI「A1」、「A2」それぞれにおいて、そのAPI内で呼び出すメソッドのメソッド名が、呼び出し順に設定されている。例えばAPI「A1」からは、「xxxxクラスのmethod001」、「yyyyクラスのmethod002」、「yyyyクラスのmethod003」、「zzzzクラスのmethod004」の4個のメソッドが順に呼び出される。このようなメソッドの呼び出しシーケンスは、Javaランタイムを用いて把握することができる。
API内で呼び出されるメソッドは、アプリケーション部112内の1つの機能である。マイクロサービス化支援部140は、マイクロサービス化対象機能として特定した機能を含む呼び出しシーケンス内のメソッドに対応する機能を、マイクロサービス化対象機能として特定する。
マイクロサービス化支援部140は、マイクロサービス化対象機能として特定した機能を示すマイクロサービス化対象機能情報を生成する。そしてマイクロサービス化支援部140は、マイクロサービス化対象機能情報に基づいて、マイクロサービス化が有効な機能をユーザに提案する。
図19は、特定されたマイクロサービス化対象機能の一例を示す図である。マイクロサービス化対象機能情報147には、階層ごとに、その階層のプログラム410,420,440内のマイクロサービス化対象のリストが設定されている。アプリケーション層の機能は、プレゼンテーション層からのAPI呼び出し対象となる機能(階層「アプリケーション」)と、呼び出されたAPIの呼び出しシーケンスに含まれている機能(階層「アプリケーション内」)とに分けられている。
マイクロサービス化対象機能の特定では、まずアプリケーション層におけるプレゼンテーション層からのAPI呼び出し対象となる機能が、マイクロサービス化対象機能として特定される。図19の例では「aaa.java(A1、A2)」がマイクロサービス化対象機能として特定されている。
そしてアプリケーション層内のマイクロサービス化対象機能に対してAPI呼び出しを行うプレゼンテーション層の画面に対応する機能がマイクロサービス化対象機能として特定される。図19の例では「G3」、「G9」がマイクロサービス化対象機能として特定されている。
またAPI呼び出し対象のマイクロサービス化対象機能のAPIの実行時にアクセスされるデータテーブルの管理機能がマイクロサービス化対象機能として特定される。図19の例では「T1」、「T2」がマイクロサービス化対象機能として特定されている。
さらにAPI呼び出し対象のマイクロサービス化対象機能のAPIにおけるAPI呼び出しシーケンスにおいて実行されるメソッドに対応する機能が、マイクロサービス化対象機能として特定される。図19の例では「xxxxクラスのmethod001」、「yyyyクラスのmethod002」などがマイクロサービス化対象機能として特定されている。
次にマイクロサービス化する機能の提案処理の手順についてフローチャートを参照して説明する。
図20は、マイクロサービス化機能提案処理の手順の一例を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。
[ステップS101]マイクロサービス化支援部140は、修正頻度情報141を取得する。例えばマイクロサービス化支援部140は、ソースファイル管理部130がCI/CD技術を利用して蓄積したソースファイルの修正履歴に基づいて、修正頻度情報141を生成する。
[ステップS102]マイクロサービス化支援部140は、アクセス先情報142を取得する。例えばマイクロサービス化支援部140は、DB114へのデータアクセスログに基づいて各APIのアクセス先のデータテーブルを取得し、アクセス先情報142を生成する。
[ステップS103]マイクロサービス化支援部140は、JOIN情報143を取得する。例えばマイクロサービス化支援部140は、DB114におるデータテーブル間のJOIN関係を解析し、JOIN情報143を生成する。
[ステップS104]マイクロサービス化支援部140は、API呼び出し頻度情報144を取得する。例えばマイクロサービス化支援部140は、API管理ツールを利用して、既存システム110の運用中におけるAPI呼び出し頻度を蓄積する。そしてマイクロサービス化支援部140は、呼び出し先の機能の実装に用いられたソースファイルごとに所定期間内のAPI呼び出し回数を計数することで、API呼び出し頻度情報144を生成する。
[ステップS105]マイクロサービス化支援部140は、画面別API呼び出し情報145を取得する。例えばマイクロサービス化支援部140は、プレゼンテーション層の機能によって表示される画面と、その画面操作に応じて出力されるAPI呼び出しにより呼び出されるAPIを解析し、画面別API呼び出し情報145を生成する。
[ステップS106]マイクロサービス化支援部140は、呼び出しシーケンス情報146を取得する。例えばマイクロサービス化支援部140は、APIごとにメソッドトレースを行い、各APIから呼び出されるメソッドをリストアップし、メソッドのリストに基づいて呼び出しシーケンス情報146を生成する。
[ステップS107]マイクロサービス化支援部140は、マイクロサービス化対象機能特定処理を実行する。この処理の詳細は後述する(図21参照)。
[ステップS108]マイクロサービス化支援部140は、マイクロサービス化対象機能特定処理の結果を出力する。例えばマイクロサービス化支援部140は、マイクロサービス化対象機能に特定された機能を示すマイクロサービス化対象機能情報147をモニタ21に表示する。
このようにして、マイクロサービス化機能提案処理が行われ、サーバ100の管理者は、顧客ニーズに応じた改修が求められる機能を容易に認識することができる。管理者は、マイクロサービス化対象機能として示された機能のマイクロサービス化を行うことで、以後、顧客ニーズに応じた機能の改修が容易となる。
次にマイクロサービス化対象特定処理の手順について詳細に説明する。
図21は、マイクロサービス化対象特定処理の手順の一例を示すフローチャートである。以下、図21に示す処理をステップ番号に沿って説明する。
[ステップS201]マイクロサービス化支援部140は、ソースファイル記憶部120に格納されているソースファイルのうちの、未選択のソースファイルを1つ選択する。
[ステップS202]マイクロサービス化支援部140は、修正頻度情報141を参照し、選択したソースファイルの修正頻度が上位10%以内に入っているか否かを判断する。例えばマイクロサービス化支援部140は、ステップS202の処理を最初に実行する際に、ソースファイルを修正頻度によって降順にソートし、上位10%のソースファイルによって実現される機能をマイクロサービス化候補機能とする。マイクロサービス化支援部140は、選択したソースファイルが上位10%以内に入っていれば処理をステップS203に進める。またマイクロサービス化支援部140は、上位10%以内に入っていなければ処理をステップS206に進める。
[ステップS203]マイクロサービス化支援部140は、選択したソースファイルにより実装されるAPIがマスタデータにアクセスするか否かを判断する。例えばマイクロサービス化支援部140は、JOIN情報143を参照し、50%以上のデータテーブルからJOINされているデータテーブルをマスタデータと判断する。そしてマイクロサービス化支援部140は、DB114へのアクセスログに基づいてマスタデータにアクセスしているAPIを特定する。そしてマイクロサービス化支援部140は、特定したAPIに選択したソースファイルにより実装されるAPIが含まれていれば、マスタデータにアクセスすると判断する。
マイクロサービス化支援部140は、マスタデータにアクセスすると判断した場合、処理をS206に進める。またマイクロサービス化支援部140は、マスタデータにアクセスしないと判断した場合、処理をステップS204に進める。
[ステップS204]マイクロサービス化支援部140は、API呼び出し頻度情報144を参照し、選択したソースファイルにより実装されるAPIの呼び出し頻度が上位50%以内に入っているか否かを判断する。マイクロサービス化支援部140は、上位50%以内に入っていれば処理をステップS205に進める。またマイクロサービス化支援部140は、上位50%以内に入っていなければ処理をステップS206に進める。
[ステップS205]マイクロサービス化支援部140は、画面別API呼び出し情報を参照し、選択したソースファイルによって実装されるAPIが50%以上の画面から呼び出されるか否かを判断する。マイクロサービス化支援部140は、50%以上の画面から呼び出される場合、処理をステップS206に進める。またマイクロサービス化支援部140は、50%未満の画面からしか呼び出されない場合、処理をステップS207に進める。
[ステップS206]マイクロサービス化支援部140は、選択したソースファイルによって実現する機能をマイクロサービス化候補機能から除外する。その後、マイクロサービス化支援部140は処理をステップS209に進める。
[ステップS207]マイクロサービス化支援部140は、選択したソースファイルで実装されるAPIのメソッド呼び出しシーケンスによる処理の流れを把握する。
[ステップS208]マイクロサービス化支援部140は、把握した処理の流れにおいて処理を実行する機能をマイクロサービス化対象機能に決定する。マイクロサービス化対象機能には、選択したソースファイルで実装されるAPIを呼び出す画面を表示するためのプレゼンテーション層における機能も含まれる。またマイクロサービス化対象機能には、選択したソースファイルで実装されるAPIを実行することによりアクセスされるデータテーブルについてのアクセス環境を提供するデータ層内の機能も含まれる。
[ステップS209]マイクロサービス化支援部140は、未選択のソースファイルがあるか否かを判断する。マイクロサービス化支援部140は、未選択のソースファイルがある場合、処理をステップS201に進める。またマイクロサービス化支援部140は、未選択のソースファイルがなければマイクロサービス化対象特定処理を終了する。
このようにして特定されたマイクロサービス化対象機能は、修正頻度が高く、処理頻度が高く、コア部分または共通部分ではない機能、およびその機能を含む処理のシーケンス上の他の機能である。このような機能は、顧客ニーズに応じた改修が求められる機能である。すなわち、顧客ニーズに応じた改修が求められる機能が正しく特定されている。
〔その他の実施の形態〕
第2の実施の形態では3階層のシステムからマイクロサービス化対象機能を特定しているが、3階層以外のシステムにも適用可能である。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
1a,1b,・・・ ソースファイル
2 ソフトウェア
2a,2b,2c プログラム
3a,3b,・・・ ソフトウェア部品
4 既存システム
4a~4l 機能
10 情報処理装置
11 記憶部
12 処理部

Claims (7)

  1. 複数のソフトウェア部品を含むソフトウェア実行時に前記複数のソフトウェア部品それぞれにより実現される機能の呼び出し頻度を示す呼び出し頻度情報に基づいて、呼び出される頻度が第1の基準より高い第1の機能に対応する第1のソフトウェア部品を特定し、
    前記ソフトウェア実行時の前記機能間での呼び出し関係に基づいて、第2の基準より多くの呼び出し元が存在する第2の機能に対応する第2のソフトウェア部品を特定し、
    前記第1のソフトウェア部品に該当し、かつ前記第2のソフトウェア部品に該当しない第3のソフトウェア部品を、マイクロサービス化の対象として提示する、
    処理をコンピュータに実行させる情報処理プログラム。
  2. 前記複数のソフトウェア部品それぞれの修正頻度を示す修正頻度情報に基づいて、修正頻度が第3の基準より高い第4のソフトウェア部品を特定する、
    処理をさらに前記コンピュータに実行させ、
    前記第3のソフトウェア部品の提示では、前記第1のソフトウェア部品と前記第4のソフトウェア部品とに該当し、かつ前記第2のソフトウェア部品に該当しないソフトウェア部品を、前記第3のソフトウェア部品とする、
    請求項1記載の情報処理プログラム。
  3. データベースへのデータアクセスログに基づいて、前記データベース内のマスタデータにアクセスする第5の機能に対応する第5のソフトウェア部品を特定する、
    処理をさらに前記コンピュータに実行させ、
    前記第3のソフトウェア部品の提示では、前記第5のソフトウェア部品を前記第3のソフトウェア部品から除外する、
    請求項1または2記載の情報処理プログラム。
  4. 前記データベースに含まれる複数のデータテーブル間での結合関係に基づいて、第4の基準より多くのデータテーブルに結合されたデータテーブルを前記マスタデータとして特定する、
    処理をさらに前記コンピュータに実行させる請求項3記載の情報処理プログラム。
  5. 前記第3のソフトウェア部品に対応する第3の機能を含む呼び出しシーケンスに含まれる、前記第3の機能以外の第6の機能に対応する第6のソフトウェア部品を特定する、
    処理をさらに前記コンピュータに実行させ、
    前記第3のソフトウェア部品の提示では、前記第3のソフトウェア部品と共に前記第6のソフトウェア部品を提示する、
    請求項1から4までのいずれかに記載の情報処理プログラム。
  6. 複数のソフトウェア部品を含むソフトウェア実行時に前記複数のソフトウェア部品それぞれにより実現される機能の呼び出し頻度を示す呼び出し頻度情報に基づいて、呼び出される頻度が第1の基準より高い第1の機能に対応する第1のソフトウェア部品を特定し、
    前記ソフトウェア実行時の前記機能間での呼び出し関係に基づいて、第2の基準より多くの呼び出し元が存在する第2の機能に対応する第2のソフトウェア部品を特定し、
    前記第1のソフトウェア部品に該当し、かつ前記第2のソフトウェア部品に該当しない第3のソフトウェア部品を、マイクロサービス化の対象として提示する、
    処理をコンピュータが実行する情報処理方法。
  7. 複数のソフトウェア部品を含むソフトウェア実行時に前記複数のソフトウェア部品それぞれにより実現される機能の呼び出し頻度を示す呼び出し頻度情報に基づいて、呼び出される頻度が第1の基準より高い第1の機能に対応する第1のソフトウェア部品を特定し、前記ソフトウェア実行時の前記機能間での呼び出し関係に基づいて、第2の基準より多くの呼び出し元が存在する第2の機能に対応する第2のソフトウェア部品を特定し、前記第1のソフトウェア部品に該当し、かつ前記第2のソフトウェア部品に該当しない第3のソフトウェア部品を、マイクロサービス化の対象として提示する処理部、
    を有する情報処理装置。
JP2021142339A 2021-09-01 2021-09-01 情報処理プログラム、情報処理方法、および情報処理装置 Pending JP2023035466A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021142339A JP2023035466A (ja) 2021-09-01 2021-09-01 情報処理プログラム、情報処理方法、および情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021142339A JP2023035466A (ja) 2021-09-01 2021-09-01 情報処理プログラム、情報処理方法、および情報処理装置

Publications (1)

Publication Number Publication Date
JP2023035466A true JP2023035466A (ja) 2023-03-13

Family

ID=85504155

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021142339A Pending JP2023035466A (ja) 2021-09-01 2021-09-01 情報処理プログラム、情報処理方法、および情報処理装置

Country Status (1)

Country Link
JP (1) JP2023035466A (ja)

Similar Documents

Publication Publication Date Title
JP6678780B2 (ja) プロセス視覚化プラットフォーム
US20200319996A1 (en) System and method of handling complex experiments in a distributed system
US10268473B2 (en) Update installer with process impact analysis
US8140578B2 (en) Multilevel hierarchical associations between entities in a knowledge system
RU2419854C2 (ru) Основанное на шаблоне управление службами
US8612806B2 (en) Systems and methods for recording user interactions within a target application
US20180052721A1 (en) Central registry for binding features using dynamic pointers
US7917815B2 (en) Multi-layer context parsing and incident model construction for software support
JP5458995B2 (ja) システム構造管理装置、システム構造管理方法、及びプログラム
US20190034176A1 (en) System for displaying interrelationships between application features
JP2013140564A (ja) コンテンツ要素間の関係を示すビジネス・インテリジェンス・ダッシュボード・アセンブリ・ツールのための方法、コンピューティング・システム、およびコンピュータ・プログラム
JP2007264768A (ja) システム開発支援プログラム、システム開発支援装置およびシステム開発支援方法
US20160124795A1 (en) Evaluation method and apparatus
US8856155B2 (en) Management of configuration data structures in multi-layer data models
CN105389184A (zh) 产品界面信息的配置方法及装置
US20150347098A1 (en) Extending a development environment with add-ins
JP2019133541A (ja) 分離方法、分離装置および分離プログラム
US10678864B2 (en) Analysis model preparing system, programming apparatus, and analysis model preparing method
US20110138218A1 (en) Method and apparatus to simplify ha solution configuration in deployment model
JP2020123175A (ja) コード管理システムおよびコード管理方法
US8719704B2 (en) Seamless integration of additional functionality into enterprise software without customization or apparent alteration of same
JP6300750B2 (ja) 検証プログラム、検証装置及び検証方法
JP2023035466A (ja) 情報処理プログラム、情報処理方法、および情報処理装置
US11061664B2 (en) Code management system and code management method
JP2017167744A (ja) 情報処理装置、情報処理システム、プログラム及び情報処理方法