Unix socket เทียบกับโฮสต์ TCP / IP: พอร์ต


42

มีคนช่วยอธิบายข้อดีข้อเสียของการใช้ไฟล์ซ็อกเก็ต Unix ให้กับฉันได้อย่างไร tcp / ip localhost: พอร์ตเมื่อตั้งค่าบริการบนเซิร์ฟเวอร์ (Ubuntu, FWIW)

ในกรณีพิเศษนี้ใช้สำหรับเซิร์ฟเวอร์ Python WSGI (uWSGI) แต่ฉันสนใจโดยทั่วไป (เช่นฉันรู้ว่าคุณสามารถตั้งค่า MySQL ได้ทั้งสองวิธี)

ฉันรู้ว่าการใช้ tcp / ip หมายความว่าบริการสามารถสัมผัสกับเครื่องอื่น ๆ ได้ แต่ฉันแค่สนใจว่ามีการแลกเปลี่ยนประสิทธิภาพหรือไม่เมื่อเข้าถึงบริการในพื้นที่

ไชโย


1
ทั้งคำตอบที่ยอดเยี่ยมและมีประโยชน์จริงๆ - ขอบคุณ! :)
ลูโด

คำตอบ:


40

ซ็อกเก็ตยูนิกซ์จะเร็วขึ้นเล็กน้อยเนื่องจากคุณไม่มี tcp-overhead หากคุณตระหนักถึงการสูญเสียประสิทธิภาพนี้เป็นคำถามของการโหลดเซิร์ฟเวอร์ หากคุณไม่มีโหลดเซิร์ฟเวอร์ที่สูงมากคุณจะไม่รู้จัก

หากคุณใช้ Jails (FreeBSD) หรือเทคโนโลยีเวอร์ชวลไลเซชันอื่น ๆ เพื่อแยก MySQL-Server ออกจากเว็บเซิร์ฟเวอร์คุณมักจะใช้การตั้งค่า tcp / ip แทนซ็อกเก็ต กฎไฟร์วอลล์จำเป็นต้อง จำกัด การเข้าถึง

คุณจำเป็นต้องตรวจสอบว่าระบบของคุณมีภาระงานหนักหรือไม่เพื่อให้ซ็อกเก็ตเป็นสิ่งที่จำเป็นหรือคุณสามารถมุ่งเน้นไปที่การออกแบบระบบที่ดี

ดังนั้นให้ตอบสั้น ๆ สั้น ๆ :

ใช่มีประสิทธิภาพที่แตกต่างซ็อกเก็ตเร็วขึ้น หากคุณไม่ประสบปัญหาโหลดเซิร์ฟเวอร์สูงเพียงเลือกสิ่งที่เหมาะกับการออกแบบระบบของคุณมากขึ้น


3
Re: ซ็อกเก็ตเร็วกว่า ... ทั้งสองซ็อกเก็ตไม่ใช่เหรอ?
Bart Silverstrim

4
@Bart Silverstrim: ไม่มีซ็อกเก็ตเป็นซ็อกเก็ต; TCP มี API คล้ายซ็อกเก็ต
Javier

7
ฉันเชื่อว่าพวกเขาเรียกว่า "Unix sockets" และ "Internet sockets" ( socket(AF_INET, SOCK_STREAM, ...))
grawity

1
ฉันเพิ่งทดสอบคำสั่ง mysql กับ php-mysql (unix vs tcp-socket, localhost ทั้งสอง) ตัวอย่างเช่น "select SQL_NO_CACHE 1" เพื่อกำจัดปัจจัยที่ไม่ใช่การขนส่ง ไม่มีความแตกต่างที่วัดได้ BOTH มีค่าเฉลี่ย 0.25 มิลลิวินาทีเวลาที่ดีที่สุดสำหรับ BOTH คือ 0.19 มิลลิวินาที
jens

11

โดยทั่วไปแล้วเป็นการแลกเปลี่ยนระหว่างประสิทธิภาพและความยืดหยุ่น ซ็อกเก็ตโดเมน Unix จะให้ประสิทธิภาพที่ดีขึ้นเล็กน้อยในขณะที่ซ็อกเก็ตที่เชื่อมต่อกับ localhost ให้คุณพกพาได้ดีขึ้นเล็กน้อย คุณสามารถย้ายแอปเซิร์ฟเวอร์ไปยังระบบปฏิบัติการอื่นได้อย่างง่ายดายเพียงแค่เปลี่ยนที่อยู่ IP จาก localhost ไปเป็นชื่อโฮสต์อื่น

ซ็อกเก็ตโดเมน Unix ใช้ระบบไฟล์โลคัลเพื่อสร้างกลไก IPC ระหว่างกระบวนการเซิร์ฟเวอร์และไคลเอนต์ คุณจะเห็นไฟล์ใน / var บางแห่งเมื่อเชื่อมต่อซ็อกเก็ตโดเมน Unix

หากคุณกำลังมองหาโซลูชั่นที่มีประสิทธิภาพสูงสุดอย่างแท้จริงคุณอาจต้องการสำรวจหน่วยความจำที่แชร์ IPC แต่มันซับซ้อนกว่าเล็กน้อย


3

ข้อดีของซ็อกเก็ตโดเมน Unix

  1. การเข้าถึงสามารถจัดการผ่านระบบการอนุญาตผู้ใช้ Unix โดยการตั้งค่าการอนุญาตบนซ็อกเก็ตเองหรือโดยเซิร์ฟเวอร์ที่อ่านชื่อผู้ใช้ของไคลเอนต์ที่เชื่อมต่อ
  2. โอกาสน้อยที่จะเปิดเผยซ็อกเก็ตไปยังโลกภายนอกโดยไม่ตั้งใจ ตัวอย่างเช่นหากเซิร์ฟเวอร์ยังใช้เว็บพรอกซีจากนั้นอาจทำให้การเชื่อมต่อซ็อกเก็ตบน localhost โดยไม่ได้ตั้งใจ

ข้อเสียของซ็อกเก็ตโดเมน Unix

  1. ไม่ใช่แบบพกพาไปยังระบบที่ไม่ใช่ยูนิกซ์
  2. สามารถอึดอัดกับ chroots, คุกหรือคล้ายกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.