Amirali Yaghoutiمهندس ارشد نرم‌افزار

مطالعه موردی مهندسی

پلتفرم رزرو هوشمند

سیستم رزرو در ظاهر تقویم است و در باطن مسئله‌ی هم‌زمانی. دو نفر می‌توانند یک لحظه یک اسلات را بخواهند، کال‌بک پرداخت می‌تواند دو بار برسد، و مشتری می‌تواند بین پرداخت و تأیید، تب را ببندد. کار اصلی دقیقاً در همین حالت‌هاست.

مسئله تجاری

کد رزرو اگر قفل نداشته باشد، اول موجودی را می‌بیند و بعد رزرو را ثبت می‌کند؛ بین این دو قدم پنجره‌ای می‌ماند که هر دو درخواست، اسلات را خالی می‌بینند. پرداخت کار را سخت‌تر می‌کند: درگاه کال‌بک را چند بار می‌فرستد، پس یک پرداخت موفق ممکن است دو یا سه بار برسد و هر هندلری که idempotent نباشد، رزرو یا اعتبار تکراری می‌سازد.

آنچه تحویل دادم

  • پایه‌ی بیعانه و رزرو، طوری که رزرو فقط پس از پرداخت تأییدشده ساخته شود، نه به امید آن.
  • idempotency روی کال‌بک پرداخت ووکامرس: اعلان تکراری برای یک پرداخت، همان یک رزرو را می‌دهد نه یکی بیشتر.
  • ظرفیت و قواعد زمانی که ادمین تعریف می‌کند، تا محدودیت‌ها پیکربندی باشند نه کد سفت.
  • تاریخچه و خط زمانی وضعیت روی رکورد، تا بعداً بشود دید یک رزرو از چه حالت‌هایی گذشته است.
  • لایه‌ی رویداد و ممیزی زیر آن، تا تغییر وضعیت همان لحظه ثبت شود، نه اینکه بعداً از ردیف فعلی حدس زده شود.
  • فلگ و مدیریت اسکیمای مستقل، تا این بخش جدا از بقیه‌ی پلتفرم توسعه و فعال شود.

رویکرد فنی

  • idempotency از همان اول روی کال‌بک طراحی شد، نه بعد از دیدن اولین رزرو تکراری. تلاش مجدد درگاه رفتار عادی است نه خطا، و هندلری که فرض کند پیام دقیقاً یک بار می‌رسد از ابتدا غلط است.
  • ظرفیت و قواعد زمانی را ادمین تعیین می‌کند تا همان معماری بدون تغییر کد به مدل‌های مختلف کسب‌وکار جواب بدهد؛ اصلاً دلیل ساختنش به‌شکل یک پایه‌ی قابل استفاده‌ی دوباره همین بود.
  • تغییر وضعیت به‌جای بازنویسی، به‌شکل تاریخچه ثبت می‌شود، چون اختلاف بر سر یک رزرو همیشه سر ترتیب اتفاق‌هاست نه وضعیت فعلی.
  • کار پشت فلگ و با اسکیمای خودش جلو رفت، و همین اجازه داد تکه‌تکه وارد یک پلتفرم زنده شود.

نتیجه و شواهد

رزرو به‌ازای هر پرداخت تأییدشده یک بار ساخته می‌شود، فارغ از اینکه درگاه چند بار کال‌بک بزند، و قواعد ظرفیت پیکربندی‌اند نه کد. این پایه تا مرحله‌ی رزرو و بیعانه کامل است؛ صدور گواهی، تحویل و تسویه مرحله‌های بعدی و جدا هستند.

اهمیت برای کارفرما

یک سیستم رزرو اجازه ندارد دو خطا داشته باشد: رزرو دوباره و برداشت دوباره. هر دو را مشتری می‌بیند و جبرانشان گران است. طراحی برایشان از همان اول خیلی ارزان‌تر از کشف کردنشان بعد از وقوع است.

خلاصه-اجرایی-پروژه

خلاصه اجرایی خوانا

خلاصه_اجرایی {
  پروژه: "Smart Reservation Platform"
  پایه: "a2-javaherian-watch-bazaar، افزونه‌ی ماژولار وردپرس"
  رزرو: "فقط پس از پرداخت تأییدشده ساخته می‌شود،
         هیچ‌وقت به امید آن"
  idempotency: "کال‌بک پرداخت ووکامرس idempotent است؛
                تلاش مجدد درگاه عادی است نه خطا"
  قوانین: "ظرفیت و بازه‌های زمانی پیکربندی ادمین‌اند"
  سابقه: "تاریخچه‌ی وضعیت + خط زمانی + لایه‌ی ممیزی/رویداد"
  عرضه: "فلگ فیچر + مدیر اسکیما، تدریجی روی پلتفرم زنده"
  دامنه: "پایه تا بیعانه/رزرو؛ صدور، تحویل و تسویه بعداً"
}

ارزش حرفه‌ای این پروژه

چیزی که دوست دارم بررسی شود، idempotency کال‌بک است. سخت نیست؛ فقط معمولاً از قلم می‌افتد، و همان است که بعداً به‌شکل مشتریِ دوبار شارژشده بیرون می‌زند.

اینکه صریح بگویم چه ساخته شده و چه نشده، عمدی است. این یک پایه تا مرحله‌ی بیعانه و رزرو است؛ اگر آن را مارکت‌پلیس تمام‌شده معرفی کنم، گمراه‌کننده است.