Ռուսական շարքերի պահպանումը
1) Ինչո՞ ւ է առանձին ճարտարապետությունը ռուսական շարքերի համար
Ժամանակավոր շարքերը (time series) զույգերի հաջորդականություններ են (timestamp, value) թեգերով (labels), որոնք բնութագրվում են
Գրառումների բարձր արագությունը (ingest) և պարբերականությունը։
Ժամանակի միջակայքով ընթերցումներ (scan + ագրեգատ/պատուհանի գործառույթներ)։
Պայթյունի կարդինալիզացիան թեգերի համադրությունների պատճառով։
Ռետենշենի կարիքը (պահեստավորման ժամկետի սահմանափակումները) և downsampling (ժամանակի սեղմումը)։
Այսպիսով 'պահեստավորման հատուկ մոդել, ֆոսֆիայի պարունակություն և հարցումների արձանագրություն։
2) Տվյալների մոդելը և մետրի պայմանագիրը
2. 1 Անուն և թեգեր
metric _ name: բայը/գոյականը միակ մեջ («htttp _ reques.ru _ total», «cpu _ usage _ seconds _ total»)։
labels: ստատուս («job», «instom», «dc», «pod», «status», «method»)։
Invariants: չփոխել անվան իմաստը, ավելացնել տարբերակները («metric _ v2») անհամատեղելի փոփոխություններով։
2. Երկու տեսակի շարքեր
Gauge (նկար), Counter (աճող արդյունքը), Histogram/Summary (բաշխում/քվանալի), Event/Moscow (Treis-կետեր)։
Ֆինանսավորման/խտության համար, գրանցեք չափման և համախմբման միավորներ (համախմբվում/կրճատվում է)։
2. 3 Ռեթենշնի և ռոլապների քաղաքականություն
Տաք մանրամասն (վայրկյաններ/1-10 րոպե) ապրում են տաք ագրեգատներ (5m/1h) - սառը (1d/1w)։
Counter-ի համար պահեք rate/deration ագրեգատները։
3) Ձայնագրման ճանապարհը 'ընդունումը, բուֆերիզացիան, 108
3. 1 Ingest-interpline
Scrape (pox, Prometheus) կամ push (OTLP/StatsD/Graphite), հաճախ gateway/agent միջոցով։
Buferization WAL-ում (write-ahead log), ապա բաղադրությունը հատվածներում/բլոկներում (LSM նման ճարտարապետություն)։
Batching-ը և ժամանակի տեսակավորումը բարձրացնում են սեղմումը և արագությունը։
3. 2 Ut-of-order և դուբլ
Ընդունումների պատուհանը (lateness), օրինակ 5-15 րոպե) + քաղաքականությունը ՝ «drop deups.ru keeep-lant»։
«(series _ id, timestamp)» տարբերակով կամ «վերջին ձայնագրությունը հաղթում է»։
3. 3 Սպիտակուցիա
Delta-of-corta ժամանակի պիտակների համար, Gorilla/XOR float, RLE և varint ամբողջ, dictionary թեստերի համար։
1-8K կետերի օպտիմալ չափը IOPS-ի և CPU-ի միջև փոխզիջումն է։
4) Պահեստավորման սխեմաները ՝ TSDB vs SQL/կոլոնիկներ
4. 1 Մասնագիտացված TSDB
Prometheus (տեղական, կարճ, PromQL, remote _ write)։
Victor.ru Metr.ru/M3/Inflect DB-ը հորիզոնական մեծացում է, երկար ռետենշն, remote read։
Բլոկների իրականացումը օպտիմիզացված է range scan + ինդեքսային ագրեգացիաների տակ։
4. 2 Ռելյացիոն/հսկայական շարժիչներ
TimescaleDB (PostgreSQL) 'հիպերտաբլիններ, ժամանակի չանկեր/տարածություն, inuus aggregates։
ClickHouse: MergeTree/TTL/նյութականացված ներկայացումներ, հիանալի ագրեսիա և ժամանակի ագրեգացիա։
Ընտրությունը հարցումների էկոհամակարգն է (SQL PromQL), Join/BI և թիմի վիրահատական հմտությունները։
5) Սխեմա և օրինակներ
5. 1 TimescaleDB: հիպերտաբլիցա + inus aggregate
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) Կարդինալությունը 'ինչպես «պայթեցնել» պահեստը
6. 1 Կանոններ
Սահմանափակեք label cardinality (յուրահատուկ արժեքների քանակը)։ Մի միացրեք «user _ id», «request _ id», «trace _ id»։
Նորմալիզացրեք «բազմաբնույթ» թեգերը (կատեգորիայի 105)։
Օգտագործեք LowCardinality տեսակները (CH), բառարանները/պիտակների ծառերը (TSDB)։
6. 2 Վերահսկում և ալտերտեր
Մետրիկները ՝ «series _ count», «label _ values + label +,» top-N «թանկ» շարքեր։
Ձայնագրման մերժման քաղաքականությունը, երբ ավելանում է per tenault/job-ը։
6. 3 Պատմություններ/հիստոգրամներ
High-cardinality-ի համար ավելի լավ է պահել ագրեգատները (histogum buckets) և pre-rolup; Քվանտները հաշվարկել առցանց ագրեգատների վրա։
7) Reownsampling և tiered-storage
7. 1 Քաղաքականություն
Hot: 3-30 օր վայրկյան/րոպե մանրամասն։
Warm: 90-365 օր 5m/1h միավորներ։
Cold: Օրվա ագրեգատների տարիները, օբյեկտի արխիվը (S3/Glacier) Parquet-ից։
7. 2 Սարքավորում
Intinus aggregates (Timescale), նյութականացված ներկայացումներ (CH), retention + rollup tasks (Victoria/M3/Influx)։
Tiered storage: «տաք բլոկները» տեղական, «սառը» օբյեկտում տեղական քեշի հետ։
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): metrics/treiss/logs, գործակալների (otel-colector) TSDB/clichaus/օբյեկտի։
StatsD/Graphite: պարզ հաշվիչներ/թայմեր; Edge-ի վրա, ապա 'փոխակերպում մեկ ձևաչափին։
Kafka/NATS 'ingest, replayer բեքֆիլի համար։ վահանակները գրում են մարտեր։
Kafka-ի օրինակը ClickHouse (կեղծ)
text kafka(topic=metrics) -> stream processor (normalize/tags) -> CH INSERT INTO metrics_cpu FORMAT RowBinary
10) Հասանելիություն, HA և ֆեդեգրաֆիա
Replica/HA զույգերը TSDB-ն կամ Prometheus ֆեդեգրաֆիան (Ռուսաստանի գլոբալի տարածաշրջանի մակարդակը)։
Remote read/write երկարաժամկետ պահեստավորման և կենտրոնացված dashbords համար։
Shard-by-label/time: ingest-ի միատեսակ բաշխումը, dc/ten.ru-ով։
11) Ինքնավստահություն
11. 1 Մետրիկա
Ingest: `samples/sec`, `append_latency`, `wal_fsync_ms`.
Хранение: `blocks_count`, `compaction_queue_len`, `chunk_compression_ratio`.
Запросы: `query_qps`, `scan_bytes`, `p95/p99_latency`, `alloc_bytes`.
Կարդինալությունը '«series _ count», top-labels։
11. 2 SLO
«P99 latency-ը 1h-200 մզ է QPS 35500-ում»։
«Ingest-drop ≤ 0. 01% burst մինչև X samples/sec"։
«Compaction backlog < 10 min».
11. 3 Ալերտներ
Աճը 'series _ count'>% %/ժամ։
Կոմպակտի/flush> շեմն է։
Доля out-of-order > N%, dedup/late-drops.
12) Անվտանգություն և մուլտֆիլմ-տենանտիզմ
Մեկուսացումը 'tenault' (պիտակը բաների մեջ, առանձին աղյուսակներ/հիմքեր, քվոտաներ)։
Պիտակների տեղայնացումը (PII արգելքը), չափսի/արժեքների վերահսկումը։
«Հանգիստ» և տեղափոխության մեջ կոդավորումը, «զգայուն» մետրերի հասանելիության աուդիտը։
13) Վիրահատական պրակտիկա
Pin «տաք» բլոկները, www.fetch վերջին N ժամը։
Backfill: Անհատական փամփուշտներ ցածր գերակայությամբ, չխառնվել առցանց։
Սխեմայի տարբերակումը 'զուգահեռ ձայնագրությամբ (dult-write) և www.com։
Պահեստավորման բյուջեն 'վերահսկողությունը' cost _ per _ TB _ month '+ կարդինալության աճի forecom։
14) Anti-patterna
Բարձր կարդինալությամբ թեգերը (user _ id, uuid) բացատրում է շարքերի պայթյունը։
«Հավիտենական» շարքերը, առանց ռետենշինի, ապահովում են անվերահսկելի աճ։
Առանց բատչինգի/տեսակավորման ձայնագրությունը վատ ագրեսիա է և IOPS փոթորիկ։
OLTP-ի խառնուրդը և երկար սկանաները մեկ փամփուշտի վրա։
Ut-of-order քաղաքականության բացակայությունը բացատրում է կրկնօրինակները և փչացումը։
Հարյուրավոր տանկեր ունեցող հիստոգրամները նշում են 10-ի արժեքը առանց օգուտների։
15) Ներդրման չեկի ցուցակ
- Mastriks, նրանց տեսակները և միավորները; ամրացրեք անունների/պիտակների պայմանագիրը։
- Ընտրեք շարժիչը (TSDB vs SQL/կոլոնիկի) և հարցումների լեզուն (PromQL/SQL)։
- Նախագծեք retenshn/rolap (hot/warm/cold) և ILM-tasks։
- ingest: WAL/batchi/տեսակավորում, պատուհաններ out-of-order։
- Միացրեք թեմը (delta-of-corta/XOR/RLE), օպտիմալ չանկերը։
- Վերահսկեք կարդինալությունը 'քվոտաները, ալերտները, մերժման քաղաքականությունը։
- Պարեք NA/ֆեդեգրաֆիա և remote-write/read.
- Dashbords SLO և Metriks Power (ingest/query/storage)։
- Անվտանգության քաղաքականությունը/ստենանտ մեկուսացումը և PII-ի բացակայությունը պիտակների մեջ։
- «game day» 'backfill, հանգույցի կորուստ, ingest բարձրացում։
16) FAQ
Q: Ի՞ նչ ընտրել ենթակառուցվածքի մոնիտորինգի համար 'Prometheus կամ ClickHouse/Timescale։
A 'National մոնիտորինգի և PromQL-ի համար' Prometheus + երկար storage (Victoria/M3)։ BI/պահեստային և SQL-ի համար 'Timescale/ClickHouse-ը։
Q 'Ինչպե՞ ս պահել քվանտները առանց ծանր summary։
A: Օգտագործեք histogram-ը կոկիկ տանկերով և հաշվեք քվանալները պահանջով։ կամ t-digest/CKEA ագրեգատներում։
Q 'Ինչպե՞ ս վարվել out-of-order-ից։
Ա 'Մուտքագրեք ընդունման պատուհանը (5-15 րոպե) և դետերմինացված քաղաքականությունը dedup; բջջային/edge հեռաչափության համար պատուհանը ավելի լայն է։
Q 'Ե՞ րբ է անհրաժեշտ rollup։
A: Միշտ, երբ վերականգնվում է> 30-90 օր, ագրեգատները նվազեցնում են 10-100 չափսը և արագացնում վերլուծությունը։
Q 'Հնարավո՞ ր է խառնել լույսերն ու մետրերը։
Ա 'Պահեք առանձին (108/հարցումներ տարբեր)։ Հարաբերակցության համար օգտագործեք Exemplar/Trance ID-ը և dashbords-ը, բայց մի՛ պահեք ամեն ինչ մեկ աղյուսակում։
17) Արդյունքները
Ռուսական շարքերի արդյունավետ պահուստը մետրիկի + թեգերի կարգապահության պայմանագիրն է, գրագետ ingest (WAL/compacion), ագրեսիան և retenshn/rolaps քաղաքականությունը։ Ավելացրեք կարդինալության վերահսկողությունը, NA/ֆեդեգրաֆիան և ինքնին սթորի դիտարկումը, և դուք կստանաք կանխատեսելի p95, խելացի արժեք ամիսներ և աճի դիմադրություն։