DNS และวิธีการทำงานอาจมาพร้อมกับความเข้าใจผิดตำนานความเชื่อโชคลางและเทพนิยายมากขึ้นในแง่มุมต่าง ๆ ของไอที
แม้แต่พวกเราที่รู้ว่าเรากำลังโกหก (หรืออย่างน้อยก็เกินความจริง) เมื่อเราพูดถึง "การเผยแผ่" การเปลี่ยนแปลงยังคงมีแนวโน้มที่จะใช้คำเพื่ออธิบายสิ่งที่ - พร้อมกัน - เรียบง่ายและตรงไปตรงมาก ... แต่ยากที่จะอธิบาย ... และไม่มีส่วนเกี่ยวข้องกับการเผยแผ่ต่อสิ่งต่าง ๆ แต่ทุกอย่างเกี่ยวกับการแคชและการลบในเชิงลบซึ่งทั้งสองอย่างนี้เป็นองค์ประกอบที่สำคัญของการทำงานของระบบ น้ำหนักของมันเอง) โดยพื้นฐานแล้วคือด้านใน - ด้านนอกตรงกันข้ามกับ "การเผยแผ่" ดึง - ไม่ผลัก
สำหรับความกังวลและการเขียนด้วยมือเกี่ยวกับ TTL สั้น ๆ พวกเขามักจะทำงานบ่อยกว่าไม่ถึงจุดที่คุณอาจสนใจลองง่ายๆ ที่ $ {day_job} เมื่อเว็บไซต์ของเราย้ายจากแพลตฟอร์ม "เก่า" ไปยังแพลตฟอร์ม "ใหม่" มักจะหมายถึงพวกเขากำลังโยกย้ายในลักษณะที่ไม่มีการแบ่งปันโครงสร้างพื้นฐานใด ๆ ขั้นตอนแรกของฉันในการย้ายข้อมูลคือการตัด TTL ไปที่ 60s ล่วงหน้าก่อนที่จะตัดเพื่อให้ TTL เก่ามีทวีคูณหลายตัวให้หมดทำให้ฉันมั่นใจอย่างสมเหตุสมผลว่า RR ในระยะเปลี่ยนผ่านที่มี TTL สั้นจะ "แพร่กระจายออกไป ." เมื่อฉันพร้อมสำหรับการตัดฉันกำหนดค่าตัว balancer เก่าอีกครั้งเพื่อเปลี่ยนการรับส่งข้อมูลไปยังระบบใหม่ - ผ่านอินเทอร์เน็ต - เพื่อให้ตัว balancer นั้นไม่สมดุลอีกต่อไป แต่เป็น "
จากนั้นฉันก็ตัด DNS และดูบาลานเซอร์ใหม่และเก่า
ฉันประหลาดใจเสมอที่การเปลี่ยนแปลงเกิดขึ้นอย่างรวดเร็ว ดูเหมือนว่าจะเป็นสไปเดอร์การค้นหาและไซต์ "ตรวจสอบสุขภาพ" ของบุคคลที่สามซึ่งมักจะอธิบายไปในระเบียนเก่าอย่างลึกลับ
แต่มีสถานการณ์หนึ่งที่ทำให้เกิดการคาดเดาไม่ได้: เมื่อหน้าต่างเบราว์เซอร์ของผู้ใช้ยังคงเปิดอยู่พวกเขามักจะสลักไปยังที่อยู่ที่ค้นพบแล้วและมักจะยังคงอยู่จนกว่าหน้าต่างเบราว์เซอร์ทั้งหมดจะปิด
แต่ในการบรรยายข้างต้นคุณจะพบวิธีแก้ปัญหา: "load balancer" - โดยเฉพาะและแม่นยำมากขึ้น reverse proxy - สามารถเป็นระบบที่ DNS ของคุณชี้ไป
reverse proxy ส่งต่อการร้องขอไปยังที่อยู่ IP เป้าหมายที่ถูกต้องซึ่งแก้ไขโดยใช้ชื่อโฮสต์ "dummy" ตัวที่สองด้วย TTL สั้น ๆ ซึ่งชี้ไปที่เซิร์ฟเวอร์ back-end ที่แท้จริง รายการ DNS จำลองคุณจะมั่นใจได้ถึงการเปลี่ยนแปลงอย่างรวดเร็วและสมบูรณ์แบบ
ข้อเสียคือคุณอาจกำหนดเส้นทางการรับส่งข้อมูลผ่านโครงสร้างพื้นฐานพิเศษที่ไม่จำเป็นหรือจ่ายเงินมากขึ้นสำหรับการขนส่งข้ามขอบเขตเครือข่ายที่หลากหลายซ้ำซ้อน
มีบริการที่ให้ความสามารถแบบนี้ในระดับโลกและสิ่งที่ฉันคุ้นเคยมากที่สุดคือ CloudFront (ส่วนใหญ่แล้ว Cloudflare จะตอบสนองวัตถุประสงค์เดียวกันอย่างแน่นอนเนื่องจากข้อสงสัยเล็ก ๆ น้อย ๆ ของการทดสอบที่ฉันทำบ่งชี้ว่ามันทำงานได้อย่างถูกต้องและฉันแน่ใจว่ามีคนอื่น)
แม้ว่าตลาดหลักเป็น CDN, CloudFront เป็นที่หลักของเครือข่ายทั่วโลกของผู้รับมอบฉันทะแบบย้อนกลับที่มีความสามารถของการเลือกแคชตอบ หากwww.example.com
ชี้ไปที่ CloudFront และ CloudFront ได้รับการกำหนดค่าให้ส่งต่อคำขอเหล่านี้ไปยังbackend.example.com
และระเบียน DNS สำหรับbackend.example.com
ใช้ TTL สั้น ๆ CloudFront จะทำสิ่งที่ถูกต้องเพราะให้เกียรติ TTL สั้นนั้น เมื่อเร็กคอร์ดส่วนหลังเปลี่ยนแปลงการรับส่งข้อมูลทั้งหมดจะถูกโอนย้ายตามเวลาที่ TTL ทำงาน
TTL บนระเบียนด้านหน้าชี้ไปที่ CloudFront และเบราว์เซอร์และตัวแก้ไขแคชกำลังให้ความเคารพหรือไม่เพราะการเปลี่ยนแปลงปลายทางปลายทางไม่ต้องการการเปลี่ยนแปลงในwww.example.com
ระเบียน ... ดังนั้นแนวคิดที่ว่า "อินเทอร์เน็ต" มีโดยคำนึงถึงเป้าหมายที่ถูกต้องสำหรับความwww.example.com
สอดคล้องไม่ว่าระบบแบ็คเอนด์จะเกิดขึ้นที่ไหน
สำหรับฉันแล้วการแก้ปัญหาอย่างสมบูรณ์โดยการลดเบราว์เซอร์ที่จำเป็นต้อง "ติดตาม" การเปลี่ยนแปลง IP ของเซิร์ฟเวอร์ต้นทาง
TL; dr: จัดเส้นทางการร้องขอไปยังระบบที่ทำหน้าที่เป็นพร็อกซีสำหรับเว็บเซิร์ฟเวอร์จริงดังนั้นเฉพาะการกำหนดค่าพร็อกซีเท่านั้นที่จะต้องรองรับการเปลี่ยนแปลงใน IP เซิร์ฟเวอร์ต้นทาง - ไม่ใช่ DNS ที่หันเข้าหาเบราว์เซอร์
โปรดทราบว่า CloudFront ยังลดเวลาแฝงลงด้วยเวทมนต์ DNS บางอย่างที่อยู่ด้านหน้าซึ่งส่งผลwww.example.com
ให้การแก้ไขตำแหน่งขอบ CloudFront ที่เหมาะสมที่สุดโดยอิงตามตำแหน่งของเบราว์เซอร์ที่ทำการสืบค้นwww.example.com
ดังนั้นจึงมีโอกาสน้อยที่สุดในการรับส่งข้อมูล จากเบราว์เซอร์ไปยังจุดกำเนิด ... แต่ส่วนนี้มีความโปร่งใสและอัตโนมัติและอยู่นอกขอบเขตของคำถาม
และแน่นอนว่าการแคชเนื้อหาอาจมีค่าด้วยการลดภาระบนเซิร์ฟเวอร์ต้นทางหรือการขนส่ง - ฉันได้กำหนดค่าเว็บไซต์บน CloudFront ที่เซิร์ฟเวอร์ต้นทางอยู่บนวงจร ADSL และ ADSL นั้นถูก จำกัด อย่างแท้จริงสำหรับแบนด์วิดท์อัปสตรีม เซิร์ฟเวอร์ต้นทางที่ CloudFront เชื่อมต่อเพื่อดึงเนื้อหาไม่จำเป็นต้องเป็นเซิร์ฟเวอร์ภายในระบบนิเวศ AWS
¹ฉันพูดถึงบาลานเซอร์เป็นเอนทิตี้เดียวเมื่ออันที่จริงมันมีหลายโหนด เมื่อ balancer เป็น ELB เครื่องที่อยู่ด้านหลัง balancer จะทำหน้าที่เป็นเซิร์ฟเวอร์แอปจำลองและทำการ hairpinning จริงกับ balancer ของแพลตฟอร์มใหม่เนื่องจาก ELB ไม่สามารถทำสิ่งนี้ได้ด้วยตัวเอง
²ความรู้เพียงอย่างเดียวของบาลานเซอร์ใหม่เกี่ยวกับอันเก่าคือมันจำเป็นต้องเชื่อถือ X-Forwarded-For ของบาลานเซอร์เก่าและไม่ควรทำอัตราบนไอพีใด ๆ ที่ จำกัด อยู่บนแหล่งที่มาของบาลานเซอร์เก่า
³เมื่อพร็อกซีเป็นเซิร์ฟเวอร์อย่างน้อยหนึ่งตัวที่คุณควบคุมคุณมีตัวเลือกในการข้ามโดยใช้ DNS ที่ด้านหลังและเพียงใช้ที่อยู่ IP ในการกำหนดค่าพร็อกซี แต่สถานการณ์โฮสต์ / กระจายที่กล่าวถึงนั้นต้องการเลเยอร์ที่สองของ DNS .