בעניין איתחול ועדכון שרת HTTP
-
אני מתאר לעצמי שזו בעיה נפוצה:
עשינו שינוי קטן בשרת http. נניח ב nodeJs
איך עושים שהשינויים יחולו? האם להפעיל מחדש את השרת?
מה עם כל הסשנים?
אני מניח שעם הסשנים ספציפית אפשר להסתדר (לשמור אותם במסד נתונים). אבל מה עם כל הפעולות שהמשתמש באמצע לעשות, כגון העלאת/הורדת קובץ. פעולות חשובות אחרות, כגון סליקת אשראי וכדו'.
האם יש אפשרות שכל שינוי שנעשה ישתקף מיידית? (נניח שינינו פונקציה, פעם הבאה שהיא תיקרא תעלה הפונקציה החדשה).
אני בעיקר מתמקד בnodeJs, אבל מעניין אותי תיאורטית בכל שרת.
(זכור לי שב C9 כל שינוי משתקף מיידית.)
אני לא מדבר על כלים כמו forever שפשוט מפעילים מחדש את השרת. -
סשנים בד"כ לא נשמרים בRAM אלא בדיסק בקבצים או במסד, לכן לגביהם אין בעיה.
לגבי קבצים בהעלאה זו נחשבת בעיה זניחה ברוב האתרים, ובאמת בזמן שחרור גירסה או בכל נפילה של שרת זה מתאפס.
אפשר להתגבר גם על זה עם קוד מתאים, אבל זה לא שווה את זה במקרים קלאסיים. -
@dovid אין חיה כזאת שכל שינוי מתבצע אוטומטית ללא צורך באיתחול?
במו עיני ראיתי מתכנת של שרת רציני עם קריאות כל רגע, עושה שינוי, שומר אותו, ותוך רגע השרת היה מעודכן. (dot net בסביבת visual studio).אני מדבר כמובן על איתחול של תוכנת השרת עצמה. לא על המכונה.
-
למיטב ידעתי שינוי בקוד של צד השרת מחייב ריסטרט הן בנוד והן בדוטנט (דוקא בPHP לא צריך).
גם אם אפשר תיאורטית להתגבר על זה זה אומר קוד לא יעיל ומסובך לחינם.
.
ייתכן שהשינוי שההוא עשה היה בקבצים סטטיים.
או שאתה לא הבנת והוא כן עשה ריסטרט (זה לוקח שניה, וזה נעשה אוטומטית במידה וזה נעשה ע"י WebDeploy, אבל העלאות ייתקעו למיטב ידעתי). -
בPHP זה מיידי.
בשאר בד"כ צריך ריסטארט.בדוטנט זה מתחלק ל2.
- אם זה פרוייקט מסוג website אז בשנייה ששמרת /החלפת את הקובץ בחדש, הקריאה הבאה לדף תביא את הקוד המעודכן ולא צריך לעשות כלום (@מנצפך זה כנראה מה שראית בעיניים)
- אם זה פרוייקט מסוג פרוייקט, שם אם עשית שינוי בקוד, אז הוא צריך build מחדש וזה עושה סוג של ריסטארט לשרת (אין צורך לעשות ריסטארט בIIS - הפרוייקט פשוט מתאפס)
גם בפרוייקט הזה, שינויים בקבצי ASPX או cshtml/vbhtml יחולו מיד עם השמירה או ההחלפה שלהם.
-
אפשר לעשות שייטען אוטומטית, אבל זה מפעיל שוב את כל האפליקציה.
הטבע של nodejs זה כמה קטעי קוד קצרים שרצים מיידית ומחכים לבקשות. שינוי בקטע הקוד שכבר רץ בטח שמחייב טעינה חוזרת, אלא"כ יכינו בתוך האפליקציה עצמה wathc לתיקיה, ויטענו את הקוד דינמית. זה אפשרי לגמרי ומיותר לגמרי. -
-
@מנצפך אמר בבעניין איתחול ועדכון שרת HTTP:
@dovid @אהרן
אני מבין שזה רק דואג לעניין הסשנים. לא עוזר לשאר העניינים (כמו העלאת קבצים או עיסקאות באמצע פעולה).
נכון?יש לך טעות בסיסית מתחילת השרשור. שסנים, בכל מקרה מוגנים, והם יהיו בדיוק איפה שהשארת אותם, אוקי? אלא"כ עשית MemoryStore שרק אז יש לך בעיה.
"עסקאות באמצע" זה מחולק לשתיים. הצד לקוח שהוא באמצע זה פשוט שסנים. אז אתה מכוסה. הבעיה זה צד שרת, אם למשל אתה כותב לDB שבוצע תשלום, ומחכה לקאלבק בשביל לעשות פעולה נוספת, אני לא חושב שיש דרך בעולם למנוע כשל בשלב הזה.
במערכות גדולות כנראה שמים פילטר כללי, שבמצב פיתוח עוצר את כל הבקשות. ואז לאחר דקה אפשר להיות בטוחים שאפשר לעשות ריסטרט תוך שמירת שסנים כמובן.