クラウド時代にこそCOBOLなベテランから学ぶこと

言うまでもなく、COBOLなベテランは非同期バッチ処理の達人が多い。
日本ではこの手のベテランが多い。
まず世界でも例がないほどだと思う。
クラウド時代はむしろ非同期処理のオンパレードであり、
学ぶべき点はたくさんある。
こと運用レベルや、対障害設計は神レベルの人が多いので
まじでノウハウは受け継ぐべし。

個人的に達人系の技のポイントをまとめておく

1.コンテキストを外部から与える
一種のDI的な考え方である。
但し、あくまで運用目線であることが重要。
通常のDIは開発効率を目的に考えていることが多く見受けられるが
非同期処理についてのDI的な考えは運用効率性の重視だ。

対障害設計をする上で、もっとも大事なことは
「コンテキストがまっさきに見えることだ。」
これはDI的は発想とはまるで違う。

今走っている処理は、
・どういうモノで、
・何を想定していて、
・どういうスケジュールになっていて
・この先なにが起こるのか?
・また結果の連鎖はどうなるのか?
が明確にわかることが基本になる。

別にバッチに限らず、非同期処理ではこれは非常に重要だ。
したがって、実装手法についてもさまざまな方法がある。

・コンテクスト・スイッチを実装し、処理自体を変更する
・処理自体にパラメータを渡す
・ログ設計にコンテキストの情報を渡す

バッチ系の人がリターンコードに
鬼のように拘るのは周知の通りだ。
バッチコンテキストを連鎖させて処理をつなげるというのは
常套手段と言える

従って、クラウドでの非同期処理では
処理コンテキストが制御・受け渡せるように
設計・実装をしておく必要がある。

2 データの移動のトレードオフを比較考慮する
オンライン系よりも発想を柔軟にもっている達人が多い。
非同期処理は「同期処理ではない」
だからそのメリットを十分に生かすことだ。

同期処理は基本的にデータを物理的に動かすことができない。
非同期処理は、データそれ自体を移すことができる。
勿論大きくなると制限がかかるが、
特に基幹系のデータサイズとN/W・IOの効率の向上を考えると
データ移動と処理コストのトレードオフを検討することができる

非同期バッチ処理の時間がある程度に制限できるであれば
データ自体を移動させて、
計算した上で戻すといいう手法も十分にとりうる
これは基幹ホストの人であれば普通に考えるやり方だ。

時間が読めるということとデータの移動の手法が
非常に大事になファクターになる

クラウド上の非同期処理も同じことが言える
どのようにデータを移すべきか?
処理の時間はどう見積もるか?
これらが実装として必要だということがわかる。

3 処理とデータの分離に慣れている。
オープン系の人には信じられないと思うが、
基幹バッチは、運用上は「プログラムの内容を知ることなく
各処理がどのデータセットを利用するかしないかは普通にわかる。」
その上で「勝手に変更できる」

おぉすげー関数型かよとかいう凄い誤解を招きそうだが、
その部分は、運用担当者の力量による部分も大きく、
バッチの設計・実装時にその部分の「アソビ」を
意図的に残しているプログラムが結構ある。

要は、開発していてどうにも対処できない部分を
「運用でカバー」というのは実はこの部分を指す。

クラウド的にはこの手法は学ぶべきだ。
処理とデータを分離させるという発想はデータモデルの
汎用性と処理の汎化をどう実装に入れ込むか?ということになる
これにより運用の柔軟性も高まり
投資の可搬性も保持できる。

4 例外処理を準正常処理と見なす
特にいわゆる異常終了が起きたときに対処については
「別の正常フローとして対処する。」ということ。

大抵の基幹系はデータがクリーンでないことが前提になっている。
データのクレンジングは当然の手法で、すべて折り込み済にしている。
これはコンテキスト情報にもつながるが、
異常処理時点をある程度想定して設計・実装し、
場合によっては普通に異常系正常処理を行っている。

まずは障害対応の意識が高いと言うことだ。
特に非同期通信の場合は
障害発生時にどのような対応するかがポイントになる

バッチ処理は障害発生から問題の顕在化までに時間がかかる
オンラインであれば問題の発生までのタイムラグが少ないので
対処が簡単であるが、
バッチ系の処理であると問題摘発までに時間がかかる
一般に発生から時間がたてばたつほど、解決に時間がかかる
つまり難易度があがる。

クラウド時代においても同じことだ。
障害発生を前提としたアーキテクチャは運用性が高い
クラウドは落ちないよ、ってのは屁理屈で・・

ベテラン的には、「そういうことじゃなくて
想定できないデータってのは”必ず”入ってくるものだよ。
ソレをどうするか?っていうのが本当の可用性だよ。」
これは確かにそうですよ。

以上、他にもいろいろあるが代表的なところを
個人的にまとめておいた。