Skip to content

ইনটেন্ডেড স্টেট বনাম অ্যাকচুয়াল স্টেট

দুটো স্টেটের গল্প

নেটওয়ার্ক সোর্স অফ ট্রুথ বুঝতে হলে প্রথমে বুঝতে হবে নেটওয়ার্কের দুটো অবস্থার কথা। একটা হলো যেমন হওয়ার কথা, আরেকটা হলো আসলে যেমন আছে। এই দুটোর মধ্যে পার্থক্যটাই হলো বেশিরভাগ নেটওয়ার্ক সমস্যার মূল কারণ।

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

এখন বাড়ি বানানো শুরু হলো। রাজমিস্ত্রি কাজ করছে। হঠাৎ দেখা গেল, দ্বিতীয় তলায় একটা রুম একটু ছোট হয়ে গেছে কারণ মাপ নিতে ভুল হয়েছে। তৃতীয় তলায় বারান্দা একটু বাঁকা হয়ে গেছে কারণ বীম সোজা বসেনি। এটা হলো "অ্যাকচুয়াল স্টেট" - আসলে বাড়িটা যেভাবে দাঁড়িয়েছে।

নকশা বলছে এক কথা, বাস্তবে হয়েছে আরেক কথা। এই যে পার্থক্য, এটাই সমস্যা। আপনি যদি নকশা দেখে ফার্নিচার কিনে আনেন, তাহলে হয়তো দেখবেন রুমে ঢুকছে না, কারণ রুম ছোট হয়ে গেছে।

নেটওয়ার্কেও ঠিক এই জিনিসটা হয়।

ইনটেন্ডেড স্টেট - যেমন হওয়ার কথা

ইনটেন্ডেড স্টেট হলো আপনার নেটওয়ার্কের পরিকল্পনা। এটা হলো সেই আদর্শ অবস্থা যেটা আপনি চান। এখানে লেখা থাকে:

  • আপনার নেটওয়ার্কে কতগুলো রাউটার থাকবে, কোথায় থাকবে
  • প্রতিটা রাউটারের কনফিগারেশন কী হবে
  • কোন আইপি রেঞ্জ কোথায় ইউজ হবে
  • কোন ভিল্যান কোন কাজে লাগবে
  • নেটওয়ার্কের টপোলজি কেমন হবে
  • কোন লিংকের ব্যান্ডউইথ কত হবে

এই সব তথ্য থাকে আপনার ডকুমেন্টেশনে, আপনার ডিজাইনে, আপনার পরিকল্পনায়। এটাই হলো "সত্যের উৎস" - সিঙ্গেল সোর্স অফ ট্রুথ। এটাই হলো সেই জায়গা যেখানে লেখা আছে নেটওয়ার্ক আসলে কেমন হওয়া উচিত।

একটা উদাহরণ দিই। ধরুন, আপনার ইনটেন্ডেড স্টেটে লেখা আছে:

রাউটার নাম: R-Mirpur-Core-01
আইপি অ্যাড্রেস: 10.10.1.1
লোকেশন: মিরপুর পপ, র‍্যাক-A
ফাংশন: কোর রাউটার
আপলিংক: 10 Gbps

এটাই হলো আপনার প্ল্যান। এটাই হলো যেভাবে এই রাউটারটা থাকা উচিত।

অ্যাকচুয়াল স্টেট - আসলে যেমন আছে

অ্যাকচুয়াল স্টেট হলো বাস্তবে আপনার নেটওয়ার্ক এই মুহূর্তে কেমন আছে। মানে, রাউটারে গিয়ে যদি কনফিগ দেখেন, সেখানে কী লেখা আছে। ডিভাইসে গিয়ে দেখলেন আসলে কী সেটিংস আছে।

এই অ্যাকচুয়াল স্টেটটা থাকে নেটওয়ার্ক ডিভাইসগুলোর রানিং কনফিগারেশনে। প্রতিটা রাউটার, সুইচ, ফায়ারওয়ালে একটা কনফিগ ফাইল থাকে। সেই ফাইলে যা লেখা, সেটাই ডিভাইসটা মানছে। সেটাই তার অ্যাকচুয়াল স্টেট।

একই উদাহরণে ফিরে যাই। ধরুন, আপনি রাউটারে লগইন করে দেখলেন:

রাউটার নাম: R-Mirpur-Core-01
আইপি অ্যাড্রেস: 10.10.1.5
লোকেশন: মিরপুর পপ, র‍্যাক-A
ফাংশন: কোর রাউটার
আপলিংক: 10 Gbps

দেখুন, এখানে একটা পার্থক্য আছে। ইনটেন্ডেড স্টেটে আইপি ছিল 10.10.1.1, কিন্তু অ্যাকচুয়াল স্টেটে আইপি হয়ে গেছে 10.10.1.5। হয়তো কোনো এক সময় কেউ একটা ইমার্জেন্সিতে এই আইপি চেঞ্জ করেছিল, কিন্তু ডকুমেন্টেশনে আপডেট করতে ভুলে গেছে।

এই যে পার্থক্য, এটাই হলো সমস্যার শুরু।

কেন এই দুটো আলাদা হয়ে যায়?

নেটওয়ার্ক ডিজাইন করার সময় সবকিছু পরিকল্পনা মতো থাকে। কিন্তু যখন নেটওয়ার্ক লাইভ হয়, তখন ম্যানুয়াল চেঞ্জগুলো শুরু হয়। আর এখান থেকেই ইনটেন্ডেড আর অ্যাকচুয়াল স্টেটের মধ্যে ফাঁক তৈরি হয়।

১. রাত ২টার ইমার্জেন্সি

সবচেয়ে বড় কারণ হলো ইমার্জেন্সি সিচুয়েশন। রাত ২টায় ফোন বাজল। একটা এরিয়ার নেট ডাউন। দুই হাজার কাস্টমার অফলাইন। নেটওয়ার্ক ইঞ্জিনিয়ার তাড়াহুড়ো করে ল্যাপটপ খুললেন, রাউটারে ঢুকলেন। দেখলেন একটা ইন্টারফেস ডাউন। তাড়াতাড়ি কনফিগ চেঞ্জ করলেন, ট্রাফিক অন্য পাথে রিডিরেক্ট করলেন। নেট আপ হলো। কাস্টমাররা খুশি।

কিন্তু ইঞ্জিনিয়ার যেটা করতে ভুলে গেলেন, সেটা হলো এই চেঞ্জটা ডকুমেন্টেশনে আপডেট করা। কারণ তখন তো ইমার্জেন্সি, সময় কোথায়? সকাল হলো, তিনি ভুলে গেলেন। ব্যস, একটা কনফিগারেশন ড্রিফ্ট তৈরি হয়ে গেল।

২. একাধিক মানুষ, একাধিক স্টাইল

আরেকটা বড় কারণ হলো বিভিন্ন টেকনিশিয়ানের বিভিন্ন ওয়ার্কিং স্টাইল। একজন হয়তো খুব সিস্টেমেটিক, সে যখন কিছু চেঞ্জ করে, সাথে সাথে ডকুমেন্ট করে। আরেকজন হয়তো বিশ্বাস করে "যা কাজ করে সেটাই ঠিক", সে ডকুমেন্ট করার ধৈর্য রাখে না।

ফলাফল? একই নেটওয়ার্কে কিছু অংশ আপডেটেড, কিছু অংশ আউটডেটেড। কেউ জানে না আসলে কোনটা সত্যি।

৩. টেস্টিং যেটা পার্মানেন্ট হয়ে যায়

অনেক সময় টেস্টিং করতে গিয়ে একটা টেম্পোরারি কনফিগ করা হয়। "দেখি তো এটা কাজ করে কিনা।" কাজ করে, ভালো। কিন্তু সেই টেম্পোরারি কনফিগটা রিমুভ করা হয় না। সেটা পার্মানেন্ট হয়ে যায়। আর ডকুমেন্টেশনে সেটার কোনো উল্লেখই নেই।

ছয় মাস পরে যখন নতুন কেউ সেই নেটওয়ার্ক দেখবে, সে বুঝবে না এই কনফিগ কেন আছে, কী কাজে লাগে, রিমুভ করা যাবে কিনা।

৪. অটোমেশন ছাড়া ম্যানুয়াল চেঞ্জ

অনেক নেটওয়ার্কে অটোমেশন নেই। সব চেঞ্জ ম্যানুয়ালি করতে হয়। ম্যানুয়াল মানেই হিউম্যান এরর। একজন টেকনিশিয়ান হয়তো ১০টা রাউটারে একই কনফিগ করবে। সে SSH করে ঢুকছে, কপি-পেস্ট করছে। নবম রাউটারে গিয়ে হয়তো একটা লাইন মিস হয়ে গেল। দশম রাউটারে গিয়ে হয়তো একটা ভুল ভ্যালু দিয়ে দিল।

ফলে ১০টা রাউটারের কনফিগ সামান্য আলাদা হয়ে গেল। কিন্তু ডকুমেন্টেশনে লেখা আছে সবগুলো একই কনফিগ আছে।

কনফিগারেশন ড্রিফ্ট - সাইলেন্ট কিলার

এই যে ইনটেন্ডেড স্টেট আর অ্যাকচুয়াল স্টেটের মধ্যে পার্থক্য, এটাকে বলা হয় "কনফিগারেশন ড্রিফ্ট"। ইংরেজি Drift শব্দের মানে হলো ভেসে যাওয়া, সরে যাওয়া। আপনার নেটওয়ার্ক ধীরে ধীরে তার আসল ডিজাইন থেকে সরে যাচ্ছে, ভেসে যাচ্ছে।

এই ড্রিফ্টটা অনেকটা নৌকার মতো। আপনি একটা নৌকা নিয়ে নদীতে ভাসছেন। বেঁধে না রাখলে স্রোতে ভেসে আস্তে আস্তে সরে যাবেন। হয়তো খেয়াল করবেন না, কিন্তু এক ঘণ্টা পরে দেখবেন আপনি অনেক দূরে চলে এসেছেন।

কনফিগারেশন ড্রিফ্টও তাই। একটু একটু করে তৈরি হয়। প্রতিদিন একটা ছোট চেঞ্জ, আরেকদিন আরেকটা ছোট চেঞ্জ। কয়েক মাস পরে দেখবেন পুরো নেটওয়ার্ক আপনার আসল ডিজাইন থেকে অনেক দূরে চলে গেছে।

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

ড্রিফ্টের ভয়াবহ পরিণতি

কনফিগারেশন ড্রিফ্ট শুনতে হয়তো বড় কোনো সমস্যা মনে হচ্ছে না। অনেকে বলবেন, "আরে, কনফিগ একটু আলাদা হয়েছে তো কী হয়েছে? নেটওয়ার্ক তো চলছে।" কিন্তু এই ছোট সমস্যা সামনে বড় দুর্ঘটনা ডেকে আনতে পারে।

১. ট্রাবলশুটিং চ্যালেঞ্জ

প্রথম সমস্যা হলো ট্রাবলশুটিং। ধরুন, একটা নেটওয়ার্ক সমস্যা হয়েছে। আপনি ডকুমেন্টেশন দেখে বুঝলেন সমস্যাটা কোথায় হতে পারে। একটা রাউটারে গিয়ে চেক করলেন। কিন্তু দেখলেন যে কনফিগটা থাকার কথা, সেটা নেই। আরেকটা কনফিগ আছে যেটার কথা ডকুমেন্টে নেই।

এখন আপনি কনফিউজড। আসল কনফিগটা কী? কেন এটা আলাদা? এটা কি সমস্যার কারণ, নাকি এটা কোনো পুরোনো ফিক্স? আপনি ঘণ্টার পর ঘণ্টা নষ্ট করবেন শুধু বুঝতে যে আসলে কী হয়েছে।

আমার নিজের একটা অভিজ্ঞতা শেয়ার করি। একবার একটা আইএসপিতে একটা রাউটিং ইস্যু ছিল। ডকুমেন্ট দেখে মনে হচ্ছিল OSPF ইউজ করা হচ্ছে। কিন্তু রাউটারে গিয়ে দেখি BGP চলছে। আরও দেখি কিছু স্ট্যাটিক রুট আছে যেগুলোর কথা কোথাও লেখা নেই। তিন ঘণ্টা লেগে গিয়েছিল শুধু বুঝতে যে আসলে নেটওয়ার্ক কীভাবে কাজ করছে।

২. অটোমেশন ফেইলিউর

দ্বিতীয় বড় সমস্যা হলো অটোমেশন। যদি আপনি অটোমেশন ইউজ করতে চান, তাহলে আপনার স্ক্রিপ্টকে সঠিক ডেটা দিতে হবে। কিন্তু যদি ড্রিফ্ট থাকে, তাহলে আপনার ডেটাই ভুল। সামনে এআই নিয়ে কাজ করতে চাইলেও সেটা করা সম্ভব না।

একটা উদাহরণ দিই। ধরুন, আপনি একটা স্ক্রিপ্ট লিখলেন যেটা সব রাউটারে গিয়ে একটা সিকিউরিটি প্যাচ অ্যাপ্লাই করবে। স্ক্রিপ্ট NSoT থেকে রাউটারের লিস্ট নিল, তাদের আইপি অ্যাড্রেস নিল, কানেক্ট করতে গেল।

কিন্তু দেখা গেল, ১০টা রাউটারের মধ্যে ৩টার আইপি চেঞ্জ হয়ে গেছে কয়েক মাস আগে, কিন্তু NSoT-এ আপডেট হয়নি। স্ক্রিপ্ট সেই পুরোনো আইপিতে কানেক্ট করতে গেল, ফেইল করল। ফলে সেই ৩টা রাউটারে প্যাচ অ্যাপ্লাই হলো না। আর আপনি জানেনই না যে এটা হয়নি।

এক মাস পরে সেই আনপ্যাচড রাউটারের কোনো একটা হ্যাক হয়ে গেল। কারণ সিকিউরিটি আপডেট ছিল না। কার দোষ? ড্রিফ্টের।

৩. সিকিউরিটি হোল

তৃতীয় সমস্যা হলো সিকিউরিটি। যখন আপনি জানেন না আপনার নেটওয়ার্কে আসলে কী কনফিগ আছে, তখন আপনি জানেন না কোথায় কোথায় সিকিউরিটি হোল আছে।

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

অথবা হয়তো কোনো একটা ডিভাইসে ডিফল্ট পাসওয়ার্ড আছে। চেঞ্জ করার কথা ছিল, কিন্তু হয়নি। এটাও ড্রিফ্টের কারণে - আসল পলিসি বলছে "সব ডিভাইসে স্ট্রং পাসওয়ার্ড থাকতে হবে", কিন্তু বাস্তবে একটা ডিভাইসে ডিফল্ট পাসওয়ার্ড রয়ে গেছে।

৪. টিম কনফিউশন

চতুর্থ সমস্যা হলো টিম কোলাবরেশন। যখন একাধিক মানুষ একই নেটওয়ার্কে কাজ করে, তখন সবাইকে জানতে হবে নেটওয়ার্ক কেমন আছে। কিন্তু যদি ড্রিফ্ট থাকে, তাহলে একেকজন একেক জিনিস জানবে।

একজন মনে করছে রাউটার A-তে ভিল্যান ১০০ কনফিগার করা আছে। আরেকজন জানে যে সেটা আসলে ভিল্যান ২০০। তৃতীয়জন জানেই না এটা নিয়ে। এখন যদি এই তিনজন মিলে কোনো চেঞ্জ করতে যায়, তাহলে হবে বিপদ। একজন ভিল্যান ১০০-এর জন্য কনফিগ করবে, আরেকজন ভিল্যান ২০০-এর জন্য - রেজাল্ট হবে নেটওয়ার্ক আউটেজ।

ড্রিফ্ট ম্যানেজমেন্ট - সমাধানের রাস্তা

এখন প্রশ্ন হলো, এই ড্রিফ্ট প্রবলেম থেকে বাঁচবেন কীভাবে? উত্তর হলো - NSoT দিয়ে।

NSoT-এর মূল কাজই হলো নিশ্চিত করা যে ইনটেন্ডেড স্টেট আর অ্যাকচুয়াল স্টেট সবসময় মিলে থাকে। এটা কীভাবে করে?

১. ইনটেন্ডেড স্টেটকে মাস্টার বানানো

প্রথমে আপনি ঠিক করেন যে NSoT হবে আপনার একমাত্র সত্যের উৎস। এটাই বলবে নেটওয়ার্ক কেমন হবে। সব তথ্য এখানে রাখা হবে - ডিভাইস, আইপি, ভিল্যান, কনফিগ, পাওয়ার ম্যানেজমেন্ট, র‍্যাক সবকিছু।

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

২. অটোমেশন দিয়ে ডিপ্লয় করা

তারপর, যখন কোনো চেঞ্জ করতে হবে, সেটা আগে NSoT-এ করা হবে। তারপর অটোমেশন টুল NSoT থেকে ডেটা নিয়ে ডিভাইসে অ্যাপ্লাই করবে। এতে নিশ্চিত হওয়া যায় যে যা NSoT-এ আছে, সেটাই ডিভাইসে অ্যাপ্লাই হয়েছে।

ম্যানুয়াল চেঞ্জ নিষিদ্ধ না, কিন্তু রুল হবে - ম্যানুয়াল চেঞ্জ করলেও সাথে সাথে NSoT আপডেট করতে হবে অথবা অটোমেশন দিয়ে সঠিক ডাটা আনতে হবে। আর যত তাড়াতাড়ি সম্ভব সেই চেঞ্জটাকে অটোমেশনের মাধ্যমে রিপ্লে করতে হবে। এতে নিশ্চিত হওয়া যায় অটোমেশন টুল সেই চেঞ্জ সম্পর্কে জানে।

৩. কন্টিনিউয়াস ড্রিফ্ট ডিটেকশন

তৃতীয় এবং সবচেয়ে গুরুত্বপূর্ণ - ড্রিফ্ট ডিটেকশন। এর মানে হলো, নিয়মিত চেক করা হবে যে NSoT-এ যা লেখা আছে আর ডিভাইসে যা আছে, সেটা মিলছে কিনা।

এটা করা হয় অটোমেটেড স্ক্রিপ্ট দিয়ে। প্রতিদিন বা প্রতি সপ্তাহে একটা স্ক্রিপ্ট চলবে যেটা:

  1. NSoT থেকে ইনটেন্ডেড কনফিগ নেবে
  2. ডিভাইস থেকে অ্যাকচুয়াল কনফিগ নেবে
  3. দুটোকে কম্পেয়ার করবে
  4. যদি কোনো পার্থক্য পায়, রিপোর্ট করবে

এই রিপোর্ট দেখে আপনি বুঝবেন কোথায় ড্রিফ্ট হয়েছে। তারপর ডিসিশন নেবেন - হয় ডিভাইসের কনফিগ ঠিক করবেন NSoT অনুযায়ী, নাহয় NSoT আপডেট করবেন ডিভাইস অনুযায়ী।

প্র্যাক্টিক্যাল উদাহরণ

চলুন একটা রিয়েল লাইফ সিনারিও দেখি কীভাবে ড্রিফ্ট হয় আর কীভাবে ম্যানেজ করা যায়।

সাকিব একটা মিডিয়াম সাইজ আইএসপিতে কাজ করে। তাদের নেটওয়ার্কে ৫০টা রাউটার আছে। একদিন রাত ১০টায় ফোন এলো - মগবাজার এরিয়ার নেট ডাউন।

সাকিব দ্রুত ল্যাপটপ খুলল। দেখল মগবাজারের মেইন রাউটারে একটা ইন্টারফেস ডাউন। ব্যাকআপ রাউটার আছে, কিন্তু ট্রাফিক অটোমেটিক সুইচ হচ্ছে না। দ্রুত একটা স্ট্যাটিক রুট দিয়ে ট্রাফিক রিডিরেক্ট করল ব্যাকআপ পাথে। নেট আপ হলো। কাস্টমাররা খুশি।

কিন্তু সাকিব NSoT আপডেট করতে ভুলে গেল। পরদিন অফিসেও মনে পড়ল না।

দুই সপ্তাহ পরে, তাদের টিম একটা মেজর নেটওয়ার্ক আপগ্রেড প্ল্যান করছে। তারা NSoT দেখে দেখে সব রাউটারের লিস্ট বানাল। প্ল্যান করল কোন রাউটারে কী কী চেঞ্জ হবে।

আপগ্রেডের দিন, অটোমেশন স্ক্রিপ্ট চলল। সব রাউটারে নতুন কনফিগ পুশ করা হলো। কিন্তু মগবাজারের রাউটারে যখন কনফিগ গেল, সেই স্ট্যাটিক রুট মুছে গেল। কারণ NSoT-এ তো সেটার কথা ছিল না।

রেজাল্ট? মগবাজার আবার ডাউন। আবার ইমার্জেন্সি। আবার ফিক্স করতে হলো।

এটাই হলো ড্রিফ্টের ক্লাসিক উদাহরণ। যদি সাকিব সেদিন NSoT আপডেট করত, অথবা যদি তাদের ড্রিফ্ট ডিটেকশন সিস্টেম থাকত, তাহলে এই সমস্যা হতো না।

এবং ফাইনালি

ইনটেন্ডেড স্টেট আর অ্যাকচুয়াল স্টেট - এই দুটো কনসেপ্ট বোঝাটা জরুরি। ইনটেন্ডেড স্টেট হলো আপনার প্ল্যান, আপনার ডিজাইন, যেটা NSoT-এ থাকে। অ্যাকচুয়াল স্টেট হলো বাস্তবে নেটওয়ার্ক কেমন আছে, যেটা ডিভাইসের কনফিগে থাকে।

এই দুটোর মধ্যে পার্থক্য হলো কনফিগারেশন ড্রিফ্ট। আর এই ড্রিফ্ট হলো নীরব ঘাতক - ধীরে ধীরে আপনার নেটওয়ার্ককে অস্থিতিশীল করে তোলে।

NSoT-এর মূল লক্ষ্য হলো এই ড্রিফ্ট ম্যানেজ করা। নিশ্চিত করা যে আপনার প্ল্যান আর বাস্তবতা সবসময় মিলে থাকে। যাতে আপনি জানেন আপনার নেটওয়ার্ক আসলে কেমন আছে, আর যেকোনো সময় সঠিক সিদ্ধান্ত নিতে পারেন।

পরের চ্যাপ্টারে আমরা দেখব NSoT-এর কোর প্রিন্সিপালগুলো কী কী, আর কীভাবে এটা কাজ করে।