מערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים
-
שלום
אני בונה מערכת טלפוניה שבה אפשר לבצע הרשמות וכדומה אני רוצה שהלקוחות יוכלו לראות את ההרשמות בקובץ CSV במערכת
המערכת הטלפונית תהיה על כמה שרתים בשביל עומסים אבל הקבצים יושבים על שרת אחד.
עכשיו מתחילה הבעיה - מה אם שני אנשים מסיימים את ההרשמה באותו זמן? הקובץ יכול להפוך ל-Corrupt file
דרך אחת לטפל בזה היא שכל ההרשמות ילכו לשרת אחד ומשם יהיה תור אבל זה יעשה את המערכת למה שנקרא באנגלית "Single Point of Failure" - שאם השרת לא יגיב טוב וכדומה וגם לא מעניין שיהיה לי שרת נוסף בשביל זה
ולכן אני שואל את חברי הפורום אם יש דרכים אחרות לעשות את זה או לשמור על קובץ אחרים
-
@צדיק-תמים כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
@google3 למה אתה שומר נתונים בקבצים ולא בדאטהבייס?
מסד נתנים אני צריך לבנות אתר שלום ללקוח לראות ההרשמות עם כל מיני אפשרויות מש"כ CSV הוא יכול לפתוח בקלות. בנוסף אני שומר כל הרשמה בתוך השלוחה של ההרשמה עצמה.
במסד נתונים אני שוב הייתי קשור לשרת אחד, לעומת זאת כאן לכל מערכת יש מקום SSD משלה (שהלקוח משלם) ושם אני שומר את הנתונים בתוך קובץ בקיצר נראה עדיף לעשות משהו מקומי ממסד נתנים
-
@google3 יש לי הרבה ביקורת על תהליך החשיבה שלך בנושא
@google3 כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
עכשיו מתחילה הבעיה - מה אם שני אנשים מסיימים את ההרשמה באותו זמן? הקובץ יכול להפוך ל-Corrupt file
הבעיה גם אם היה לך רק שרת אחד
אבל זה יעשה את המערכת למה שנקרא באנגלית "Single Point of Failure"
נו נו, ממתי זה בעיה במערכות קטנות? אין לך חוץ מזה עוד "Single Points of Failure"?
אבל אני חושב שזה פתרון עקום לגמרי לבעיה שאתה יוצר בעצמך. בשביל דבר זה בדיוק נועד מסד נתונים
וגם לא מעניין שיהיה לי שרת נוסף בשביל זה
אי משום הא לא אריא, זה לא צריך להיות שרת מספיק שירות נפרד. אבל כנ"ל אני לא מחזיק מפתרון זה
מסד נתנים אני צריך לבנות אתר שלום ללקוח לראות ההרשמות עם כל מיני אפשרויות
זה ממש פשוט להמיר רשומות של רשומות ממסד נתונים ל-CSV.כמה שורות PHP. זה ממש לא "לבנות אתר שלם"
במסד נתונים אני שוב הייתי קשור לשרת אחד
זה לא אמור להיות שיקול. מסדי נתונים לא נתקעים סתם. אם זה בנוי בצורה נורמלית זה יעבוד.
בקיצור, דרך המלך הוא להשתמש במסד נתונים
-
@צדיק-תמים כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
@google3 אם אני מבין נכון מערכת אחת יכולה לרוץ בפועל על שני שרתים ולכתוב לכונן SSD יחיד נתונים? ואתה מחבר SSD אחד לשני השרתים? איך?
בעקרון יש לי שרת/שרתים NFS-Gloucester וכל שרת פריסוויטש מחבר ל SSD שלו או יותר מאחד
אבל אני יכול "למאונט ווליום" מכל מקום -
@yossiz כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
הבעיה גם אם היה לך רק שרת אחד
לא ממש אז אני יכול לסגור הקובץ (File looking) ולעשות מהלך של תור
@yossiz כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
נו נו, ממתי זה בעיה במערכות קטנות? אין לך חוץ מזה עוד "Single Points of Failure"?
מי אומר שמדבר במערכת קטנה ?
אני רוצה לפתוח את זה שיהיה מערכת גדולה בע"ה
וכן בניתי כל דבר שאין אף "דבר אחד" שיכול להוריד המערכת ( "Single Points of Failure")
@yossiz כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
זה ממש פשוט להמיר רשומות של רשומות ממסד נתונים ל-CSV.כמה שורות PHP. זה ממש לא "לבנות אתר שלם"
אוקיי אני אסביר עכשיו אני משתמש עם Next cloud (כמו גגול דרייוו אבל בקוד פתוח)
זה אומר שחוץ מקבצים ותקיות(ולהוריד ולהעתיק ולשתף וכד) אין Front end בכלל ללקוח -
@google3 סלח לי. יש לי תחושה שאתה עדיין אוחז בתירוצים ולא בבירור האמת. אז תן לעצמך סטירה בשמי... תפסיק עם התירוצים.
בא נניח כעת שזה לא תירוצים.
לא הבנתי בכלל את הארכיטקטורה שלך, אבל א: אתה יכול לשמור לקובץ טקסט פיזי, ב. אתה יכול לעשות שרת תור רק שהיה לך הסתייגות למקרה כשל.
אז הצענו לך את ההצעה הכי בעולם: מסד נתונים. זה בעצם הפתרון שהצעת עם התור, אבל לא אתה צריך לכתוב את הקוד שמנהל את זה, וזה משוכלל הרבה יותר ממה שהיית כותב, וגם תרשה לי לקבוע - אין שמה שום כשלים בדרך הטבע (אלא אם כן השרת מקונטבו למשל, גם זה אני לא בטוח).
מאוד קל לעשות ביזור לשם שרידות, ואז להסתבך בשאלה "הקטנה" של התיאום והסנכרון.
"מערכות גדולות" לא הכוונה היקף, אלא הכוונה חשיבות. אם חיים של אנשים היו תלויים בזה או משהו שמתקרב לכך, היינו באמת ממליצים לך על ביזור מסויים. ביזור אמיתי עושים עם מסד נתונים עם רפליקציות, או סתם מסד חירום (במקרה של כשל בשמירה במסד הראשי) בכל מופע.
ההצעה של הCSV לא מחייבת front-end. כמו שיש לינק לדרייב או הדומה לו, ימשיך להיות לינק ישיר לCSV שלא באמת קיים, PHP יטפל בניתוב הזה ויחזיר CSV עדכני מהמסד בכל בקשה. אם אתה מתכוון שהשרתים לא חשופים בכלל לרשת, אוקי, גם עוד לא התקנת מסד נתונים. שלוש צעדים נותרונ.ב. הקביעה שלי שאין כשלים היא מוגזמת אבל היא באה לתת איזון להגזמה הרבה יותר גדולה.
הסיכוי הכי גבוה לכשל בשרת מסד נתונים זה היעדר מקום בדיסק, זה יכול לקרות אם "הולכים לישון" למשך זמן בו יחס השמירה גדול ביחס למקום הפנוי. -
@google3 כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
וכן בניתי כל דבר שאין אף "דבר אחד" שיכול להוריד המערכת ( "Single Points of Failure")
בעבודה עם CSV אתה עלול לגרום למצב שזה יהיה הדבר שיוריד את המערכת הרבה לפני שאיזה חוות שרתים עולה באש או שמישהו חתך בטעות את הכבל רשת לא חושב שזה בריא אם יהיה לך קובץ עם עשרות אלפי רשומות ומאות כתיבות בשניה (לא תרחיש ביזארי, תחשוב מישהו יחליט שבונה על המערכת שלך מערכת מכירת כרטיסים למירון)
גם אם לא יהיה שום צוואר בקבוק בכתיבה לקובץ המשתמש יקבל קובץ ענק להורדה בלי אפשרות לסינון פשוט של רשומות 0-1000 וכדו'
וזה עוד לפני שתרצה להוסיף פיצ'ר פשוט של תנאי שמשתמש לא יכול להרשם פעמיים ואז אתה צריך לעבור על כל השורות ולבדוק האם הרשומה קיימת או לא (במסד נתונים יש קיצורי דרך ולא קוראים מהדיסק את כל השורות בכל קריאה)
אני יודע שזה מגניב שיש לך מערכת שאין בה SPOF אבל לא תמיד זה שווה את המאמץ, וכנראה אף פעם לא תגיע ל100% כי גם אם תקים 2 שרתי קמיליו בחוות שרתים נפרדות הספק שלך יכול ליפול ולא יהיה מי שיעביר לך את השיחות....
-
@nigun כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
אני יודע שזה מגניב שיש לך מערכת שאין בה SPOF אבל לא תמיד זה שווה את המאמץ, וכנראה אף פעם לא תגיע ל100% כי גם אם תקים 2 שרתי קמיליו בחוות שרתים נפרדות הספק שלך יכול ליפול ולא יהיה מי שיעביר לך את השיחות....
צריך לעשות כל מה שאפשר וזה מה שאני עושה, ויכול להעיד על זה מי שמשתמש בשרתים שלי.
אולי אני קצת מגזים בגלל שאני מגיע מטראומה ממערכת שהייתה עד עכשיו שהיו בה בעיות כל יום עם לקוחות שלא יכולים למחול לי עד היום (עם הפסד ענק).
אבל עדיין יש לי 2 שרתי קמיליו, 2 שרתי פריסוויץ' וכדומה.
וגם אני בטוח 101 אחוז שהספק גם עובד בשיטה כזו שלא יהיה Single Points of Failureעכשיו הנושא של הרשמה לא נורא עם זה נפל לכמה דקות ואם היה בעיה אפשר לתקן, וזה שונה משיחות והשמעת קבצים שזה צריך לעבוד 100 אחוז ואם יש דקה של בעיה אני כבר בבעיה (ברוך השם יש לי יותר מ-150 שיחות לדקה ומליון + שיחות לשבוע).
אבל כבר בניתי את המערכת שלי דרך קבצים ולא עם DB חוץ מ-CDR ובוקמרקס שכן עובדים עם DB, ולכן הכי טוב אם אפשר לעשות גם הרשמה עם קובץ וכמו שאני כותב כבר למעלה, שעם מערכת קבצים יש המון פונקציות שאני לא צריך לעשות ומגיע ממילא ואחד מזה הוא שאין לי בכלל Front End (אני הולך לעשות, אבל עד שאני עושה המערכת מוכן כבר להשתמש במערכת).
זו תמונה מקמיליו אחד ורק שיחות נכנסות.
אגב מה שמעניין הוא שספק השרתים שאני משתמש בו, Hetzner, הפסיק לעבוד האינטרנט למקומות מסוימים לכמה שעות בגלל כבל אינטרנט שנחתך קישור אז כמו @nigun אומר אי אפשר להיות 100 אחוז SPOF אבל עדיין צריל לעשות מצידנו מה שאפשר
-
@dovid כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
אז תן לעצמך סטירה בשמי... תפסיק עם התירוצים.
קודם כל נתתי!
אני באמת כבר אחר בירור דברתי עם המון אנשים בנושא וכן בכל נושא במערכת כולל @nigun ובתכם כמה שיש להם מערכת פעיל וגם אני יש לי כמה מערכת פעילות אז יש לי קצת נסיון (אכן גם שיניתי את דעתי אחרי בירור כאן בפורום)
@dovid כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
וגם תרשה לי לקבוע - אין שמה שום כשלים בדרך הטבע
אכן אתה צודק מסד נתונים בעצמו אין כמעט כשלים בנושא מסד נתונים בעצמו העניין הוא כמה
א) כשאתה עושה מערכת קבצים יש לך אוטומטית הרבה דברים, כמו צד לקוח שאפשר לפתוח שלוחות באמצעות פתיחת תיקייה. אפשר להעתיק ולגזור, למחוק, אפשר לשתף הרשאות עם אנשים אחרים לתיקייה וכד וכד
ב) אם כל המערכת שלך היא על מסד נתונים יש פה עניין של עומס (כמובן שאפשר הכל לסדר, אני רק אומר הפרו והקאנס)
ג) אתה פתוח את אצמך לבעיות בגלל כל דבר יש פה 2 דברים 1 לסדר המסד נתנים 2 ההקלטה אצמו - כשאתה מוחק אתה צריך למחוק גם את הקובץ במסד נתונים וגם את ההקלטה עצמה. אותו דבר לכל פעולה, ואם יש עומס מתחילה שרשרת של בעיות (כמובן גם את זה אפשר לסדר, אני רק אומר הפרו והקאנס)
@dovid כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
ההצעה של הCSV לא מחייבת front-end. כמו שיש לינק לדרייב או הדומה לו, ימשיך להיות לינק ישיר לCSV שלא באמת קיים, PHP יטפל בניתוב הזה ויחזיר CSV עדכני מהמסד בכל בקשה. אם אתה מתכוון שהשרתים לא חשופים בכלל לרשת, אוקי, גם עוד לא התקנת מסד נתונים. שלוש צעדים נותרו
אני מצרף תמונה מהמערכת שלי שאני (מערכת הקבצים) תלמדו לי איך אני יכול לעשות פה PHP פשוט (חוץ עם אני לומד הקוד של Next clued ואני עושה דף חדש ששם יש כל הרשמות ולעשות שאפשר למחוק ולשנות ההרשמה קיים אני לא אומר שזה לא אפשרי אבל זהנ לא כמה שירות קוד לדעתי)
-
@google3 ניסינו לשנות את דעתך בלי הרבה הצלחה
אז בוא נוותר על זה, ונחזור לשאלה המקוריתתוכל לפרט יותר בדיוק את השאלה?
האם אתה חייב לשמור הכל בקובץ אחד גדול? אולי אפשר שכל סשן מקביל יפתח קובץ חדש?
איך הדיסק מחובר לשרת? אם דרך NFS, האם אין שם נעילה של קבצים? (אני לא בקי בזה, והתעצלתי לחפש, אבל נדמה לי שיש) -
@google3 אולי אתה יכול לשמור לDB ואחת לX זמן לייצא את כל הCSV שהיו להם תוספות בX הזמן שחלף לתיקיות הרלוונטיות?
כמובן שזה ידרוש ממך CRON מסויים, אבל יש מצב שעד שעד שיהיה מוכן הממשק משתמש תהנה מ2 העולמות, ואח"כ המעבר יהיה חלק יותר.
בנוסף, יש מצב שבPHP אם אתה משתמש בהוספת בלבד לקובץ הוא כן יתמודד עם זה עד גודל מסויים (באותו שרת כנראה שבוודאי. אתה שאלת על 2 שרתים....)file_put_contents($filename, $data . PHP_EOL, FILE_APPEND);
אז אולי אתה יכול לכתוב ל2 קבצים כל שרת עם מזהה נפרד (לדוגמא עם סיומת 1/2) ולעשות שילוב בין הקבצים פעם בכמה זמן.
(לדעתי האישית במקרה שלך אם אתה מכוון לעומסים וסקייל גבוה - תחזור לDB כמו שהציעו כאן)
-
@clickone כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
כמובן שזה ידרוש ממך CRON מסויים
הוא לא חייב לעבוד עם cron
אפשר לשמור הכל בDB ואחרי כל רישום בDB לפנות לשירות נפרד ולהפעיל טריגר ליצירת CSV והשירות הזה ינהל את כל התור והבקשות המקבילות
אחרת אם יש לו אלפי קבצים בשרת יהיה לו אלפי cron jobs שרצים בלי סיבה -
@yossiz כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
@google3 ניסינו לשנות את דעתך בלי הרבה הצלחה
אז בוא נוותר על זה, ונחזור לשאלה המקוריתתוכל לפרט יותר בדיוק את השאלה?
האם אתה חייב לשמור הכל בקובץ אחד גדול? אולי אפשר שכל סשן מקביל יפתח קובץ חדש?
איך הדיסק מחובר לשרת? אם דרך NFS, האם אין שם נעילה של קבצים? (אני לא בקי בזה, והתעצלתי לחפש, אבל נדמה לי שיש)אני רוצה לעשות כמו שיש במערכת בימות המשיח "הקלטת נתונים" וכל הקלטת נתונים תהיה בתוך השלוחה בקובץ
זו רק דוגמה אחד אני גם רוצה לעשות כמו שיש בימות המשיח (וכן מערכת אחרת) List_all_information שבה יהיה כל המידע על המאזינים: השם, מספר טלפון, מייל, סיסמה וכדומה, וכמה פעמים היו במערכת. לדוגמה, ה-CDR ייקח ממנו מידע וכדומהאת ה-List_all_information, בגלל שזה פעם אחת במערכת, אני יכול יותר לעשות במסד נתונים מה שאין כן כל השאר - אם אני יכול לעשות בקובץ, יהיה לי עדיף מהרבה סיבות
-
@nigun כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
@clickone כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
כמובן שזה ידרוש ממך CRON מסויים
הוא לא חייב לעבוד עם cron
אפשר לשמור הכל בDB ואחרי כל רישום בDB לפנות לשירות נפרד ולהפעיל טריגר ליצירת CSV והשירות הזה ינהל את כל התור והבקשות המקבילות
אחרת אם יש לו אלפי קבצים בשרת יהיה לו אלפי cron jobs שרצים בלי סיבהמה עם קורה הפוך הלקוח עולה קובץ? אז לכראה אין ברירה אלא לעשות cron job?
-
@google3 כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
@nigun כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
@clickone כתב במערכת טלפנית- התמודדות עם הרשמות ל CSV מכמה שרתים:
כמובן שזה ידרוש ממך CRON מסויים
הוא לא חייב לעבוד עם cron
אפשר לשמור הכל בDB ואחרי כל רישום בDB לפנות לשירות נפרד ולהפעיל טריגר ליצירת CSV והשירות הזה ינהל את כל התור והבקשות המקבילות
אחרת אם יש לו אלפי קבצים בשרת יהיה לו אלפי cron jobs שרצים בלי סיבהמה עם קורה הפוך הלקוח עולה קובץ? אז לכראה אין ברירה אלא לעשות cron job?
מחיפוש מהיר נראה שיש שם אופציה של הפעלת טריגרים
https://docs.nextcloud.com/server/latest/developer_manual/digging_deeper/flow.html#configuration-component