משיב מוביל
Sql Azure Scae instance

שאלה
-
שלום,
אתמול נכחתי בכנס במיקרוסופט רעננה. קודם כל היה מצוין,תודה רבה!
דברתם על load balancing והרמת instance לפי עומסים,
זה טוב ויפה עבור Web Sites,
אני רואה שזה לא קיים עבור Azure Databases,
האם זה בתכנון? איך בעצם הם דואגים שהביצועים של Azure Databases יהיו טובים
כאשר יש הרבה משתמשים? האם זה רק ברמת המכונה - מעבדים / זיכרון?דבר נוסף, האם מדברים על הוספת שירות סינכרון בין שני שרתי SQL אקטיבים?
המון תודה,
דן
תשובות
-
אהלן
לא שמתי לב שזו הודעה ישנה כי אלון הגיב אליה לפני יומיים ולכן היא קפצה. אם הייתי יודע שההודעה ישנה לא הייתי מגיב אליה :-)
אולי טוב שכן הגבתי :-)רפליקציה עובדת נהדר! אני מקיים LOAD BALANCING על שרתים שנמצאים ברפליקציה. במקרה שלי זה לא קשור לאזור אלא לשרתים שמנוהלים מקומית. כל צורה של סינכרון מידע בין שרתים המאפשר גם גישה ועבודה עם המידע, יכול להיות בסיס לניהול LOAD BALANCING. לא תמיד יש מסלול ו TUTORIAL מוכן שלך צעד אחרי צעד אבל הרעיון פשוט. אם המידע מסוכרן אז אתה יכול להפנות משתמשים לעשות שימוש במידע מכל אחד מהמקומות שהוא סונכרן.
דרך אגב הרבה פעמים LOAD BALANCING נעשה רק על קריאת מידע, בזמן שאת כתיבת המידע אנחנו עושים לשרת מסויים. יש הרבה מאוד מקרים בהם זה יעיל מאוד והדרך הכי מתאימה. אני מאוד ממליץ במערכות בהם יש הרבה מאוד קריאה של מידע ומעט כתיבה/עדכון מידע לחשוב את זו ארכיטקטורה שמתאימה לכם.
* mirror לא כל כך מתאים מפני שאנחנו בדרך רוצים שרתים פעילים. אני טעיתי שרשמתי את זה ברשימה.
** דן, תסגור בבקשה את השרשור על ידי סימון התשובה. אתה יכול גם על הדרך להצביע להודעות מועילות למשל, אבל סגירת השרשורה היא דר שחשוב לנו גם מנהלתית וגם מכיוון שהוא עוזר למי שמגיע לשרשור לזהות מייד את התשובה (חוץ מזה שזה נותן כמה נקודות למי ששם את התשובה, למרות שעדיין לא מצאתי מה אפשר לעשות עם הנקודות האלו ומה התועלת שהם). תודה.
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin]
- נערך על-ידי pituachMVP, Editor יום שלישי 22 דצמבר 2015 10:18
- סומן כתשובה על-ידי דןמ יום שלישי 22 דצמבר 2015 10:26
-
כל התגובות
-
Scale עבור Databases מבוצע בדרך כלל באמצעות Sharding. אז'ור מציע שירות שנרקא Elastic Database לטובת הנושא.
אני מאמין שהמסמך הזה יתן לך את התשובות שאתה מחפש: https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-scale-introduction/
אלון.
נא סמנו V כתשובה ליד סימן ה-הירוק אם התשובה עזרה לכם, ואם לא אני אשמח לנסות ולעזור עוד.
אלון פליס http://codevalue.net
-
בוקר טוב :-)
הקדמה קטנה: Sharding קשור בדרך כלל לחלוקה של המידע ופחות ל load balancing. הרעיון הבסיסי של load balancing הוא לאפשר גישה למידע שנמצא בכמה מקומות. ז"א אם יש לי 10 נתונים אז אני יכול לשים 2 נתונים בכל שרת ואז קיבלתי Sharding של המידע (משתמש שרוצה נתון מסויים חייב לגשת לשרת מסוים), לעומת זאת אם אני שם את 10 הנתונים על 5 שרתים אז כל משתמש יכול לגשת לשרת אחר ולקבל את כל המידע (load balancing למשל מתקשר לשימוש ב SQL always on או ב Mirror או ב רפליקציה כלשהי וכו'). עם זה הרבה פעמים ניתן לנצל כלים שנועדו ל load balancing עבור Sharding ןהפוך. בגדול הייתי אומר שניתן לחשוב על Sharding בצורה דומה לשימוש במחיצות, רק שבזמן שמחיצות מאפשרות לחלק את המידע באותו INSTANCE הרי ש Sharding מאפשר לנו לחלק את המידע בין INSTANCE-ים.
לגבי השאלה המקורית, אני מציע לבדוק את הקישור הבא לגבי הגדרת load balancer על SQL always on:
Configure load balancer for SQL always on
>> האם זה בתכנון? איך בעצם הם דואגים שהביצועים של Azure Databases יהיו טובים
גם Sharding וגם load balancing קשורים באופן ישיר למטוב ביצועים. בהחלט כדאי לבדוק את הקישור שאלון צירף וללמוד על כל האפשרויות.
>> כאשר יש הרבה משתמשים? האם זה רק ברמת המכונה - מעבדים / זיכרון?
גם וגם וגם :-)
בוא רגע נשים בצד את העניין של ה azure שהוא יותר מורכב ופחות שקוף לנו, ונדבר על שרתי SQL שאנחנו מנהלים.
הרבה פעמים אני ממליץ ללקוחות להתקין כמה instance-ים על אותה מכונה. יש לכך ייתרונות (וחסרות!) שצריך לדון בהם הרבה הרבה יותר לעומק וזה כניראה לא במסגרת הפורום, אבל רק כדוגמה קטנה, בהחלט קביעה למשל שכל INSTANCE יעבוד עם כמות זכרון מסויים יכולה למשל לאפשר לשלוט בכך שפעולה מסויימת לא משלטת על כל המשאבים של המכונה. יותר מכך במכונות שונות (מכונות שנועדו לשמש כשרתחים מרובי מעבדים) אנחנו ניכולים גם לקבוע בדיוק איזה זכרון ישמש איזה מעבד ובשרת אנחנו קובעים בדיוק באיזה מעבד להשתמש (ז"א יש עירוב של ניהול החומרה עצמה)... כאמור זה נושא גדול.
הרבה יותר נפוץ פעולות של חלוקה למכונות שונות כדי לחלק משאבים.
חשוב לזכור שפיצול מצד אחד מאפשר חלוקה של משאבים, אבל מצד שני עולה במשאבים בדרך כלל. מייקרוסופט לא מפרסמים את המספרים המדוייקים אבל אני יכול להציג את הנושא בצורה פשוטה בעזרת mongoDB. ב mongoDB כל חיבור (connection) עולה לנו ב 1 מגמה בייט של זכרון! נשמע זניח? בואו נחשוב על Sharding מינימליסטי של 3 שרתים בלבד (mongoDB מותאם לעבודה עם עשרות ומאות מכונות ב Sharding!). על מנת להקים Sharding אנחנו צריכים להקים שרת קונפיגורציה (מומלץ 3). שרת הקונפיגורציה מקיים קשר עם כל השרתים ולכן יש לנו 3 חיבורים, כל אחד מהשרתים חייב לביות בקשר עם כל שרת אחר כדי להעביר CHUNK-ים של מידע ולכן יש לנו עוד 3 חיבורים. אנחנ ו חייבים להקים שרתי mongos דרגם הלקוח ניגש אל שרתי המידע וכל אחד מאלו מקיים קשר כם על אחד משקרתי המדיע וכל אחד משרתי הקונפיגורציה... הרבה מאוד חיבורים נוצרים לנו כפי שניתן לראות ואנחנו רק בדוגמה של 3 שרתים ב Sharding! (באופן מעשי ב Sharding רציני מגבלילים את הקשרים בין שרתי המידע), והרבה חיבורים אומר הרבה מאוד זכרון! בקלות אפשר להגיע למצב של כמה גיגה בייט זסכרון רק בעור חיבורים במערכת גדולה בעיקר אם לא מנהלים נכון. כמובן שיש גם איבוד משאבים של עיבוד בעיקר אם צריך לעבד ביחד מידע שמגיע מכמה מקורות...
>> דבר נוסף, האם מדברים על הוספת שירות סינכרון בין שני שרתי SQL אקטיבים?
אני לא יודע על מה דיברו במיפגש שהיית ולכן לא יודע כיצד זה מתקשר לדברים משם, אבל "שירות סינכרון" הוא בהחלט חלק מנושא של load balancing. אחרי הכל אתה חייב לסנכרן מידע בין השרתים. סינכרון מידע בין השרתים יכול להעשות בשיטות שונות שחלקן הזכרתי מעל.
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin] -
רונן שלום,
תודה על התשובה, אומנם כתבתי כאן את השאלה ב- 2013, אבל תמיד אני שמח לקבל מידע שיכול לעזור.
מאז, עשיתי מספר ניסיונות ב- AZURE, הקמתי 2 שרתי SQL אשר מסתנכרנים ביניהם ברפליקציה,
הצלחתי להגיע למצב שראיתי שהשרתים אכן מסתנכרנים.
לבסוף החלטתי לא להשתמש ברפליקציה כי ראיתי שזה עובד טוב עם מספר קטן של דטה בייסים, אבל במספר גדול של דטה בייסים - הרפליקציה לא הייתה אמינה ונתקעה כל הזמן. ניסיתי גם את שיטת ה- MIRROR, אבל כאן רק שרת אחד היה אקטיבי, וכאמור אני צריך ש-2 השרתים יהיו אקטיבים.
לבסוף בחרתי להקים 2 שרתי SQL, חלקתי את כל הדטה בייסים בין 2 השרתים, ועשיתי בעצם LOAD BALANCING תיכנותי עם לוגיקה שלי.
עובד יפה.
כמובן שהייתי רוצה לבחון את האפשרות של הרפליקציה בעתיד, אבל אני חייב להיות משוכנע שזה עובד טוב.
שוב תודה,
דן
-
אהלן
לא שמתי לב שזו הודעה ישנה כי אלון הגיב אליה לפני יומיים ולכן היא קפצה. אם הייתי יודע שההודעה ישנה לא הייתי מגיב אליה :-)
אולי טוב שכן הגבתי :-)רפליקציה עובדת נהדר! אני מקיים LOAD BALANCING על שרתים שנמצאים ברפליקציה. במקרה שלי זה לא קשור לאזור אלא לשרתים שמנוהלים מקומית. כל צורה של סינכרון מידע בין שרתים המאפשר גם גישה ועבודה עם המידע, יכול להיות בסיס לניהול LOAD BALANCING. לא תמיד יש מסלול ו TUTORIAL מוכן שלך צעד אחרי צעד אבל הרעיון פשוט. אם המידע מסוכרן אז אתה יכול להפנות משתמשים לעשות שימוש במידע מכל אחד מהמקומות שהוא סונכרן.
דרך אגב הרבה פעמים LOAD BALANCING נעשה רק על קריאת מידע, בזמן שאת כתיבת המידע אנחנו עושים לשרת מסויים. יש הרבה מאוד מקרים בהם זה יעיל מאוד והדרך הכי מתאימה. אני מאוד ממליץ במערכות בהם יש הרבה מאוד קריאה של מידע ומעט כתיבה/עדכון מידע לחשוב את זו ארכיטקטורה שמתאימה לכם.
* mirror לא כל כך מתאים מפני שאנחנו בדרך רוצים שרתים פעילים. אני טעיתי שרשמתי את זה ברשימה.
** דן, תסגור בבקשה את השרשור על ידי סימון התשובה. אתה יכול גם על הדרך להצביע להודעות מועילות למשל, אבל סגירת השרשורה היא דר שחשוב לנו גם מנהלתית וגם מכיוון שהוא עוזר למי שמגיע לשרשור לזהות מייד את התשובה (חוץ מזה שזה נותן כמה נקודות למי ששם את התשובה, למרות שעדיין לא מצאתי מה אפשר לעשות עם הנקודות האלו ומה התועלת שהם). תודה.
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin]
- נערך על-ידי pituachMVP, Editor יום שלישי 22 דצמבר 2015 10:18
- סומן כתשובה על-ידי דןמ יום שלישי 22 דצמבר 2015 10:26
-
-
load balancing על מאות שרתים?!?
Sharding למאות שרתים זה משהו נפוץ, אבל load balancing למאות שרתים... נשמע מעניין :-)אני אשמח שתעדכן אותנו במילה אחת אם זה עבד בצורה יעילה. אם תרצה לפרסם על מה שאתם עושים CASE STUDY עם תיאור מעמיק, אני אשמח לקרוא, ואם אתה רוצה גם אשמח לארח את הפרסום תחת הבלוגים שלי.
בהצלחה!
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin] -
-