ইউনিক্স সকেট কি এবং তারা কিভাবে কাজ করে?

  • প্রধান
  • খবর
  • ইউনিক্স সকেট কি এবং তারা কিভাবে কাজ করে?

শাটারস্টক/আশারক্যু

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

প্লাগ কি?

সকেট দুটি প্রক্রিয়ার মধ্যে একটি সরাসরি সংযোগ। ভাবুন আপনি যদি আপনার বন্ধুকে রাস্তা থেকে ডাকতে চান; আপনি একটি কল করতে পারেন এবং এটি আপনার ফোন কোম্পানির মাধ্যমে পাঠাতে পারেন এবং আপনার বাড়িতে ফিরে আসতে পারেন, অথবা আপনি সরাসরি আপনার বাড়িতে একটি তার চালাতে পারেন এবং মধ্যস্থতাকারীকে কেটে দিতে পারেন৷ পরেরটি বাস্তব জীবনে স্পষ্টতই অবাস্তব, কিন্তু ইউনিক্স বিশ্বে প্রোগ্রামগুলির মধ্যে এই সরাসরি সংযোগ স্থাপন করা খুবই সাধারণ।

ইউনিক্স সকেটের সঠিক নাম ইউনিক্স ডোমেইন সকেট , কারণ তারা সবাই একটি কম্পিউটারের ভিতরে থাকে। এক অর্থে, সকেট হল একটি নেটওয়ার্ক যা সম্পূর্ণরূপে কার্নেলের মধ্যে থাকে; ডেটা পাঠানোর জন্য নেটওয়ার্ক ইন্টারফেস ব্যবহার করার পরিবর্তে, একই ডেটা সরাসরি প্রোগ্রামগুলির মধ্যে পাঠানো যেতে পারে।

ডিস্কে ফাইল তৈরি করা সত্ত্বেও, ইউনিক্স সকেটগুলি আসলে ডিস্কে পাঠানো ডেটা লেখে না, কারণ এটি খুব ধীর হবে। পরিবর্তে, সমস্ত ডেটা কার্নেল মেমরিতে সংরক্ষণ করা হয়; সকেট ফাইলের একমাত্র পয়েন্ট হল সকেটের একটি রেফারেন্স রাখা এবং অ্যাক্সেস নিয়ন্ত্রণ করার জন্য ফাইল সিস্টেমের অনুমতি দেওয়া। উদাহরণস্বরূপ, MySQL সকেট সাধারণত এখানে থাকে:

|_+_|

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

প্লাগ কিভাবে কাজ করে?

সকেটগুলি কেবল ডেটা সরানোর জন্য প্রকৃত হার্ডওয়্যার সরবরাহ করে। TCP ভিত্তিক সকেটগুলিকে স্ট্রিমিং সকেট বলা হয়, যেখানে সমস্ত ডেটা ক্রমানুসারে পৌঁছাবে। UDP-ভিত্তিক সকেট হল ডেটাগ্রাম সকেট, যেখানে অর্ডার দেওয়া (বা এমনকি ডেলিভারি) নিশ্চিত করা হয় না। এছাড়াও কাঁচা সকেট রয়েছে, যেগুলি সীমাবদ্ধ নয় এবং বিভিন্ন প্রোটোকল এবং ইউটিলিটিগুলি প্রয়োগ করতে ব্যবহৃত হয় যা নিম্ন-স্তরের নেটওয়ার্ক ট্র্যাফিক পরিদর্শন করতে হয়, যেমন ওয়্যারশার্ক।

সকেটগুলি সাধারণত এখনও TCP বা UDP ব্যবহার করে কারণ সেগুলি কার্নেলের ভিতরে একটি অভিনব পাইপ ছাড়া বিশেষ কিছু নয়। TCP এবং UDP হল ট্রান্সপোর্ট প্রোটোকল যা সংজ্ঞায়িত করে যে কীভাবে ডেটা এক জায়গা থেকে অন্য জায়গায় যায়, কিন্তু তারা আসলে ডেটা কী তা বিবেচনা করে না। TCP এবং UDP বেশিরভাগ অন্যান্য প্রোটোকলের জন্য প্ল্যাটফর্ম প্রদান করে, যেমন FTP, SMTP, এবং RDP, যা উচ্চ স্তরে কাজ করে।

একটি অ্যাপ্লিকেশন একটি সামান্য ভিন্ন TCP বাস্তবায়ন ব্যবহার করতে পারে; ট্রান্সমিট জ্যাকগুলি |_+_| ব্যবহার করে প্রোটোকল, যা টিসিপি প্রায় সবসময় পরিবহনের জন্য ব্যবহার করে, এবং যদিও তারা মূলত বিনিময়যোগ্য, প্রযুক্তিগতভাবে তারা কিছুটা আলাদা। যদিও এটি একটি নিম্ন-স্তরের জিনিস এবং সত্যিই এমন কিছু নয় যা সম্পর্কে আপনার উদ্বিগ্ন হওয়ার দরকার আছে, শুধু এটি জানুন প্লাস UNIX ডোমেইন সকেটের মাধ্যমে প্রেরিত ট্র্যাফিক TCP বা UDP-এর উপর ভিত্তি করে বা অন্তত মোটামুটি একই রকম, এবং UNIX ডোমেন সকেটে পাঠানো TCP পোর্টের মতো নেটওয়ার্ক ইন্টারফেসে TCP থেকে দ্রুততর।

অনুশীলনে প্লাগ ব্যবহার করে

ইউনিক্স সকেটগুলি সাধারণত নেটওয়ার্ক-ভিত্তিক TCP সংযোগের বিকল্প হিসাবে ব্যবহৃত হয় যখন প্রক্রিয়াগুলি একই মেশিনে চলে। ডেটা এখনও একই প্রোটোকলের মাধ্যমে সাধারণত পাঠানো হয়; এটি কেবল একই মেশিনের ভিতরে থাকে এবং জানে যে এটি একই ডোমেনে চলছে (তাই ইউনিক্স ডোমেন সকেট নাম), তাই এটিকে কখনই নিজের সাথে সংযোগ করার জন্য লুপব্যাক নেটওয়ার্ক ইন্টারফেসকে বিরক্ত করতে হবে না।

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

আপনি যদি একটি MySQL ডাটাবেসের সাথে সংযুক্ত হন তবে আপনি একটি সকেটও ব্যবহার করতে পারেন৷ সাধারণত আপনি |_+_| এর সাথে সংযুক্ত হবেন একটি দূরবর্তী সিস্টেম থেকে, কিন্তু আপনি যদি একই সার্ভারে একটি ডাটাবেসের সাথে সংযুক্ত হন (উদাহরণস্বরূপ, একটি REST API একটি ডাটাবেস অ্যাক্সেস করে), আপনি এটির গতি বাড়াতে সকেট ব্যবহার করতে পারেন। এটি স্বাভাবিক ব্যবহারকে প্রভাবিত করবে না, কিন্তু লোডের অধীনে থাকা অবস্থায় এটি খুব লক্ষণীয়, উচ্চ-সম্পদ 24-কোর কোরে 20% এর বেশি যার 128 সমবর্তী ব্যবহারকারী এবং প্রতি সেকেন্ডে এক মিলিয়ন প্রশ্ন রয়েছে। আপনি সকেটগুলির একটি সুবিধা দেখতে পাবেন কিনা তা একটি ভিন্ন গল্প, কিন্তু সেই সময়ে আপনি সম্ভবত প্রতিলিপি এবং লোড ভারসাম্য বিবেচনা করতে চাইবেন যেভাবেই হোক।

আপনি যদি সকেটের সাথে ম্যানুয়ালি কাজ করতে চান তবে আপনি |_+_| ব্যবহার করতে পারেন নেটওয়ার্ক পোর্টে তাদের প্রকাশ করার ইউটিলিটি:

|_+_|

এটি প্রযুক্তিগতভাবে ইউনিক্স ডোমেইন সকেটের উদ্দেশ্যকে হারায়, কিন্তু পরিবহন-স্তরের ডিবাগিংয়ের জন্য ব্যবহার করা যেতে পারে।

আপনি কি মনে করেন?