מבוא לקוף הכאוס

1. הקדמה

במדריך זה נדבר על Chaos Monkey for Spring Boot.

הכלי הזה עוזר לנו הציגו כמה מעקרונות הנדסת הכאוס ביישומי האינטרנט Spring Boot על ידי הוספת זמן אחזור לנקודות הקצה של REST שלנו, שגיאות זריקה או אפילו הרג אפליקציה.

2. התקנה

כדי להוסיף Chaos Monkey ליישום שלנו, אנו זקוקים לתלות אחת של Maven בפרויקט שלנו:

 de.codecentric כאוס-קוף-אביב-אתחול 2.0.0 

3. תצורה

ברגע שיש לנו את הגדרת התלות בפרויקט שלנו, עלינו להגדיר ולהתחיל את הכאוס שלנו.

אנו יכולים לעשות זאת בכמה דרכים:

  • בעת אתחול היישום, באמצעות כאוס-קוף פרופיל קפיץ (מומלץ)
  • באמצעות chaos.monkey.enabled = נכון תכונה

על ידי התחלת היישום עם כאוס-קוף פרופיל קפיץ איננו צריכים לעצור ולהפעיל את היישום אם אנו רוצים להפעיל או להשבית אותו בזמן שהאפליקציה שלנו פועלת:

java -jar your-app.jar --spring.profiles.active = כאוס-קוף

מאפיין שימושי נוסף הוא management.endpoint.chaosmonkey.enabled. הגדרת נכס זה ל- true תאפשר את נקודת הקצה הניהולית עבור קוף הכאוס שלנו:

// localhost: 8080 / chaosmonkey

מנקודת קצה זו אנו יכולים לראות את מעמד הספרייה שלנו. הנה הרשימה המלאה של נקודות הקצה ותיאורן שיעזרו לשנות את התצורה, לאפשר או להשבית את Chaos Monkey ושאר פקדים מפורטים יותר.

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

4. איך זה עובד

Chaos Monkey מורכב מצופים ותקיפות. שומר הוא רכיב אתחול האביב. הוא עושה שימוש ב- Spring AOP כדי לראות מתי מתבצעת שיטה ציבורית בשיעורים שמאושרים עם ההערות הבאות של האביב:

  • רְכִיב
  • בקר
  • RestController
  • שֵׁרוּת
  • מאגר

בהתבסס על התצורה בקובץ מאפייני האפליקציה שלנו, השיטות הציבוריות שלנו יותקפו או לא, על ידי אחד מהבאים:

  • תקופת חביון - מוסיף חביון אקראי לבקשה
  • תקיפה חריגה - משליכה חריגת זמן ריצה אקראית
  • AppKiller Assault - אממ, האפליקציה מתה

בואו נסתכל כיצד אנו יכולים להגדיר את הצופה והתקיפות שלנו לתקיפה מבוקרת יותר.

5. צופה

כברירת מחדל, Watcher מופעל רק עבורנו שירותים. המשמעות היא שההתקפות שלנו יבוצעו רק בשיטות ציבוריות בכיתות שלנו עם הערות @שֵׁרוּת.

אך אנו יכולים לשנות זאת בקלות על ידי הגדרת תכונות:

chaos.monkey.watcher.controller = שקר chaos.monkey.watcher.restController = שקר chaos.monkey.watcher.service = chaos.monkey.watcher.repository = שקר chaos.monkey.watcher.component = false

זכור כי לאחר תחילת היישום, איננו יכולים לשנות את הצופה באופן דינמי באמצעות יציאת ניהול Chaos Monkey for Spring Boot שדיברנו עליהם קודם.

6. תקיפות

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

6.1. תקופת חביון

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

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

chaos.monkey.assaults.latencyActive = chaos.monkey.assaults.latencyRangeStart = 3000 chaos.monkey.assaults.latencyRangeEnd = 15000

דרך נוספת להגדיר ולהפעיל ולכבות התקפה מסוג זה היא באמצעות נקודת הקצה הניהולית של Chaos Monkey.

בואו נפעיל את התקפת החביון ונוסיף טווח של חביון בין שתיים לחמש שניות:

תלתל -X POST // localhost: 8080 / chaosmonkey / assaults \ -H 'סוג תוכן: יישום / json' \ -d \ '{"latencyRangeStart": 2000, "latencyRangeEnd": 5000, "latencyActive": true, " exceptionsActive ": false," killApplicationActive ": false} '

6.2. תקיפה חריגה

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

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

תלתל -X POST // localhost: 8080 / chaosmonkey / assaults \ -H 'סוג תוכן: יישום / json' \ -d \ '{"latencyActive": false, "exceptionsActive": true, "killApplicationActive": false}'

6.3. תקיפה של AppKiller

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

תלתל -X POST // localhost: 8080 / chaosmonkey / assaults \ -H 'סוג תוכן: יישום / json' \ -d \ '{"latencyActive": false, "exceptionsActive": false, "killApplicationActive": true}'

7. מסקנה

במאמר זה, דיברנו על Chaos Monkey for Spring Boot. ראינו שלוקח כמה מהעקרונות של הנדסת כאוס ומאפשר לנו ליישם אותם על יישום Spring Boot.

כמו תמיד, ניתן למצוא את הקוד המלא של הדוגמאות באתר Github.