Skip to content

ইয়াং ডাটা মডেলিং ল্যাঙ্গুয়েজ

ইয়াং মডেল: নেটওয়ার্কের ভবিষ্যৎ

নেটওয়ার্ক ইঞ্জিনিয়ারিং এর জগতে ইয়াং মডেল - [ইয়েট অ্যানাদার নেক্সট জেনারেশন (YANG) ডাটা মডেলিং ল্যাংগুয়েজ (RFC 6020)] একটা বিপ্লব এনেছে। এটা এমন একটা স্ট্যান্ডার্ড ভাষা যা সব ধরনের নেটওয়ার্ক ডিভাইস বোঝে। ঠিক যেমন ইংরেজি ভাষা সারা দুনিয়ার মানুষকে একসূত্রে বেঁধেছে, তেমনি ইয়াং মডেল সব ধরনের নেটওয়ার্ক ডিভাইসকে একটা প্ল্যাটফর্মে নিয়ে এসেছে।

পুরনো দিনের সমস্যা

আগের দিনের কথা চিন্তা করুন। আপনার ডাটা সেন্টারে আছে:

  • সিসকোর রাউটার
  • জুনিপারের সুইচ
  • মাইক্রোটিকের ফায়ারওয়াল
  • এরিস্টার সুইচ

প্রত্যেকটা ডিভাইসের কমান্ড আলাদা। উদাহরণ দেখি:

# সিসকোতে
show ip interface brief

# জুনিপারে
show interfaces terse

# মাইক্রোটিকে
interface print

একজন ইঞ্জিনিয়ারের পক্ষে এত কমান্ড মনে রাখা কঠিন। আর অটোমেশন? প্রায় অসম্ভব!

ইয়াং মডেলের সমাধান

ইয়াং মডেল এই সমস্যার একটা চমৎকার সমাধান দিয়েছে। এটা একটা স্ট্যান্ডার্ড ডাটা মডেল যা সব ডিভাইস বোঝে। উদাহরণ দেখি:

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

এই একটা ফরম্যাট দিয়ে আপনি যে কোন ডিভাইসের সাথে কথা বলতে পারেন। ডিভাইস নিজেই এটাকে তার নিজস্ব কমান্ডে রূপান্তর করে নেবে।

দুটি প্রধান প্রোটোকল

ইয়াং মডেল দুটি প্রধান প্রোটোকল ব্যবহার করে:

  1. 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"
                }
            }
        }
    )
    

  2. NETCONF (পুরনো কিন্তু শক্তিশালী):

    <rpc message-id="101">
      <get>
        <filter>
          <interfaces xmlns="http://openconfig.net/yang/interfaces">
            <interface>
              <name>eth0</name>
            </interface>
          </interfaces>
        </filter>
      </get>
    </rpc>
    

ইয়াং মডেলের সুবিধা

  1. একীভূত ম্যানেজমেন্ট:
      - একই কোড দিয়ে সব ডিভাইস কন্ট্রোল করা যায়
      - নতুন ডিভাইস যোগ করা সহজ
      - কোড পুনরায় ব্যবহার করা যায়
    
  2. অটোমেশন সহজ:

    # একসাথে ১০০টা রাউটারে কনফিগারেশন
    routers = ["router1", "router2", ..., "router100"]
    
    for router in routers:
        configure_interface(
            router,
            interface="eth0",
            ip="192.168.1.1",
            speed="1G"
        )
    

  3. ভুল কমে:

    • স্ট্যান্ডার্ড ফরম্যাট
    • ভ্যালিডেশন আছে
    • অটোমেটিক এরর চেকিং

ডকুমেন্টেশন: নেটওয়ার্কের নকশা

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

চলুন একটা উদাহরণ দিয়ে বুঝি। ধরুন আপনি একটা ইন্টারফেসের ডকুমেন্টেশন দেখতে চান:

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        # আউটগোয়িং ট্র্যাফিক

এই ডকুমেন্টেশন থেকে আমরা জানতে পারি:

  1. ট্রি স্ট্রাকচার:
      - interfaces হল মূল ফোল্ডার
      - তার নিচে interface নামের এন্ট্রি
      - প্রতিটা interface-এর নিচে config এবং state
    
  2. পারমিশন স্তর:
      - `rw` মানে read-write (পড়া এবং লেখা যাবে)
      - `ro` মানে read-only (শুধু পড়া যাবে)
      - `?` মানে অপশনাল ফিল্ড
    
  3. ডাটা টাইপ:
      - string: টেক্সট
      - boolean: true/false
      - uint16: ১৬-বিট পজিটিভ নাম্বার
    
    এই ডকুমেন্টেশন ব্যবহার করে আমরা কোড লিখতে পারি:
# ইন্টারফেস কনফিগার করা
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 # সময়সূচী

এভাবে ডকুমেন্টেশন সব সময় আপ-টু-ডেট থাকে এবং নতুন ডেভেলপাররা সহজে বুঝতে পারে সিস্টেমটা কীভাবে কাজ করে।

ভবিষ্যতের দিকে

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

তবে মনে রাখবেন:

  1. CLI এখনো দরকারি - বিশেষ করে ট্রাবলশুটিংয়ের সময়
  2. শুরুতে RESTCONF দিয়ে শুরু করুন - এটা সহজ
  3. ধীরে ধীরে NETCONF-এর দিকে যান - এর শক্তিশালী ফিচার দরকার হবে

ইয়াং মডেল শিখতে সময় লাগবে, কিন্তু এটা শিখে ফেললে আপনি:

  • দ্রুত কাজ করতে পারবেন
  • কম ভুল করবেন
  • আধুনিক নেটওয়ার্ক ম্যানেজমেন্টের জন্য প্রস্তুত থাকবেন