Maglumat bazalaryny köpeltmek we köpeltmek
Maglumat bazalaryny köpeltmek we köpeltmek
1) Bu näme üçin zerur?
DB dik täzelenmesi CPU/IO/RAM çäklerine ýa-da bir klaster SPOF bolanda, köpeltmek (okamak üçin/NA) we çarding (ýazgy/maglumatlary paýlamak üçin) gelýär. Maksatlar:- Geçirijilik ukyby (write QPS gorizontal beýikligi).
- Elýeterlilik (çalt faýlower, ýekeje şowsuzlyk nokadynyň ýoklugy).
- Maglumatlaryň lokalizasiýasy (köp sebit, pes gizlinlik).
- Şowhunly goňşulary izolýasiýa etmek (hot tenants/hot keys).
2) Ylalaşygyň esasy adalgalary we modelleri
Primary/Leader Replica/Follower: leaderde ýazmak, okamak - replikalarda.
Sinhron köpeltmek: N düwünlere ýazylandan soň geleşigi tassyklamak (pes RPO, has ýokary gizlinlik).
Asinhron: Lider kommiti düzedýär we log iberýär (RPO> 0, pes gizlinlik).
Kworum (Raft/Paxos): düwünleriň köpüsine ýazmak; bir log, awtomatiki lider.
Read-after-write: öz ýazgylaryny kepillendirilen okamak (§ 5 serediň).
CAP-ny şu görnüşde okaýarys: Tor meselelerinde, köplenç dürli ýollarda derejeleri birleşdirip, möhüm amallar üçin sazlaşygy (CP) ýa-da elýeterliligi (AP) saýlaýarsyňyz.
3) Köpeltmek: wariantlar we amallar
3. 1 Fiziki we logiki
Fiziki (WAL/redo/binlog): blok magazineurnalyna has ýakyn, ýönekeý we çalt; gomogen topologiýa/wersiýa bilen çäklenýär.
Logika: setirler/tablisalar derejesinde DML/DDL akymy; bölekleýin göçürmelere, wersiýalaryň arasynda göçmäge, DWH/akym üçin CDC-e mümkinçilik berýär.
3. 2 Sazlamak we dolandyrmak
lag-a gözegçilik ediň (wagt/baýt/LSN).
Hot-standby feedback we replikalarda uzak soraglary çäklendiriň (VACUUM/arassalamagy bes etmezlik üçin).
MySQL üçin - GTID we Orchestrator; для PostgreSQL — Patroni/replication slots, synchronous_standby_names.
sql
-- на лидере
ALTER SYSTEM SET synchronous_commit = 'on';
ALTER SYSTEM SET synchronous_standby_names = 'FIRST 1 (standby_a, standby_b)';
SELECT pg_reload_conf();
MySQL GTID (amal kesgitleýji):
sql
SET GLOBAL enforce_gtid_consistency = ON;
SET GLOBAL gtid_mode = ON; -- перезапуск
CHANGE MASTER TO MASTER_AUTO_POSITION=1;
3. 3 Topologiýalar
1 → N (lider → replikalar) + kaskadlar (replika hasam syzýar).
Multi-primary (active-active) - berk gapma-garşylyk dolandyryşy bolmazdan OLTP-den gaça durmak.
Quorum-klaster (Raft) - CockroachDB/Ugabyte/PG-Raft-goşundylary.
4) Okamak/Write bölmek we marşrut
Hemişe lider hökmünde ýazyň; sözleri okaň, ýöne lag-ny göz öňünde tutuň.
read-after-write strategiýalary:1. Session stickiness: üstünlikli ýazylandan soň, müşderi 'Δ T' -iň dowamynda liderden okaýar.
2. LSN/GTID-gate: Müşderi "LSN = X-den garry däl isleýärin" diýip habar berýär, marşrutizator LSN ≥ X-iň göçürmesine iberýär.
3. Stale-ok: haýyşlaryň bir bölegi köne maglumatlary (kataloglar/lentalar) kabul edýär.
Gurallar: PgBouncer/Pgpool-II (Postgres), ProxySQL/MaxScale (MySQL), Witess (şard marşrutlaşdyrmasy).
LSN-geýt mysaly (ideýa): 'pg _ current _ wal _ lsn ()' -ni HTTP-giderde saklaň we routerden 'pg _ last _ wal _ replay _ lsn () ≥ LSN' -den göçürme talap ediň.
5) Şarding strategiýalary
5. 1 Açary saýlamak
Açar haýyşlaryň birmeňzeşligini we ýerleşişini üpjün etmelidir:- Hash 'tenant _ id '/' user _ id' - deň derejede, ýöne range skanlaryndan mahrum edýär.
- Range/ID wagt seriýasy/arhiw üçin ajaýyp, ýöne töwekgelçilik hot-shard.
- Consistent hashing - şardlary goşmagy/aýyrmagy aňsatlaşdyrýar.
- Directory/lookup tablisasy - çeýe (islendik algoritm), ýöne başga bir tablisa/kesh.
5. 2 Nagyşlar
Shared-nothing: her bir şard - aýratyn DB/klaster, programma marşrutlaşdyrmagy bilýär.
Middleware-sharding: Vitess (MySQL), Citus (Postgres), Proxy-level topologiýany gizleýär.
Federasiýa: maglumatlar domenlerini hyzmatlar boýunça bölmek (catalog, payments, auth).
5. 3 Kompozit açarlar
'{tenant}: {entity}: {id}' açar boşlugyny ulanyň we ony programmada saklaň. Для Postgres — hash partitioning + LIST/RANGE subpartition.
PostgreSQL partitioning (bölek):sql
CREATE TABLE orders (
tenant_id int,
id bigint,
created_at timestamptz,
...,
PRIMARY KEY (tenant_id, id)
) PARTITION BY HASH (tenant_id);
CREATE TABLE orders_t0 PARTITION OF orders FOR VALUES WITH (MODULUS 16, REMAINDER 0);
--... t1..t15
6) Kesgitleýjileri döretmek
Şardingde "gyzgyn" monoton awtoulag inkrementlerinden gaça duruň.
64-bit ID (wagt sebiti) ýa-da ULID/KSUID (monotonlyk we paýlanyş) ýaly Snowflake ulanyň.
Для Postgres — sequence per shard; MySQL üçin - auto_increment_increment/offset (şard liderlerinde dürli ofsetler).
7) Onlaýn geçiş we migrasiýa
Esasy ýörelgeler: goşa ýazgy (dual-write), idempotentlik, wagtlaýyn goşa marşrut.
Ädimler (jemlenen):1. Täze şard/klaster goşuň.
2. Dual-read (yzygiderlilik barlagy) açyň.
3. Dual-write-i açyň, gapma-garşylyklary düzüň.
4. Taryhy maglumatlary (batchi, logiki/CDC köpeltme) ýerine ýetiriň.
5. "Hakykat çeşmesini" täze çardaga geçiriň; "guýruk" sinhronlamasyny goýuň.
6. Könesini öçüriň.
Gurallar: Witess Resharding, Citus move shards, pg_logical/pgoutput, Debezium (CDC), gh-ost/pt-online-schema-change (DDL bloklamasyz).
8) Köp sebit we geo-paýlaýyş
Leader-follower per region: lokal okamak, ýazmak - global lider (ýönekeý model, ýöne cross-region RTT) arkaly.
Multi-leader: iki sebitde ýazgy - konflikt-merjing gerek (timestamp/wersiýa/CRDT).
True distributed SQL (Raft): CockroachDB/Yugabyte - maglumatlar sebite "ýapyşýar", soraglar ýerli kworuma gidýär.
- Pul/sargytlar - CP (kworum/lider), kataloglar/lentalar - AP (nagt pul, eventual).
- Split-brain mümkin bolanda elmydama write fencing (özboluşly açarlar/wersiýa) meýilleşdiriň.
9) Iş ýüzünde ylalaşyklylyk
Read-your-writes: LSN/GTID-i "tutan" lider ýa-da göçürme.
Monotonic reads: Iň soňky okalan LSN-den "uly däl".
Write-conflict control: `SELECT... FOR UPDATE ', wersiýasy (' xmin '/' rowversion '), UPSERT wersiýasyny barlamak bilen.
Idempotentlik: töleglerde/wakalarda idempotentligiň açarlary.
10) Syn etmek, SLO we alertler
Lag replika: wagt (sek), LSN distance (bytes), seconds_behind_master (MySQL).
Mejbury yza gaýdyp gelmek/gapma-garşylyklar, replikasiýa ýalňyşlyklary.
p95/p99 latency по route (read leader vs replica, write).
Throughput: TPS/locks/row-contended tables.
Bloat/VACUUM (PG), InnoDB buffer pool hit ratio (MySQL).
Daşbordlar: per-shard ýükleri, "gyzgyn" şarlar, açarlaryň paýlanyşy.
11) Yzlar, PITR we DR
PITR (point-in-time recovery) üçin doly ekap + WAL/binlog.
Başga sebitde/bulutda saklaň, yzygiderli dikeldiş synaglaryny geçiriň.
Şardlar üçin - ylalaşylan "kesme" (wagt koordinasiýasy/LSN) ýa-da dikeldiş wagtynda applikatiw idempotentlik.
RPO/RTO game-days-da ýazylýar we synagdan geçirilýär.
bash pg_basebackup -D /backups/base -X stream -C -S slot_replica_1 архивация WAL через archive_command или pgBackRest/Barman
12) Howpsuzlyk we elýeterlilik
VPC/ACL, mTLS proxy segmentleri.
Iň pes hukuklar ýörelgesi boýunça rollar/grantlar; şard/rol üçin aýry-aýry ulanyjylar.
DDL/DCL auditi, replikalarda "agyr" haýyşlara çäklendirmeler.
At rest (KMS) we tranzit (TLS) şifrlemek.
"Howsala düwmesi": waka/derňew wagtynda global 'READ ONLY'.
13) Gurallar we kerpiçler
PostgreSQL: Patroni (HA), PgBouncer (pooling/RO-routing), repmgr, pgBackRest/Barman (бэкап), Citus (шардинг), pglogical/Logical Replication, pgbadger/pg_stat_statements.
MySQL: Orchestrator (topologiýalar/awto-failover), ProxySQL/MaxScale (marşrut), Percona XtraBackup (arka), Group Replication/InnoDB Cluster, Witess (şarding/resharding).
Distributed SQL: CockroachDB, YugabyteDB (kworum, gurlan şarding/geolokasiýa).
CDC: Wakalar/ETL üçin Debezium + Kafka/Pulsar.
14) Anti-patternler
Awto-failover we DR synaglary bolmazdan Single-primary.
"Jadyly" read-split lag → Fantom ýalňyşlyklary/şübheli ýalňyşlyklar.
Şarding "şarding üçin": dik skeylyň/indeksleriň/kesiň ýerine wagtyndan öň çylşyrymlylyk.
Time-bucket/hash-salt → bir şard ereýär.
ALTP-de onlarça şardyň üstünde global geleşik 2PC - p99-yň ýokary guýruklary we ýygy-ýygydan blokirlemeler.
Migrasiýalarda dual-write/dual-okamagyň ýoklugy → ýitgi/rasinxron.
DDL onlaýn gurallarsyz we gabat geliş baýdaklarsyz.
15) Giriş çek-sanawy (0-60 gün)
0-15 gün
SLO DB, RPO/RTO kesgitläň.
Replikasiýany, lag monitoringini, esasy bellikleri + PITR-i öz içine alyň.
Router (PgBouncer/ProxySQL) we read-after-write syýasatyny giriziň.
16-30 gün
Şarding strategiýasyny saýlaň, açarlary we shemalary beýan ediň.
Peregardirleme gurallaryny (Vitess/Citus/CDC) taýýarla.
"read-stale-ok" vs "strict" bellikli hyzmatlaryň/tablisalaryň katalogy.
31-60 gün
Pilot-şard, dual-read we backfill.
Game-day: lideriň ýalňyşlygy, PITR-den dikeldiş, sebiti üýtgetmek.
Gyzgyn şard-açarlar we deňsizlikler boýunça hasabatlary awtomatlaşdyryň.
16) Kämillik ölçegleri
Replica lag p95 <kritiki okalyşlar üçin maksat (mysal üçin 500 ms).
Üstünlikli DR-synaglary ≥ 1/çärýek (restore ≤ RTO, RPO ≤ ýitgisi).
Toplar boýunça ýüküň paýlanyşy: QPS/ammar boýunça deňsizlik <20%.
Dogry ugrukdyrylan strict-consistency haýyşlarynyň paýy, = 100%.
CP-kepillikleri talap edýän hadysalarda Zero-data-loss (pul/sargytlar).
Duralgasyz, gabat gelýän baýdaklar bilen onlaýn DDL/migrasiýa.
17) Reseptleriň mysallary
Wagt aralygy üçin hash-salt (bir şard gyzdyrmazlyk üçin):sql
-- вычисляйте bucket = hash(user_id) % 16, храните (bucket, created_at)
PARTITION BY LIST (bucket) SUBPARTITION BY RANGE (created_at)
Read-my-writes middleware (psevdokod):
python lsn = db.leader_query("SELECT pg_current_wal_lsn()")
ctx.sticky_until = now()+5s ctx.min_lsn = lsn в роутере чтений: выбираем реплику с last_lsn >= ctx.min_lsn, иначе лидер
Vitess VSchema (bölek):
json
{
"tables": {
"orders": { "column_vindexes": [{ "column": "tenant_id", "name": "hash" }] }
}
}
18) Netijenama
Şarding we köpeltmek diňe bir tehnika däl, eýsem proseslerdir: utgaşyklygy göz öňünde tutup marşrutlaşdyrmak, migrasiýa düzgüni (dual-write/read, backfill), yzygiderli DR-synaglar we lag/gyzgyn şardlaryň synlanmagy. Ýönekeý leader → replica + read-after-write bilen başlaň, soň bolsa ýük profiliniň hakykatdanam talap edýän ýerinde şarding goşuň. Taýýar platformalary (Vitess/Citus/Distributed SQL) ulanyň we iş taýdan möhüm maglumatlary CP re modeiminde saklaň - şonuň üçin baza çüýşe bokurdagy bolmagyny bes eder we platformanyň öňünden aýdyp boljak, elastik binýady bolar.