system-design-bangla

Design a Highly Concurrent Wordcamp Event Booking System, with Performance and Consistency in mind

আমি পূর্বে Design a Highly Concurrent Wordcamp Event Booking System লিখেছিলাম। যা আমাদেরকে ধারণা দিয়েছে,

সবকিছু ঠিক আছে। একটি বিষয় ছাড়া, তা হচ্ছে পারফরমেন্স। আমরা এরকম ভাবতে পারি,

১০,০০০ মানুষ কিছু মিলিসেকেন্ড অন্তর “Book” বাটন এ ক্লিক করেছে। এতে ডাটাবেস এ একসাথে (বলা যায়) ১০,০০০ টি রিকোয়েস্ট চলে গেলো।

ডাটাবেস storage এরকম হাজার হাজার রিকোয়েস্ট হ্যান্ডেল করার জন্য তৈরী(optimized) করা হয় নি, বরং তা মূলত Storage এবং Query করে ডেটা আনার জন্য তৈরী করা হয়েছে।

Locking mechanism থাকার পরেও এতো এতো রিকোয়েস্ট হ্যান্ডেল করতে গেলে তখন Latency খুব বাড়তে থাকবে।

তাহলে আমরা কি করতে পারি?

উত্তর হচ্ছে, Redis এবং Kafka ব্যবহার করতে পারি।

Redis শুধু ক্যাশিং এর জন্য নয়। আমাদের এখানে, Redis কে আমরা First-Come-First-Serve এর জন্য ব্যবহার করতে পারবো। এবং Kafka একটি নির্দিষ্ট পার্টিশন এর ভিতর ordering নিশ্চিত করে থাকে, সাথে Durability নিশ্চিত করে। এই ২টি(Redis এবং Kafka) ব্যবহার করে আমরা Latency সংক্ষিপ্ত করতে পারবো।

প্রসেসটি শুরু করা যাক,

যেহেতু আমরা প্রথম স্টেপ এ রেসপন্স পাঠিয়ে দিচ্ছি(যদিও step 4 ডাটাবেস booking আপডেট করা হচ্ছে), সেহেতু performance খুবই ভালো হবে। এবং kafka durability জন্য আমাদের কোনো রিকোয়েস্ট নষ্ট হবে না, যার ফলে consistency বজায় থাকবে।

একটি বিষয় আমাদেরকে মনে রাখতে হবে যে kafka নির্দিষ্ট পার্টিশনে অর্ডার বজায় রাখে, তার মানে আমরা চাইলে redis নাও ব্যবহার করতে পারি যদি পার্টিশন নম্বর জানা থাকে।