यूनिक्स सॉकेट बनाम टीसीपी / आईपी होस्ट: पोर्ट


42

क्या कोई कृपया मेरे द्वारा यूनिक्स सॉकेट फ़ाइल बनाम एक tcp / ip लोकलहोस्ट: पोर्ट का उपयोग करने के पेशेवरों और विपक्षों का वर्णन कर सकता है: सर्वर (उबंटू, एफडब्ल्यूआईडब्ल्यू) पर सेवाएं स्थापित करते समय?

इस विशेष उदाहरण में यह Python WSGI सर्वर (uWSGI) के लिए है, लेकिन मुझे बस सामान्य रूप से दिलचस्पी है (उदाहरण के लिए, मुझे पता है कि आप दोनों तरीकों से MySQL सेट कर सकते हैं)।

मुझे एहसास है कि tcp / ip का उपयोग करने का अर्थ है कि सेवाओं को अन्य मशीनों के संपर्क में लाया जा सकता है, लेकिन मैं बस इस बात में दिलचस्पी रखता हूं कि स्थानीय स्तर पर सेवाओं का उपयोग करते समय कोई प्रदर्शन ट्रेडऑफ़ हैं या नहीं।

चीयर्स।


1
दोनों शानदार जवाब और वास्तव में उपयोगी - धन्यवाद! :)
लूडो

जवाबों:


40

यूनिक्स सॉकेट थोड़ा तेज़ होते हैं क्योंकि आपके पास टीसीपी-ओवरहेड नहीं होता है। यदि आपको यह पता चलता है कि प्रदर्शन में कमी सर्वर लोड का सवाल है। यदि आपके पास बहुत अधिक सर्वर लोड नहीं है तो आप इसे पहचान नहीं पाएंगे।

यदि आप वेबसर्वर से उदाहरण के लिए MySQL-Server को अलग करने के लिए जेल (FreeBSD) या कुछ अन्य वर्चुअलाइजेशन तकनीक का उपयोग करते हैं, तो आप अक्सर सॉकेट के बजाय tcp / ip सेटअप का उपयोग करते हैं। फ़ायरवॉल नियमों को हालांकि पहुँच को प्रतिबंधित करने की आवश्यकता है।

आपको यह पता लगाने की आवश्यकता है कि क्या आपका सिस्टम भारी भार के अधीन है ताकि सॉकेट जरूरी हो या आप एक अच्छी प्रणाली डिजाइन (सेवाओं को अलग करने) पर ध्यान केंद्रित कर सकें, तो एक tcp / ip समाधान बेहतर होगा।

इसलिए एक लंबा उत्तर दें:

हां, प्रदर्शन में अंतर है, सॉकेट्स तेज हैं। यदि आप उच्च सर्वर लोड नहीं झेल रहे हैं, तो बस चुनें कि आपके सिस्टम के डिज़ाइन में बेहतर क्या फिट बैठता है।


3
पुन: सॉकेट्स तेज़ हैं ... क्या वे दोनों सॉकेट नहीं हैं?
बार्ट सिल्वरस्ट्रिम

4
@ बर्ट सिल्वरस्ट्रिम: नहीं, सॉकेट्स सॉकेट हैं; टीसीपी
जेवियर

7
मेरा मानना ​​है कि उन्हें "यूनिक्स सॉकेट्स" और "इंटरनेट सॉकेट्स" कहा जाता है। ( socket(AF_INET, SOCK_STREAM, ...))
ग्रेविटी

1
मैं बस php-mysql (यूनिक्स बनाम टीसीपी-सॉकेट, दोनों लोकलहोस्ट) के साथ कुछ mysql- प्रश्नों का परीक्षण किया। गैर-परिवहन कारकों को खत्म करने के लिए उदाहरण के लिए "SQL_NO_CACHE 1 का चयन करें"। औसत दर्जे का कोई अंतर नहीं था। बीओटीएच में औसतन 0.25 एमएस था, बीओटीएच के लिए सबसे अच्छा समय 0.19 एमएस था।
जेन्स

11

यह मूल रूप से प्रदर्शन और लचीलेपन के बीच एक व्यापार है। यूनिक्स डोमेन सॉकेट्स आपको थोड़ा बेहतर प्रदर्शन देंगे, जबकि लोकलहोस्ट से जुड़ा एक सॉकेट आपको थोड़ा बेहतर पोर्टेबिलिटी देता है। आप लोकलहोस्ट से आईपी एड्रेस को अलग होस्टनाम में बदलकर आसानी से सर्वर ऐप को दूसरे ओएस पर ले जा सकते हैं।

एक यूनिक्स डोमेन सॉकेट सर्वर और क्लाइंट प्रक्रियाओं के बीच एक आईपीसी तंत्र बनाने के लिए स्थानीय फ़ाइल सिस्टम का उपयोग करता है। Unix डोमेन सॉकेट से कनेक्ट होने पर आपको कहीं न कहीं एक फ़ाइल दिखाई देगी।

यदि आप शुद्ध रूप से अंतिम प्रदर्शन समाधान की तलाश कर रहे हैं तो आप एक साझा मेमोरी आईपीसी का पता लगाना चाहते हैं। लेकिन, यह थोड़ा अधिक जटिल है।


3

यूनिक्स डोमेन सॉकेट के पेशेवरों।

  1. एक्सेस को यूनिक्स उपयोगकर्ता अनुमति प्रणाली के माध्यम से प्रबंधित किया जा सकता है या तो सॉकेट पर अनुमतियाँ सेट करके या कनेक्टिंग क्लाइंट के यूनेम को पढ़ने वाले सर्वर द्वारा।
  2. अनजाने में सॉकेट को बाहरी दुनिया में उजागर करने की कम संभावना। उदाहरण के लिए यदि सर्वर एक वेब प्रॉक्सी भी चलाता है, तो वह अनजाने में लोकलहोस्ट पर कनेक्शन को अनुमति दे सकता है।

यूनिक्स डोमेन सॉकेट्स से मिलकर

  1. गैर-यूनिक्स प्रणालियों के लिए पोर्टेबल नहीं।
  2. चेरोट, जेल या समान के साथ अजीब हो सकता है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.