メインフレームからUNIXサーバシステムへの転換
〔1〕UNIXサーバで高速化を目指して
前述した「ユニケージ開発手法」では、特化したスペシャリストがつくったコマンドセットが提供されており、それを使用して高速なデータ処理を実現している。
東京電力における現在のCIS(営業料金システム)の中心システムはメインフレームであるが、その処理はバッチ処理主体で行われている。CISではこのほか、サーバの仮想化注8など、最近の分散処理技術なども使っているが、まだメインフレームが主体となって処理されている。現在は1カ月に1回検針員が各家庭へ出向き、検針用ハンディーターミナルを使用して、一般家庭に設置された従来の機械式電力メーター(旧メーター)の目視検針を行い、その検針値をシステム上に収集、その日の夜にバッチ処理し、電気料金の計算を行うことが主たる業務フローとなっている。
今回紹介するユニケージ開発手法を用いた事例は、東京電力がスマートメーターシステムを本格的に導入して運用する前に、基幹系であるCISのバッチ処理を、UNIXサーバで高速化することを目的にして、試行的に適用した事例である。
具体的には、UNIXが標準で備えているコマンドと、USP研究所が開発した、オリジナルコマンドを組み合わせて、テキストファイルベースで処理をする仕組みになっている。
〔2〕ユニケージ開発手法の特徴
ユニケージ開発手法の特徴は、図2に示すように、
- UNIXが標準で備えているコマンド
- ユニケージという開発手法が提唱しているオリジナルコマンド(USPコマンド)
- 企業専用のコマンド
を組み合わせて、テキストファイルベースで処理をする仕組みとなっている。
簡単に言うと、UNIXの標準機能を有効に使って、短期間、かつ低コストで開発するという手法になっている。
図2 ユニケージ開発手法①:3種類のコマンドを組み合わせるユニケージ開発手法
〔3〕ユニケージ開発手法が提供しているコマンド群
図3に示すコマンド例の部分が、ユニケージ開発手法が提供しているコマンド群の一例である。データを処理するための高速なコマンド群であるが、その仕様だけを理解していれば、組み合わせることによって簡易に業務処理が行えるようになっている。
図3 ユニケージ開発手法②:コマンドの例と処理の内容
〔4〕従来型開発とユニケージ開発手法の比較
図4は、従来型のプログラム実装イメージとユニケージ開発手法での実装イメージを比較したものである。ユニケージ開発手法では、UNIXのパイプ注9を使って、コマンド間の入出力処理を高速化している。入力ファイルを集計するプログラムの場合、従来のプログラム実装の場合は、
- ファイルをオープンし、まず1行のデータを読み込む。読み込んだデータをフィールド分割する。これを終端まで繰り返し行う。
- 次に、出力ファイルのレイアウト(形式)で整形してファイル出力する。
- その後、ファイルをクローズする。
というイメージである。
これに対して、ユニケージ開発手法では、
- 必要なレコード(データ)だけ抽出し、
- ソート(並び替え)処理を行い、
- 集計処理を行い、
- (3)の集計結果をレイアウト整形処理する。
というように、データをどう加工するかという処理単位で、パイプで直列につなげて処理を行う方式である。
図4 ユニケージ開発手法③:従来型とユニケージ開発手法のイメージの違い
〔5〕パイプによる並列処理のイメージ
図5に、前述したパイプによる並列処理のイメージを示す。まず、シェルとコマンドの組み合わせであるため、開発における生産性が高いことが大きな特長である。
UNIXの標準のコマンドやシェルベースであるところから、異なるOSでも動くなどシステム関係の依存度が低いことも特長である。また、パイプによる並列処理を行うため、高速処理を容易に実現可能となっている。図5を図4の下部と比較してみると、
- 【コマンド1】が集計に必要なレコード抽出部分
- 【コマンド2】がソート処理部分
- 【コマンド3】が集計処理部分
- 【コマンド4】がレイアウト整形部分
となっている。それぞれの処理をCPUコア1、CPUコア2、CPUコア3、CPUコア4で処理するというように、複数のCPUすなわちマルチコアで処理することが可能なため、高速処理が可能となっている。
当然CPU1個でも、順次処理していく動作は可能であるが、高速化することは難しい。東京電力の標準サイズのサーバは2コアあるいは4コア程度を使用して、バッチ処理が行われている。
Javaのバッチ処理環境でも、マルチコアによる処理ができないわけではないが、それなりにプログラミング技術が必要になる。それがユニケージ開発手法では、シェルスクリプト注10とコマンドで容易に高速なバッチ処理ができるのである。
図5の事例は4コアであったが、処理の時間をもっと短縮したい場合は、CPUを8コアに変えれば、ソフトを直さなくとも単純に2倍の速度が出せるという特長もある。
図5 パイプによる並列処理のイメージ
〔6〕41分対43秒:56倍の処理速度
また、図6に示すように、2Gバイトの対象ファイル(720万レコード程度:ほぼ神奈川県分相当のレコード)を、Javaのプロトタイプで処理する場合には41分もの時間がかかった。これに対し、ユニケージ開発手法のコマンドの場合は、43秒で処理できることが確認された。すなわち、図6に示すように、56.2倍の高速化が可能であることがわかったのである。この結果を受けてユニケージ開発手法の適用を決断した。
図6 既存機能とユニケージ開発手法の処理時間の比較
▼ 注8
サーバの仮想化:例えば、1台のサーバ(実際のサーバ)を複数台の仮想的なサーバ(仮想サーバ)に分割して利用する仕組みである。分割したそれぞれの仮想サーバでは、OSやアプリケーションを実行させることが可能で、あたかも独立したコンピュータのように使用できる。
▼ 注9
プロセス入力とプロセス出力をつなぐUNIXの基本機能。
▼ 注10
シェル(shell):オペレーティングシステム(OS)が、ユーザーのためにインタフェースを提供するソフトウェアのこと。このインタフェースによって、OSのカーネル(中核部分)のサービスへのアクセスを可能とし、キーボードから入力された文字や、マウスのクリックなどを解釈して、それに対応した機能を実行するようにOSに指示を伝えることができる。
スクリプト(script):コンピュータが理解できる言語への変換作業を省略して、簡単に解釈実行できるようにした簡易プログラムのこと。