novtanの日常

ネタです。ネタなんです。マジレスする人は撲滅すべき敵です。だからネタだってば!

別に銀行の勘定系はそんなに複雑じゃない

note.com

なんか途中っぽいけど、この人本職なのだろうか。普通にありえない間違えとして、原帳なる用語を使っていますが、元帳(もとちょう)を読めなかったからげんちょう→原帳ってなっちゃったのかな?とどうしても思ってしまいますね。
あと、情報系の話もちょっとおかしいですね。

まあ、それはさておきですよ。

銀行の勘定系ってたしかに大変な処理をしているんですよね。でもそれって、業務が複雑だからではないんですよね。端的に言って、大変さという点においては整合性を取ることに全振り、と言ってもよいのではないでしょうか(これは異論もあるかもしれないけど)。普通にお金を計算して元帳を更新していく、というのだけが勘定系の処理なんですが、まあそこには色々と難しいことがあります。まず、お金を移動させるのって、「あっちから」「こっちへ」なわけじゃないですか。そして、あっちもこっちも複数の箇所から参照される可能性があります。ATMとインターネットバンキングでせーのでお金移動しても不整合が起きないようにしなければならないですよね。残高チェックしてさあ移動だってなった瞬間に別の取引でお金がなくなったりしても困りますよね。お金が出る口座と、入る口座、それぞれに対しての整合性が必要です。ちょっと昔は出金の取引と入金の取引が2つのオペレーション(つまり、2つの別のトランザクション)で行われているシステムも多かったと思います。今は収支でペアの取引になっていることが多いかな。


そういう整合性に極振りした仕様のシステムにおいて一番複雑なのは、エラーが起きたときのリカバリーなんですよね。特に、夜間(とは限らないですが、バッチ処理でやっている場合は夜間が多い)に行われる引き落とし系の処理は残高が足りなくなったら何を優先するか、とか、ATMの現金引き出しが割り込んできたらどうするか、とかそういう細かいところをきっちり取り決めてやっています。
なので、正常で普通の取引の部分なんて全然大したことはしていないんですよ。とにかく、整合性。みずほのATMがカード呑んだのだって理由の殆どは整合性確保のためなんですよ(手段として正しかったかどうかは別としてね)。

銀行の3大業務とよく言いますのが、預金、為替、融資です。で、個人的には、預金、内為は上記のとにかくちゃんと取引実行するぜ!って話以外に難しいことはあんまりないんですけど(とか言うと怒られる気もするけど)、オンライシステムとしては融資の実行回収とか、外為取引はまあ複雑怪奇になっている印象があります。処理条件多すぎんだよお前らって感じ。まあでもこれは元帳操作が難しいわけでもないからね。

ぶっちゃけ、この手のエラー系の仕様はめんどくせーので、本当であればちょっと不整合が起きそうなときはバンバンエラーにしちゃえ。引き落としなんて早いもんがちでいいんだよ、とか色々てきとーに作りたい要素はいっぱい詰まっています。でもなー。20年前はインバン止まってもしゃーねーってなってたのが今や止まったら金融庁報告だもんなー。無駄だよなー。インフラつれーわ。
オンライン系のシステムも端末とホストが直結していたような昔と違って複数システムを経由して取引が行われるので当然途中でエラーになったときに「結果不定」な状態になることもあるんですよね。昔、そういうのいっぱい作ったんだけど、まあ、端末や自動機(ATMとか)でやるような取引成立照会をサーバー系でシミュレートするのがめんどくさかったりしたんですよね。おら中継機だからデータ持ちたくないって言ってもリカバリーのための取引ステータス積み上げていかなきゃならないし、日締めでカウンター合わせしないといけない(カウンター合わないんだけど!って夜中呼び出された挙げ句、勝手にカレンダーいじってて営業日設定がおかしくなってたのを発見したりとかひでー話ですよ)。

でもねー、やるべきことはまあまあ明確なんですよねー。めんどくさいだけ。