אם אין רעיונות אתחיל להציע דברים גסים, כי נראה שאין הרבה ברירה.
ליצור קובץ טקסט שמכיל את ההודעה "היי אנחנו לקראת פיבלוש ולכן כל הבקשות לא נענות כעת נא להמתין טיפה", הפייפליין בודק את קובץ הקטסט ואם הוא קיים ומכיל את ההודעה הוא פשוט שולח אותה ללקוח. לאחר כמה דקות שהקובץ הזה קיים לא סביר שיש ריקווסט שנמצא באמצע עבודה ואז מפבלשים.
גועל נפש אבל אני לא רואה משהו יותר טוב.
ארכיטקט
-
איך לפבלש ASP.NET בצורה בטוחה -
MYSQL איחוד תוצאות וחיפוש בתוך התוצאות המאוחדותSELECT items.*, GROUP_CONCAT(items_tags.name, ',') as tags FROM items LEFT JOIN items_tags ON items_tags.item_id = items.id WHERE items.id IN (select t.item_id from items_tags as t where t.name='computer') GROUP BY items.id
-
הפעלת פונקציה אסינכרונית ללא await@רפאל אז זה בעצם אומר גם בין היתר שהאפליקציה לא הולכת לישון אף פעם? בניגוד למקובל ב IIS שאחרי X דקות ללא ריקווסטים מרדימים את האפליקציה.
שהרי אם הגדרתי נניח טיימר ויש לו כל הזמן משימות בצנרת אסור לו לישון. -
הפעלת פונקציה אסינכרונית ללא await@רפאל חסר לי כאן משהו בסיסי
האם מדובר בפרוסס נפרד לחלוטין ברמת ה windows? זה חשוב מאוד. -
API בנק לאומיחסרה בשוק חברת פינטק מורשית, שהשירות שהיא תיתן זה בדיוק זה, עבור חברות שאין להן רישיון כזה, הם יהוו גשר מול הבנק.
אממה למי יש כוח להתקשקש עם זה. -
API בנק לאומיתגובה: שליפת נתונים מבנקים
https://www.leumiopenbanking.co.il/how-to-start
לפני שאני שורף כמה שעות מישהו כאן כבר התברבר עם זה? יעזור מאוד.
תודה.
-
איך לפבלש ASP.NET בצורה בטוחההרעיון הוא שלא להפריע לבקשות שבאמצע עיבוד.
תמיד כשאני מפבלש אני נתקל בשגיאה משונה, ורק בפעם השניה הפיבלוש מצליח (כנראה אחרי שהוא עוצר את הסרביס) החשש: חיוב כרטיס אשראי או טרנזקציית SQL באמצע עבודה.
טרם מצאתי באינטרנט תשובה ברורה וכנראה שלא חיפשתי נכון מספיק. -
הפעלת פונקציה אסינכרונית ללא await@רפאל אמר בהפעלת פונקציה אסינכרונית ללא await:
@ארכיטקט לא ברור לי למה אתה קורה "התרחיש". הפתרון שהצעתי הוא הפתרון היעיל ביותר שקיים היום עבור פעולות אסינכרוניות קצרות וארוכות כאחד.
הדוגמא ש @dovid נתן היא קלאסית, יוזר לוחץ על לחצן "שלח מיילים לכל המדינה", או "שלח חיוב לעשרה מיליארד כרטיסי אשראי", וכל כיו"ב.
הוא מקבל הודעה OK 200 "תודה לך, אנחנו מטפלים בבקשה שלך, אתה יכול להמשיך בענייניך". מתוך הנחה שהפרוסס ימשיך, איתו או בלעדיו. עד שיסיים את שלו.
במקום זה עלי להיות מוטרד מכך שמא יסגור את הטאב ויהרוג את הריקווסט וכן הלאה. ועל מנת שלא להיות מוטרד מכך, עלי לרשום בקובץ טקסט בדיסק הקשיח או בכל מקום פרסיסטנטיאלי, לבצע משימה נפרדת וכן הלאה. מקווה שאני מובן מספיק טוב. -
הפעלת פונקציה אסינכרונית ללא await@רפאל אמר בהפעלת פונקציה אסינכרונית ללא await:
הדרך המומלצת להריץ משימות רקע בASP.NET בפרט ובNET. בכלל, היא שימוש בHosted Service
מכיר את זה, יש גם כלים לניהול ג'ובים וכדומה. זה לא התרחיש.
@dovid אמר בהפעלת פונקציה אסינכרונית ללא await:
@רפאל לא אכפת לי "להמתין", רק תרשה לי לשחרר את הבקשה עם תשובה מוגמרת ("OK אנחנו תיכף עושים זאת").
זה בדיוק התרחיש, אני רוצה שהמערכת תעשה "עוד כמה סידורים קטנים" אחרי שהתקבלה תשובה, בשביל זה אני חייב להרים מפלצות? ולפבלש אותם עם כל שינוי?
הרי הארכיטקטורה לפי דבריך תהיה רישום בקובץ טקסט שיש "משימה לעשות" ואז הסרביס השני יבצע את זה. לא הרעיון הכי נקי בעולם.... אבל אם זה מה יש מי אני שתאווכח. -
הפעלת פונקציה אסינכרונית ללא await -
פרומיסים לוקחים זמן?@dovid אמר בפרומיסים לוקחים זמן?:
JS היא אסינכרונית
סליחה שאני מתקן את מורי ורבי אבל אין משוא פנים בתיכנות, JS היא שפה סינכרונית לחלוטין!!!!
כל מה ש"אסינכרוני" ב JS אלו משימות API שהדפדפן עושה בשבילו (כגון קריאות הטטפ או אינטרוול וכדומה), וזה מה שנכנס ללולאת האירועים. -
ארגון מסד נתונים, רשימת תקשורת ושיחות עם הלקוח.מניסיון פחות מחמש מיליון רשומות זה בכלל לא נורא, רק תהיה זהיר עם אינדקסים וג'וינים.
כשזה מתחיל לעבור את הסך הזה תעשה אירכוב לדברים ישנים וכדומה, זה גם לא נורא כל כך, את האירכוב אפשר לעשות לדטה בייס אחר, או לסוג אחר של דטה בייס יש בשפע מבוססי מסמך שם כמות הרשומות היא בלתי מוגבלת (כמעט) -
הפעלת פונקציה אסינכרונית ללא awaitאני מעוניין להפעיל פונקציות בשיטת "שגר ושכח" מבלי לעכב שום דבר במערכת, ממה שאני קורא בתיעודים של מייקרוסופט זה לא מומלץ מבחינת ארכיטקטורה כי "לרוב" אתה רוצה שהדברים ייעשו בזה אחר זה וכו'. אבל לא קראתי שיש סיכון ממשי שהפונקציה עלולה לא לסיים את הביצוע שלה בגלל הריגת טרידים וכדומה. כלומר זוהי פעולה שמותרת על פי חוק.
האם אני צודק במה שאמרתי? למשל אם אני עובד עם ASP.NET קיבלנו במסורת שאחרי שהוא החזיר ריספונס "הכל מת", אבל אם פונקציה אסינכרונית ששיגרתי קודם עדיין לא סיימה את עבודתה? היא תמות יחד עם פלישתים? או שהוא ממתין עד שכל הפונקציות האסינכרוניות יסיימו את עבודתן ואז הורג את הפלישתים בלבד. מזיכרון מעומעם קראתי פעם שהמשגר פונקציה אסינכרונית ללא אווייט דומה למשחק ברולטה רוסית בעצימת עיניים. בכה הדוד בוב ואמר לא די לו למהמר שהוא משחק ברולטה אלא שעוצם את עיניו. -
נעילת קטע קריטי בקוד אסינכרונילא יודע איך להסביר את זה אבל בזמנו קיבלתי שגיאות שזה עובר את המקסימום טרידים שהוגדרו וכו' (כי הפונקציות משורשרות בעומקים אדירים), עכשיו זה נעלם, הקוד לא השתנה כל כך. אבל נו נו כל עוד עובד נמשיך עם זה.
תודה לכל המסייעים.
-
נעילת קטע קריטי בקוד אסינכרונישלום לכולם
היו היו ימים טובים ועליזים שבהם הייתי נועל קטעים קריטיים (רוצה לומר: קוד שאסור שיפעל במקביל מ2 טרידים וכדומה כגון שהוא עשוי להוסיף 2 שורות לדטה בייס כאשר הבדיקה מתבצעת בתחילת הקטע וכן הלאה) ב C# על ידי מילת המפתח lock ומכניס לתוכה אובייקט כלשהו בהתאם לדרישה.
אממה מאז שהעולם הפך אסינכרוני וכ 70% מהפונקציות הפכו לאסינכרוניות או בגלל מהותן, או בגלל שהן קוראות לפונקציות אסינכרוניות. הקסם של lock כבר לא קיים. אז מה האלטרנטיבות? ממה שראיתי יש סמפור סלים וכל מיני דברים שאינני מבין אותם כלל, וכאשר ניסיתי להעתיק קטעי קוד של הפתרונות הללו, נתקלתי בשגיאות משונות שלא הצלחתי להבין אותן בגלל שאינני מבין את הבסיס של סמפור סלים.
מודה ומתוודה שכבר שנה אני דוחה את הנעילות הללו, עד שקרתה תאונה כצפוי, ואני אנה אני בא. אז מי שיכול לכוון כאן לנושא הזה מאיפה להתחיל יבורך מפי עליון אמן. -
שאלה פילוסופית עד איזו רמה של מיקרו אופטימיזציה האדם מצווה לדקדק@yossiz במילים אחרות אין פוליסת ביטוח נגד קללת בזעת אפך תאכל לחם.
-
שאלה פילוסופית עד איזו רמה של מיקרו אופטימיזציה האדם מצווה לדקדקמקבל את כל דברי חכמים מבלי כחל ושרק.
אבל מוסיף עוד משהו שאני חווה לפעמים, מיקרו אופטימיזציה אכן לא משפיעה לשעתה, אבל כשמגיע הרגע שאתה רואה ריקווסט בן 4-5 שניות, ואתה מבין שזה עוד עלול להידרדר, אז אתה פתאום מוצא את עצמך צולל בעמקי הקוד לגילוי הבעיה. וזה קרה לי ממש אתמול כשהתחלתי לטפל בבעיה כזו, התברר לי שיש קובץ טקסט שאני קורא אותו עשרות אלפי פעמים מהדיסק הקשיח (ועוד מפרסר אותו ג'ייסונאית) בעקבות לולאה שהצטרפה לחגיגה. ובמשך שנים כאשר השירות הזה ניתן ללא לולאות, אכן לא היתה לכך משמעות, ולא היה עניין "לשמר" את הטקסט הזה בזיכרון, אבל כשלולאה רצחנית נכנסה לתמונה ברור שהעסק הזה קיבל משקל עצום. לקח לי שעתיים עד שהגעתי לנקודת הקוד הזו שקבורה בעומק 4 ק"מ מתחת לאדמה.
אז זה לא אומר שההרגלים לא היו טובים, אבל כאשר גדולי ישראל בראשות מרן ראש הפורום שליט"א (לאורו לאורו לאורו Patch Patch Patch Patch Patch) אמרו שזוהי הדרך הנכונה, אנחנו נלך בה, זה המחיר של הליכה בדרך הנכונה, וכנראה שזה שווה את המחיר.
אגב הפתרון המובן מאליו במקרים כאלו הוא קאש מוגבל לזמן, ומקסימום אחת לכמה ריקווסטים מישהו יסבול קצת. -
שאלה פילוסופית עד איזו רמה של מיקרו אופטימיזציה האדם מצווה לדקדקנטייתי כמובן להחמיר ולחסוך גם זמן עיבוד של מחרוזת ורג'אקס וכדומה, אולם יודע אני שחלוקים עלי חביריי, ולכן אני מנסה למצוא את דרך המלך בנושא.
נושא ספציפי שעומד לנגד עיניי כרגע היא מחלקה שתפקידה לבצע סוג של "תרגום" כפשוטו, סטרינג כנגד סטרינג, עם כל מיני עיבודים שונים ומשונים ורעג'עקס וכדומה. חשבתי לייעל אותה על ידי שמירה בקאש של הערכים שכבר תושאלו, אבל בשביל כמה מיליסקנד? נו באמת? מצד רביעי, כשתהיה לי לולאה של מאה אלף זה יהיה משמעותי, וכן הלאה.
בקיצור אם למישהו יש משנה סדורה בנושא אשמח לשמוע את דעתו. -
שילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?@גמליאל אמר בשילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?:
כנראה שספריה אחרת שתלויה בספריה הזו מאוד פופולרית
זאת הצרה הצרורה הכי גדולה כשתלויות יוצאות משליטה אתה כבר לא יודע כלום על כלום.
-
שילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?אני מחמיר יותר מ @yossiz בנושא הזה, כנראה שזה עניין של חווייה אישית, ספריות "נשברות" ומאבדות תאימות לעיתים קרובות, בדרך כלל אני בודק את המוניטין של הספרייה ומיהו המפתח, ומה עוד הוא עשה בחיים, ומשתדל שלא להתקין ספריות שאינן נתמכות על ידי ארגונים גדולים.
כמו"כ ההצדקה לצרוך ספריה צריכה להיות משהו מסדר גודל עצום כגון עיבוד PDF או דחיסה ל ZIP (אני כמובן מקצין, אבל כוונתי לסבר את האוזן), אם יש לך בעיה פיצקית שבשבילה אתה מתקין ספרייה שלמה, זה חטא גדול מאוד. עדיף להעתיק את הקוד הספציפי שפותר את הבעיה שלך ולעטוף אותו בפונקציה שתוכל לשפר אותה לאחר מכן.
הנה דוגמא נפוצה לספרייה עם 66 מיליון הורדות שבועיות
https://www.npmjs.com/package/isarray
ואם תהית מהו הקוד הנורא שהיא מסתירה אז הנה הוא:
https://github.com/juliangruber/isarray/blob/master/index.js
ויש עוד דוגמאות כהנה וכהנה
לגבי מדדים "טכניים" של איכות ספרייה, יש אתר שמנסה לעשות זאת באמצעות אלגוריתם כלשהו:
https://npms.io/