予約
予約(Booking/Reservation/Appointment)に関するアーキテクチャ設計のポイント
予約の種類
飛行機の予約
鉄道の指定席予約
レンタカー
レストランの予約
ホテルの予約
現地ツアーの予約
映画の予約
病院の予約
レッスンの予約
イベント会場の予約
会議室・設備の予約
美容院の予約
設備予約の場合のデータモデル
https://gyazo.com/4faf76ad1c367fcd81247f71f4637f6d
設計のポイント
物品が決まっているかどうか
決まっている
座席予約
設備予約
決まっていない
数量限定商品販売
飛行機の座席未指定での予約
スタッフの空きとのマッチング
美容室や病院の予約
UberEatsのように一旦リクエスト受け付けて、スタッフとのマッチングを行う場合もある。
オーバーブッキングの戦略
ホテル、飛行機など
仮押さえ
UIの都合上、商品を確保して確定するまで抑える
店舗販売とオンライン販売で同一在庫の場合、どこまで同期するか? オーバーブッキングの場合どうするか?
オンライン販売の場合、確保して確定までのタイムアウトを決めなくてはならない。
整理券
2020東京オリンピックチケット販売など
限定販売など多くのトラフィックが一斉に集中する場合は、整理券を配り順番に予約・販売システムに流す。それ以外のリクエストは入り口で待たせるか503を返す。
検索絞り込み
予約可能なもののみ検索対象にしたり、残数を表示したいが、負荷の高い検索となる。
正確性を犠牲にできれば、数分単位でのキャッシュで参照系を構築できる。このためCQRSパターンが使われやすい。
ロングトランザクション
複数の予約を扱う場合(ホテルを予約したが、フライトが取れない場合は、ホテルの予約をキャンセルするなど)、たいていシステム境界やBounded Contextを越えるので、どうしても必要ならば補償トランザクションを使うことが多い