調査進捗
待っている間に久しぶりに社内を回遊した。この建物の中でお気に入りは三か所。そのうちの一つは屋上だ。このビルの屋上は周囲を幾何学的に配置された鉄骨で囲まれていて、植物とベンチが遊歩道を作っている。私はそこをゆっくり歩いた。
データリンクの問題は処理の遅さ。新しくデータをまとめて登録すると、一定量以上で遅くなって使い物にならなくなる。致命的だ、シオヤでなくとも嘲りたくる気持ちになる。原因は採用したデータシステムそのもの。想定していた性能が出ないのは例外処理の多さ。使い方を間違っていると言えるかもしれない。少しでも性能が出せるように登録の方法を調整していたが、ここでナギが体調を崩した。
困ったユキはシオヤに助けを求めてコツコツと性能を上げてはきたがいよいよ限界、そしてウィルダイスは、私たち三人をプロジェクトに放り込んだ。現状把握はこんな感じだな。
さて、対応策はどうだろう。メイン処理を新しく作り直す、それが本来だが、シオヤたちが本気を出してくれても半年以上、場合によっては年単位の期間が必要だ。納期には間に合わない。現状の仕掛けのまま、うまい使い方をして見かけ上の性能を上げる、すでにやった部分ではあるが、まずはそこをしっかり確認してみるか、そうすればこのシステムへの私の理解も深まるかもしれない。
鉄骨の柵から、さらに視線を移す。空は相変わらず青い。朝より雲が少し減っただろうか。屋上の遊歩道を四周か、五周くらい。気分転換と頭の整理が完了すると、私は建物の中へ戻った。
データリンクのフロアに行くと、すぐにナナミと目が合った。彼女は微笑むと私を手招きする。
「ミヤマさんの席はこちらでいいですか?」
「はい、ありがとうございます。後で聞こうと思ってました。」
その短いやりとりだけで、私はプロジェクトのフロアに自分の作業スペースを確保できた。いつも使っているデスクもなくなる訳ではないので、プロジェクトに参加している間の仮住まいだ。
コオオルとナナミは、すでに自分の席をこのフロアに確保済みだった。フロアを見渡すと雑然とした物と人ばかり。観葉植物でも配置してほしいものだ。プロジェクトメンバーの顔が見える。覇気がない顔が多い。皆疲れているのだろう。元気そうなのは新しく入った二人、と私くらいか。とにかく私たちで、まずは手がかりを見つけたい。
「このビルの中じゃどこも似たような風景だから、変わり映えしないだろう。」
そう話しかけてきたのはコオオルだ。
「ええ、でもここで十分ですよ。」
「また新しい顔で、ご近所さんは新顔が増えるのにもう慣れたろう。今回の入居人は冗談が得意じゃない。その分、俺と違って仕事の相談がしやすいはずさ。」
コオオルは、まわりのメンバーに向かって言った。
「コオオルさん、ミヤマさんは責任者なんですからね。」
「そうです。僕たちにやるみたいに簡単にからかっちゃダメですよ。」
まわりのメンバーが声を出す。コオオルがまわりに話しかけて他愛のない冗談を言うせいか、そのあたりだけ少し空気が柔らかい。この人は昔からムードメーカーだ。職場が賑やかになるとプロジェクトが成功する、本当だろうか。私にはどうも信じられないので、チームの雰囲気づくりは、それが得意なコオオルに任せておくのが良いだろう。
「準備が出来ました。ダミーデータを登録できる状態なので、見て頂いていいですか?」
ユキが呼びに来たので雑談はそこで切り上げて、コオオルとナナミの三人で移動する。再集合の場所となったデスクには、会議で発言していたテスト担当がいた。
「あらためましてテスト担当のナダイケです。よろしくお願いします。」
優しそうな青年だ。その名前も忘れないように、私は繰り返す。
「よろしくお願いします、ナダイケさん。まだプロジェクトメンバーの名前を覚えきれてなくて、すいません。」
「いえいえ、いいんです。それよりこちらをご覧下さい。」
テスト担当のナダイケとユキが中央に陣取り、その二人を私とコオオル、それにナナミで取り囲んだ。ナダイケは自分の操作画面を見せて言う。
「テスト環境に繋いでいます。ナギさんのいた時のバージョンと、現段階での最新版を切り替えて確認できるようにしました。」
ナダイケは少し自慢げだ。自分が用意したテスト環境に自信があるのだろう。ただ、今問題なのはテストされる方のシステムである。
「試験用データを出せるかしら。」
ユキの指示で画面が切り替わる。試験で利用するダミーデータだ。正しいデータかの確認から評価は始まる。ユキの説明によれば、自動生成されたデータが15万個。それを5万個ずつに分けて、3か所からの入力に見立てて同時にデータ登録をするのだ。
「じゃあ、このデータで試験結果を一度見せてもらえる?」
ユキの説明が終わると、ナダイケがキーボードを操作をした。合計15万個のデータはものの数秒で処理を終える。
「結果はこちら側のモニタです。緑色のグラフの横軸が入力された時間、縦軸が登録にかかった秒数です。このポイントの並びが右に上がっていくと登録が遅延し、ポイントが横に並んでいても、薄い帯になってしまうと処理時間にムラがある、ことになります。」
ナダイケの説明は澱みがない。この評価システムは作り込みが終わっていて、もうずいぶん使い慣れているのだろう。ユキがさらに説明を加える。
「1秒に登録されるデータは5万個程度は処理が可能。十分に性能要件を満たしていました。ここの数字が入力エラーの個数ですが、0のままです。」
画面は小さな丸が集まって、きれいに斜め線を描いている。
「優秀ですね。」
「はい、最初に行なっていたこのテスト方法では、この通り問題ありません。」
「なるほど。」
「ここで入力経路を三つから九つにして、同じ試験をします。」
ユキの言葉に合わせて、ナダイケがキーボードを叩く。すぐに緑色のグラフが更新される。先ほどより、グラフの右側がさらに上がってきた。後から登録したデータの処理時間がだんだんと延び、縦側に線が広がって色が薄くなる。キーボード操作を終えたナダイケは、静かな声で説明を始めた。
「経路を3倍にしてデータも3倍。最初にかかった時間は3秒でしたが、合計45万個のデータなら9秒で終わってほしいわけです。でも結果は15秒、つまり1秒に処理できたデータは3万個。最初の試験より性能が落ちています。」
ナダイケに続けてユキが説明する。いい連携だ。
「3倍のデータ量の処理時間は3倍でなく5倍。どこかにボトルネックがあるとは思いましたが、1秒に1万回という性能要件は十分に満たしています。実際は経路は九つでなく七つなので、問題はないだろうという判断でした。」
「それが事前にやったテストですね。性能低下が起こるパターンは、どの程度解明できているんですか。」
私が尋ねると、ユキが説明を促すようにナダイケを見た。ナダイケが再び口を開く。
「はい、再現できてますので今からお見せします。今の試験では九つの経路からほぼ同じペースでデータを登録できていました。これを実際と同じ七つの経路にして、全部の経路から5万個の登録をする試験をします。この時、一つの経路だけセキュリティの分類IDの割合を変えておきます。」
再びナダイケの指先が滑らかに動く。モニタのグラフが一旦消えて、再び最初から描画が始まった。ナダイケは黙ってモニタを見つめる。
「今は処理中ですか?」
予想は出来ていたが、念のため私は聞いた。
「はい、そうです。もうちょっと待って下さい。すぐにデータが増えますので。」
その言葉に合わせるようにグラフが更新された。ただ、今回はグラフの値が次々と変わっていく。処理が終わったデータの記録が増えて、それに合わせてグラフも更新していくようだ。
「さっきより遅いですね。」
「はい、もうすぐ終わります。」
やがて緑色のグラフの更新が止まった。私は改めて縦横のグラフに書かれていた数字に注目する。
「40秒、ですか。」
「はい。そうなんです。これだと性能要件をクリアしていません。それにデータ登録でエラーも発生したので、完全に不合格です。」
登録エラーが出た時点で致命的だ。もしそれがなかったとしても、35万回のデータ登録に40秒かかっているので、ナダイケが完全に不合格と言うのも当然だ。クリアすべき性能要件は1秒に1万だから、35万個なら35秒以内に終わっていなくてはならない。
「データのエラーをなくした上で、さらに5秒短縮しないといけないですね。」
「はい、性能が落ちたのは経路の数ではなく、セキュリティの分類IDの割合の影響です。」
「それは確認済み?」
「はい、割合を元に戻して測定し直したら、10秒もかかりませんでした。」
「なるほど。納得です。」
計測は正しいとして、入力データの項目の一つを変えただけで、処理速度が急に遅れたのは問題だ。
「データ登録でのエラーは、処理の待ち時間が長くなったせいでした。登録速度の低下に依存する問題と言えます。」
そう言ってユキは画面右の赤い数字を指す。
「では、同じことを現段階の最新版で行います。」
ナダイケが画面上で別のウィンドウを開いてコマンドを入れる。表示されていたグラフが消えた。
「では行きます。」
再び緑色のグラフが動き出す。処理が始まったようだ。横線が描き出される。その位置は前よりもずいぶんと低い。つまりは処理が速いのだ。ただ、線はかなり太く薄くなった。先ほどナダイケが説明していた処理速度のムラがはっきりと出ている。
「お、終わったようですね。」
さきほどより早く処理が終了した。更新が止まった画面を見ると30秒くらいか、それに赤文字が出ていない。ナダイケも同じ画面を見ながら返事をする。
「はい、性能要件を満たせる数字ではあります。ただですね。条件を厳しくすると、この最新版でもダメなんです。」
「条件を厳しくするとは?」
私の問いに、ユキがよどみなく答える。
「セキュリティの分類IDは3パターンより増やしても結果は変わりませんでした。でも、セキュリティの分類IDを3パターンにした上で、ネットワークの分類IDの割合を変えると性能が変わることが分かっています。セキュリティの分類IDが3パターンのネットワークのIDと、3パターン未満のネットワークのIDの割合を1:9にしてみます。つまりは登録データの数はそのままでネットワークのIDの割合だけさらに意図的にずらすんです。やりますね。」
「はい、分類IDの割合を変えました。これで始めます。」
ナダイケの操作で緑色のグラフがまた更新、グラフの目盛りの数がまた大きく変わった。今度はなかなか終わらない。ただ、画面の右横の数字は0のままで、赤文字は出なかった。
「エラーは出ないですね。」
「はい、でもまだデータは更新されません。」
「処理が終わらないわけではないんですよね。」
「はい、この条件なら。もっと厳しい条件を探せば処理時間はさらに遅くなりそうですが、まずはこの条件でのクリアを目標にやってます。」
それから気まずい沈黙の時間がしばらく続いた。緑色のグラフは更新を止めない。
「そろそろかな。」
「ええ、そうですね。」
コオオルとユキはそう言葉を交わした。何度もこの試験をしているから、結果も分かっているのだ。この場で、試験結果を初めて見るのは私だけである。
やっと緑色のグラフの更新が止まる。ぼやけた斜線がことさら太く薄かった。
「はい、67秒。性能は未達成。」
コオオルの明るい声が虚しく響く。
「なるほど、よく分かりました。」
「まあ、エラーが出なくなったのは評価してくれ。それくらいしか褒める所がない。」
「いえいえ、少なくとも再現には成功している。ただ本当にエラーが出ないかは最新版では確認とれているんですか?」
「経路によって登録データの分類IDのネットワークの割合を、いやネットワークIDを変える試験は何パターンかやったが、今のところ大丈夫だ。」
「なるほど、後でその検証結果も資料を見せて下さい。」
「はい、後で場所を送っておきます。」
ナナミがそう言ったところで、ナダイケが不思議そうに聞く。
「ネットワークIDってなんですか?」
まだIDの名称変更の話は全体に周知してはいない。ナダイケは知らなくて当然だ。
「明日の定例会にでも共有するけど、名称変更するのよ。」
ユキが詳しく説明を始めた。試験結果の確認はここまでで一旦終了だ。
「ところで、データ登録の事前処理はどう改良したのか、詳しく教えてくれませんか?」
それにすぐ答えたのはコオオルだ。
「お安い御用だ。むしろいいアイデアないか、こちらが聞きたいんだからな。」
コオオルが言って、ナナミも頷いた。事前処理はこの二人に聞けばよさそうだ。ユキとナダイケに短く礼を言うと、私たち三人は移動した。
「小さい方の会議室にしよう。どうせ空いている。」
ここの会議室は一桁は大会議室、二桁はこじんまりとした打ち合わせ用になっていた。私たちは十二番の会議室を予約すると同時に入室して、すぐに打ち合わせを始める。
「性能を出せないパターンを割り出すことから始めた。七つの経路ごとに二つのネットワークIDの割合を5段階にして組み合わせる、5の7乗というわけだ。」
コオオルがそう言うと、詳細をナナミが補足してくれる。
「最も問題が発生するパターンを探したわけです。データ種類の組み合わせを見極めるための試験ですが、網羅的には出来ないので、頻度の低い経路からくるデータの割合を横軸に、その頻度の低いデータを作る経路を縦軸にして、それを元に試験をこなしていきました。」
「ブラックボックス前提で試験したんですか?」
ブラックボックス、どんな処理をするのか明かされていないシステムを、中身の分からない箱に例えた言い方だ。
「ええ、そうです。通常の試験はすでに実施されていたので、私たちはブラックボックスを重点的に行いました。」
システムを試験する時には、事前に意味のある試験を定義する。仕組みが分かっていれば、やるべき試験範囲も自ずと定まるものだ。それに対してコオオルたちは、仕組みからは考えない試験を行ったわけだ。
「縦軸と横軸は影響しないと推定しましたが、実際、経路は全く関係なしでした。そこで最も処理に影響が出る割合を探っていきました。」
「この試験と結果の分析に、最初の一週間はとられました。」
ナナミはそう言ってため息をつく。その一週間の苦労がしのばれた。
「大変だったんですね。」
「ああ、数字を細かく扱う作業は集中力が続かない。」
思い出したようにコオオルがぼやいて、それで私は当時の作業を想像した。
「そうですね。それにコオオルさんの話し相手をしながらですよね。ナナミさんは気を使って大変だ。」
私がそう言うと、なぜかナナミは少しだけ口元を緩めた。二人が説明してくれたのは、いわゆる実験計画法だ。統計的に効率良い試験をする手法で、もとは農業分野での手法だったが、今はシステム開発へ利用が広がっている。つまりは行き当たりばったりの試験はしていないようだ。
「試験は効率的にされていたようですね。」
「我々もそれなりにはやってきたんだ。」
コオオルはそう言って笑った。ナナミも笑みを浮かべたが、すぐに説明を続ける。
「そうですね。計測のシステムが完成したので助かりましたが、それでも苦戦しながらここまで辿り着いた感じです。結果がこれです。」
会議室のスクリーンに表が現れた。細かすぎて読み取るのが厳しい。私は数字の桁数だけ見ることにして、傾向を読み解くことにする。
「説明いただいた通り、横軸、頻度の低い経路から来るデータの割合と失敗の相関が高いですね。」
「さすが分かりが早い。」
コオオルが言うと、ナナミがさらに捕捉する。
「割合が90パーセントの時に最も処理に失敗しています。データの中身を変えましたが、この傾向は変わりませんでした。」
「どこか失敗しやすい経路があるとか、それはないわけですね。」
「ええ、そうなんです。」
「入力される経路一つにつき、ネットワークIDは一つですか?」
「ネットワークの経路よりネットワークIDの方が多いです。七つの経路元は負荷状況により中間集積する運用です。そしてセキュリティIDはネットワークIDと同じことが多いが例外もある。なので、ネットワークIDが同じものの中にセキュリティIDが異なるものを一定の割合で混ぜておきます。これがキモで、これがないと現象が再現しません。」
ナナミは手元で操作をしながら話を続ける。
「先週から始めた試験がこれです。経路と、セキュリティIDが異なるデータを含む割合、それぞれ表示しています。縦軸の経路を4つのグループに分けまして、そのグループ分けを変更しても、傾向に違いはありませんでした。」
「やはり経路に依存はしないが、経路ごとの割合に依存すると。」
私のつぶやきにコオオルが反応して解説を加える。
「ああ、それでデータ登録時に、そのグループが10パーセントに近づかないように待ち合わせ処理を入れたってわけさ。それが今の最新版。」
「それって結構難しかったんじゃないですか。ネットワークIDごとのデータ登録の頻度を数値化して、ロジックを入れて、さらに特定データに登録までの待ち時間を持たせたってことですよね。」
「そうなんだ。この二週間でここまでやったのは褒めて欲しい。ウィルダイスさんには言っても苦労を分かってもらえないだろうからな。」
「ええ。」
こういう話は私は聞き流すことにしている。それはナナミも同様のようだ。コオオルとは関係なく話を続ける。
「エラーの発生を完全になくすのが最初の目標で、それはなんとか達成です。ただデータ登録量が多かったり、頻度のばらつきの相性がよくなければデータ登録の待ち時間が増えます。」
相性という曖昧な言葉が気になった。これは詳細が分かっていないせいか。ともかくも私は引き続きナナミの説明に耳を傾ける。
「ユキさんが見せてくれた試験の通り。エラー発生が多い入力データの割合を避けるアプローチではこのあたりが限界ですね。」
「まあ、10パーセントの条件をもっと綿密に求められれば希望はないわけじゃないがな。ただ十分やり尽くした気はしてる。」
根気がいる作業だな、私はコオオルとナナミの二週間を思って同情した。
「10パーセントでデータ登録が失敗するのはデータシステムの内部仕様に関係すると思うのですが、そこは調べていますか?」
「シオヤさんに調べてもらってはいるが、何も分かっちゃいない。かなり混みいった部分だからまだ時間がかかるんじゃないかな。」
「そうですか。」
「元となったシステムは、複雑なフォーマットに並行対応する前提じゃない。」
「元のシステムが作られたのは五年ほど前ですよね?」
「ええ。」
その私の問いにはナナミが答えた。
「以前のプロジェクトで構築されたデータシステムを独自に無理に広げたのはリンクチームです。当時の開発者もその使いかたなら責任が持てない、というのが本音でしょう。」
「五年前に元となるシステムの開発をやったのは、うちの会社でしたよね?」
「はい、当時のインフラチームです。直接の担当者はもういないのですが、シオヤさんと何名かが多少関わっていたので。」
「最初、インフラ側は新しいシステム開発へ向けての要望聞きとり、みたいなスタンスだったらしい。まあ気持ちは分かるが。」
そう言ったのはコオオルだ。
「まあ、そう思うのも分かります。他にやったことがあれば教えて下さい。」
私の問いかけにナナミが再び答える。
「いろいろ試したんですが、うまくはいってません。」
「どんなことを試したんですか?」
「さっきユキさんも言っていましたが、企業向けの高額なデータベースサービスを導入すればクリアできることは確認しました。でも月当たりの費用がすごいことになってしまって・・。また要件的には外部ネットワークに繋がないのが前提なので、それ用に再構築となると工数的にやっぱり合いませんでした。」
つまりは問題をクリアできて、ビジネスが成り立つ方法は見つかっていない。
「あとはこれも前にお話ししましたけど、ネットワークを内部的に変更して経路を統一する方法も検討はしました。先方の複数ネットワークを擬似的に一つのネットワークに変更してからデータ登録。この場合、事前のデータを整える作業を他のネットワーク上でやらなくてはならない。実際に利用する時にかなり複雑になりますので、やっぱり要件的には通らない。」
「先方に説明できないが、言わずに実装していいレベルじゃない。」
コオオルが悲しげにつぶやくと、ナナミがそれに頷いてから話を続ける。
「あとはスケールしなくなりますが、セキュリティIDごとにデータシステムを分ける手法も試しました。この場合は問い合わせ結果を出す時に合成するのですが、出力が遅くなってしまって諦めました。データ登録に要する時間と問い合わせ結果を返す応答時間の要件で、問い合わせ結果の方が厳しくて。」
「そうなんですか。」
検索結果を変換するのに時間を要する、そちらの要件の方が厳しいのだろう。
「ほかのアプローチはないかインフラチームへ相談してますが、これは午前の会議の通り、データベースをいちから作り直す時間がほしいとだけ。作り直すならなんとか出来る、時間はやってみないと分からない、という感じで解決先は見つかっていません。」
「なるほどね。」
「インフラチームは社内でも有数に技術力の高いチームです。でも、彼らがクリアすべきと考えることと、ユキさんたちが助けてほしいこととが、どうも一致しないことが多くて。」
「納期に関する考え方なのかもしれないですね。」
私は午前の会議でのシオヤとユキのやりとりを思い出した。
「ユキさんからしたら、インフラチームは分かっているくせにやらない、と思いたいのかもしれません。でも、インフラチーム側からすれば良し悪しの基準が違うから、話が進まないとでも思っているのでしょう。」
つまりは設計思想から違いだ。そう思って、私はインフラチーム側の代弁をする。
「まあ、彼らには彼らのシステム上の正義があるのでしょうね。内部を理解していないものを使うのが許せないと。」
「一番悪いシステムは納期に完成が間に合わないシステムだとユキさんは言っていましたが、まあ正しい指摘ではあります。」
「ところでネットワークID、当時で言うネットワーク用の分類IDは、オリジナルのプログラムで作られていた部分、で合っていますか?」
私が一番聞きたい部分はコオオルが説明してくれた。
「ああ、後から追加した分じゃない。今ほど複雑な処理はないが、ネットワークIDもセキュリティIDも五年前に作られたプログラムに存在していた。それを加工して複数フォーマット対応できるように変更したのさ。」
ナナミがさらに説明を補足する。
「事前に調査したら、元のID体系を変更するより、再利用した方がずっと処理が速い。そのフォーマット用に速度を最大限に出せるように設計されていました。その部分をそのまま使ったおかげで応答性能がクリアできたのですが、今となってはここがよくないのです。」
「なるほど。今からそこを直すと、応答性能が要件をクリアできなくなるだろうと。」
「はい。」
「私も試してみたいですね。」
「はい、用意します。」
すぐに開発環境で私のアカウントが作成された。これで私のデスクからでも直接データシステムの操作ができる。その日の午後からさらに資料を漁り、実際の性能を確認できるように考えた。




