ABAPの基礎知識 更新系 その5

前回のコミットの話もそうなのだが、ABAPの基礎知識というよりも、
システム設計の基礎知識というほうが、妥当な回をもう一回続けてしまうのである。
今回のお題は、SCMプロジェクトで必ず直面する難題「在庫のリアルタイム更新」
についての考察である。
これを実現するためには、「ロック(排他制御)」と「更新のシリアライズ」の
話を避けて通れないのである。


SCMプロジェクトは、「川上から川下までの物流をトータルに最適化」という思想である。
そうなると当然、「川上」からもデータを引っ張ってこないといけないし、
「川下」からもデータを引っ張ってこないといけないのである。
そして、必然的に、インターフェイスのお化けになっていくのである。


さて、一般に、SCMプロジェクトにおいては、「計画系」と呼ばれるデータの流れと、
「実行系」と呼ばれるデータの流れがある。
「計画系」は、「需要情報」→「生産計画もしくは在庫の引当」→「需要に対する納期回答」
「実行系」は、「受注」→「製造完成」→「実在庫の引当」→「出荷」
という、それぞれの流れを指すのが、一般的である。
で、この二つの流れの間において、データは緩やかなつながりはあるのだが、
基本的には別のデータである。
つまり、データエラーがあっても、その流れの中のどこかで食い止めることができる。
ところがである。
ひとつだけ、全部の系に影響を与える、クリティカルなデータがあるのである。
「在庫データ」である。


在庫データは、計画系も参照するし、実行系も参照する。
そのため、インターフェイスをつなげる先としては、もっとも数が多くなってしまうデータであり、
ここの数字の信頼性が、SCMシステム全体の信頼性を大きく左右するのである。
そうなると、二つのシステム的な問題が発生する。


1.いろいろなシステムから同一の品目在庫にアクセスするため、どのような単位でデータに
ロックをかけるのか、事前に決定しておく必要がある。
2.ロックの制御によって、在庫の更新に待ち行列ができている段階での「実在庫引当」を
どう考えるか?在庫の更新が終わってからにするか、在庫の更新前に引き当ててしまうのか?


上が、ロック(排他制御)方針であり、後者がシリアライズ(順列化)方針である。


このロック方針と、シリアライズ方針を決める担当に、プロジェクト内で
最も優秀と思われる人をアサインしないと、このSCMシステムは、
運用段階で、ロックが頻発して待ちばっかりになってしまうわ、引当がむちゃくちゃになるわ、
ロクな結末にならないのである。
しかも、この担当、通常のプロジェクト組織の中では、アサインしにくい担当であるのが
おわかりになるだろうか?
「計画系」と「実行系」、両方にかかわる部分であるため、最も重要なタスクであるにも
かかわらず、「役割分担」から欠落する場合が現に存在するのである。


多分、第三者からみれば、「当たり前のことをなんでしないの?」だろうし、
当事者になったことのある人は、これが発生していることを、システムテストの段階で
知ることになり、すったもんだの末に、プロジェクトスタート延期になった過去を思い返し、
苦い思い出に浸ることになるだろう・・・
って、現在進行形のプロジェクトも多分あるんだろ〜な〜
しーらない。


ちなみに、技術的なところでは、ロックは品目・プラントごとにやっておけばまず間違いがない。
当たり前だが、「データの取得」の前にロックをかけ、「データの更新」の後にロックを外す。
単一プログラムの効率アップのために、ドカンとロックをかけ、データをまとめて抽出する
ふざけたプログラムを見かけるが、それをやると全体のパフォーマンスが著しく低下する。
かならず、品目ごとに、ロック→抽出→更新→アンロック、である。


実在庫引当のシリアライズが、シリアライズの中では最も大変である。
トリガは、実在庫の更新と、受注の登録、二つあるのだが、それぞれのタイミングで
引当を行いなおしていたのでは、パフォーマンスが極端に悪くなる。
これは、キューを作る+引当は5分ごとのバッチにする、という方式で解決できる。
実在庫の更新、受注の登録の都度、キューに品目・プラントを書き込んでおく。
で、JOBでは、キューに入っている品目・プラントのみで、実在庫の引当をしなおすのである。
もちろん、引当中にロックをかけるのを忘れてはならない。
ここまで気を配って、初めて、リアルタイムの在庫更新+リアルタイム実在庫引当による、
すばやい納期回答と出荷が実現できる、というわけである。


いや、さらっと書いたが、SCMプロジェクトは、本当に難易度の高いシステムである。
そこに配属され、在庫関係および引当関係のご担当になった皆さん・・・
ご愁傷さまである。
しかも、ロック方針、シリアライズ方針ともに、決まっていない&担当がいないプロジェクトに
アサインされてしまった皆さん、さらにご愁傷さまである。
とっとと逃げ出すか、一銭にもならない上に、みんなから文句を言われるのを承知で、
自分で立候補するか、今すぐに方針を決めることをお勧めするのである。