ইয়াং ডাটা মডেলিং ল্যাঙ্গুয়েজ
ইয়াং মডেল: নেটওয়ার্কের ভবিষ্যৎ¶
নেটওয়ার্ক ইঞ্জিনিয়ারিং এর জগতে ইয়াং মডেল - [ইয়েট অ্যানাদার নেক্সট জেনারেশন (YANG) ডাটা মডেলিং ল্যাংগুয়েজ (RFC 6020)] একটা বিপ্লব এনেছে। এটা এমন একটা স্ট্যান্ডার্ড ভাষা যা সব ধরনের নেটওয়ার্ক ডিভাইস বোঝে। ঠিক যেমন ইংরেজি ভাষা সারা দুনিয়ার মানুষকে একসূত্রে বেঁধেছে, তেমনি ইয়াং মডেল সব ধরনের নেটওয়ার্ক ডিভাইসকে একটা প্ল্যাটফর্মে নিয়ে এসেছে।
পুরনো দিনের সমস্যা¶
আগের দিনের কথা চিন্তা করুন। আপনার ডাটা সেন্টারে আছে:
- সিসকোর রাউটার
- জুনিপারের সুইচ
- মাইক্রোটিকের ফায়ারওয়াল
- এরিস্টার সুইচ
প্রত্যেকটা ডিভাইসের কমান্ড আলাদা। উদাহরণ দেখি:
একজন ইঞ্জিনিয়ারের পক্ষে এত কমান্ড মনে রাখা কঠিন। আর অটোমেশন? প্রায় অসম্ভব!
ইয়াং মডেলের সমাধান¶
ইয়াং মডেল এই সমস্যার একটা চমৎকার সমাধান দিয়েছে। এটা একটা স্ট্যান্ডার্ড ডাটা মডেল যা সব ডিভাইস বোঝে। উদাহরণ দেখি:
interfaces:
- name: eth0
type: ethernet
config:
ip: 192.168.1.1
enabled: true
speed: 1G
state:
oper-status: up
counters:
in-octets: 1000000
out-octets: 2000000
এই একটা ফরম্যাট দিয়ে আপনি যে কোন ডিভাইসের সাথে কথা বলতে পারেন। ডিভাইস নিজেই এটাকে তার নিজস্ব কমান্ডে রূপান্তর করে নেবে।
দুটি প্রধান প্রোটোকল¶
ইয়াং মডেল দুটি প্রধান প্রোটোকল ব্যবহার করে:
-
RESTCONF (নতুন এবং জনপ্রিয়):
# ইন্টারফেস স্ট্যাটাস জানতে response = requests.get( "https://router1/restconf/data/interfaces", headers={ "Accept": "application/yang-data+json" }, auth=(username, password) ) # নতুন কনফিগারেশন সেট করতে response = requests.put( "https://router1/restconf/data/interfaces/interface=eth0", json={ "interface": { "name": "eth0", "config": { "enabled": True, "speed": "1G" } } } )
-
NETCONF (পুরনো কিন্তু শক্তিশালী):
ইয়াং মডেলের সুবিধা¶
- একীভূত ম্যানেজমেন্ট:
-
অটোমেশন সহজ:
-
ভুল কমে:
- স্ট্যান্ডার্ড ফরম্যাট
- ভ্যালিডেশন আছে
- অটোমেটিক এরর চেকিং
ডকুমেন্টেশন: নেটওয়ার্কের নকশা¶
ইয়াং মডেলের সবচেয়ে আকর্ষণীয় দিক হল এর নিজের-ডকুমেন্টেড স্ট্রাকচার। এটা অনেকটা একটা বিল্ডিংয়ের নকশার মত - প্রতিটা জিনিস কোথায় আছে, কীভাবে সংযুক্ত, সব কিছু পরিষ্কারভাবে দেখা যায়।
চলুন একটা উদাহরণ দিয়ে বুঝি। ধরুন আপনি একটা ইন্টারফেসের ডকুমেন্টেশন দেখতে চান:
module: openconfig-interfaces
+--rw interfaces # সব ইন্টারফেসের রুট ফোল্ডার
+--rw interface* [name] # প্রতিটা ইন্টারফেস
+--rw name string # ইন্টারফেসের নাম (eth0, eth1 ইত্যাদি)
+--rw config # কনফিগারেশন সেকশন
| +--rw enabled? boolean # চালু/বন্ধ স্ট্যাটাস
| +--rw mtu? uint16 # ম্যাক্সিমাম ট্রান্সমিশন ইউনিট
| +--rw speed? string # পোর্টের স্পীড (1G, 10G)
| +--rw description? string # বর্ণনা (অপশনাল)
+--ro state # বর্তমান অবস্থা
+--ro oper-status # অপারেশনাল স্ট্যাটাস
+--ro counters # পরিসংখ্যান
+--ro in-octets # ইনকামিং ট্র্যাফিক
+--ro out-octets # আউটগোয়িং ট্র্যাফিক
এই ডকুমেন্টেশন থেকে আমরা জানতে পারি:
- ট্রি স্ট্রাকচার:
- পারমিশন স্তর:
- ডাটা টাইপ: এই ডকুমেন্টেশন ব্যবহার করে আমরা কোড লিখতে পারি:
# ইন্টারফেস কনফিগার করা
config = {
"interfaces": {
"interface": {
"name": "eth0",
"config": {
"enabled": True,
"mtu": 1500,
"speed": "1G",
"description": "আপলিংক পোর্ট"
}
}
}
}
# স্ট্যাটাস চেক করা
status = get_interface_status("eth0")
print(f"ইন অক্টেট: {status.state.counters.in_octets}")
নতুন ফিচার যোগ করা¶
ইয়াং মডেলে নতুন ফিচার যোগ করাও সহজ। ধরুন, আপনি ইন্টারফেসে পাওয়ার সেভিং মোড যোগ করতে চান:
module: openconfig-interfaces
+--rw interfaces
+--rw interface* [name]
+--rw config
| +--rw power-save-mode? boolean # নতুন ফিচার
| +--rw power-save-schedule? string # সময়সূচী
এভাবে ডকুমেন্টেশন সব সময় আপ-টু-ডেট থাকে এবং নতুন ডেভেলপাররা সহজে বুঝতে পারে সিস্টেমটা কীভাবে কাজ করে।
ভবিষ্যতের দিকে¶
নেটওয়ার্ক অটোমেশনের জগতে ইয়াং মডেল এখন অপরিহার্য। বড় বড় কোম্পানি যেমন গুগল, আমাজন, নেটফ্লিক্স, ফেসবুক - সবাই এখন ইয়াং মডেল ব্যবহার করে তাদের বিশাল নেটওয়ার্ক ম্যানেজ করছে।
তবে মনে রাখবেন:
- CLI এখনো দরকারি - বিশেষ করে ট্রাবলশুটিংয়ের সময়
- শুরুতে RESTCONF দিয়ে শুরু করুন - এটা সহজ
- ধীরে ধীরে NETCONF-এর দিকে যান - এর শক্তিশালী ফিচার দরকার হবে
ইয়াং মডেল শিখতে সময় লাগবে, কিন্তু এটা শিখে ফেললে আপনি:
- দ্রুত কাজ করতে পারবেন
- কম ভুল করবেন
- আধুনিক নেটওয়ার্ক ম্যানেজমেন্টের জন্য প্রস্তুত থাকবেন