অধ্যায় ০.২ — সিস্টেম আর্কিটেকচার
১. উদ্দেশ্য
এই অধ্যায়ে travoBooks-এর উচ্চ-স্তরের আর্কিটেকচার ব্যাখ্যা করা হয়েছে — প্রধান উপাদান, ডেটা প্রবাহ, এবং কেন আমরা মডুলার মনোলিথ বেছে নিয়েছি মাইক্রোসার্ভিসের পরিবর্তে।
২. কেন এটি গুরুত্বপূর্ণ
আর্কিটেকচার নির্ণয় করে কীভাবে আপনার ট্রানজ্যাকশন প্রবাহিত হবে, কোন ব্যর্থতা মোড সম্ভব, এবং কী স্কেল করা যাবে। ভুল আর্কিটেকচার পরবর্তীতে ব্যথাদায়ক রিরাইট প্রয়োজন করে।
৩. মডুলার মনোলিথ — মাইক্রোসার্ভিস নয়
travoBooks মডুলার মনোলিথ আর্কিটেকচার ব্যবহার করে। কেন?
- ট্রানজ্যাকশনাল ইন্টিগ্রিটি: বুকিং ইস্যু এবং JE পোস্ট একই ডিবি ট্রানজ্যাকশনে কমিট করতে হবে। মাইক্রোসার্ভিস তা অসম্ভব করে তোলে।
- ডেভেলপমেন্ট গতি: একটি কোডবেস, একটি ডিপ্লয়মেন্ট, কোনো সার্ভিস মেশ জটিলতা নেই।
- ভবিষ্যত উন্মুক্ত: ভালভাবে ডিফাইন্ড মডিউল পরে আলাদা সার্ভিসে এক্সট্র্যাক্ট করা সম্ভব।
৪. প্রধান উপাদান
| উপাদান | প্রযুক্তি | ভূমিকা |
|---|---|---|
| অ্যাপ্লিকেশন সার্ভার | PHP 8.2 LTS + Nginx | HTTP রিকোয়েস্ট হ্যান্ডলিং |
| প্রাইমারি ডিবি | MySQL 8.0 / MariaDB | সকল পার্সিস্ট্যান্ট ডেটা |
| ক্যাশ ও কিউ | Redis | সেশন, রেট লিমিট, ব্যাকগ্রাউন্ড জব |
| অবজেক্ট স্টোরেজ | AWS S3 | PDF, ভাউচার, BSP ফাইল |
| ইমেইল | AWS SES | ই-টিকেট, ইনভয়েস, রসিদ |
| SMS | Twilio / স্থানীয় গেটওয়ে | OTP, জরুরি অ্যালার্ট |
৫. মূল আর্কিটেকচারাল সিদ্ধান্ত
- Multi-tenancy by partition: প্রতিটি টেবিলে
partner_idকলাম এবং তিনটি এনফোর্সমেন্ট লেয়ার (অ্যাপ্লিকেশন, ডেটাবেস, স্টোরেজ)। - Multi-currency at line level: প্রতিটি JE লাইনে transaction, functional, এবং reporting currency।
- Double-entry by default: প্রতিটি অপারেশনাল ইভেন্ট একই ডিবি ট্রানজ্যাকশনে একটি ব্যালেন্সড JE পোস্ট করে।
- Append-only financial state: JE-তে UPDATE বা DELETE নেই; সংশোধন reversing JE দিয়ে।
- API-first: UI নিজেই API-এর প্রথম গ্রাহক; কোনো ইন্টারনাল-অনলি এন্ডপয়েন্ট নেই।
৬. ডেটা প্রবাহ — ইস্যুয়েন্স উদাহরণ
ব্যবহারকারী → অ্যাপ → ডিবি লক → idempotency চেক
→ GDS কল (ট্রানজ্যাকশনের বাইরে) → টিকেট নম্বর প্রাপ্তি
→ ডিবি ট্রানজ্যাকশন: ticket রেকর্ড + JE পোস্ট
→ কমিট → ই-টিকেট ইমেইল
৭. ব্যর্থতা মোড
- GDS টাইমআউট: রেট্রাই; reconciler অরফান টিকেট ধরে।
- ডিবি ডেডলক: ক্লায়েন্ট রেট্রাই; idempotency কী।
- নেটওয়ার্ক বিভ্রাট: ব্যাকগ্রাউন্ড জব কিউতে পুনঃচেষ্টা।