পাঠ্যক্রম খুলুন
প্রাথমিক পর্যায়

Capacity Estimation: ট্রাফিক ও স্টোরেজের হিসাব

Capacity Estimation

এই পাঠের কুইজ ↓৫ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • DAU থেকে average QPS বের করা
  • Peak, storage ও bandwidth হিসাব
  • Estimate-এর assumptions ও সীমা লেখা

সমস্যা দিয়ে শুরু

“এক লাখ user থাকবে”—এই তথ্য দিয়ে server কেনা যায় না। তারা প্রতিদিন login করেন, নাকি মাসে একবার? প্রত্যেকে দশটি product দেখেন, নাকি ভিডিও stream করেন? Capacity estimation-এর কাজ হলো অস্পষ্ট user count-কে request, bytes এবং সময়ে রূপান্তর করা।

সহজ করে বুঝি

ধরা যাক একটি shop-এ দৈনিক সক্রিয় user ১ লাখ, প্রত্যেকে দিনে ২০টি API request করেন। মোট দৈনিক request ২০ লাখ। ৮৬,৪০০ সেকেন্ড দিয়ে ভাগ করলে average প্রায় ২৩.১৫ QPS। Peak traffic average-এর ৫ গুণ ধরলে প্রায় ১১৬ QPS। এই ৫ গুণ একটি planning assumption, মাপা ফল নয়।

Read/write ratio-ও দরকার। Product read ও order write-এর cost সমান নয়। ছবি CDN থেকে আসলে সেই bandwidth app server-এর API bandwidth থেকে আলাদা হিসাব করুন। কেবল registered user count দিয়ে database load অনুমান করবেন না।

পরিচিত একটি উপমা

বিয়ের অনুষ্ঠানে ৫০০ অতিথি আসবেন জানলেই যথেষ্ট নয়। সবাই এক ঘণ্টায় খাবেন, নাকি পাঁচ ঘণ্টায়? একজন কত পদ খাবেন? কতটা reserve থাকবে? Server capacity-তেও arrival pattern, work size ও headroom লাগে।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Estimate দিয়ে শুরু করুন, representative load test দিয়ে assumptions সংশোধন করুন।
Diagram-এর text flow দেখুন
flowchart LR
 A[DAU] --> C[Daily requests]
 B[Requests per user] --> C
 C --> D[Average QPS]
 D --> E[Peak factor]
 E --> F[Load test and revise]
 G[Bytes per record] --> H[Storage growth]

Daily request = DAU × request per user। Average QPS = daily request ÷ 86400। Logical storage = নতুন record সংখ্যা × average record bytes। Indexes, replicas, backups এবং retention-এর অতিরিক্ত storage আলাদা যোগ করুন। Peak response bandwidth = peak QPS × average response bytes; bytes থেকে bits-এ যেতে ৮ দিয়ে গুণ করতে হয়।

PHP ও Laravel-এ প্রয়োগ

নিচের plain PHP model শুধু arithmetic শেখার জন্য। কোনো Laravel deployment-এর benchmark নয়। Decimal KB হিসেবে ১ KB = ১০০০ bytes ধরা হয়েছে। GiB বা binary units ব্যবহার করলে conversion factor বদলাতে হবে।

php
$dau = 100_000;
$requestsPerUser = 20;
$peakFactor = 5;
$responseBytes = 10_000;

$dailyRequests = $dau * $requestsPerUser;
$averageQps = $dailyRequests / 86_400;
$peakQps = $averageQps * $peakFactor;
$peakMbps = $peakQps * $responseBytes * 8 / 1_000_000;

printf("Average: %.2f QPS\n", $averageQps);
printf("Peak estimate: %.2f QPS\n", $peakQps);
printf("Response bandwidth: %.2f Mbps\n", $peakMbps);

সুবিধা, সীমাবদ্ধতা ও trade-off

Rough estimate দ্রুত order-of-magnitude ভুল ধরতে সাহায্য করে। কিন্তু PHP worker count, query complexity, lock contention ও external API time না জেনে server count নিশ্চিত করা যায় না। খুব বেশি headroom খরচ বাড়ায়, খুব কম headroom traffic spike-এ queue বাড়ায়।

সাধারণ ভুল

  • মাসের total traffic-কে peak traffic ভাবা।
  • KB, KiB, Mbps ও MB/s গুলিয়ে ফেলা।
  • Index, replication ও backups-এর storage বাদ দেওয়া।
  • Average response size দিয়ে বড় file upload-এর tail উপেক্ষা করা।

আরও একটু গভীরে

Little’s Law-এর steady-state approximation দিয়ে concurrency-এর প্রথম ধারণা নিতে পারেন। Arrival ১১৬ QPS এবং mean latency ০.২ সেকেন্ড হলে average in-flight প্রায় ২৩। কিন্তু PHP worker ২৩ হলেই যথেষ্ট—এ সিদ্ধান্ত নেওয়া যাবে না। Burst, upstream wait, worker memory এবং safety margin বাস্তবে যাচাই করতে হবে।

মনে রাখুন

  • সব estimate-এর পাশে assumptions লিখুন।
  • Average, peak ও read/write mix আলাদা করুন।
  • Estimate হলো load test-এর input, capacity-এর প্রমাণ নয়।

নিজে চেষ্টা করুন

DAU দ্বিগুণ হলে এবং response size অর্ধেক হলে QPS ও bandwidth কীভাবে বদলাবে? দিনে ১০ হাজার order, প্রতিটি ২ KB ধরে ১ বছরের logical storage বের করুন; replication আলাদা যোগ করুন।

নিজের বোঝা যাচাই করুন

1. ১ লাখ DAU × ২০ request কত?

দিনে ২০ লাখ request; average প্রায় ২৩.১৫ QPS।

2. Peak factor ৫ কোথা থেকে?

এই পাঠে অনুমান। বাস্তবে traffic history বা business event দিয়ে refine করতে হবে।

3. Replica কি storage বাড়ায়?

হ্যাঁ। Logical data এক হলেও একাধিক physical copy লাগে; index ও backup-ও যোগ হয়।

4. QPS জানলেই machine count জানা যায়?

না। Request cost, latency, concurrency ও resource profile জানতে হবে।

5. Bandwidth-এ ৮ দিয়ে গুণ কেন?

প্রতি byte-এ ৮ bit। Mbps সাধারণত প্রতি সেকেন্ডে million bits বোঝায়।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।