1. ספרייה
  2. DNS
  3. הגדרת DNS

עודכן לפני חודש

איזון עומסים באמצעות DNS הוא האק — אלגנטי, אבל עדיין האק. אתה מנצל מחדש מערכת שנועדה לענות על "איפה נמצא זה?" כדי שתענה על "לאן צריך זה ללכת?" כל מגבלה שתיתקל בה נובעת ישירות מהבחנה הזו.

מערכת שמות הדומיין ממפה שמות לכתובות. היא לא נבנתה לקבל החלטות ניתוב. כאשר אתה מגדיר כתובות IP מרובות לדומיין אחד, ה-DNS מחזיר את כולן. הלקוחות בוחרים אחת. התעבורה מתפזרת על פני השרתים שלך. זה עובד — אבל כמו פטיש שמניע ברגים. לפעמים בדיוק הכלי הנכון, אבל כדאי שתבין מה אתה מבקש מהכלי לעשות.

המנגנון

איזון עומסים באמצעות DNS עובד על ידי הגדרת רשומות A מרובות (או AAAA עבור IPv6) לדומיין אחד. כאשר לקוחות שולחים שאילתה, שרת ה-DNS מגיב עם כתובות IP מרובות. הלקוח מתחבר לאחת מהן — בדרך כלל הראשונה. על ידי שינוי איזו כתובת מופיעה ראשונה, ה-DNS מפזר את התעבורה על פני מאגר השרתים שלך.

התהליך שקוף לחלוטין. אין חומרה נוספת שיושבת בין המשתמשים לשרתים. שכבת ה-DNS שכבר יש לך הופכת למאזן העומסים שלך.

המגבלה הקריטית מתגלה מיד: מטמון. פותרים רקורסיביים ומערכות לקוח שומרים תגובות במטמון לפי ערכי Time-to-Live — בדרך כלל מדקות עד שעות. במהלך חלון זמן זה, כל הבקשות מאותו לקוח זורמות לאותו שרת ללא קשר לעומס או לזמינות.

המטמון שהופך את ה-DNS למהיר הוא בדיוק מה שהופך את איזון העומסים באמצעות DNS לגס. אי אפשר להימלט מהפשרה הזו. אפשר רק לבחור היכן על הסקאלה אתה רוצה לשבת.

הפצה בשיטת Round-Robin

Round-Robin היא הטכניקה הפשוטה ביותר. השרת הסמכותי שלך מחזיק כתובות IP מרובות ומסובב את סדרן. לקוח אחד מקבל 192.0.2.1, 192.0.2.2, 192.0.2.3. הבא מקבל 192.0.2.2, 192.0.2.3, 192.0.2.1. מכיוון שרוב הלקוחות מתחברים לכתובת הראשונה, התעבורה מתפזרת על פני השרתים לאורך זמן.

הייתרון הוא הפשטות הרדיקלית. צור רשומות DNS מרובות. זהו.

המגבלות בולטות באותה המידה. Round-Robin לא יודע דבר על השרתים שלך. מכונה בפי שניים מהקיבולת מקבלת את אותו חלק מהתעבורה כמו אחת שנאנקת תחת עומס. שרת בסידני מקבל חיבורים מסטוקהולם בזמן ששרת שוודי יושב בחוסר מעש. כאשר שרת קורס, ה-DNS ממשיך להפנות אליו תעבורה — ה-DNS לא יודע שהשרת מת. הוא מחזיר את הכתובת עד שמישהו שם לב ומסיר את הרשומה.

ערכי TTL יוצרים בחירה בלתי אפשרית. TTL נמוך (60 שניות ומטה) מצמצם את המטמון אבל מגדיל את נפח השאילתות ומאט חיבורים. TTL גבוה משפר ביצועים אבל הופך את ההפצה לבלתי שווה ומאריך הפסקות. אין הגדרה שפותרת את שתי הבעיות.

רשומות עם משקל

DNS עם משקל מוסיף הפצה פרופורציונלית. במקום לטפל בכל הכתובות באופן שווה, אתה מקצה משקלים השולטים כמה פעמים כל אחת מופיעה.

שרת A עם משקל 100, שרת B עם משקל 50, שרת C עם משקל 25: ה-DNS מחזיר את כתובתו של A פי שניים מ-B, פי ארבעה מ-C. הפצת התעבורה יכולה לשקף את קיבולת השרת בפועל.

ספקי ענן — Route 53, Cloudflare, Google Cloud DNS — תומכים בניתוב עם משקל באופן מובנה. זה מועיל במיגרציות: הסט בהדרגה תעבורה מתשתית ישנה לחדשה על ידי כיוון המשקלים. ללא מעבר פתאומי.

אבל DNS עם משקל עדיין פועל בעיוורון. הוא מפזר לפי תצורה סטטית ללא קשר למה שקורה בפועל. שרת עשוי להיות עמוס מדי או לא זמין — ה-DNS ממשיך לשלוח את חלקו המוקצה.

Failover עם בדיקות תקינות

DNS עם בדיקות תקינות ממיר תצורה סטטית לניטור בסיסי. ספק ה-DNS בודק את השרתים שלך — בדרך כלל כל 10-30 שניות — ומסיר אוטומטית את אלה שאינם תקינים מהתגובות.

כאשר שרת נכשל בבדיקות עוקבות, הוא נעלם מתגובות ה-DNS. כשהוא מתאושש, הוא חוזר. לקוחות חדשים מקבלים רק כתובות עובדות. ללא התערבות ידנית.

המימושים נעים מבדיקות קישוריות TCP בסיסיות ועד אימות תגובות HTTP, אימות תוכן ותסריטי תקינות מותאמים אישית. Failover גיאוגרפי מרחיב זאת: תחזוק שרתים ראשיים באזור אחד, גיבויים באחר. אם שרתים אירופאים קורסים, התעבורה עוברת אוטומטית לשרתים אמריקאים.

ובכל זאת המגבלה הבסיסית נשארת. כאשר שרת נכשל, לקוחות שיש להם תגובות שמורות במטמון ממשיכים לנסות להתחבר. הם נכשלים למשך כל אורך ה-TTL שנשמר אצלם. בדיקת התקינות מזהה כשלים בשניות; הלקוחות חווים אותם דקות.

DNS לעומת מאזני עומסים ייעודיים

ההבדל הוא ארכיטקטוני, לא רק עניין של תכונות.

מאזני עומסים ייעודיים — חומרה כמו F5 BIG-IP, תוכנה כמו HAProxy או NGINX — יושבים בין הלקוחות לשרתים. הם מקבלים כל חיבור ומחליטים בזמן אמת איזה שרת עורפי מטפל בו. הם רואים תעבורה בפועל, יודעים את העומס בפועל, מזהים כשלים מיידית, ומנתבים מחדש באותו רגע.

ה-DNS פועל ברובד אחד מרוחק. הוא משפיע לאן הלקוחות הולכים אבל לעולם לא רואה את התעבורה עצמה. הוא מצביע; הוא לא מכוון.

איזון עומסים באמצעות DNS:

  • אפס תשתית נוספת
  • קנה מידה אינסופי (ה-DNS מטפל במיליארדי שאילתות ביום)
  • אין נקודת כשל יחידה מעבר לספק ה-DNS שלך
  • ללא תוספת זמן השהייה
  • הפצה גסה בסדר הזמן של TTL
  • עיוור לעומס השרת בפועל
  • ללא מודעות לסשן
  • Failover בדקות, לא אלפיות שנייה

מאזני עומסים ייעודיים:

  • תשתית נוספת לפריסה ותחזוקה
  • הופך לרכיב בנתיב הקריטי
  • מודעות לעומס בזמן אמת
  • התמדת סשן לאפליקציות עם מצב
  • Failover בפחות משנייה
  • סיום SSL, מניפולציה של כותרות, ניתוב URL
  • יכולות בדיקת תעבורה ואבטחה

אף אחד מהם אינו טוב יותר אוניברסלית. הם פותרים את אותה בעיה דרך מנגנונים שונים מהיסוד.

מתי איזון עומסים באמצעות DNS עובד

הפצה גיאוגרפית. ה-DNS מצטיין כאן. ניתוב מבוסס גיאולוקציה שולח לקוחות אירופאים לשרתים אירופאים, לקוחות אסייתים לשרתים אסייתים. שאילתת ה-DNS עצמה נושאת מידע על המיקום.

שירותים ללא מצב. אם האפליקציה שלך לא שומרת מצב בצד השרת, חוסר יכולתו של ה-DNS להבטיח בחירת שרת עקבית הופך לבלתי רלוונטי. תוכן סטטי, API-ים ללא מצב, עומסי עבודה כבדי קריאה — כולם מתפזרים ביעילות.

אילוצי תקציב. איזון עומסים באמצעות DNS לא עולה כלום מעבר לשירות ה-DNS הקיים. יתירות בסיסית ללא השקעה בתשתית.

הפצה בשכבה הראשונה. השתמש ב-DNS להפיץ תעבורה בין אזורים, ואז פרוס מאזני עומסים ייעודיים בתוך כל מיקום. קנה מידה גלובלי מ-DNS, שליטה עדינה מקומית.

מתי איזון עומסים באמצעות DNS נכשל

דרישות לזיקה לסשן. אם משתמשים חייבים להישאר על שרתים ספציפיים — עגלות קניות, סשנים עם אימות, חיבורי WebSocket — הניתוב הבלתי צפוי של ה-DNS שובר את החוויה.

צורך ב-failover בפחות משנייה. אפילו עם TTL של 60 שניות ובדיקת תקינות מיידית, כשלים משפיעים על לקוחות לדקה שלמה. מערכות קריטיות למשימה זקוקות למאזני עומסים ייעודיים.

תעבורה מתפרצת. ה-DNS מפזר לפי נפח שאילתות, לא נפח בקשות. פרצי תעבורה פתאומיים מציפים שרתים מסוימים בזמן שאחרים יושבים בחוסר מעש.

ניהול תעבורה מתקדם. סיום SSL, מניפולציה של כותרות, ניתוב URL, חומות אש לאפליקציות ווב — אף אחד מאלה לא קיים בשכבת ה-DNS. ה-DNS פותר שמות לכתובות. זה כל מה שהוא עושה.

ההערכה הכנה

איזון עומסים באמצעות DNS מחזיר כתובות IP מרובות ומאפשר ללקוחות לבחור אחת. פשוט, חינמי, עם קנה מידה אינסופי. גם גס, עיוור לתנאים בפועל, ונכשל בסדרי הזמן של TTL ולא בזמן אמת.

המטמון שמאיץ את האינטרנט מגביל את יכולת התגובה של איזון העומסים באמצעות DNS. אי אפשר להימלט מזה. אפשר רק לבחור ערכי TTL שמאזנים בין פירוט ההפצה לעלות החיפוש.

להפצה גיאוגרפית ולשירותים ללא מצב, איזון עומסים באמצעות DNS הוא לרוב בדיוק הכלי הנכון. לאפליקציות התלויות בסשן ול-failover קריטי למשימה, הוא בלתי מספיק מהיסוד. רוב סביבות הייצור משתמשות בו כשכבה אחת — הפצה גלובלית דרך DNS, אינטליגנציה מקומית דרך מאזני עומסים ייעודיים.

ה-DNS הוא מערכת פתרון שמות שגויסה לשמש כמנהל תעבורה. זה עובד כמו האק — בחן, בתוך מגבלות, ועם פשרות שנובעות ישירות מהשימוש החדש.

שאלות נפוצות על איזון עומסים באמצעות DNS

מדוע איזון עומסים באמצעות DNS ממשיך לשלוח תעבורה לשרתים שנכשלו?

ה-DNS הוא מאגר כתובות, לא מערכת ניטור. כאשר אתה שואל אותו, ה-DNS מחזיר כתובות מהגדרת התצורה שלו — הוא לעולם לא בודק אם הכתובות אכן עובדות. DNS עם בדיקת תקינות מוסיף ניטור מעל לכך, אבל לקוחות שיש להם תגובות שמורות ממשיכים להשתמש בכתובות ישנות עד שהמטמון שלהם פג. זיהוי הכשל עשוי לקחת שניות. ההשפעה על הלקוח נמשכת כל עוד ה-TTL.

איזה TTL כדאי להשתמש עבור איזון עומסים באמצעות DNS?

אין תשובה מושלמת. TTL נמוך יותר (30-60 שניות) מאפשר failover מהיר יותר והפצה שווה יותר אבל מגדיל את נפח שאילתות ה-DNS. TTL גבוה יותר (5-15 דקות) משפר ביצועים אבל הופך את ההפצה לבלתי שווה ומאריך הפסקות. רוב המימושים מתייצבים על 60-300 שניות כפשרה — אבל זו תמיד פשרה.

האם אפשר להשתמש באיזון עומסים באמצעות DNS עם HTTPS?

כן, אבל ה-DNS פועל מתחת ל-HTTPS — הוא רק פותר שמות דומיין לכתובות IP. משא ומתן SSL/TLS מתרחש לאחר שהלקוח מתחבר לאיזה שרת שה-DNS בחר. כל שרת צריך אישורים תקינים עבור הדומיין שלך. ה-DNS אינו יכול לסיים SSL או לבדוק תעבורה מוצפנת.

כיצד שונה איזון עומסים באמצעות DNS מ-CDN?

CDN-ים משתמשים ב-DNS (לעתים קרובות עם ניתוב גיאולוקציה) כרכיב אחד של מערכת גדולה יותר. CDN גם שומר תוכן במטמון במיקומי קצה, מייעל נתיבי מסירה ומטפל ב-failover של מקור. איזון עומסים באמצעות DNS הוא רק חלק הכיוון התעבורה — הוא מפנה לקוחות לכיוון שרתים אבל לא שומר במטמון או מייעל תוכן.

האם דף זה היה מועיל?

😔
🤨
😃
טכניקות לאיזון עומסים באמצעות DNS • ספרייה • Connected