כיצד הפלטפורמות שלנו משתלבות זו בזו. כל תחום/כלי אחד.
RODMENA בונה את מוצריה משירותים מתארחים קטנים, שלכל אחד מהם מטרה אחת, ומערכת ספריות בית. כל תחום שייך לכלי אחד, לכל פלטפורמה יש צוות משלה, ואפיק הודעות משותף מחבר ביניהם.
מוצרים, אחד בתכנון
13
פלטפורמות מתארחות
8
ספריות, מנועים ו-CLIs
8
אפיק הודעות משותף
1
עקרונות תכנון
תחום אחד, כלי אחד
אימות זהות הוא Identity, הרשאה היא Auth, מדידה היא TokenGate, דואר אלקטרוני הוא Mail API, אישורים הם Futex, קונטיינרים הם RunFlow ותהליכי עבודה סוכניים הם Highway. מוצרים לעולם אינם מיישמים מחדש תחום שכבר שייך לכלי בית.
צוותים מתאמים בדואר
לכל פלטפורמה יש סוכן, הקשר ומאגר משלה. צוותים מתאמים ביניהם בין הפלטפורמות דרך אפיק ההודעות agent-mail. אף צוות אינו עורך את המאגר של צוות אחר ואינו פותח כרטיסים במערכת המעקב שלו.
מסדי נתונים הפרוסים בין מדינות
לכל שירות מסד נתונים משלו, ומסדי הנתונים יושבים על מארחים שונים במדינות שונות. ניתן לפרוס מחדש יישומים אך לא נתונים, ולכן השניים נשמרים בנפרד. כל מסד נתונים משוכפל לאזור שלישי ומגובה מחוץ לאתר.
/ Where it runs
מארחים ואזורים
הצי המנוהל מכיל 22 מסדי נתונים בסביבת ייצור, כל אחד בבעלות שירות אחד, על 4 מארחי מסדי נתונים ב-3 מדינות, ו-4 נוספים פועלים על מארח יישומים. אין שני שירותים שחולקים סכימה, ואף מכונה בודדת אינה מכילה את הפלטפורמה.
מסדי נתונים בייצור, שכל אחד מהם בבעלות שירות אחד
22
מארחי מסד נתונים
4
מדינות
3
דקות לכל היותר: נקודת השחזור בצי המנוהל
≤5
UKהממלכה המאוחדת
יישומים ושני מארחי מסדי נתונים
מארח את שכבת היישומים ואת מסדי הנתונים עבור מנוע תהליכי העבודה, שירות האישורים, אפיק ההודעות, הדואר האלקטרוני, ספר החשבונות ופלטפורמת המשימות.
FRצרפת
מארח מסד נתונים
מחזיק את מישור הזהות והגישה, הרשאה, מדידה וספק הזהות, בנפרד מהשירותים התלויים בו.
DEגרמניה
קבוצת עותקים משוכפלים
מחזיק עותק מתעדכן ברציפות של כל מסד נתונים, מחוץ לשני האזורים האחרים. אין בו שרת ראשי, כך שאף תעבורה אינה תלויה בו עד שהוא מקודם.
שכפול רציף
כל מסד נתונים משדר שינויים ברמת הבלוק לשרת המתנה (standby) מחוץ לשני האזורים הראשיים. השכפול אסינכרוני, כך שעותק משוכפל אינו יכול להאט או לחסום את השירות שלפניו.
גיבויים מחוץ לאתר
ארכיונים נשלחים באופן רציף לאחסון אובייקטים במתקן נפרד, מוצפנים לפני שהם יוצאים מהמארח וניתנים לשחזור לכל נקודה בתוך תקופת השמירה. השחזורים נבדקים מקצה לקצה.
שלושה גורמים בכל חיבור
אף מסד נתונים אינו מקבל חיבור רשת על סמך סיסמה בלבד. כל חיבור דורש הצפנה בתעבורה, תעודת לקוח שהונפקה על ידי רשות פרטית וסיסמה. כל שירות מוגבל למסד הנתונים שלו בלבד.
רפליקות וגיבויים
פקודה (statement) שגויה מגיעה לכל רפליקה בתוך רגעים. רפליקות מגנות מפני אובדן חומרה, והארכיון מגן מפני אובדן נתונים.
למפה שמונה שכבות ואפיק הודעות אחד, וכל תחום מופיע פעם אחת. המוצרים נמצאים למעלה והמחסנית הטכנולוגית למטה. כל מה שמוצר צריך נמצא במרחק צעד אחד.
23 צמתים · 27 יחסים מתועדים · 1 בהנחה
יש לגלול את המפה לרוחב. לכל צומת יש גם כרטיס למטה.
חקרו
שימוש במפה
יש לבחור צומת או את אפיק ההודעות כדי להדגיש את הקשרים שלו ולראות על מה הוא אחראי, למה הוא מתחבר ובמה אסור להחליף אותו לעולם. הכרטיסים שלמטה מציגים את אותן עובדות.
קשר מתועד
בהנחה: יש לאמת לפני הסתמכות על כך
אפיק ההודעות agent-mail
מוצר (מסגרת גרדיאנט)
לא משורטטים, שכן הם חלים בכל מקום:
כל מוצר מבצע אימות זהות מול Identity ובדיקת הרשאות מול Auth.
כל צוות פלטפורמה מתאם דרך אפיק agent-mail.
כל מאגר מנוהל ב-issuedb-cli, עם מפרטי EARS.
מוצרבתכנון
RED9
11 יוצאים
פלטפורמת כוח עבודה של סוכנים שבה כל צ׳אט הוא משימה עמידה ואוטונומית עם כתובת דוא״ל.
נשען על כל המחסנית: Identity ו-Auth לגישה, TokenGate לתקציבים, Mail API לתיבות דואר של משימות, RunFlow לארגזי חול, Highway כמבצע עמיד, Futex לאישורים ו-migretti לסכימה, על Python, PostgreSQL ו-Redis.
ספר חשבונות בשיטת רישום כפול לכסף, קרדיטים ומלאי. הרשומות מאוזנות, קבועות וניתנות להוכחה, ומסד הנתונים אוכף את הכללים.
משתמש ב-Auth עבור אישורי גישה, ב-TokenGate עבור מדידה וב-migretti עבור סכימה, על Python ועל PostgreSQL. הוא עבר ביקורת בארבעה שערים פנימיים ובביקורות חוזרות בגישה עוינת, והממצאים מפורסמים.
לעולם לא מוחלף ב: סוד שיכול להנפיק אישור גישה שהמערכת עצמה תקבל, או נתיב עריכה או מחיקה ביומן.
לא מיועד ל: מכסות או מדידה (יש להשתמש ב-TokenGate), מדדים שאינם כמויות משתמרות, או מצב של תהליך עבודה.
ספירה, תקרות ומגבלות קצב לכל משתמש, ארגון או לקוח (tenant): תקציבי טוקנים, יומני שימוש, דרגות תוכנית, תהליכי שריון וחיוב (reserve/commit), והתראות סף וחריגה.
כלל בית: כל תקרה נבדקת בשני הכיוונים. עליה לחסום כשחורגים ממנה ולחזור לפעול כשהיא מתמלאת מחדש.
לעולם לא מוחלף ב: מוני Redis INCR, טבלאות שימוש, middleware של דלי אסימונים (token bucket), או ספריות להגבלת קצב.
לא מיועד ל: הרשאה (יש להשתמש ב-Auth) או הגנה מפני DDoS בקצה הרשת.
מנוע מבוזר ועמיד לתהליכי עבודה סוכניים, עם סוכנים, מטרות, הפעלות, לוחות זמנים, טריגרים, workers של פעילויות ו-workers רגילים, פיצול ריצות ועקבות ריצה (traces).
כלל בית: כל מוצר שומר על לולאת שיקול דעת משלו. הוא משתמש ב-Highway כמבצע עמיד שמדווח חזרה דרך webhook, ומשאיר את כל הסקת ה-LLM בתוך המוצר.
לעולם לא מוחלף ב: Airflow, Prefect, Temporal, או סקריפטים מותאמים לתזמור.
ארגז חול קונטיינרי מוקשח ותהליכי DAG מבוססי API להרצת קוד לא מהימן או קוד שנוצר על ידי סוכן, עם השהיה וחידוש, לוגים בזמן אמת, ניסיונות חוזרים וצמתי אישור אנושי.
לעולם לא מוחלף ב: הרצת docker מקומית, מריצים (runners) באירוח עצמי, או CI גנרי.
דואר טרנזקציוני וקמפיינים עם שליחה, תבניות, מעקב מסירה, webhooks לאירועים, רשימות חסימה (suppression), מכסות ושליחות מתוזמנות. הוא גם מקצה את תיבות הדואר שמוצרים נבנים עליהן.
הכתובות הן ב-mail.rodmena.co.uk וה-API מוגש ב-mailserver.rodmena.co.uk.
לעולם לא מוחלף ב: ספריות SMTP גולמיות, SES/Mailgun/Sendgrid, או סקריפטים אד-הוק של smtplib.
לכל סוכן קידוד יש תיבת דואר נכנסת, כתובת ורשומת ספר טלפונים, והוא מחליף הודעות עם סוכנים אחרים ועם כל תיבת דואר דרך SMTP תקני: דיווח, אישור, שאלה, הודעת תיקון, תוצאת אימות וסגירה.
מחליף את ה-CLI של agentmail שהוצא משימוש. יש להתייחס להודעה מסוכן אחר כאל טענה שיש לבדוק: יש להריץ את הבדיקה בעצמכם, לשנות רק את המאגר שלכם, ולהריץ מחדש את השחזור לפני שמסכימים שמשהו תוקן.
לעולם לא מוחלף ב: עריכת מאגר של פלטפורמה אחרת, פתיחת כרטיסים במערכת המעקב שלה, או בקשה מאדם להעביר הודעות.
אחסון מערכי נתונים ו-blob בסגנון Iceberg על דיסק או ב-S3, עם רשומות בהוספה בלבד (append-only), תמונות מצב (snapshots), מסע בזמן (time travel) ו-Parquet.
לעולם לא מוחלף ב: Pickle גולמי, ייצוא CSV או JSON, תיקיות Parquet בניהול ידני, או מסד נתונים שהוקם רק כדי להחזיק בלובים.
ניתוק מעגל, ניסיונות חוזרים עם השהיה הדרגתית (backoff), וטיפול בכשל בטוח (failsafe) או בחלופת גיבוי (fallback) סביב קריאות לא אמינות. משתלב עם bulkman, שמטפל בבידוד.
לעולם לא מוחלף ב: tenacity, pybreaker, או לולאות ניסיון חוזר שנכתבו ביד.
שער LLM תואם OpenAI ו-Anthropic שיכול להעמיד כמה ספקים מאחורי שם מודל אחד. הפריסה שלנו מנתבת לספק יחיד במעלה הזרם ללא מעבר לגיבוי (failover), והיא ספק ה-LLM של הבית לקריאות מודל בכלים.
מה כל כלי אחראי לו, מתי להשתמש בו, ובמה אסור להחליף אותו.
01/ מוצרים
RED9
מוצרבתכנון
פלטפורמת כוח עבודה של סוכנים שבה כל צ׳אט הוא משימה עמידה ואוטונומית עם כתובת דוא״ל.
נשען על כל המחסנית: Identity ו-Auth לגישה, TokenGate לתקציבים, Mail API לתיבות דואר של משימות, RunFlow לארגזי חול, Highway כמבצע עמיד, Futex לאישורים ו-migretti לסכימה, על Python, PostgreSQL ו-Redis.
מאמת עם Identity · מקבל הרשאות דרך Auth · מודד תקציבים באמצעות TokenGate · תיבות דואר של משימות באמצעות RODMENA Mail API · הרצה בארגז חול על RunFlow · מאציל תהליכי עבודה אל Highway · אישורים אנושיים באמצעות Futex · מבצע מיגרציה של סכימה עם migretti · בנוי על PostgreSQL · בנוי על Redis · מודלים כברירת מחדל באמצעות Prism
reTunnel
מוצרבטא
פלטפורמת כניסה מאוחדת, חינמית ובקוד פתוח, שחושפת שרתים מקומיים מאחורי NAT וחומות אש לאינטרנט הציבורי דרך מנהרות מאובטחות.
עצמאי: לקוח Python ו-CLI ברישיון MIT עם שרת הניתן לאירוח עצמי. אינו תלוי בשום פלטפורמת בית אחרת.
ספר חשבונות בשיטת רישום כפול לכסף, קרדיטים ומלאי. הרשומות מאוזנות, קבועות וניתנות להוכחה, ומסד הנתונים אוכף את הכללים.
משתמש ב-Auth עבור אישורי גישה, ב-TokenGate עבור מדידה וב-migretti עבור סכימה, על Python ועל PostgreSQL. הוא עבר ביקורת בארבעה שערים פנימיים ובביקורות חוזרות בגישה עוינת, והממצאים מפורסמים.
לעולם לא מוחלף ב: סוד שיכול להנפיק אישור גישה שהמערכת עצמה תקבל, או נתיב עריכה או מחיקה ביומן.
לא מיועד ל: מכסות או מדידה (יש להשתמש ב-TokenGate), מדדים שאינם כמויות משתמרות, או מצב של תהליך עבודה.
ספירה, תקרות ומגבלות קצב לכל משתמש, ארגון או לקוח (tenant): תקציבי טוקנים, יומני שימוש, דרגות תוכנית, תהליכי שריון וחיוב (reserve/commit), והתראות סף וחריגה.
כלל בית: כל תקרה נבדקת בשני הכיוונים. עליה לחסום כשחורגים ממנה ולחזור לפעול כשהיא מתמלאת מחדש.
לעולם לא מוחלף ב: מוני Redis INCR, טבלאות שימוש, middleware של דלי אסימונים (token bucket), או ספריות להגבלת קצב.
לא מיועד ל: הרשאה (יש להשתמש ב-Auth) או הגנה מפני DDoS בקצה הרשת.
מנוע מבוזר ועמיד לתהליכי עבודה סוכניים, עם סוכנים, מטרות, הפעלות, לוחות זמנים, טריגרים, workers של פעילויות ו-workers רגילים, פיצול ריצות ועקבות ריצה (traces).
כלל בית: כל מוצר שומר על לולאת שיקול דעת משלו. הוא משתמש ב-Highway כמבצע עמיד שמדווח חזרה דרך webhook, ומשאיר את כל הסקת ה-LLM בתוך המוצר.
לעולם לא מוחלף ב: Airflow, Prefect, Temporal, או סקריפטים מותאמים לתזמור.
ארגז חול קונטיינרי מוקשח ותהליכי DAG מבוססי API להרצת קוד לא מהימן או קוד שנוצר על ידי סוכן, עם השהיה וחידוש, לוגים בזמן אמת, ניסיונות חוזרים וצמתי אישור אנושי.
לעולם לא מוחלף ב: הרצת docker מקומית, מריצים (runners) באירוח עצמי, או CI גנרי.
מקבל הרשאות דרך Auth · מודד שימוש באמצעות TokenGate · צומתי אישור דרך Futex (בהנחה: יש לאשר)
מנוע תהליכי עבודה דטרמיניסטי המוגדר בקוד, וחלופת הבית הקלה יותר ל-DAGs של RunFlow כאשר אין צורך בקונטיינרים מתארחים.
ההיקף ומשטח ה-API טרם אושרו עם הצוות האחראי, ולכן לא נמסרים כאן פרטים.
חלופה ל RunFlow
Python
05/ תקשורת
RODMENA Mail API
שירות מתארחמוצר
דואר טרנזקציוני וקמפיינים עם שליחה, תבניות, מעקב מסירה, webhooks לאירועים, רשימות חסימה (suppression), מכסות ושליחות מתוזמנות. הוא גם מקצה את תיבות הדואר שמוצרים נבנים עליהן.
הכתובות הן ב-mail.rodmena.co.uk וה-API מוגש ב-mailserver.rodmena.co.uk.
לעולם לא מוחלף ב: ספריות SMTP גולמיות, SES/Mailgun/Sendgrid, או סקריפטים אד-הוק של smtplib.
מקבל הרשאות דרך Auth · מבצע על RunFlow · מודד מכסות דרך TokenGate
לכל סוכן קידוד יש תיבת דואר נכנסת, כתובת ורשומת ספר טלפונים, והוא מחליף הודעות עם סוכנים אחרים ועם כל תיבת דואר דרך SMTP תקני: דיווח, אישור, שאלה, הודעת תיקון, תוצאת אימות וסגירה.
מחליף את ה-CLI של agentmail שהוצא משימוש. יש להתייחס להודעה מסוכן אחר כאל טענה שיש לבדוק: יש להריץ את הבדיקה בעצמכם, לשנות רק את המאגר שלכם, ולהריץ מחדש את השחזור לפני שמסכימים שמשהו תוקן.
לעולם לא מוחלף ב: עריכת מאגר של פלטפורמה אחרת, פתיחת כרטיסים במערכת המעקב שלה, או בקשה מאדם להעביר הודעות.
אחסון מערכי נתונים ו-blob בסגנון Iceberg על דיסק או ב-S3, עם רשומות בהוספה בלבד (append-only), תמונות מצב (snapshots), מסע בזמן (time travel) ו-Parquet.
לעולם לא מוחלף ב: Pickle גולמי, ייצוא CSV או JSON, תיקיות Parquet בניהול ידני, או מסד נתונים שהוקם רק כדי להחזיק בלובים.
מפקח תהליכים אסינכרוני ללא תלויות עבור תהליכי worker, דמונים וצרכני תורים: בדיקות תקינות, קבוצות והפעלה מחדש בעת קריסה.
systemd או Kubernetes רגילים מקובלים כאשר הם מתאימים יותר.
Python
bulkman
ספריית Python
מחיצות ובידוד מקביליות שמגבילים את רדיוס ההשפעה של תלות שנכשלת.
כלל בית: יש תמיד להגדיר circuit_breaker_enabled=False. bulkman מטפל בבידוד, וניתוק מעגל (circuit breaking) שייך ל-resilient-circuit.
משלים resilient-circuit
Python
resilient-circuit
ספריית Python
ניתוק מעגל, ניסיונות חוזרים עם השהיה הדרגתית (backoff), וטיפול בכשל בטוח (failsafe) או בחלופת גיבוי (fallback) סביב קריאות לא אמינות. משתלב עם bulkman, שמטפל בבידוד.
לעולם לא מוחלף ב: tenacity, pybreaker, או לולאות ניסיון חוזר שנכתבו ביד.
Python
scriptplan
מנוע + CLIמוצר
מנוע תואם TaskJuggler (.tjp) לתכנון משאבים ותזמון: אנשים ומכונות לאורך זמן, תלויות, לוחות שנה ופלט Gantt.
לעולם לא מוחלף ב: גיליונות אלקטרוניים או חישובי תאריכים אד-הוק.
מערכת מעקב כרטיסים לכל מאגר, עם מפרטי EARS, זיכרון עמיד ולקחים. כל בקשת הנדסה עוברת את מחזור החיים המחייב: פתוח ← בטיפול ← סגור.
כל בקשה הופכת למפרט EARS בכרטיס, עם עותק בספריית SPECS/ של המאגר.
לעולם לא מוחלף ב: משימות TODO שלא במעקב.
CLI
08/ העדפות מחסנית טכנולוגית
Prism
שירות מתארחמוצר
שער LLM תואם OpenAI ו-Anthropic שיכול להעמיד כמה ספקים מאחורי שם מודל אחד. הפריסה שלנו מנתבת לספק יחיד במעלה הזרם ללא מעבר לגיבוי (failover), והיא ספק ה-LLM של הבית לקריאות מודל בכלים.
הגדירו את הצורך, השתמשו בכלי שאחראי לו, ואל תיישמו מחדש תחום שכלי בית כבר מכסה.
באיזה כלי להשתמש לכל צורך הנדסי, ובמה לעולם לא להשתמש במקומו
צורך
שימוש
לעולם אין להשתמש
התחברות / OAuth / ״מי זה?״
Identity
כתיבת אימות משלכם
תפקידים, הרשאות, ״האם X יכול לעשות Y?״
Auth
טבלאות RBAC, Casbin, OPA
מכסות, מגבלות קצב, תקציבים, דרגות, מדידה
TokenGate
מוני Redis, ספריות להגבלת קצב
שליחת דואר אלקטרוני, תבניות, קמפיינים
Mail API
smtplib, SES/Mailgun
תקשורת עם הצוות של פלטפורמה אחרת
agent-mail
עריכת המאגר או מערכת המעקב שלהם
הרצת קוד שאינו מהימן או קוד שנוצר
RunFlow
Docker מקומי, מריצי CI
צינור דטרמיניסטי / DAG / ETL
RunFlow או stabilize
Airflow, Prefect
תהליך עבודה סוכני (מונחה LLM)
Highway
Temporal, לולאות מותאמות
אישור אנושי / חתימה
Futex
בקשות ב-Slack, טבלאות אישור
מיגרציות סכימה של PostgreSQL
migretti
alembic, flyway, yoyo
מערכי נתונים, blobs, הקלטות, Parquet
datashard
קובצי dump של pickle/CSV, מסד נתונים כמאגר blob
פיקוח על תהליכי עובדים
supervice
nohup, respawn בכתיבה ידנית
מחיצות / בידוד מקביליות
bulkman (מפסק (circuit breaker) כבוי)
סמפורים אד הוק
ניתוק מעגל (circuit breaking) / ניסיונות חוזרים / חלופת גיבוי (fallback)
resilient-circuit
tenacity, pybreaker
תזמון משאבים / פרויקטים
scriptplan
גיליונות אלקטרוניים
כרטיסים, מפרטים, דרישות
issuedb-cli + EARS
משימות TODO שלא במעקב
קריאות LLM בתוך כלים
Prism
SDKs ומפתחות לכל ספק מפוזרים בין כלים
שיטת הנדסה
שלוש מתודולוגיות חלות על כל מאגר, בלי קשר למה שנבנה בו.
תהליך עבודה של EARS + issuedb
כל בקשת הנדסה הופכת למפרט EARS ולכרטיס issuedb, עם עותק בספריית SPECS/ של המאגר. כל כרטיס עובר ממצב open (פתוח) ל-in progress (בטיפול) ול-closed (סגור).
TRUST5
יצירת קוד LLM מונחית-מפרט ובקרת-איכות, עם ריפוי עצמי, לולאות אימות/תיקון תחומות, שערים משוקללים ומיתון בעיית Oracle.
ביקורת למערכות קריטיות
ביקורת באמצעות הפרכה: הבדיקות רצות דרך הממשק של המוצר עצמו, הממצאים משוחזרים בזמן אמת, וכל בדיקה נשמרת כקו בסיס בר-הרצה לסבב הבא.
כללים החלים על כל כלי.
יש לאמת דרך הממשק של המוצר עצמו. יש לקרוא מצב דרך ה-API או ה-CLI שלו, ואין להריץ שאילתות על מסד הנתונים או לכתוב אליו כדי לבדוק או לתקן אותו.
יש לכוון כל בדיקה למקרה חיובי ידוע לפני שמסתמכים על תוצאה שלילית ממנה.
להצהיר על מוכנות רק לגבי מה שנבדק בפועל, ולציין את הנתיבים שלא נבדקו.
יש לבדוק כל תקרה בשני הכיוונים: עליה לחסום כשחורגים ממנה ולאפשר חידוש פעולה כשצריך.
מוצרים הבנויים על פלטפורמות אלה
הפלטפורמות האלה עומדות מאחורי כל מה שאנחנו משיקים: Highway, MailApi, RunFlow, Futex, reTunnel, Ledger, RODMENA L10n, TokenGate, AgentBus, RODMENA ID, Auth, Prism, pdfapi, Container Registry, RODMENA CI, Uptime.Systems, Trust5, RED9, Graphviz Provider, Haven, RODMENA LRS, RODMENA cmi5, Vellum, supervice, datashard, ScriptPlan, Stabilize, Trace, Provenance ו-Knowledge base. הן גם מפעילות את החברה.