כיצד לייעל את תשתית הייצור של Node.js: שיטות עבודה מומלצות

הקדמה
ב-Forward Email, בילינו שנים בשכלול סביבת הייצור של Node.js שלנו. מדריך מקיף זה משתף את שיטות העבודה המומלצות שלנו לפריסת ייצור של Node.js, אשר הוכחו היטב, תוך התמקדות באופטימיזציה של ביצועים, ניטור והלקחים שלמדנו מהגדלת יישומי Node.js לטיפול במיליוני עסקאות יומיות.
מהפכת אופטימיזציית הביצועים שלנו ב-573% של ליבה יחידה
כאשר עברנו ממעבדי אינטל למעבדי AMD Ryzen, השגנו שיפור ביצועים של 573% ביישומי Node.js שלנו. זו לא הייתה רק אופטימיזציה קלה - היא שינתה באופן מהותי את אופן ביצועי יישומי Node.js שלנו בייצור ומדגימה את החשיבות של אופטימיזציה של ביצועי ליבה יחידה עבור כל יישום Node.js.
Tip
עבור שיטות עבודה מומלצות לפריסת Node.js, בחירת החומרה היא קריטית. בחרנו במיוחד באירוח DataPacket בשל זמינותם של מעבדי AMD Ryzen, מכיוון שביצועי ליבה יחידה הם קריטיים עבור יישומי Node.js, מכיוון שריצת JavaScript היא בעלת הליך הליך יחיד.
מדוע אופטימיזציה של ביצועי ליבה יחידה חשובה עבור Node.js
המעבר שלנו מאינטל ל-AMD Ryzen הביא ל:
- שיפור ביצועים של 573% בעיבוד בקשות (מתועד ב-בעיית GitHub בדף הסטטוס שלנו #1519)
- ביטול עיכובי עיבוד לתגובות כמעט מיידיות (הוזכר בבעיית GitHub #298)
- יחס מחיר-ביצועים טוב יותר עבור סביבות ייצור של Node.js
- זמני תגובה משופרים בכל נקודות הקצה של היישומים שלנו
שיפור הביצועים היה כה משמעותי שאנו רואים כעת מעבדי AMD Ryzen חיוניים לכל פריסת ייצור רצינית של Node.js, בין אם אתם מפעילים יישומי אינטרנט, ממשקי API, מיקרו-שירותים או כל עומס עבודה אחר של Node.js.
תוכן קשור
לפרטים נוספים על בחירות התשתית שלנו, עיינו ב:
- [שירות העברת הדוא"ל הטוב ביותר]](https://forwardemail.net/blog/docs/best-email-forwarding-service) - השוואות ביצועים
- פתרון אירוח עצמי - המלצות חומרה
הגדרת סביבת ייצור Node.js: מחסנית הטכנולוגיה שלנו
שיטות העבודה המומלצות שלנו לפריסת Node.js כוללות בחירות טכנולוגיות מכוונות המבוססות על שנים של ניסיון בייצור. הנה מה שאנו משתמשים בו ומדוע בחירות אלו חלות על כל יישום Node.js:
מנהל חבילות ###: pnpm ליעילות ייצור
מה אנחנו משתמשים בו: pnpm
(גרסה מוצמדת)
בחרנו ב-pnpm על פני npm ו-yarn עבור סביבת הייצור של Node.js שלנו מכיוון ש:
- זמני התקנה מהירים יותר בצינורות CI/CD
- יעילות שטח דיסק באמצעות קישור קשיח
- פתרון תלויות קפדני המונע תלות רפאים
- ביצועים טובים יותר בפריסות ייצור
Note
כחלק משיטות העבודה המומלצות שלנו לפריסת Node.js, אנו מצמידים גרסאות מדויקות של כלים קריטיים כמו pnpm כדי להבטיח התנהגות עקבית בכל הסביבות ובכל המכונות של חברי הצוות.
פרטי יישום:
מסגרת אינטרנט: Koa עבור ייצור Node.js מודרני
מה אנחנו משתמשים בו:
בחרנו ב-Koa על פני Express עבור תשתית הייצור של Node.js שלנו בגלל התמיכה המודרנית ב-async/await והרכב התוכנה הנקי יותר. המייסד שלנו, ניק בו, תרם גם ל-Express וגם ל-Koa, ונתן לנו תובנות מעמיקות לגבי שתי המסגרות לשימוש בייצור.
דפוסים אלה חלים בין אם אתם בונים ממשקי API של REST, שרתי GraphQL, יישומי אינטרנט או מיקרו-שירותים.
דוגמאות היישום שלנו:
עיבוד משימות ברקע: Bree לאמינות ייצור
מה אנחנו משתמשים בו: מתזמן bree
יצרנו ומתחזקים את Bree מכיוון שמתזמני משימות קיימים לא עמדו בדרישות שלנו לתמיכה ב-worker threads ותכונות JavaScript מודרניות בסביבות Node.js ייצור. זה חל על כל יישום Node.js שזקוק לעיבוד ברקע, משימות מתוזמנות או worker threads.
דוגמאות היישום שלנו:
טיפול בשגיאות: @hapi/boom עבור אמינות ייצור
מה אנחנו משתמשים בו: @hapi/boom
אנו משתמשים ב-@hapi/boom עבור תגובות שגיאה מובנות בכל יישומי הייצור של Node.js. תבנית זו עובדת עבור כל יישום Node.js הדורש טיפול עקבי בשגיאות.
דוגמאות היישום שלנו:
כיצד לנטר יישומי Node.js בסביבת ייצור
הגישה שלנו לניטור יישומי Node.js בסביבת ייצור התפתחה לאורך שנים של הרצת יישומים בקנה מידה גדול. אנו מיישמים ניטור בשכבות מרובות כדי להבטיח אמינות וביצועים עבור כל סוג של אפליקציית Node.js.
ניטור ייצור של Node.js ברמת המערכת
היישום המרכזי שלנו: helpers/monitor-server.js
מה אנחנו משתמשים בו: node-os-utils
ספי ניטור הייצור שלנו (מקוד הייצור בפועל שלנו):
- מגבלת גודל ערימה של 2GB עם התראות אוטומטיות
- סף אזהרה של 25% ניצול זיכרון
- סף אזהרה של 80% ניצול CPU
- סף אזהרה של 75% ניצול דיסק
Warning
ערכי ספים אלה מתאימים לתצורת החומרה הספציפית שלנו. בעת יישום ניטור הייצור של Node.js, סקור את יישום monitor-server.js שלנו כדי להבין את הלוגיקה המדויקת ולהתאים את הערכים להגדרה שלך.
ניטור ברמת היישום עבור ייצור Node.js
סיווג השגיאות שלנו: helpers/is-code-bug.js
עוזר זה מבחין בין:
- באגים בקוד הדורשים טיפול מיידי
- שגיאות משתמש שהן התנהגות צפויה
- כשלים בשירות חיצוני שאין לנו שליטה עליהם
דפוס זה חל על כל יישום Node.js - אפליקציות אינטרנט, ממשקי API, מיקרו-שירותים או שירותי רקע.
מימוש הרישום שלנו: helpers/logger.js
אנו מיישמים הסרת שדות מקיפה כדי להגן על מידע רגיש תוך שמירה על יכולות ניפוי שגיאות שימושיות בסביבת הייצור של Node.js.
ניטור ספציפי ליישום
מימושים של השרת שלנו:
ניטור תורים: אנו מיישמים מגבלות תור של 5GB ופסק זמן של 180 שניות לעיבוד בקשות כדי למנוע התרוקנות משאבים. דפוסים אלה חלים על כל יישום Node.js עם תורים או עיבוד ברקע.
ניטור ייצור של Node.js עם בדיקות תקינות PM2
שיכללנו את סביבת הייצור של Node.js עם PM2 במשך שנים של ניסיון בייצור. בדיקות התקינות של PM2 שלנו חיוניות לשמירה על אמינות בכל יישום Node.js.
מערכת בדיקת תקינות PM2 שלנו
היישום המרכזי שלנו: jobs/check-pm2.js
ניטור הייצור שלנו של Node.js עם בדיקות תקינות PM2 כולל:
- פועל כל 20 דקות באמצעות תזמון cron
- דורש מינימום של 15 דקות זמן פעולה לפני שייחשב תהליך תקין
- מאמת את סטטוס התהליך ואת השימוש בזיכרון
- מפעיל מחדש אוטומטית תהליכים שנכשלו
- מונע לולאות הפעלה מחדש באמצעות בדיקת תקינות חכמה
Caution
עבור שיטות עבודה מומלצות לפריסת Node.js, אנו דורשים זמן פעולה של 15+ דקות לפני שאנו קובעים שתהליך תקין, כדי למנוע לולאות הפעלה מחדש. זה מונע כשלים מדורגים כאשר תהליכים מתקשים בזיכרון או בבעיות אחרות.
תצורת הייצור של PM2 שלנו
הגדרת המערכת האקולוגית שלנו: למד את קבצי ההפעלה של השרת שלנו עבור הגדרת סביבת הייצור של Node.js:
דפוסים אלה חלים בין אם אתם מפעילים אפליקציות Express, שרתי Koa, ממשקי API של GraphQL או כל אפליקציית Node.js אחרת.
פריסה אוטומטית של PM2
פריסת PM2: ansible/playbooks/node.yml
אנו הופכים את כל הגדרת ה-PM2 שלנו לאוטומטית באמצעות Ansible כדי להבטיח פריסות ייצור עקביות של Node.js בכל השרתים שלנו.
מערכת טיפול וסיווג שגיאות ייצור
אחת משיטות העבודה המומלצות החשובות ביותר שלנו לפריסת Node.js היא סיווג שגיאות חכם שחל על כל יישום Node.js:
יישום isCodeBug שלנו עבור ייצור
מקור: helpers/is-code-bug.js
עוזר זה מספק סיווג שגיאות חכם עבור יישומי Node.js בסביבת ייצור כדי:
- לתעדף באגים אמיתיים על פני שגיאות משתמש**
- לשפר את תגובת האירועים שלנו על ידי התמקדות בבעיות אמיתיות**
- להפחית עייפות התראות משגיאות משתמש צפויות**
- להבין טוב יותר בעיות באפליקציה לעומת בעיות שנוצרו על ידי המשתמש**
תבנית זו עובדת עבור כל אפליקציית Node.js - בין אם אתם בונים אתרי מסחר אלקטרוני, פלטפורמות SaaS, ממשקי API או מיקרו-שירותים.
שילוב עם רישום הייצור שלנו
שילוב הלוגים שלנו: helpers/logger.js
הלוגם שלנו משתמש ב-isCodeBug
כדי לקבוע רמות התראה והסרת שדות, מה שמבטיח שנקבל הודעות על בעיות אמיתיות תוך סינון רעשים בסביבת הייצור של Node.js.
תוכן קשור
למידע נוסף על דפוסי טיפול בשגיאות שלנו:
- בניית מערכת תשלומים אמינה - דפוסי טיפול בשגיאות
- הגנת פרטיות בדוא"ל - טיפול בשגיאות אבטחה
ניפוי שגיאות ביצועים מתקדם עם v8-profiler-next ו-cpupro
אנו משתמשים בכלי פרופילציה מתקדמים כדי לנתח תמונות של heap ולנפות באגים בבעיות OOM (Out of Memory), צווארי בקבוק בביצועים ובעיות זיכרון של Node.js בסביבת הייצור שלנו. כלים אלה חיוניים לכל יישום Node.js שחווה דליפות זיכרון או בעיות ביצועים.
גישת הפרופילינג שלנו עבור ייצור Node.js
כלים שאנו ממליצים עליהם:
v8-profiler-next
- ליצירת תמונות מצב של ערימה ופרופילי CPUcpupro
- לניתוח פרופילי CPU ותמונות מצב של ערימה
Tip
אנו משתמשים ב-v8-profiler-next וב-cpupro יחד כדי ליצור תהליך עבודה מלא של ניפוי ביצועים עבור יישומי Node.js שלנו. שילוב זה עוזר לנו לזהות דליפות זיכרון, צווארי בקבוק בביצועים ולמטב את קוד הייצור שלנו.
כיצד אנו מיישמים ניתוח תמונת מצב של Heap
יישום הניטור שלנו: helpers/monitor-server.js
ניטור הייצור שלנו כולל יצירת תמונות אוטומטיות של heap כאשר חורגים מספי הזיכרון. זה עוזר לנו לאתר באגים בבעיות OOM לפני שהן גורמות לקריסות יישומים.
דפוסי יישום עיקריים:
- תמונות מצב אוטומטיות כאשר גודל הערימה עולה על סף 2GB
- פרופיל מבוסס אותות לניתוח לפי דרישה בייצור
- מדיניות שמירה לניהול אחסון תמונות מצב
- שילוב עם עבודות הניקוי שלנו לתחזוקה אוטומטית
זרימת עבודה של ניפוי שגיאות ביצועים
למדו את היישום בפועל שלנו:
- ניטור יישום שרת - ניטור ערימה ויצירת תמונות בזק
- עבודת ניקיון - שמירת וניקוי תמונות בזק
- שילוב לוגר - רישום ביצועים
יישום מומלץ עבור יישום Node.js שלך
לניתוח תמונת מצב של ערימה:
- התקנת v8-profiler-next ליצירת תמונות מצב
- שימוש ב-cpupro לניתוח תמונות המצב שנוצרו
- יישום ספי ניטור בדומה ל-monitor-server.js שלנו
- הגדרת ניקוי אוטומטי לניהול אחסון תמונות מצב
- יצירת מטפלי אותות ליצירת פרופילים לפי דרישה בייצור
ליצירת פרופיל מעבד:
- יצירת פרופילי CPU במהלך תקופות עומס גבוה
- ניתוח עם CPUPro כדי לזהות צווארי בקבוק
- התמקדות בנתיבים חמים והזדמנויות אופטימיזציה
- ניטור שיפורי ביצועים לפני/אחרי
Warning
יצירת תמונות מצב של ערימה ופרופילי CPU יכולה להשפיע על הביצועים. אנו ממליצים ליישם ויסות ולהפעיל פרופילים רק בעת חקירת בעיות ספציפיות או במהלך חלונות תחזוקה.
שילוב עם ניטור הייצור שלנו
כלי הפרופילציה שלנו משתלבים עם אסטרטגיית הניטור הרחבה יותר שלנו:
- הפעלה אוטומטית המבוססת על ספי זיכרון/מעבד
- שילוב התראות כאשר מתגלות בעיות ביצועים
- ניתוח היסטורי למעקב אחר מגמות ביצועים לאורך זמן
- קורלציה עם מדדי יישומים לאיתור ניפוי מקיף
גישה זו עזרה לנו לזהות ולפתור דליפות זיכרון, לייעל נתיבי קוד חם ולשמור על ביצועים יציבים בסביבת הייצור Node.js שלנו.
אבטחת תשתית ייצור Node.js
אנו מיישמים אבטחה מקיפה עבור תשתית הייצור של Node.js באמצעות אוטומציה של Ansible. נהלים אלה חלים על כל אפליקציית Node.js:
אבטחה ברמת המערכת עבור ייצור Node.js
הטמעה שלנו ב-Ansible: ansible/playbooks/security.yml
אמצעי האבטחה העיקריים שלנו עבור סביבות ייצור של Node.js:
- החלפה מושבתת כדי למנוע כתיבת נתונים רגישים לדיסק
- מאגרים של ליבות מושבתים כדי למנוע מאגרים של זיכרון המכילים מידע רגיש
- אחסון USB חסום כדי למנוע גישה לא מורשית לנתונים
- כוונון פרמטרי ליבה הן לאבטחה והן לביצועים
Warning
בעת יישום שיטות עבודה מומלצות לפריסת Node.js, השבתת swap עלולה לגרום לכיבוי עקב חוסר זיכרון אם היישום שלך חורג מכמות ה-RAM הזמין. אנו עוקבים בקפידה אחר ניצול הזיכרון ומגדילים את השרתים שלנו בהתאם.
אבטחת יישומים עבור יישומי Node.js
הסרה של שדה היומן שלנו: helpers/logger.js
אנו מסירים שדות רגישים מיומני רישום, כולל סיסמאות, טוקנים, מפתחות API ומידע אישי. פעולה זו מגנה על פרטיות המשתמש תוך שמירה על יכולות ניפוי שגיאות בכל סביבת ייצור של Node.js.
אוטומציה של אבטחת תשתית
המערכת המלאה שלנו של Ansible לייצור Node.js:
תוכן האבטחה שלנו
למידע נוסף על גישת האבטחה שלנו:
ארכיטקטורת מסד נתונים עבור יישומי Node.js
אנו משתמשים בגישת מסד נתונים היברידית המותאמת ליישומי Node.js שלנו. ניתן להתאים את התבניות הללו לכל יישום Node.js:
יישום SQLite עבור ייצור Node.js
מה אנחנו משתמשים בו:
התצורה שלנו: ansible/playbooks/sqlite.yml
אנו משתמשים ב-SQLite עבור נתונים ספציפיים למשתמש ביישומי Node.js שלנו מכיוון שהוא מספק:
- בידוד נתונים לכל משתמש/דייר
- ביצועים טובים יותר עבור שאילתות של משתמש יחיד
- גיבוי והעברה פשוטים
- מורכבות מופחתת בהשוואה למסדי נתונים משותפים
תבנית זו עובדת היטב עבור יישומי SaaS, מערכות מרובות דיירים, או כל יישום Node.js הזקוק לבידוד נתונים.
יישום MongoDB עבור ייצור Node.js
מה אנחנו משתמשים בו:
הטמעת ההתקנה שלנו: helpers/setup-mongoose.js
התצורה שלנו: config/mongoose.js
אנו משתמשים ב-MongoDB עבור נתוני יישומים בסביבת הייצור Node.js שלנו מכיוון שהוא מספק:
- סכימה גמישה למבני נתונים מתפתחים
- ביצועים טובים יותר עבור שאילתות מורכבות
- יכולות קנה מידה אופקי
- שפת שאילתות עשירה
Note
הגישה ההיברידית שלנו מתאימה את עצמה למקרה השימוש הספציפי שלנו. למד את דפוסי השימוש בפועל של מסד הנתונים שלנו בבסיס הקוד כדי להבין אם גישה זו מתאימה לצורכי יישום Node.js שלך.
עיבוד משימת רקע של ייצור Node.js
בנינו את ארכיטקטורת משימות הרקע שלנו סביב Bree לפריסת ייצור אמינה של Node.js. זה חל על כל אפליקציית Node.js שזקוקה לעיבוד ברקע:
הגדרת שרת Bree שלנו לייצור
היישום העיקרי שלנו: bree.js
פריסת Ansible שלנו: ansible/playbooks/bree.yml
דוגמאות לעבודות ייצור
ניטור בריאות: jobs/check-pm2.js
אוטומציה של ניקוי: jobs/cleanup-tmp.js
כל המשרות שלנו: עיין במדריך המשרות המלא שלנו
תבניות אלו חלות על כל אפליקציית Node.js שצריכה:
- משימות מתוזמנות (עיבוד נתונים, דוחות, ניקוי)
- עיבוד רקע (שינוי גודל תמונה, שליחת דוא"ל, ייבוא נתונים)
- ניטור ותחזוקת תקינות
- ניצול של Worker Thread עבור משימות עתירות CPU
דפוסי תזמון המשימות שלנו עבור ייצור Node.js
למדו את דפוסי תזמון העבודה בפועל שלנו במדריך המשרות שלנו כדי להבין:
- כיצד אנו מיישמים תזמון דמוי cron בייצור Node.js
- טיפול בשגיאות ולוגיקת ניסיון חוזר
- כיצד אנו משתמשים ב-worker threads עבור משימות עתירות CPU
תחזוקה אוטומטית עבור יישומי Node.js ייצור
אנו מיישמים תחזוקה פרואקטיבית כדי למנוע בעיות ייצור נפוצות של Node.js. דפוסים אלה חלים על כל יישום Node.js:
יישום הניקוי שלנו
מקור: jobs/cleanup-tmp.js
התחזוקה האוטומטית שלנו עבור יישומי ייצור של Node.js מתמקדת ב:
- קבצים זמניים ישנים יותר מ-24 שעות
- קבצי יומן מעבר למגבלות השמירה
- קבצי מטמון ונתונים זמניים
- קבצים שהועלו שאינם נחוצים עוד
- תמונות מצב של ערימה מניפוי באגים בביצועים
דפוסים אלה חלים על כל יישום Node.js שמייצר קבצים זמניים, יומני רישום או נתונים המאוחסנים במטמון.
ניהול שטח דיסק עבור Node.js Production
ספי הניטור שלנו: helpers/monitor-server.js
- מגבלות תור לעיבוד ברקע
- סף אזהרה של ניצול דיסק של 75%
- ניקוי אוטומטי** כאשר חורגים מספי האחסון
אוטומציה של תחזוקת תשתיות
אוטומציה של Ansible שלנו לייצור Node.js:
מדריך יישום לפריסת Node.js Production
למד את הקוד בפועל שלנו עבור שיטות עבודה מומלצות לייצור
התחל עם קבצי המפתח הבאים עבור הגדרת סביבת הייצור של Node.js:
- תצורה:
config/index.js
- ניטור:
helpers/monitor-server.js
- טיפול בשגיאות:
helpers/is-code-bug.js
- רישום:
helpers/logger.js
- תקינות התהליך:
jobs/check-pm2.js
למד מפוסטים בבלוג שלנו
מדריכי היישום הטכניים שלנו לייצור Node.js:
- אקוסיסטם של חבילות NPM
- בניית מערכות תשלום
- יישום פרטיות דוא"ל
- טפסי יצירת קשר ב-JavaScript
- אינטגרציה של ריאקט אימייל
אוטומציה של תשתית עבור ייצור Node.js
ספרי ההדרכה שלנו ב-Ansible ללימוד עבור פריסת Node.js בייצור:
מקרי המחקר שלנו
הטמעות הארגוניות שלנו:
סיכום: שיטות עבודה מומלצות לפריסת Node.js בייצור
תשתית הייצור Node.js שלנו מדגימה שיישומי Node.js יכולים להשיג אמינות ברמה ארגונית באמצעות:
- בחירות חומרה מוכחות (AMD Ryzen לאופטימיזציה של 573% של ביצועי ליבה יחידה)
- ניטור ייצור Node.js שנבדק בקרב עם ספים ספציפיים ותגובות אוטומטיות
- סיווג שגיאות חכם לשיפור תגובת אירועים בסביבות ייצור
- ניפוי שגיאות ביצועים מתקדם עם v8-profiler-next ו-cpupro למניעת OOM
- הקשחת אבטחה מקיפה באמצעות אוטומציה של Ansible
- ארכיטקטורת מסד נתונים היברידית מותאמת לצורכי האפליקציה
- תחזוקה אוטומטית למניעת בעיות ייצור נפוצות של Node.js
נקודה חשובה: יש ללמוד את קבצי ההטמעה ופוסטים בבלוג שלנו במקום לפעול לפי שיטות עבודה מומלצות כלליות. בסיס הקוד שלנו מספק דפוסים אמיתיים לפריסת Node.js בייצור שניתן להתאים לכל יישום Node.js - אפליקציות אינטרנט, ממשקי API, מיקרו-שירותים או שירותי רקע.
רשימת משאבים מלאה עבור ייצור Node.js
קבצי היישום המרכזיים שלנו
הטמעות השרת שלנו
אוטומציה של התשתית שלנו
פוסטים טכניים בבלוג שלנו
- ניתוח מערכות אקולוגיות של NPM
- הטמעת מערכת תשלומים
- מדריך טכני לפרטיות בדוא"ל
- טפסי יצירת קשר ב-JavaScript
- אינטגרציה של ריאקט אימייל
- מדריך פתרונות לאירוח עצמי