• ארכיטקטורת תוכנה | Software Architecture,  מיקרוסרוויסים | Microservices

    ההזמנה נשמרה, התשלום נתקע: איך מטפלים בתהליך שחוצה כמה מיקרוסרוויסים?

    בתהליך הזמנה בחנות יש כמה פעולות שנראות די פשוטות: שומרים הזמנה, שומרים את המוצרים במלאי עבור הלקוח, ומחייבים אותו. אם הכול נמצא באותו מסד נתונים, אפשר לעטוף את השינויים בטרנזקציה. אחת הפעולות נכשלה? מבצעים Rollback. אבל מה קורה כשכל פעולה שייכת למיקרוסרוויס אחר? ומה אם החיוב בכלל מתבצע אצל ספק סליקה חיצוני? כאן כבר אפשר להגיע למצב שבו ההזמנה נשמרה, המלאי הוקצה, ובקשת התשלום הסתיימה ב־Timeout. רגע. האם זה אומר שהלקוח לא חויב? לא בהכרח. וזה בדיוק מה שמסבך את העניין. שלוש קריאות שלא חולקות טרנזקציה לצורך הדוגמה, נחלק את התהליך בין שלושה שירותים: במבט ראשון, אפשר לכתוב משהו כזה: הקוד קצר, אבל הוא לא אומר מה עושים כשהקריאה השלישית…