E-commerce checkout সিস্টেম ডিজাইন

Checkout হলো যেখানে টাকা আর স্টক মেলে। Cart, stock reservation, order প্রবাহ ও payment ডিজাইন করি যাতে কিছু অতিরিক্ত বিক্রি বা দুবার চার্জ না হয়।

payment ধাপের দিকে এগোনো shopping cart

লক্ষ্য: shopping cart-কে টাকা-দেওয়া, নিশ্চিত order-এ রূপ দেওয়া, স্টক অতিরিক্ত বিক্রি বা দুবার চার্জ ছাড়া।

Requirement

  • Refresh ও device বদলালেও টিকে থাকা cart।
  • সঠিক দাম, ছাড়, ট্যাক্স ও শিপিং।
  • স্টক অতিরিক্ত বিক্রি হবে না।
  • Retry ও ব্যর্থতা সামলে payment।
  • পরিষ্কার order status ও নিশ্চিতকরণ।

উপাদান

  • Cart service: Redis বা database-এ (guest cart-ও, login-এ মিলিয়ে)।
  • Catalog ও pricing: পণ্যের বিবরণ ও বর্তমান দাম।
  • Inventory service: প্রতি item-এর স্টক।
  • Order service: order তৈরি ও ট্র্যাক।
  • Payment service: payment provider-এর সাথে কথা বলে।
  • Notification service: ইমেইল ও আপডেট।

Checkout-এর ধাপ

  1. Cart যাচাই: item আছে, দাম হালনাগাদ। Server-এ আবার হিসাব করুন; client-এর পাঠানো দাম কখনো বিশ্বাস করবেন না।
  2. Inventory reserve: পাওয়া স্টক কমান বা item-গুলোতে সময়সীমার hold দিন।
  3. Order তৈরি PENDING_PAYMENT হিসেবে, idempotency key সহ।
  4. Payment: redirect করুন বা provider-কে ডাকুন।
  5. সফল হলে: PAID চিহ্নিত, inventory নিশ্চিত, fulfilment শুরু, ইমেইল পাঠান।
  6. ব্যর্থ বা timeout: reservation ছেড়ে দিন ও CANCELLED চিহ্নিত করুন।

অতিরিক্ত বিক্রি ঠেকানো

Atomic conditional decrement ব্যবহার করুন: UPDATE stock SET qty = qty - ? WHERE sku = ? AND qty >= ?। কোনো row না বদলালে item শেষ। খুব গরম item-এর স্টক Redis-এ atomic operation দিয়ে রাখুন ও database-এর সাথে মেলান।

Order state machine

CART -> PENDING_PAYMENT -> PAID -> PACKED -> SHIPPED -> DELIVERED, সাথে CANCELLED ও REFUNDED। শুধু বৈধ বদল অনুমোদন করুন ও সেগুলো idempotent রাখুন।

Payment সমস্যা

  • Provider webhook ব্যবহার করে, যা দেরিতে, দুবার বা ক্রম ভেঙে আসতে পারে। Signature যাচাই করুন ও পুনরাবৃত্তি নিরাপদে সামলান।
  • Timeout সফল চার্জ লুকিয়ে রাখতে পারে। Retry-র আগে provider থেকে আসল অবস্থা জেনে নিন।
  • Refund ও support-এর জন্য payment reference order-এর সাথে রাখুন।

Service জুড়ে consistency

Inventory, order ও payment আলাদা। ব্যর্থতায় compensation (স্টক ছাড়া, refund) সহ saga, এবং database write ও message publish-এর মাঝে event হারানো এড়াতে outbox pattern ব্যবহার করুন।

অন্যান্য বিষয়

একবার-ব্যবহারযোগ্য কুপন (atomic যাচাই), ঠিকানা ও ট্যাক্স নিয়ম, fraud যাচাই, পরিত্যক্ত cart-এর স্মরণ, এবং checkout পথ দ্রুত ও সহজ রাখা, কারণ প্রতিটি বাড়তি ধাপে ক্রেতা হারায়।

মূল কথা: server-এ দাম আবার হিসাব করুন, স্টক atomically reserve করুন, idempotent order state machine চালান, আর ব্যর্থতায় saga ব্যবহার করুন।


System Design সিরিজ, পর্ব ৩ (case study): 13 নম্বর (মোট 16)। আগের লেখা: Web crawler ডিজাইন.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া