Blog top image

Event Sourcing


একটা সাধারণ অ্যাপ্লিকেশন যেমন ই-কমার্সে আমরা যদি প্রোডাক্টের ডিসক্রিপশন পরিবর্তন করি, তাহলে আগে যা ছিলো সেটা আর থাকে না, শুধু মাত্র বর্তমান স্টেট ডাটাবেস এ জমা  রাখে। একটা ই-কমার্সে অ্যাপ্লিকেশন এটা যথেষ্ট। কিন্তু এমন অনেক অ্যাপ্লিকেশন আছে যেখানে শুধুমাত্র বর্তমান স্টেট জমা রাখা পর্যাপ্ত না। যেমন ব্যাকিং অ্যাপ্লিকেশন এ প্রতিটা টাকা জমা বা উত্তোলন এর ক্ষেত্রে শুধুমাত্র বর্তমান ব্যালেন্স জমা রাখলেই যথেষ্ট না, বরং এই ব্যালেন্স কিভাবে হয়ে আসছে তারও হিসাব রাখতে হয়। 

এই যে প্রতিটা স্টেপ এর ডাটা জমা রাখা, ইভেন্ট ড্রিভেন এর ক্ষেত্রে একে ইভেন্ট সোসিং বলে। যার অর্থ হলো প্রতিটা ইভেন্ট হবে ইমিউটেবল এবং সব ইভেন্ট জমা থাকবে। কোন ইভেন্ট আপডেট বা ডিলিট হবে না। শুধু ইনসার্ট হবে। 


ইভেন্ট কোথায় জমা রাখব 

- ডাটাবেস এ ইভেন্ট রাখতে পারি। এর সুবিধা হচ্ছে কমপ্লেক্স কুয়েরি করা যায়। 

- মেসেজ ব্রোকারে ইভেন্ট জমা রাখা। এখানে কমপ্লেক্স কুয়েরি করা যায় না কিন্তু মেসেজ ব্রোকার ইভেন্ট জমা রাখার জন্য অপটিমাইজ। 



ইভেন্ট রিপ্লে

- ইভেন্ট সোর্সিং এর ক্ষেত্রে ইভেন্ট রিপ্লে করে একটা ইভেন্ট এর কারেন্ট স্টেট পাওয়া যেতে পারে 

- অনেক সময় ইভেন্ট সোর্সিং এর ইভেন্ট কে মান্থলি বা ইয়ারলি  স্ন্যাপসট নিয়ে অপটিমাইজ করা হয় 

- CQRS প্যাটার্ন ব্যবহার করে সমস্ত ইভেন্ট কে command হিসাবে চিন্তা করে মেসেজ ব্রোকারে জমা করে রাখা যায় এবং query সার্ভিস এমন করে রাখা হবে যেন পড়তে সুবিধা হয়। CQRS ব্যবহার করার সুবিধা হচ্ছে command সার্ভিস এর জন্য কোন ডাটাবেস দরকার নাই, সব ইভেন্ট মেসেজ ব্রোকারে জমা থাকবে এবং সব ডাটা query সার্ভিস এ জমা থাকবে। দরকার হলে ইভেন্ট রিপ্লে করে সব ডাটা আবার রিজেনারেট করা যাবে।