Availability ও Reliability: সচল ও নির্ভরযোগ্য সিস্টেম
Availability and Reliability
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- Availability ও reliability বোঝা
- SLI, SLO ও SLA আলাদা করা
- Failure budget ও dependency চিনতে শেখা
সমস্যা দিয়ে শুরু
একটি payment API সবসময় HTTP 200 দেয়, কিন্তু কিছু payment ভুল account-এ record হয়। আবার অন্য API সঠিক ফল দেয়, তবে প্রতিদিন কিছু সময় বন্ধ থাকে। প্রথমটির শুধু server uptime দেখে খুশি হওয়া যায় না। ব্যবহারকারীর কাছে সঠিক ও সময়মতো outcome-ই জরুরি।
সহজ করে বুঝি
Availability বলতে নির্ধারিত সময় বা valid request-এর মধ্যে service ব্যবহারযোগ্য থাকার অনুপাত বোঝাতে পারেন। Reliability আরও বিস্তৃত: নির্ধারিত শর্তে প্রত্যাশিত কাজ ধারাবাহিকভাবে সঠিক করা। কোন সংজ্ঞায় মাপছেন তা স্পষ্ট না করলে একই system-এর দুটি report আলাদা হতে পারে।
SLI হলো মাপ: যেমন valid checkout request-এর কত শতাংশ সঠিকভাবে confirm হয়েছে। SLO হলো সেই মাপের লক্ষ্য। SLA হলো গ্রাহকের সঙ্গে চুক্তির শর্ত; লক্ষ্য ভাঙলে কী ফল হবে সেটিও থাকতে পারে। প্রতিটি internal SLO-কে customer SLA করতে হয় না।
পরিচিত একটি উপমা
একটি bus প্রতিদিন বের হয় কিন্তু অর্ধেক সময় ভুল route-এ যায়। শুধু garage থেকে বের হওয়া uptime-এর মতো। নির্ধারিত route-এ নিরাপদে সময়মতো গন্তব্যে পৌঁছানো service reliability-র কাছাকাছি।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart LR U[Checkout request] --> A[Laravel API] A --> D[(Order Database)] A --> P[Payment Provider] A --> Q[Receipt Queue] Q --> M[Email Provider]
User journey বেছে নিন। Successful এবং total eligible event কীভাবে গুনবেন লিখুন। উদাহরণ হিসেবে ৩০ দিনের window-তে ৯৯.৯% success লক্ষ্য হলে ০.১% eligible request error budget। Request-based budget-কে মিনিটের downtime-এ রূপান্তর করবেন না, যদি traffic সমান না হয়।
PHP ও Laravel-এ প্রয়োগ
Laravel route থেকে database reachability পরীক্ষা করা একটি readiness-এর অংশ হতে পারে। নিচের endpoint-এ failure log ও monitoring দরকার; public response-এ exception message বা credentials প্রকাশ করবেন না। এটিকে পুরো user journey SLI ভাববেন না।
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;
Route::get('/ready', function () {
try {
DB::select('select 1');
return response()->json(['status' => 'ready']);
} catch (\Throwable $e) {
report($e);
return response()->json(['status' => 'unavailable'], 503);
}
});সুবিধা, সীমাবদ্ধতা ও trade-off
Redundancy এক instance-এর failure সহ্য করতে সাহায্য করে। কিন্তু একই database বা region-এ নির্ভর করলে common failure থেকে রক্ষা নাও পেতে পারেন। ১০০% target সাধারণত বাস্তব সিদ্ধান্তে খুব ব্যয়বহুল ও অস্পষ্ট; user need অনুযায়ী achievable target নিয়ে শেখা ভালো।
সাধারণ ভুল
- Process alive থাকলেই application healthy বলা।
- Validation error ও server error একইভাবে SLI-তে গোনা, কোনো সংজ্ঞা ছাড়া।
- বারবার health check-এ ভারী query চালিয়ে database-এর load বাড়ানো।
- SLO পূরণ হলেও correctness incident উপেক্ষা করা।
আরও একটু গভীরে
Serial dependency-র availability গুণ করার model তখনই উপযোগী যখন failure স্বাধীন ধরা যায় এবং প্রতিটি dependency বাধ্যতামূলক। বাস্তবে shared network, deployment বা credentials common failure তৈরি করে। এই assumptions না লিখে ৯৯.৯% × ৯৯.৯% দিয়ে নিশ্চিত ফল ঘোষণা করবেন না।
মনে রাখুন
- User outcome দিয়ে reliability মাপুন।
- SLI হলো measurement, SLO target, SLA agreement।
- Critical path ছোট রাখা failure isolation-এ সাহায্য করে।
নিজে চেষ্টা করুন
Order confirmation-এর জন্য eligible request ও good event সংজ্ঞা লিখুন। User ভুল quantity পাঠালে সেটি service failure হবে কি? আপনার সিদ্ধান্তের কারণ লিখুন।
নিজের বোঝা যাচাই করুন
1. HTTP 200 কি reliability প্রমাণ?
না। Response ভুল বা business operation অসম্পূর্ণ হতে পারে।
2. SLO আর SLA কি এক?
না। SLO একটি service target; SLA একটি agreement যার consequence থাকতে পারে।
3. দুটি app server থাকলেই HA?
না। Shared database, network বা region single failure domain হতে পারে।
4. Email failure-এ checkout থামাতে হবে?
Requirement অনুযায়ী। সাধারণত receipt async করে checkout-এর critical path থেকে সরানো যায়।
5. Readiness আর liveness আলাদা কেন?
Liveness process পুনরায় চালানো দরকার কি না, readiness traffic নিতে পারে কি না বোঝায়। Dependency failure-এ সব process restart করা সমস্যা বাড়াতে পারে।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।