מבוא ללקוח שאר ענן האביב עם סרט Netflix

1. הקדמה

רצועת הכלים של נטפליקס היא ספריית ענן Inter Process Communication (IPC). Ribbon מספק בעיקר אלגוריתמים של איזון עומסים בצד הלקוח.

מלבד האלגוריתמים של איזון עומסים בצד הלקוח, Ribbon מספק גם תכונות אחרות:

  • שילוב גילוי שירות - מאזני עומס רצועת כלים מספקים גילוי שירות בסביבות דינמיות כמו ענן. שילוב עם רכיב איתור השירותים של יוריקה ונטפליקס כלול בספריית הסרטים
  • סובלנות תקלות - ה- Ribbon API יכול לקבוע באופן דינמי אם השרתים פועלים בסביבה חיה ויכול לזהות את השרתים שנמצאים למטה
  • כללי איזון עומס הניתנים להגדרה - תומך בסרט RoundRobinRule, AvailabilityFilteringRule, WeightedResponseTimeRule מחוץ לקופסה ותומך גם בהגדרת כללים מותאמים אישית

Ribbon API עובד על פי הרעיון שנקרא "לקוח בשם". בעת קביעת התצורה של רצועת הכלים בקובץ תצורת היישום שלנו אנו מספקים שם לרשימת השרתים הכלולים לאיזון העומסים.

בוא ניקח את זה לסיבוב.

2. ניהול תלות

ניתן להוסיף את ה- API של רצועת הכלים של Netflix לפרויקט שלנו על ידי הוספת התלות הבאה למטה שלנו pom.xml:

 org.springframework.cloud spring-cloud-starter-netflix-ribbon 

הספריות האחרונות נמצאות כאן.

3. יישום לדוגמא

על מנת לראות את פעולתו של Ribbon API, אנו בונים יישום מיקרו-שירות לדוגמא עם Spring RestTemplate ואנחנו משפרים את זה עם ממשק ה- API של סרט הכלים של Netflix יחד עם ה- API של Netflix של Spring Cloud.

נשתמש באחת מאסטרטגיות איזון העומס של Ribbon, WeightedResponseTimeRule, כדי לאפשר איזון עומסים בצד הלקוח בין 2 שרתים, המוגדרים תחת לקוח בשם בקובץ התצורה, ביישום שלנו.

4. תצורת סרט

ממשק ה- API של Ribbon מאפשר לנו להגדיר את הרכיבים הבאים של איזון העומס:

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

בואו לכתוב תצורה פשוטה לספריה:

RibbonConfiguration בכיתה ציבורית {@Autowired IClientConfig ribbonClientConfig; @Bean IPing ציבורי ribbonPing (IClientConfig config) {להחזיר PingUrl חדש (); } @ שעועית ציבורית IRule ribbonRule (תצורת IClientConfig) {להחזיר WeightedResponseTimeRule חדש (); }}

שימו לב כיצד השתמשנו ב- WeightedResponseTimeRule כלל לקביעת השרת ו- PingUrl מנגנון לקביעת זמינות השרת בזמן אמת.

על פי כלל זה, כל שרת מקבל משקל על פי זמן התגובה הממוצע שלו, פחות זמן התגובה נותן משקל נמוך יותר. כלל זה בוחר באופן אקראי שרת שבו האפשרות נקבעת על פי משקל השרת.

וה PingUrl יעביר פינג לכל כתובת אתר כדי לקבוע את זמינות השרת.

5. application.yml

להלן ה- application.yml קובץ תצורה שיצרנו עבור יישום לדוגמה זה:

קפיץ: יישום: שם: שרת קפיצי-ענן-רצועת כלים: יציאה: 8888 שרת פינג: רצועת הכלים: יוריקה: מופעל: שקר רשימה אוף שרתים: localhost: 9092, localhost: 9999 ServerListRefresh Interval: 15000

בקובץ הנ"ל צייננו:

  • שם אפליקציה
  • מספר היציאה של היישום
  • לקוח בשם לרשימת השרתים: "שרת פינג"
  • רכיב גילוי שירות יוריקה מושבת, על ידי הגדרת eureka: מופעלת ל שֶׁקֶר
  • הגדירה את רשימת השרתים הזמינים לאיזון עומסים, במקרה זה, שני שרתים
  • הגדיר את קצב הרענון של השרת עם ServerListRefreshInterval

6. RibbonClient

בואו נקבע את קטע רכיב היישום הראשי - היכן אנו משתמשים ב- RibbonClient כדי לאפשר את איזון העומסים במקום המישור RestTemplate:

@SpringBootApplication @ RestController @ RibbonClient (name = "ping-a-server", configuration = RibbonConfiguration.class) Public class ServerLocationApp {@ LoadBalanced @ Bean RestTemplate getRestTemplate () {להחזיר RestTemplate חדש (); } @Autowired RestTemplate restTemplate; @RequestMapping ("/ server-location") שרת מחרוזות ציבורי ציבורי () {להחזיר this.restTemplate.getForObject ("// שרת פינג / מיקום", String.class); } ראשי ריק סטטי ציבורי (String [] args) {SpringApplication.run (ServerLocationApp.class, args); }}

הגדרנו מחלקת בקר עם ההערה @ RestController; הערנו גם את הכיתה עם @ RibbonClient עם שם ושיעור תצורה.

מחלקת התצורה שהגדרנו כאן היא אותה מחלקה שהגדרנו קודם בה סיפקנו את תצורת ה- Ribbon API הרצויה ליישום זה.

שים לב שהערנו גם את RestTemplate עם @ LoadBalanced מה שמרמז שאנחנו רוצים שזה יהיה מאוזן בעומס ובמקרה זה עם סרט.

7. כושר גמישות בסרט

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

כאמור, Ribbon API יכול לקבוע את זמינות השרת באמצעות פינג קבוע של שרתים במרווחי זמן קבועים ובעל יכולת לדלג על השרתים שאינם חיים.

בנוסף לכך, הוא מיישם גם דפוס Circuit Breaker כדי לסנן את השרתים על פי קריטריונים שצוינו.

דפוס ה- Circuit Breaker ממזער את ההשפעה של כשל בשרת על הביצועים על ידי דחייה מהירה של בקשה לאותו שרת שנכשלת בלי לחכות לפסק זמן. אנו יכולים להשבית תכונה זו של מפסק מעגל על ​​ידי הגדרת הנכס niws.loadbalancer.availabilityFilteringRule.filterCircuitTripped ל שֶׁקֶר.

כאשר כל השרתים מושבתים, ולכן אין שרת זמין שיגיש את הבקשה, ה- pingUrl () ייכשל ואנחנו מקבלים חריג java.lang.IllegalStateException עם מסר "אין מקרים זמינים להגיש את הבקשה".

8. מסקנה

במאמר זה דנו ב- API של רצועת הכלים של Netflix וביישומו ביישום מדגם פשוט.

קוד המקור השלם לדוגמה שתוארה לעיל נמצא במאגר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found