設計パターン

記事数:(2)

IT活用

Sagaパターン:分散処理の難題を解決

近年の計算機技術の進歩は目覚ましく、仕組作りも大きく変わってきました。一枚岩のような巨大な仕組を作るのではなく、小さな仕組をたくさん作って、それらを連携させる方法が主流になりつつあります。これは、例えるなら、大きな一つの工場ですべてを作るのではなく、小さな工場をたくさん作って、それぞれが得意な部品を作り、最後にそれらを組み合わせて製品を作るようなものです。このような、分散した仕組を連携させる方法は、柔軟性や拡張性が高いという利点があります。しかし、それぞれの小さな仕組が独立して情報を持ち、処理を行うため、全体として情報の整合性を保つことが難しくなります。複数の工場で部品を作り、最後に組み立てることを想像してみてください。ある工場で部品を作るのに失敗したら、他の工場で作った部品はどうなるでしょうか?全体の製品は完成しません。仕組も同じで、複数の仕組にまたがる処理において、すべてが成功するか、すべてが失敗する、といった一貫性を保証することが重要です。この一貫性を保つことは、分散した仕組では容易ではありません。そこで、分散した仕組で情報の整合性を保つ方法として、「物語」を意味する「サガ」と呼ばれる方法が注目されています。サガとは、複雑な処理を小さな手順に分割し、それぞれの小さな手順を独立した仕組で実行することで、全体としての整合性を確保する仕組みです。それぞれの小さな手順は、成功したら次の手順に進み、失敗したら、それまでの手順を巻き戻す処理を行います。全体を小さな手順に分割することで、それぞれの仕組は独立性を保ちつつ、全体としての一貫性を確保できます。これは、各工場で部品を作りながら、同時に他の工場の状態も確認し、問題があればすぐに対応するようなものです。サガを使うことで、柔軟性と拡張性を保ちながら、複雑な処理の整合性を保証できるようになります。この資料では、サガの仕組みや利点、欠点について詳しく説明します。
IT活用

アウトボックスパターンでデータ整合性を確保

近頃は、複数の仕組が協調して動く分散型の仕組みや、小さな仕組を組み合わせる設計手法が広く使われています。このような仕組みでは、情報の正確さを保つことが大きな課題となっています。複数の仕組みがそれぞれ情報を管理していると、どこかで不具合が発生した場合、全体の整合性が取れなくなる危険性があるからです。 例えば、注文処理と在庫管理が別々の仕組みで動いている場合、注文は受け付けたのに在庫の更新が間に合わず、実際には商品がないにも関わらず注文が確定してしまうといった問題が起こりえます。このような問題を防ぐ有効な方法として、「外部の箱」のような仕組みを使う方法があります。これは、「情報の正確さを保つための箱」のようなイメージで、情報を一時的に保管し、確実に処理を進めるための仕組みです。具体的には、情報を記録するためのデータベースの処理単位と、処理の指示を伝えるための伝達手段を組み合わせることで実現します。データベースの処理単位は、一連の操作をまとめて確実に実行するための仕組みです。例えば、銀行の預金口座からお金を引き出して別の口座に振り込む場合、引き出しと振り込みは必ず両方成功するか、両方失敗するかのどちらかになります。片方だけ成功してしまうと、お金が消えてしまうといった問題が発生するため、処理単位を使うことでこのような事態を防ぎます。伝達手段は、処理の指示を確実に伝えるための仕組みです。例えば、注文情報を受け付けたら、在庫管理システムに在庫を減らすように指示を出します。この指示は、伝達手段を通じて確実に在庫管理システムに届けられます。仮に在庫管理システムが一時的に停止していても、伝達手段が指示を保持しておき、復旧後に処理を実行することで、指示が失われることを防ぎます。このように、データベースの処理単位と伝達手段を組み合わせることで、複数の仕組みが連携する複雑な状況でも、情報の正確さを確実に保つことができます。この「外部の箱」のような仕組みは、システムの信頼性を高める上で非常に重要な役割を果たします。