GH GambleHub

אחסון סדרת זמן

1) מדוע ארכיטקטורה נפרדת לסדרת זמן

סדרות זמן הן רצפים של זוגות (זמן, ערך) עם תגיות (תוויות), אשר מאופיינים על ידי:
  • מהירות הקלטה גבוהה (בלע) ותדר.
  • קריאה לפי טווחי זמן (סריקה + אגרגטים/פונקציות חלון).
  • קרדינליות נפיצה עקב צירופי תגים.
  • הצורך בשמירה (הגבלות על חיי מדף) ובירידה (דחיסת זמן).
  • לכן - מודל אחסון מיוחד, תבניות דחיסה ופרוטוקולי בקשה.

2) מודל נתונים ומדדי חוזה

2. 1 שמות ותגים

metric_name: פועל יחיד/שם עצם (”http _ coses _ total”, ”cpu _ usage _ seconds _ total”).
תוויות: מפתחות מאפיינים (”עבודה”, ”דוגמה”, ”וושינגטון”, ”פוד”, ”סטטוס”, ”שיטה”).
אינווריאנטים: לא לשנות את הסמנטיקה של השם, להוסיף גרסאות (”metric _ v2”) עם שינויים לא מתאימים.

2. 2 סוגי שורות

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

2. 3 מדיניות השמירה וההפעלה

פירוט חם (שניות/10 דקות) * יחידות חמות (5 m/1h) * קרות (1d/1w).
לקצב נגד חנות/deriv aggregates.

3) הקלטת נתיב: קליטה, חציצה, קומפקטית

3. 1 אינבלייט צינור

Scrape (משיכה, פרומתאוס) או Push (OTLP/StaffiD/Graphite), לרוב באמצעות שער/סוכן.
Buffering in WAL (רישום מראש), ולאחר מכן דחיסה למקטעים/בלוקים (ארכיטקטורה דמוית LSM).
חבטות ומיון זמן להגביר דחיסה ומהירות.

3. 2 טיפול לא תקין ולוקח

חלון סובלנות (חלון איחור, לדוגמה 5-15 דקות) + מדיניות: ”טיפה | upsert | לשמור-אחרון”.
שכפול על ידי '(series_id, חותמת זמן)' עם versioning או ”שיא אחרון מנצח”.

3. 3 דחיסה

דלתא-of-delta עבור טיים-סטמפס, גורילה/XOR עבור ריצוף, RLE, ורינט עבור מספרים שלמים, מילון עבור תגיות.
גודל הבלוק האופטימלי (”נתח”) של 1-8K נקודות הוא פשרה בין IOPS ל-CPU.

4) תוכניות אחסון: TSDB נגד SQL/Torns

4. 1 TSDB ייעודי

פרומתאוס (מקומית, שימור קצר, PromQL, remote_write).
VictoriaMetrics/M3/InfluxDB-אופקי, שימור ארוך, קריאה מרחוק.
פורמטי בלוקים מיוטבים עבור סריקת טווח + tending aggregations.

4. 2 מנועי יחס/עמודה

TimescalbDB (PostgreSQL): יתר טבלאות, נתחים על ידי זמן/מרחב, אגרגטים רציפים.
ClickHouse: MergEtree/TTL/Mushed Views, דחיסה מצוינת וצבירת זמן.
מערכת אקולוגית (SQL נגד PromQL), הצטרפות/BI ומיומנויות תפעוליות קבוצתיות.

5) ערכאה ודוגמאות

5. 1 timescils DB: היפר-טבלה + צבירה רציפה

sql
CREATE TABLE metrics_cpu(
ts timestamptz NOT NULL,
host text NOT NULL,
dc text NOT NULL,
usage double precision NOT NULL,
PRIMARY KEY (ts, host, dc)
);
SELECT create_hypertable('metrics_cpu', by_range('ts'), chunk_time_interval => interval '1 day');

-- Continuous unit (5 minutes)
CREATE MATERIALIZED VIEW cpu_5m
WITH (timescaledb. continuous) AS
SELECT time_bucket('5 minutes', ts) AS ts5m, host, dc, avg(usage) AS avg_usage
FROM metrics_cpu GROUP BY 1,2,3;

-- Politicians
SELECT add_retention_policy('metrics_cpu', INTERVAL '14 days');
SELECT add_retention_policy('cpu_5m',   INTERVAL '180 days');

5. 2 ClickHouse: אחסון צבירה

sql
CREATE TABLE metrics_cpu (
ts DateTime,
host LowCardinality(String),
dc LowCardinality(String),
usage Float32
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (host, dc, ts)
TTL ts + INTERVAL 14 DAY
SETTINGS index_granularity = 8192;

-- Rollup in hourly detail
CREATE MATERIALIZED VIEW cpu_1h
ENGINE = SummingMergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (host, dc, ts)
POPULATE AS
SELECT toStartOfHour(ts) AS ts, host, dc, avg(usage) AS usage
FROM metrics_cpu GROUP BY ts, host, dc;

5. 3 פרומתאוס/ remote_write Metrics:

yaml global:
scrape_interval: 15s remote_write:
- url: http://vminsert:8480/insert/0/prometheus/api/v1/write

6) חשמלית: איך לא ”לפוצץ” את האחסון

6. 1 כללים

הגבלת הקרדינליות (מספר ערכים ייחודיים). אל תכלול את "user _ id'," request _ id', "trace _ id'.
נרמול תגיות ”רב-ערכיות” (קטגוריות = קודים).
השתמש בסוגי LowCardinality (ב-CH), מילונים/תוויות עצים (ב-TSDB).

6. 2 בקרות והתראות

Metrics: "series _ count'," label _ values _ label ", top-N" יקר "שורות.
כתוב מדיניות כישלון כאשר מגבלת הקרדינליות עולה על כל דייר/עבודה.

6. 3 היסטוריות/היסטוגרמות

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

7) שימור, הידרדרות ואחסון

7. 1 מדיניות

3-30 ימים של פרט שני/דקה.
חם: 90-365 ימים של אגרגטים 5m/1h.
קור: שנים של אגרגטים, ארכיון לאחסון אובייקטים (S3/Glacier) עם פרקט.

7. 2 טכנאים

אגרגטים רציפים (Timescale), תצוגות ממשיות (CH), משימות שימור + rollup (Victoria/M3/Influence).
אחסון ממוקד: ”בלוקים חמים” מקומיים, ”קרים” באובייקט עם מטמון מקומי.

8) שאילתות ושפות

8. 1 PromQL (דוגמה)

promql rate(http_requests_total{job="api",status=~"5.."}[5m])

מחפש שיעור שגיאה 5xx API.

8. 2 אגרגטים של SQL על ידי חלונות

sql
SELECT time_bucket('1h', ts) AS hour,
dc, avg(usage) AS avg, max(usage) AS pmax
FROM metrics_cpu
WHERE ts >= now() - interval '24 hours'
GROUP BY 1,2 ORDER BY 1;

8. 3 חריגות (סקיצה)

Z-Score/ESD לפי סטטיסטיקת חלונות, פירוק STL של עונתיות; לאחסן את התוצאות בשורה נפרדת אנומליה = 1/0 '.

9) אינטגרציות ופרוטוקולים

OTLP (OpenTelemetry): metrics/trails/logs, יצואנים על סוכנים (otel-collector) @ TSDB/clickhouse/object.
StashMD/Graphite: ספונטרים/טיימרים פשוטים; פרוקסי לקצה, ואז המרה לפורמט יחיד.
קפקא/NATS: חיץ עבור התפרצויות בלע, הילוך חוזר עבור הילוך אחורי; צרכנים כותבים באצ 'מי.

דוגמה ל ־ Kafka # ClickHouse (פסאודו):
text kafka(topic=metrics) -> stream processor (normalize/tags) -> CH INSERT INTO metrics_cpu FORMAT RowBinary

10) נגישות, HA ופדרציה

זוגות העתק/TSDB HA או Federation Prometheus (אזור = רמה גלובלית).
קריאה/כתיבה מרחוק עבור אחסון ארוך טווח ולוחות מחוונים מרכזיים.
רסיס על ידי תווית/זמן: הפצה אחידה של בלע, מקומי על ידי 'DC/דייר'.

11) יכולת תצפית של האחסון עצמו

11. 1 מדדים

בלע: "דוגמיות/שניות", "append _ latency", "wal _ fsync _ ms'.
"blocks _ count'," compaction _ תור _ len "," chunk _ compression _ ratio ".
"query _ qps'," scan _ bytes "," p95/p99 _ latency "," alloc _ bytes ".
קרדינליות: "series _ count', תוויות עליונות.

11. 2 SLO

”P99 latency for 1h range master 200ms in QPS 500”.

"בלע-טיפה על 0. 01% התפוצץ לפני דגימות X/שנייה"

”Compaction backlog <10 min”.

11. 3 התראות

גדילה ”סדרה _ ספירה”> Y %/שעה.
תור דחיסה/סומק> סף.
N%, dedup/late-dips.

12) בטיחות וריבוי דירות

בידוד על ידי 'דייר' (תווית במפתחות, טבלאות/מסדי נתונים בודדים, מכסות).
חיטוי תוויות (PII), שליטה בגודל/ערך.
הצפנה ”במנוחה” ובהובלה, ביקורת גישה למדדים ”רגישים”.

13) שיטות הפעלה

התחלה חמה וקרה: סיכה של בלוקים ”חמים” במטמון, משחה מוקדמת של ה-N השעות האחרונות.
גיבוי: צינורות בודדים עם עדיפות נמוכה, לא לערבב עם באינטרנט.
סכימה: נדידה עם כתיבה מקבילה (דו-כתיבה) ומתג לאחר מכן.
תקציב אחסון: בקרה על 'cost _ per _ TB _ Monther' + תחזית לגידול בקרדינליות.

14) אנטי דפוסים

תגיות עם קרדינליות גבוהה (user_id, uid) = פיצוץ שורות.
שורות ”נצחיות” ללא שמירה.
הקלטה ללא חבטות/מיון = = דחיסה לקויה וסופת IOPS.
מערבבים אולטרה-פי וסריקות ארוכות על אותה בריכת דיסק.
חוסר במדיניות לא מסודרת.
היסטוגרמות עם מאות דליים * עלות x 10 ללא תועלת.

15) רשימת מימושים

[ ] מגדירים מדדים, סוגים ויחידות; לתקן את חוזה השם/התווית.
[ ] בחר מנוע (TSDB vs SQL/Tore) ושפת שאילתות (PromQL/SQL).
[ עיצוב ] שימור/רולופ (חם/חם/קר) ו ־ ILM.
[ ] הגדרות בלע: WAL/חבורות/מיון, חלונות מחוץ לסדר.
[ ] הפעלת דחיסה (דלתא-של-דלתא/XOR/RLE), נתחים אופטימליים.
[ בקרת ]: מכסות, התראות, מדיניות opt-out.
[ ] הגדרות HA/פדרציה וכתיבה/קריאה מרחוק.
[ ] לוחות מחוונים ומחסנים (בלע/שאילתה/אחסון).
[ ] מדיניות ביטחון/בידוד דייר והיעדר מח "ש בתוויות.
[ ] רגיל ”יום המשחק”: הילוך אחורי, אובדן צומת, גל בלע.

16) FAQ

Q: מה לבחור עבור ניטור תשתיות: Prometheus או ClickHouse/Timescale?
א. לניטור ילידים ו ־ PromQL - Prometheus + אחסון ארוך טווח (ויקטוריה/M3). לתרחישי BI/מחסן ו SQL - Timescale/ClickHouse.

קיו: כיצד לאחסן כמויות ללא סיכומים כבדים? ‏

א ': השתמש בהיסטוגרמה עם דליים מסודרים וחישב כמויות בעת הצורך; או t-מעכל/CKMS באגרגטים.

קיו: איך להתמודד עם חוסר סדר?
א ': הזן את חלון הסובלנות (5-15 דקות) ומדיניות דטרמיניסטית; לטלמטריה מנייד/קצה - החלון רחב יותר.

קיו: מתי נדרשת תגבורת?
א: תמיד> 30-90 ימים: אגרגטים מפחיתים את הגודל x10-100 ומאיצים אנליטיקה.

ש: האם אפשר לערבב בולי עץ ומדדים?
A: לאחסן בנפרד (הפורמטים/השאילתות שונים). עבור קורלציה, השתמש ב ־ Exemplar/TRACEC ובלוחות מחוונים, אך אל תוסיף הכל לשולחן אחד.

17) סיכומים

אחסון סדרות זמן יעיל הוא metrics contrace + tag discipline, inslegent כשיר (WAL/compaction), דחיסה, ו-reservation/rollup policy. הוספת בקרת קרדינליות, NA/פדרציה ויכולת תצפית של החנות עצמה - ואתה מקבל p95 צפוי, עלות סבירה במשך חודשים עד שנים והתנגדות נחשול.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

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