Skip to content

Asynchronous Systems (অ্যাসিঙ্ক্রোনাস সিস্টেম ডিপ-ডাইভ)

সিস্টেম ডিজাইনে অ্যাসিঙ্ক্রোনাস কমিউনিকেশন হলো এমন একটি পদ্ধতি যেখানে ক্লায়েন্ট এবং সার্ভারকে একে অপরের রেসপন্সের জন্য অপেক্ষা করতে হয় না। এটি সিস্টেমের স্কেলেবিলিটি এবং ডিকপলিং (Decoupling) বাড়াতে সাহায্য করে।


১. অ্যাসিঙ্ক্রোনাস প্রসেসিং কী? (What is Async Processing?)

যখন কোনো টাস্ক সরাসরি (Synchronously) না করে ব্যাকগ্রাউন্ডে চালানোর জন্য কিউতে পাঠিয়ে দেওয়া হয়, তাকে অ্যাসিঙ্ক্রোনাস প্রসেসিং বলে।

  • উদাহরণ: ইউজারকে ইমেইল ভ্যালিডেশন কোড পাঠানো। ইউজারকে সাইন-আপ করার সাথে সাথে 'Success' মেসেজ দিয়ে ইমেইল পাঠানোর কাজটি ব্যাকগ্রাউন্ডে করা হয়।

২. পাব/সাব বনাম মেসেজ কিউ (Pub/Sub vs Message Queue)

ক. মেসেজ কিউ (Message Queue)

মেসেজ কিউতে একটি মেসেজ সাধারণত একজন মাত্র কনজিউমার (Consumer) প্রসেস করে। মেসেজটি প্রসেস হয়ে গেলে কিউ থেকে মুছে ফেলা হয়।

  • টুলস: RabbitMQ, ActiveMQ.
  • Use Case: অর্ডার প্রসেসিং, টাস্ক শিডিউলিং।

খ. পাব/সাব (Publish/Subscribe)

পাব/সাব পদ্ধতিতে একজন পাবলিশার একটি টপিকে মেসেজ পাঠায় এবং ওই টপিকে সাবস্ক্রাইব করা সব কনজিউমার মেসেজটি পায় (Broadcast style)।

  • টুলস: Redis Pub/Sub, Google Pub/Sub.
  • Use Case: নোটিফিকেশন সিস্টেম, রিয়েল-টাইম ডাটা ব্রডকাস্ট।

৩. কাফকা (Apache Kafka)

কাফকা হলো একটি ডিস্ট্রিবিউটেড ইভেন্ট স্ট্রিমিং প্লাটফর্ম। এটি মেসেজ কিউ এবং পাব/সাব উভয় হিসেবেই কাজ করতে পারে।

কাফকার বৈশিষ্ট্য (Kafka Features)

  • Persistence: কাফকা মেসেজগুলো নির্দিষ্ট সময় পর্যন্ত ডিস্কে স্টোর করে রাখে।
  • High Throughput: এটি প্রতি সেকেন্ডে মিলিয়ন মিলিয়ন মেসেজ হ্যান্ডেল করতে পারে।
  • Order Guarantee: এটি পার্টিশনের মধ্যে মেসেজের অর্ডার বজায় রাখে।

কাফকা ইউজ কেস (Kafka Use Cases)

১. Log Aggregation: বিভিন্ন সার্ভারের লগ এক জায়গায় জমা করা। ২. Stream Processing: রিয়েল-টাইম ডেটা অ্যানালাইসিস (উদা: ট্রাফিক প্যাটার্ন)। ৩. Event Sourcing: সিস্টেমের প্রতিটি স্টেট চেঞ্জ একটি ইভেন্ট হিসেবে সেভ করা।


৪. সাধারণ ইন্টারভিউ প্রশ্নোত্তর (General Q&A)

প্রশ্ন ১: কখন আপনি সিঙ্ক্রোনাস কল (REST) এর বদলে অ্যাসিঙ্ক্রোনাস (Message Queue) চয়েস করবেন?উত্তর: যখন কোনো টাস্ক প্রসেস হতে অনেক সময় লাগে (উদা: ভিডিও এডিটিং) বা যখন প্রসেসটি সাথে সাথে না হলেও চলে (উদা: রিপোর্ট জেনারেশন), তখন অ্যাসিঙ্ক্রোনাস সিস্টেম সেরা।

প্রশ্ন ২: মেসেজ কিউতে 'Dead Letter Queue' (DLQ) কী?উত্তর: যখন কোনো মেসেজ বারবার চেষ্টা করার পরও প্রসেস হতে ফেইল করে, তখন সেটিকে আলাদা একটি কিউতে পাঠিয়ে দেওয়া হয় যাতে অন্যরা ব্লক না হয়। একেই DLQ বলে।

প্রশ্ন ৩: কাফকাতে 'Partition' এর গুরুত্ব কী?উত্তর: পার্টিশনের মাধ্যমে কাফকা ডেটাকে একাধিক সার্ভারে ডিস্ট্রিবিউট করে, যা সমান্তরালভাবে (Parallelism) ডেটা রিড এবং রাইট করতে সাহায্য করে।


৫. সিনারিও ভিত্তিক প্রশ্ন (Scenario-based Questions)

সিনারিও ১: "আপনি ইউটিউবের মতো একটি সিস্টেম বানাচ্ছেন যেখানে ভিডিও আপলোড হওয়ার পর বিভিন্ন ফরম্যাটে (720p, 1080p) কনভার্ট করতে হয়। আপনি এটি কীভাবে ডিজাইন করবেন?"

সমাধান: এখানে আমি একটি Message Queue (RabbitMQ or Kafka) ব্যবহার করব। ভিডিও আপলোড হওয়ার পর একটি মেসেজ কিউতে যাবে। অনেকগুলো 'Worker' সার্ভার ওই কিউ থেকে ভিডিও নিয়ে ব্যাকগ্রাউন্ডে কনভার্ট করবে। কনভার্ট শেষ হলে ইউজারকে নোটিফিকেশন দেওয়া হবে।

সিনারিও ২: "আপনার সিস্টেমে একটি বড় সেল চলছে। ইউজাররা অর্ডার করলে পেমেন্ট গেটওয়েতে অনেক চাপ পড়ছে। আপনি কীভাবে এই লোড হ্যান্ডেল করবেন?"

সমাধান: আমি ইউজারের অর্ডার সরাসরি পেমেন্ট গেটওয়েতে না পাঠিয়ে একটি মেসেজ কিউতে রেখে দেব। এতে ইউজারকে সাথে সাথে 'Order Placed' মেসেজ দেওয়া যাবে এবং ব্যাকগ্রাউন্ডে নির্দিষ্ট রেটে পেমেন্ট গেটওয়েতে রিকোয়েস্ট পাঠানো যাবে, যাতে গেটওয়ে ক্র্যাশ না করে।


TIP

অ্যাসিঙ্ক্রোনাস সিস্টেম ব্যবহারের সময় Atomicity নিশ্চিত করা কঠিন। তাই অনেক সময় ট্রানজ্যাকশন আউটবক্স (Transactional Outbox Pattern) ব্যবহার করা হয়।

Released under the MIT License.