ขั้นแรกให้พื้นหลังบาง: เรามีห้องปฏิบัติการที่มีเซิร์ฟเวอร์ลินุกซ์โดยเฉพาะที่ทำงานบน LAN แยกต่างหาก เซิร์ฟเวอร์ทั้งหมดใช้ระบบปฏิบัติการเดียวกัน (Debian Linux) และซอฟต์แวร์เซิร์ฟเวอร์ที่เป็นกรรมสิทธิ์เดียวกันและกระบวนการของเซิร์ฟเวอร์สื่อสารกันเพื่อให้ข้อมูลตรงกัน นั่นหมายความว่าเท่าที่ลูกค้ามีความกังวลใด ๆ มันไม่สำคัญว่าเซิร์ฟเวอร์ที่ลูกค้าเชื่อมต่อกับ - เซิร์ฟเวอร์ใด ๆ จะส่งคืนข้อมูลเดียวกันกับที่อื่น ๆ
เซิร์ฟเวอร์ Linux เหล่านี้ทั้งหมดเรียกใช้ avahi-daemon เพื่อเผยแพร่ชื่อโฮสต์ mDNS ด้วยตนเองซึ่งหมายความว่าลูกค้าสามารถป้อนเช่น " http: //linux-server-1.local " ลงในเว็บเบราว์เซอร์ของเขาและเชื่อมต่อกับเซิร์ฟเวอร์ Linux # 1 และอื่น ๆ
ทั้งหมดนี้เป็นสิ่งที่ดีและดียกเว้นว่าหมายความว่าผู้ใช้ที่นั่งอยู่ที่เครื่องไคลเอนต์ (โดยทั่วไปคือแล็ปท็อป Mac หรือ Windows ที่ติดตั้ง Bonjour) ต้องรู้ (หรือเข้าใจ) เซิร์ฟเวอร์ Linux ที่ออนไลน์อยู่และเขาต้อง ตรวจสอบให้แน่ใจว่าเขาเชื่อมต่อกับหนึ่งในนั้น ตัวอย่างเช่นหากเซิร์ฟเวอร์ # 2 ออฟไลน์วันนี้และลูกค้าเข้าสู่ " http: //linux-server-2.local " ในแถบ URL ของเขาเขาจะไม่ได้รับคำตอบ แน่นอนว่าไม่ใช่จุดจบของโลก แต่เป็นเรื่องน่ารำคาญสำหรับผู้ใช้มือใหม่ที่คาดหวังว่าทุกอย่างจะ "แค่ทำงาน" และยังทำให้การพัฒนาสคริปต์ฝั่งไคลเอ็นต์มีความซับซ้อนมากขึ้น (เนื่องจากสคริปต์ฝั่งไคลเอ็นต์ จะต้องรู้วิธีจัดการกับเซิร์ฟเวอร์ออฟไลน์อย่างชัดเจน)
โดยที่ในใจคำถามของฉันคือ: มันเป็นไปได้หรือไม่ที่จะกำหนดค่า Avahi เพื่อเผยแพร่นามแฝงชื่อโฮสต์ mDNS สไตล์ anycast ด้วยเช่นกัน? เป้าหมายคือทุกคนสามารถนั่งลงกับแล็ปท็อปของเขาให้ป้อน " http: //any-linux-server.local " (หรือคล้ายกัน) และเชื่อมต่อกับหนึ่งในเซิร์ฟเวอร์ที่ออนไลน์อยู่ (อีกครั้งมันไม่สำคัญว่าจะใช้เซิร์ฟเวอร์ใด)
โปรดทราบว่าสิ่งนี้จำเป็นต้องทำงานโดยไม่ต้องมีการกำหนดค่าพิเศษของแลปท็อปไคลเอ็นต์เนื่องจากเราไม่สามารถควบคุมได้ (นอกเหนือจากข้อกำหนดที่ติดตั้ง Bonjour)
นอกจากนี้โปรดทราบว่าเราไม่สามารถพึ่งพาการมีเซิร์ฟเวอร์ชื่อหรือพร็อกซีแยกต่างหากหรือต่อหน้าเซิร์ฟเวอร์ Linux ใด ๆ เนื่องจากจะทำให้เกิดข้อผิดพลาดเพียงจุดเดียวซึ่งเราพยายามหลีกเลี่ยง