คำถามการตั้งค่าความพร้อมใช้งานสูงทั่วโลก


10

ฉันเป็นเจ้าของและดำเนินงานvisualwebsiteoptimizer.com / แอพให้ข้อมูลโค้ดซึ่งลูกค้าของฉันใส่ในเว็บไซต์เพื่อติดตามตัวชี้วัดบางอย่าง เนื่องจากข้อมูลโค้ดเป็น JavaScript ภายนอก (ที่ด้านบนของรหัสไซต์) ก่อนที่จะแสดงเว็บไซต์ลูกค้าเบราว์เซอร์ของผู้เยี่ยมชมจะติดต่อเซิร์ฟเวอร์แอปของเรา ในกรณีที่เซิร์ฟเวอร์แอปของเราล่มเบราว์เซอร์จะพยายามทำการเชื่อมต่อก่อนที่จะหมดเวลา (โดยทั่วไปคือ 60 วินาที) อย่างที่คุณสามารถจินตนาการได้เราไม่สามารถทำให้เซิร์ฟเวอร์แอปของเราหยุดทำงานในสถานการณ์ใด ๆ เพราะมันจะส่งผลเสียต่อประสบการณ์ไม่เพียง แต่ผู้เยี่ยมชมเว็บไซต์ของเรา แต่ผู้เข้าชมเว็บไซต์ของลูกค้าของเรา!

ขณะนี้เรากำลังใช้กลไก DNS Failover กับเซิร์ฟเวอร์สำรองหนึ่งที่อยู่ในศูนย์ข้อมูลที่แตกต่างกัน (จริง ๆ แล้วทวีปที่แตกต่างกัน) นั่นคือเราตรวจสอบเซิร์ฟเวอร์แอปของเราจาก 3 ตำแหน่งที่แยกจากกันและทันทีที่ตรวจพบว่าหยุดทำงานเราจะเปลี่ยนระเบียน A ให้ชี้ไปที่ IP สำรองของเซิร์ฟเวอร์ วิธีนี้ใช้งานได้ดีสำหรับเบราว์เซอร์ส่วนใหญ่ (เนื่องจาก TTL ของเราคือ 2 นาที) แต่ IE จะแคช DNS เป็นเวลา 30 นาทีซึ่งอาจเป็นตัวจัดการข้อตกลง ดูโพสต์ล่าสุดของเราvisualwebsiteoptimizer.com/split-testing-blog/maximum-theoretical-downtime-for-a-website-30-minutes/

ดังนั้นการตั้งค่าแบบไหนที่เราสามารถใช้เพื่อให้แน่ใจว่ามีการล้มเหลวแบบทันทีทันใดในกรณีที่ศูนย์ข้อมูลแอพประสบปัญหาใหญ่ ฉันอ่านที่นี่www.tenereillo.com/GSLBPageOfShame.htmว่าการมีหลายระเบียน A เป็นวิธีการแก้ปัญหา แต่เราไม่สามารถจ่ายการซิงโครไนซ์เซสชันได้ (ยัง) อีกกลยุทธ์หนึ่งที่เรากำลังสำรวจคือการมีเร็กคอร์ด A สองตัวหนึ่งตัวชี้ไปที่เซิร์ฟเวอร์แอปและที่สองรองจากพร็อกซีย้อนกลับ (อยู่ในศูนย์ข้อมูลอื่น) ซึ่งแก้ไขไปที่เซิร์ฟเวอร์แอปหลักหากมี คุณคิดว่ากลยุทธ์นี้สมเหตุสมผลหรือไม่

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

การอ้างอิง: ฉันอ่านกระทู้นี้ซึ่งเป็นประโยชน์serverfault.com/questions/69870/multiple-data-centers-and-http-traffic-dns-round-robin-is-the-only-way-to-assure

คำตอบ:


6

สถานการณ์ของคุณค่อนข้างคล้ายกับของเรา เราต้องการศูนย์ข้อมูลแยกและประเภทความล้มเหลวของเลเยอร์เครือข่าย

หากคุณมีงบประมาณที่จะทำสิ่งที่คุณต้องการก็คือศูนย์ข้อมูลสองแห่งคือ IP หลายรายการที่ส่งผ่านแต่ละคู่เราเตอร์ขอบที่ทำเซสชัน BGP กับผู้ให้บริการขนส่งของคุณโฆษณาที่อยู่ IP ของคุณไปยังอินเทอร์เน็ตทั่วโลก

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

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

แนวปฏิบัติที่ดีที่สุด BGP Multihomed และหลายตำแหน่งและวิธีที่ดีที่สุดในการปรับปรุงความยืดหยุ่น? เป็นคำถามที่ฉันถามเกี่ยวกับปัญหาที่คล้ายกัน

หน้าอัปยศของ GSLB จะเพิ่มประเด็นสำคัญบางประการซึ่งเป็นเหตุให้โดยส่วนตัวแล้วฉันจะไม่เลือก GSLB อย่างเต็มใจที่จะทำงานการกำหนดเส้นทาง BGP

คุณควรดูจุดอื่น ๆ ของความล้มเหลวในเครือข่ายของคุณ ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ทั้งหมดมี 2 นิคส์ (เชื่อมต่อกับสวิตช์แยก 2 ตัว), 2 PSU และบริการของคุณประกอบด้วยเซิร์ฟเวอร์แบ็คเอนด์หลายตัวเป็นคู่ซ้ำซ้อนหรือคลัสเตอร์ที่สมดุลโหลด

โดยทั่วไป DNS "การทำโหลดบาลานซ์" ผ่านหลาย ๆ ระเบียน A เป็นเพียง "การแบ่งปันภาระ" เนื่องจากเซิร์ฟเวอร์ DNS ไม่มีแนวคิดว่าปริมาณโหลดบนเซิร์ฟเวอร์แต่ละเครื่องนั้นเท่าไหร่ นี่คือราคาถูก (ฟรี)

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

เครือข่ายที่กำหนดเส้นทาง BGP ซึ่งได้รับการสนับสนุนโดยโครงสร้างพื้นฐานที่แข็งแกร่งคือ IMHO วิธีเดียวที่จะรับประกันการใช้งานที่ดีอย่างแท้จริง คุณสามารถประหยัดเงินได้โดยใช้เซิร์ฟเวอร์เส้นทางแทนเราเตอร์ Cisco / Juniper / etc แต่ในตอนท้ายของวันคุณต้องจัดการเซิร์ฟเวอร์เหล่านี้อย่างระมัดระวัง นี่ไม่ใช่ทางเลือกที่ราคาถูกหรือสิ่งที่ต้องดำเนินการเบา ๆ แต่มันเป็นทางออกที่คุ้มค่ามากและนำคุณเข้าสู่อินเทอร์เน็ตในฐานะผู้ให้บริการมากกว่าเพียงแค่ผู้บริโภค


ขอบคุณฉันต้องการยกเลิกคำตอบของคุณ แต่ทำไม่ได้เพราะฉันใหม่ ใช่แล้วเครือข่ายที่กำหนดเส้นทาง BGP ดูเหมือนจะเป็นหนทางที่จะไปได้ แต่มันค่อนข้างยากในการติดตั้งและจัดการสำหรับการเริ่มต้น (ทั้งต้นทุนและทรัพยากรมนุษย์ที่ชาญฉลาด) ฉันหวังว่าจะมีทางออกที่ถูกกว่าสำหรับเรื่องนี้ แต่อาจจะไม่มี
Paras Chopra

1
ฉันจะเขียนสิ่งนี้เป็นเรียงความในบล็อกของฉันคืนนี้ฉันคิดว่า ทางออกที่ถูกที่สุดสำหรับเราเตอร์ที่เป็นขอบสำหรับคุณคือ Dell R200s แต่ละคู่ที่มี NIC พิเศษสองตัวและสแต็กแรม (4-6GB ควรเพียงพอ) จากนั้นเรียกใช้ FreeBSD และ Quagga หรือ BIRD
Tom O'Connor

Fantastic! ฉันจะตรวจสอบให้แน่ใจ โปรดอัปเดตเธรดนี้พร้อมลิงก์เพื่อที่ฉันจะได้ไม่พลาด
Paras Chopra

+1 บนโซลูชันเราเตอร์ El-Cheapo - เราใช้งาน FreeBSD เราเตอร์กับ บริษัท ของฉันด้วยผลลัพธ์ที่ยอดเยี่ยม หากคุณต้องการบางสิ่งบางอย่างเชิงพาณิชย์มากขึ้น (แต่ก็ยังถูกกว่าเกียร์ของ Cisco ที่เทียบเคียงได้) เกียร์ Juniper Networks (www.juniper.net) อาจเป็นตัวเลือกที่ดีเช่นกัน
voretaq7

4

ตกลงสิ่งนี้ถูกถามเมื่อไม่นานมานี้ แต่ฉันเห็นมันครั้งแรกตอนนี้

ข้อมูลโค้ดคือ JavaScript ภายนอก (ที่ด้านบนของรหัสไซต์) ก่อนที่จะแสดงเว็บไซต์ลูกค้าเบราว์เซอร์ของผู้เข้าชมจะติดต่อกับเซิร์ฟเวอร์แอปของเรา

คุณควร:

  1. วางไฟล์ Javascript ของคุณไว้ในเครือข่ายการจัดส่งเนื้อหาที่ดีและเป็นมืออาชีพเช่นการซื้อการให้บริการ HTTP (S) ของ Javascript จากผู้ที่มีความเชี่ยวชาญนั้นอยู่แล้ว
  2. ตั้งโปรแกรม Javascript ของคุณเพื่อให้มีสถานะทางเลือกที่ดีเช่นหากเซิร์ฟเวอร์แอปของคุณไม่ตอบสนองอย่างรวดเร็วผู้ใช้ปลายทางจะเห็นหน้าเว็บปกติที่ไม่มีการแก้ไข

การทำสิ่งอื่นนั้นไม่รับผิดชอบจริงๆ ฉันคิดว่าคุณมีสิ่งนี้แล้ว

คุณไม่ควรใช้บริการของคุณกับเทคนิคการกำหนดเส้นทาง BGP เว้นแต่คุณจะมีหรือรับความรู้ในการทำเช่นนั้น สถานการณ์การกำหนดเส้นทาง BGP ที่ซับซ้อนนั้นไม่ยุ่งยากในการใช้; อย่าทำสิ่งนี้ด้วยตัวเองหากคุณไม่มีความรู้เฉพาะด้านของโดเมน

คำถามของคุณนั้นสับสนเล็กน้อย การวิเคราะห์วิธีการสร้างบริการที่พร้อมใช้งานสูงเริ่มต้นด้วยข้อมูลแอปพลิเคชันเนื่องจากเป็น "สถานะ" ของคุณ ชิ้นส่วนไร้สัญชาตินั้นง่ายต่อการใช้งานอย่างมากส่วนที่ไม่ได้เป็นของรัฐ ดังนั้นแทนที่จะมุ่งไปที่เซิร์ฟเวอร์และ DNS ของคุณให้ดูที่สถานะการสมัครของคุณ เริ่มต้นด้วยการปรับให้เหมาะสมและอาจขอคำแนะนำอัลกอริทึมเกี่ยวกับ Stack Overflow คุณสามารถใช้ความคิดของการทำธุรกรรมและเซิร์ฟเวอร์อัจฉริยะลองใหม่ในไฟล์ Javascript fx ของคุณหรือไม่?


1

จริงๆแล้วสิ่งที่คุณต้องการสามารถอัพเกรดเพื่อช่วยให้กิจกรรมการทดสอบแยกของคุณเช่นกันถ้าคุณรวมความล้มเหลวของ geodns และ dns

การส่งกลุ่ม A ถึง ip 1 และกลุ่ม B ถึง ip 2 แม้ว่าพวกเขาจะอยู่บนเซิร์ฟเวอร์เดียวกันจะช่วยให้คุณแยกกลุ่มการทดสอบของคุณ กลุ่ม A และกลุ่ม B มาจากภูมิภาคทางภูมิศาสตร์ที่แตกต่างกัน เพื่อความยุติธรรมในวัน / สัปดาห์ / เดือนถัดไปคุณจะต้องพลิกกลุ่มเพื่อให้แน่ใจว่าคุณอนุญาตให้มีความแตกต่างทางภูมิศาสตร์ เพียงเพื่อจะเข้มงวดในวิธีการของคุณ

บริการ geodns / failover dns ที่http://edgedirector.comสามารถทำได้

การเปิดเผยข้อมูล: ฉันเชื่อมโยงกับลิงก์ด้านบน, สะดุดที่นี่ค้นคว้าบทความเกี่ยวกับการใช้เทคนิค dns โง่เพื่อแยกการทดสอบ

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