הפצת שינויים ב microservices- איך?

Sea Bass

New member
הפצת שינויים ב microservices- איך?

אני מנסה ליישם מודל של microservices ואני לא יודע איך לתקוף את הבעיה של שינויים (כמו מחיר מוצר ליוזר) ברסביס מסויים. אתן דוגמא ואשמח לעזרה.
נניח יש לי מערכת ecommerce ובה 3 מספר סרביסים:
Order,product,ship,recommendation.
התקשורת ביניהם היא בצורת event driven. זתומרת הכל עובר על service bus ואין תקשורת http ביניהם. תצורה של event driven.
אם נניח יוזר ביצע הזמנה, order service מעלה event אל ה bus וכל סבריס אחר שנרשם ל event מהסוג הזה, מקבל אותו.
במקרה שלנו recommendation מקבל את הevent ויודע להציע ליוזר מוצרים מאותו סוג (סתם אני מנפיץ דוגמא).
בעזרת המודל של event driven כל סרביס בעצם מפיץ מידע שסרביס אחר יכול לשמור לעצמו לפעם הבאה.
בואו נניח ש product service מפיץ מוצרים חדשים במערכת. אך מה קורה בנוגע למחירים?
אם מחיר של מוצר זה משהו נניח שמשתנה בין יוזר ליוזר, אז איך מערכת אחרת אמורה לדעת מה המחיר לגבי כל יוזר?
או נניח אם יש מוצר שמחירו דולר, אבל בשעה 10:00 PM חצי מהיוזרם מקבלים עליו הנחה. איך כל סרביס כזה אמור לקבל את הנתונים? בטח לא על ידי event.

** קראתי על CQRS ו materialized view אך אני לא מצליח להבין איך לבצע שאילתא ממספר DBs שכל אחד פרטי לסרביס שלו.
ואם נניח והיה לי גישה לטבלה ב product DB , מחיר של מוצר מסויים לא חייב להשימר בטבלה אלא להיות מחושב RUNTIME עלע ידי קוד סרבר.
איך אני פותר את הבעיה הזאת בארכיטקטורה של microservices?
האם בכל זאת materialized view זה הפתרון שלי?
האם בבעיה זו אני צריך לחשוף API ב product service?
אם כן זה שובר את הרעיון של microservice שבו כל service הוא אטומי לחלוטין ללא coupling לאף סרביס אחר.
תודה רבה.
 

Royi Namir

New member
אנסה...

כשמפרקים את השאלה שלך למערכת מונוליט עם DB אחד , איך היית עושה את זה ?
היית עושה טבלת מוצרים
והיית עושה טבלת מחירים שהם לפי זמן ( לדוגמא , בננה עולה 5 ש"ח מתאריך X עד לתאריך Y)
אם אם היית יודע שיכול להיות הנחות או קופוינים אז היית בונה עוד טבלה של קופונים שהם מכילים סט חוקים שחלים על מחיר הבסיס , וגם הוא לפי זמנים.

בצורה כזו , יש לך SERVICE של מחירים PLANE
וסרביס של הנחות וקופונים , שהוא יודע לקבל PRICE או PRODUCT ולעשות לו הרחבה על פי לוגיקה שרק הוא יודע עם DB שיש רק לו.

אותו דבר כאן .
הייתי בונה SERVICE שיעשה EMIT למוצר עם מחיר ( על פי חוקיות הבננה)
ועוד סרביס שמאזין ל EMIT PRICE , שהוא עושה ENRICHMENT לסט חוקים של הנחות.
כלומר גם אם אין הנחה , עדין , בסוף אתה מקבל תשובה מהסרביס האחרון שציינתי.
 
למעלה