০৩. ব্যাক-অফ-দ্য-এনভেলপ এস্টিমেশন (Back-of-the-envelope Estimation) বা খসড়া হিসাব
সিস্টেম ডিজাইন ইন্টারভিউতে অনেক সময় আপনাকে ব্যাক-অফ-দ্য-এনভেলপ এস্টিমেশন (খসড়া হিসাব) ব্যবহার করে কোনো সিস্টেমের ধারণক্ষমতা (capacity) বা পারফরম্যান্সের প্রয়োজনীয়তা অনুমান করতে বলা হতে পারে। গুগলের সিনিয়র ফেলো জেফ ডিনের মতে, “ব্যাক-অফ-দ্য-এনভেলপ ক্যালকুলেশন হলো এমন এক ধরণের অনুমান, যা আপনি বিভিন্ন থট এক্সপেরিমেন্ট (thought experiments) এবং প্রচলিত পারফরম্যান্স ডেটার সমন্বয়ে তৈরি করেন। এর মাধ্যমে আপনি সহজেই বুঝতে পারেন যে কোন ডিজাইনটি আপনার সিস্টেমের চাহিদাগুলো ভালোভাবে মেটাতে পারবে” [১]।
সঠিকভাবে এই ব্যাক-অফ-দ্য-এনভেলপ এস্টিমেশন করার জন্য আপনার স্কেলেবিলিটির (scalability) প্রাথমিক বিষয়গুলো সম্পর্কে খুব ভালো ধারণা থাকতে হবে। বিশেষ করে নিচের বিষয়গুলো ভালোভাবে বুঝতে হবে:
- পাওয়ার অফ টু বা ২-এর ঘাত (power of two) [২]
- ল্যাটেন্সি নাম্বার (latency numbers) যা প্রতিটি প্রোগ্রামারের জানা উচিত
- অ্যাভেইলেবিলিটি নাম্বার বা সিস্টেমের প্রাপ্যতার হিসাব (availability numbers)
পাওয়ার অফ টু (Power of two) বা ২-এর ঘাত
ডিস্ট্রিবিউটেড সিস্টেম (distributed systems) নিয়ে কাজ করার সময় ডেটার পরিমাণ অনেক বিশাল হতে পারে, কিন্তু সব হিসাব-নিকাশ দিনশেষে একদম মৌলিক বিষয়গুলোর ওপরই নির্ভর করে। নির্ভুল হিসাব পাওয়ার জন্য ‘পাওয়ার অফ ২’ (২-এর ঘাত) ব্যবহার করে ডেটা ভলিউমের এককগুলো (data volume units) জানা অত্যন্ত গুরুত্বপূর্ণ।
একটি বাইট (byte) হলো ৮টি বিটের (bits) সমষ্টি। একটি আসকি (ASCII) ক্যারেক্টার মেমোরিতে এক বাইট (৮ বিট) জায়গা দখল করে। নিচে ডেটা ভলিউমের এককগুলো ব্যাখ্যা করার জন্য একটি সারণী (Table 1) দেওয়া হলো:
| পাওয়ার (Power) | আনুমানিক মান (Approximate value) | পুরো নাম (Full name) | সংক্ষিপ্ত নাম (Short name) |
|---|---|---|---|
| ১০ (2^10) | ১ হাজার (1 Thousand) | ১ কিলোবাইট (1 Kilobyte) | 1 KB |
| ২০ (2^20) | ১ মিলিয়ন / ১০ লাখ (1 Million) | ১ মেগাবাইট (1 Megabyte) | 1 MB |
| ৩০ (2^30) | ১ বিলিয়ন / ১০০ কোটি (1 Billion) | ১ গিগাবাইট (1 Gigabyte) | 1 GB |
| ৪০ (2^40) | ১ ট্রিলিয়ন (1 Trillion) | ১ টেরাবাইট (1 Terabyte) | 1 TB |
| ৫০ (2^50) | ১ কোয়াড্রিলিয়ন (1 Quadrillion) | ১ পেটাবাইট (1 Petabyte) | 1 PB |