Architecture Decision Record

Active theme: Light

← דוגמאות לרשומות החלטה

פורמט חותמת זמן

תוכן העניינים:

סיכום

בעיה

אנו רוצים להיות מסוגלים לעקוב מתי דברים קורים באמצעות חותמות זמן ובאמצעות פורמט חותמת זמן עקבי שעובד היטב בכל המערכות שלנו ובמערכות צד שלישי.

אנו מתקשרים עם מערכות שיש להן פורמטים שונים של חותמת זמן:

  • להודעות JSON אין פורמט חותמת זמן מקורי, ולכן עלינו לבחור איך להמיר חותמת זמן למחרוזת, ולהמיר מחרוזת לחותמת זמן, כלומר איך לבצע סריאליזציה/דה-סריאליזציה.

  • חלק מהיישומים מוגדרים להשתמש בשעון מקומי ולא בשעון UTC. זה יכול להיות נוח לפרויקטים שחייבים להתאים לשעון מקומי, כמו פרויקטים שמפעילים אירועים המבוססים על שעון מקומי.

  • לחלק מהמערכות יש צרכים ויכולות שונים של דיוק זמן, כמו שימוש ברזולוציית זמן של שניות לעומת אלפיות שנייה לעומת ננו-שניות. לדוגמה, הפקודה date במערכת ההפעלה Linux משתמשת בדיוק זמן ברירת מחדל של שניות, ואילו בורסת Nasdaq רוצה דיוק זמן ברירת מחדל של ננו-שניות.

החלטה

אנו בוחרים בפורמט התקני של חותמת זמן ISO 8601 עם דיוק של ננו-שניות, באופן ספציפי "YYYY-MM-DDTHH:MM:SS.NNNNNNNNNZ".

הפורמט מציג שנה, חודש, יום, שעה, דקה, שנייה, ננו-שניות ואזור זמן Zulu הידוע גם כ-UTC, GMT.

מצב

הוחלט.

פרטים

הנחות

אנו צריכים לטפל במחרוזות הטקסט של חותמות הזמן האלה, כדי להמיר מחותמת זמן למחרוזת (כלומר סריאליזציה) ולהמיר ממחרוזת לחותמת זמן (כלומר דה-סריאליזציה).

אנו רוצים פורמט שקל בדרך כלל לשימוש, קל להמרה וקל לקריאה בידי אדם.

אנו רוצים תאימות למגוון רחב של מערכות חיצוניות שאיננו שולטים בהן, כמו מערכות ניתוח, מערכות מסדי נתונים, מערכות פיננסיות.

אילוצים

לחלק מהמערכות יש מגבלות דיוק זמן. לדוגמה, הפקודה date במערכת ההפעלה macOS יכולה להדפיס דיוק זמן בשניות, אבל לא בננו-שניות.

עמדות

שקלנו מגוון אפשרויות:

  • Unix epoch, כלומר מספר אחד שעולה.

  • פורמט טקסט תמציתי "YYYYMMDDTHHMMSSNNNNNNNNN".

  • שימוש באזור זמן מקומי לעומת אזור הזמן UTC.

טיעון

לשימוש טיפוסי, אנו מעריכים קלות קריאה/כתיבה בידי בני אדם יותר ממהירות/גודל גולמיים.

לשימוש טיפוסי, אנו רוצים פורמט שעובד היטב במערכות מכונה, וגם עובד היטב באופן ידני, כמו כתיבת נתוני דוגמה, קריאת פלט JSON, ביצוע grep בקובץ יומן וכדומה.

לשימוש לא טיפוסי, כמו מחשוב בעל ביצועים גבוהים, אנו מצפים שנרצה לייעל כל פורמט טקסט שנבחר על ידי המרת הטקסט לפורמט מהיר יותר, כמו סוג אובייקט התאריך המובנה בשפת תכנות. לכן פורמט הטקסט לא משנה הרבה ל-HPC.

השלכות

מערכות הטקסט ומערכות הזמן השונות שלנו יתכנסו לפורמט הזה.

נושאים קשורים

החלטות קשורות

ייתכן שנרצה גם דרך מהירה/קלה לעקוב אחר הפרשי זמן, הידועים גם כמשכים. אלה קלים עם חותמות זמן של Unix epoch.

דרישות קשורות

ייתכן שנרצה לשנות את ההחלטה שלנו, למשל אם תהיה לנו דרישה קשורה לסוג מסוים של חותמת הודעת רישום, כמו עבור Splunk, ‏Sumo, ‏ELK וכדומה.

תוצרים קשורים

מעצבים ומנתחים לפי שפה:

דוגמאות Rosetta Code:

דוגמאות SixArm:

עקרונות קשורים

הפיך בקלות. אפשר לעבור בקלות יחסית לפורמט אחר, כמו Unix epoch.

לדחות אופטימיזציה מוקדמת. לשימוש טיפוסי לא אכפת לנו הרבה ממספר קטן של תווים נוספים, כמו פורמט שמשתמש במקפים ובנקודתיים.

הערות

הוסיפו כאן הערות.