GH GambleHub

ذخیره سازی سری زمان

1) چرا معماری جداگانه برای سری زمان

سری های زمانی دنباله ای از جفت ها (برچسب زمانی، مقدار) با برچسب ها (برچسب ها) هستند که توسط:
  • سرعت ضبط بالا (مصرف) و فرکانس.
  • خواندن با محدوده زمانی (اسکن + aggregates/توابع پنجره).
  • کاردینالیتی انفجاری به دلیل ترکیب برچسبها.
  • نیاز به نگهداری (محدودیت عمر مفید) و downsampling (فشرده سازی زمان).
  • از این رو - یک مدل ذخیره سازی ویژه، فرمت های فشرده سازی و پروتکل های درخواست.

2) مدل داده و معیارهای قرارداد

2. 1 نامگذاری و برچسب ها

metric_name: فعل مفرد/اسم ('http _ requests _ total', 'cpu _ usage _ seconds _ total').
برچسب ها: کلیدهای ویژگی («job»، «instance»، «dc»، «pod»، «status»، «method»).
ثابت: معانی نام را تغییر ندهید، نسخه های ('metric _ v2') را با تغییرات ناسازگار اضافه کنید.

2. 2 انواع ردیف

سنج، شمارنده، هیستوگرام/خلاصه، رویداد/دامنه.
برای امور مالی/تراکم - واحد ثابت و تجمع (خلاصه/به طور متوسط).

2. 3 سیاست نگهداری و تجدید نظر

جزئیات داغ (ثانیه/1-10 دقیقه) → واحدهای گرم (5m/1h) → سرد (1d/1w).
برای شمارنده - نرخ فروشگاه/deriv aggregates.

3) مسیر ضبط: پذیرش، بافر، جمع و جور

3. 1 خط لوله را وارد کنید

خراش دادن (کشیدن، Prometheus) یا فشار (OTLP/StatsD/Graphite)، اغلب از طریق دروازه/عامل.
بافر در WAL (نوشتن پیش رو)، سپس فشرده سازی به بخش/بلوک (معماری LSM مانند).
دسته بندی و مرتب سازی زمان باعث افزایش فشرده سازی و سرعت می شود.

3. 2 دست زدن به خارج از نظم و طول می کشد

پنجره تحمل (پنجره تاخیر، به عنوان مثال 5-15 دقیقه) + سیاست: «رها کردن | upsert | نگه داشتن آخرین».
Deduplication توسط «(series_id، برچسب زمانی)» با نسخه یا «آخرین رکورد برنده».

3. 3 فشرده سازی

دلتا دلتا برای برچسب های زمانی، گوریل/XOR برای شناور، RLE و varint برای اعداد صحیح، فرهنگ لغت برای برچسب ها.
اندازه بلوک بهینه («chunk») نقاط 1-8K یک سازش بین IOPS و CPU است.

4) طرح های ذخیره سازی: TSDB در مقابل SQL/ستون

4. 1 TSDB اختصاصی

Prometheus (محلی، احتباس کوتاه، PromQL، remote_write).
VictoriaMetrics/M3/InfluxDB - مقیاس افقی، نگهداری طولانی، خواندن از راه دور.
فرمت های بلوک برای اسکن محدوده + تجمع مناقصه بهینه شده است.

4. 2 موتورهای ارتباطی/ستون

TimescaleDB (PostgreSQL): hypertables، تکه های زمان/فضا، مصالح پیوسته.
ClickHouse: MergeTree/TTL/نمایش های تحقق یافته، فشرده سازی عالی و جمع آوری زمان.
انتخاب - توسط اکوسیستم پرس و جو (SQL در مقابل PromQL)، پیوستن/BI مورد نیاز و مهارت های عملیاتی تیم.

5) طرح و نمونه

5. 1 TimescaleDB: hypertable + مجموع مداوم

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 Prometheus/VictoriaMetrics: remote_write

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

6) Cardinality: چگونه به «منفجر کردن» ذخیره سازی

6. 1 قوانین

کاردینالیتی برچسب محدود (تعداد مقادیر منحصر به فرد). «user _ id»، «request _ id»، «trace _ id» را شامل نمی شود.
عادی «چند ارزش» برچسب ها (دسته → کدهای).
از انواع LowCardinality (در CH)، لغت نامه ها/درختان برچسب (در TSDB) استفاده کنید.

6. ۲ کنترلها و هشدارها

معیارها: «series _ count»، «label _ values {label}»، سطرهای «گران» top-N.
نوشتن سیاست های شکست زمانی که حد کاردینالیتی در هر مستاجر/کار بیش از حد است.

6. 3 تاریخچه/تاریخچه

برای کاردینالیتی بالا، بهتر است aggregates (سطل هیستوگرام) و pre-rollup را ذخیره کنید. چندک برای محاسبه آنلاین در aggregates.

7) نگهداری، downsampling و ذخیره سازی سطحی

7. 1 سیاست ها

داغ: 3-30 روز از جزئیات دوم/دقیقه.
گرم: 90-365 روز از 5m/1h aggregates.
سرد: سالها جمع آوری روز، آرشیو در ذخیره سازی شی (S3/Glacier) با پارکت.

7. 2 تکنسین ها

مصالح پیوسته (مقیاس زمانی)، نماهای تحقق یافته (CH)، نگهداری + وظایف رول آپ (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 فصلی ؛ نتایج را در یک ردیف جداگانه 'anomaly = 1/0' ذخیره کنید.

9) یکپارچگی و پروتکل ها

OTLP (OpenTelemetry): معیارها/مسیرها/سیاهههای مربوط، صادرکنندگان در عوامل (otel-collector) → TSDB/clickhouse/object.
آمار/گرافیت: شمارنده ساده/تایمر ؛ پروکسی به لبه، سپس تبدیل به یک فرمت واحد.
Kafka/NATS: بافر برای انفجار مصرف، پخش کننده برای پر کردن ؛ مصرف کنندگان بتچامی می نویسند.

مثال کافکا → ClickHouse (شبه):
text kafka(topic=metrics) -> stream processor (normalize/tags) -> CH INSERT INTO metrics_cpu FORMAT RowBinary

10) دسترسی، HA و فدراسیون

Replica/TSDB HA جفت یا فدراسیون Prometheus (منطقه → سطح جهانی).
خواندن/نوشتن از راه دور برای ذخیره سازی طولانی مدت و داشبورد متمرکز.
Shard-by-label/time: توزیع یکنواخت مصرف، محل توسط «dc/tenant».

11) قابلیت مشاهده خود ذخیره سازی

11. 1 معیارها

مصرف: 'samples/sec', 'append _ latency', 'wal _ fsync _ ms'.
Хранение: 'blocks _ count', 'compaction _ queue _ len', 'chunk _ compression _ ratio'.
Запросы: 'query _ qps', 'scan _ bytes', 'p95/p99 _ latency', '- _ bytes'.
کاردینالیتی: 'series _ count'، برچسبهای بالا.

11. 2 SLO

«P99 تاخیر برای محدوده 1h ≤ 200ms در QPS≤500».

"قطره قطره ≤ 0. 01٪ در پشت سر هم قبل از X نمونه/ثانیه"

«انباشت تراکم <10 دقیقه».

11. 3 هشدار

رشد 'series _ count'> Y ٪/ساعت.
صف فشرده سازی/فلاش> آستانه.
Доля خارج از ترتیب> N٪، dedup/اواخر قطره.

12) ایمنی و چند اجاره ای

جداسازی توسط «مستاجر» (برچسب در کلید، جداول/پایگاه داده های فردی، سهمیه ها).
پاکسازی برچسب ها (ممنوعیت PII)، کنترل اندازه/ارزش.
رمزگذاری «در حالت استراحت» و در حمل و نقل، دسترسی حسابرسی به معیارهای «حساس».

13) شیوه های عملیاتی

گرم کردن و شروع سرد: پین از بلوک های «گرم» در حافظه پنهان، prefetch از آخرین N ساعت.
Backfill: خطوط لوله فردی با اولویت کم، با آنلاین مخلوط نیست.
versioning schema: مهاجرت با نوشتن موازی (نوشتن دوگانه) و سوئیچ بعدی.
بودجه ذخیره سازی: کنترل «cost _ per _ TB _ month» + پیش بینی رشد کاردینالیتی.

14) ضد الگوهای

برچسب ها با کاردینالیتی بالا (user_id، uuid) → انفجار ردیف.
ردیف «ابدی» بدون احتباس → رشد کنترل نشده.
ضبط غیر بوچینگ/مرتب سازی → فشرده سازی ضعیف و طوفان IOPS.
OLTP و اسکن های طولانی را در همان استخر دیسک مخلوط کنید.
عدم وجود سیاست عدم نظم → تکراری و نفخ.
هیستوگرام با صدها سطل → هزینه × 10 بدون سود.

15) چک لیست پیاده سازی

  • تعریف معیارها، انواع و واحدهای آنها ؛ قرارداد نام/برچسب را اصلاح کنید.
  • موتور را انتخاب کنید (TSDB در مقابل SQL/ستون) و زبان پرس و جو (PromQL/SQL).
  • طراحی نگهداری/رول آپ (گرم/گرم/سرد) و ILM.
  • پیکربندی مصرف: WAL/دسته/مرتب سازی، پنجره های خارج از سفارش.
  • فشرده سازی (delta-of-delta/XOR/RLE)، تکه های بهینه را روشن کنید.
  • کنترل کاردینالیتی: سهمیه ها، هشدارها، سیاست های امتناع.
  • پیکربندی HA/فدراسیون و از راه دور نوشتن/خواندن.
  • داشبورد SLO و معیارهای ذخیره سازی (مصرف/پرس و جو/ذخیره سازی).
  • سیاست های جداسازی امنیتی/مستاجر و عدم وجود PII در برچسب ها.
  • به طور منظم «روز بازی»: پر کردن، از دست دادن گره، افزایش مصرف.

16) سوالات متداول

س: چه چیزی را برای نظارت بر زیرساخت انتخاب کنید: Prometheus یا ClickHouse/Timescale ؟

A: برای نظارت بومی و PromQL - Prometheus + ذخیره سازی طولانی مدت (Victoria/M3). برای سناریوهای BI/warehouse و SQL - Timescale/ClickHouse.

س: چگونه می توان چندک ها را بدون خلاصه های سنگین ذخیره کرد ؟

A: استفاده از هیستوگرام با سطل شسته و رفته و محاسبه چندک در صورت درخواست ؛ یا t-digest/CKMS در aggregates.

س: چگونه با خارج از نظم برخورد کنیم ؟

A: وارد پنجره تحمل (5-15 دقیقه) و سیاست قطعی قطعی ؛ برای تله متری از تلفن همراه/لبه - پنجره گسترده تر است.

س: هنگامی که یک رول آپ مورد نیاز است ؟

A: همیشه> 30-90 روز: aggregates کاهش اندازه × 10-100 و سرعت بخشیدن به تجزیه و تحلیل.

س: آیا امکان ترکیب سیاهههای مربوط و معیارها وجود دارد ؟

A: فروشگاه به طور جداگانه (فرمت/نمایش داده شد متفاوت است). برای همبستگی، از Exemplar/TraceID و داشبورد استفاده کنید، اما همه چیز را به یک جدول اضافه نکنید.

17) مجموع

ذخیره سازی سری زمانی موثر قرارداد متریک + نظم و انضباط برچسب، مصرف صالح (WAL/تراکم)، فشرده سازی، و سیاست های حفظ/rollup است. اضافه کردن کنترل cardinality، NA/فدراسیون و مشاهده از فروشگاه خود را - و شما P95 قابل پیش بینی، هزینه مناسب برای ماه تا سال و مقاومت در برابر افزایش است.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.