Change Streams Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ MongoDB
MongoDB Change Streams β API Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π° ΠΏΠΎΡΠΎΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΡ , Π±Π°Π·Π°Ρ ΠΈΠ»ΠΈ Π²ΡΡΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ (Π½Π°ΡΠΈΠ½Π°Ρ Ρ replica set ΠΈΠ»ΠΈ sharded cluster). ΠΠΌΠ΅ΡΡΠΎ polling ΠΏΠΎ updatedAt ΠΈΠ»ΠΈ tailing oplog Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ insert, update, replace, delete Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΠΈΠ»ΠΈ delta Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π΄Π»Ρ real-time Π΄Π°ΡΠ±ΠΎΡΠ΄ΠΎΠ², ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΊΡΡΠ°, ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ search index (Elasticsearch, Atlas Search), event-driven ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ², audit log ΠΈ push-ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ. Change Streams ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° WiredTiger oplog ΠΈ inherit Π΅Π³ΠΎ guarantees ordering Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ shard key Π΄Π»Ρ sharded collections.
ΠΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ
ΠΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ cursor ΡΠ΅ΡΠ΅Π· collection.watch() ΠΈΠ»ΠΈ db.watch() Ρ pipeline Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ:
- operationType β insert, update, replace, delete, invalidate ΠΈ Π΄Ρ.
- fullDocument β ΠΏΡΠΈ updateLookup ΠΈΠ»ΠΈ ΠΏΡΠΈ insert/replace;
- documentKey β _id ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°;
- clusterTime β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΌΠ΅ΡΠΊΠ° Π΄Π»Ρ resume;
- updateDescription β changedFields ΠΈ removedFields Π΄Π»Ρ update.
Resume token ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ²Π° Π±Π΅Π· ΠΏΡΠΎΠΏΡΡΠΊΠ° ΠΈΠ»ΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΠΏΡΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ idempotency Π½Π° consumer). ΠΠ΅Π· ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ token consumer ΠΏΠΎΡΠ»Π΅ restart Π½Π°ΡΠ½ΡΡ Ρ Β«nowΒ» ΠΈ ΠΏΠΎΡΠ΅ΡΡΠ΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ.
Pipeline-ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅
$match Π½Π° operationType, ΠΏΠΎΠ»Ρ fullDocument.status ΠΈΠ»ΠΈ tenantId ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΡΠ°ΡΠΈΠΊ Π½Π° consumer. Π€ΠΈΠ»ΡΡΡΡΠΉΡΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ β Π½Π΅ ΡΠ°ΡΠΈΡΠ΅ Π²Π΅ΡΡ oplog Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π΄ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° real-time ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π’ΠΈΠΏΠΈΡΠ½Π°Ρ ΡΡ Π΅ΠΌΠ°: MongoDB β Change Stream consumer (Node, Python, Go worker) β message bus (Kafka, Redis Streams, NATS) ΠΈΠ»ΠΈ WebSocket gateway β ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° β serverless trigger ΡΠ΅ΡΠ΅Π· Atlas Trigger ΠΈΠ»ΠΈ Change Stream Handler Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ API Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ ΠΊΠ΅ΠΉΡΠΎΠ².
WebSocket ΠΈ SSE
API-ΡΠ΅ΡΠ²Π΅Ρ Π΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΏΠΎ room/userId. Worker ΡΠΈΡΠ°Π΅Ρ change stream, ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² Π½ΡΠΆΠ½ΡΠ΅ room. ΠΠ°ΠΆΠ½ΠΎ: fan-out Π½Π° ΡΡΡΡΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π½Π΅ Π΄Π΅ΡΠΆΠΈΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π±Π΅Π· horizontal scale gateway.
Idempotency ΠΈ ordering
Consumer ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ duplicate ΠΏΡΠΈ reconnect. Π₯ΡΠ°Π½ΠΈΡΠ΅ processed event id (hash clusterTime + documentKey + operationType) Π² Redis ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ Ρ TTL. ΠΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΌ: Β«ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ search indexΒ» Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ, Β«ΡΠΏΠΈΡΠ°ΡΡ Π±Π°Π»Π°Π½ΡΒ» β Π½Π΅Ρ Π±Π΅Π· dedup.
Backpressure
ΠΡΠΈ burst Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² MongoDB consumer Π½Π΅ ΡΡΠΏΠ΅Π²Π°Π΅Ρ β lag ΡΠ°ΡΡΡΡ, memory pressure. Π Π΅ΡΠ΅Π½ΠΈΡ: batch ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ consumer group, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ workers ΠΏΠΎ partition key (shard _id range).
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ Π²Π΅ΡΡΠΈΠΈ
- Replica set ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½; standalone Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ change streams.
- Sharded cluster: stream Π½Π° sharded collection ΡΠΎΠ±Π»ΡΠ΄Π°Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΎΠ΄Π½ΠΈΠΌ shard key value; Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ total order Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½.
- Transaction events Π²ΠΈΠ΄Π½Ρ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· full transaction Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΠΈ.
- Pre/post images (change stream pre/post images) Π΄Π°ΡΡ Π΄ΠΎ/ΠΏΠΎΡΠ»Π΅ Π΄Π»Ρ update β ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ audit, ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ.
- DDL (drop collection) Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ invalidate β consumer Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°ΡΡ stream.
ΠΠ° Atlas Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ; self-hosted ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° oplog window: Π΅ΡΠ»ΠΈ consumer ΠΎΡΡΡΠ°ΡΡ Π΄ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Ρ ΡΠ°Π½ΠΈΡΡΡ oplog, resume Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π±Π΅Π· full sync.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΡ
Change stream cursor ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠ°Π²Π° ΡΡΠ΅Π½ΠΈΡ Π½Π° Π±Π°Π·Ρ. ΠΡΠ΄Π΅Π»ΠΈΡΠ΅ role readChangeStream + read Π½Π° Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π΄Π»Ρ service account worker, Π½Π΅ admin. TLS ΠΌΠ΅ΠΆΠ΄Ρ worker ΠΈ MongoDB ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½ Π² prod.
ΠΠ΅ΡΡΠΈΠΊΠΈ Π΄Π»Ρ Π°Π»Π΅ΡΡΠΎΠ²:
- lag ΠΌΠ΅ΠΆΠ΄Ρ clusterTime ΡΠΎΠ±ΡΡΠΈΡ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ;
- rate ΠΎΡΠΈΠ±ΠΎΠΊ resume (ExpiredChangeStreamEvent);
- ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ downstream;
- restarts consumer pod Π±Π΅Π· ΡΠΎΡ ΡΠ°Π½ΡΠ½Π½ΠΎΠ³ΠΎ token.
Π’Π΅ΡΡΠΈΡΡΠΉΡΠ΅ failover: primary step-down Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ±ΠΈΠ²Π°ΡΡ stream Π½Π°Π²ΡΠ΅Π³Π΄Π° β Π΄ΡΠ°ΠΉΠ²Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡ primary Ρ resume token.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ: live-Π΄Π°ΡΠ±ΠΎΡΠ΄ Π·Π°ΠΊΠ°Π·ΠΎΠ²
ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΡ orders Ρ ΠΏΠΎΠ»ΡΠΌΠΈ status, warehouseId, updatedAt. Pipeline: $match status in [processing, shipped]. Worker ΠΏΠΈΡΠ΅Ρ Π² Redis pub/sub channel warehouse:{id}. Frontend ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ Π½Π° WebSocket ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΡ Π±Π΅Π· refresh. ΠΡΠΈ update status Π½Π° delivered ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠ°ΠΌ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠΊΠ»Π°Π΄Π°.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ: ΡΠΎΡ ΠΆΠ΅ stream ΠΊΠΎΡΠΌΠΈΡ Elasticsearch Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°; idempotency ΠΏΠΎ orderId + updatedAt version field ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ stale overwrite.
Change Streams vs Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ
Polling β ΠΏΡΠΎΡΡΠΎ, Π½ΠΎ latency ΠΈ load Π½Π° DB. Triggers Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ β Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΏΡΡΡ Π·Π°ΠΏΠΈΡΠΈ. Debezium CDC β ΠΌΠΎΡΠ½Π΅Π΅ Π΄Π»Ρ multi-DB, Π½ΠΎ ΡΡΠΆΠ΅Π»Π΅Π΅ Π² ops. Change Streams β sweet spot Π²Π½ΡΡΡΠΈ MongoDB-only landscape Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ glue.
ΠΡΠ»ΠΈ real-time ΡΠ»ΠΎΠΉ ΠΊΡΠΈΡΠΈΡΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, Π·Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΠΉΡΠ΅ Π΅Π³ΠΎ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π°: resume tokens, idempotency, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ oplog lag β Π½Π΅ Β«Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΡΠΎΠΌΒ».
Π Π°Π·Π±ΠΎΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Change Streams Π² Π²Π°Ρ ΡΡΠ΅ΠΊ β Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎ real-time MongoDB.
ΠΠ°Π΄ΡΠΆΠ½ΡΠΉ consumer Change Streams
Change Streams ΡΠ΄ΠΎΠ±Π½Ρ Π΄Π»Ρ fan-out ΡΠΎΠ±ΡΡΠΈΠΉ, Π½ΠΎ Π² ΠΏΡΠΎΠ΄Π΅ Π²Π°ΠΆΠ½Ρ resume token, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ backpressure. Π₯ΡΠ°Π½ΠΈΡΠ΅ token Π² Π½Π°Π΄ΡΠΆΠ½ΠΎΠΌ store; ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΠ°ΡΡΠ° consumer Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠ΅ΡΡΠ°, Π° Π½Π΅ Β«Ρ ΡΠ΅ΠΉΡΠ°ΡΒ».
ΠΠ΅ ΡΠ°ΡΠΈΡΠ΅ ΡΡΠΆΡΠ»ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΡΡΠΌΠΎ Π² ΠΊΠΎΠ»Π±ΡΠΊ ΡΡΡΠΈΠΌΠ°: ΠΊΠ»Π°Π΄ΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΠΉΡΠ΅ Π²ΠΎΡΠΊΠ΅ΡΠ°ΠΌΠΈ. ΠΠ½Π°ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ handler ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΡΡΠ΅Π½ΠΈΠ΅.
- Π€ΠΈΠ»ΡΡΡΡ pipeline Π½Π° Π½ΡΠΆΠ½ΡΠ΅ operationType ΠΈ ΠΏΠΎΠ»Ρ
- ΠΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΎΠ±ΡΡΠΈΡ
- ΠΠ»Π΅ΡΡΡ Π½Π° Π»Π°Π³ consumer ΠΈ ΠΏΠΎΡΠ΅ΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
- Π’Π΅ΡΡ failover replica set: ΡΡΡΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΆΠΈΡΡ primary stepDown
ΠΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ
Change Streams β Π½Π΅ Π·Π°ΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠΉ event-driven Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅. ΠΠ»Ρ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΈΡ write TPS ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ°Π½-Π°ΡΡΠ° ΡΠ°ΡΡΠΎ Π²ΡΠ³ΠΎΠ΄Π½Π΅Π΅ ΡΠ²Π½ΡΠΉ outbox. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΡΠΈΠΌΡ ΡΠ°ΠΌ, Π³Π΄Π΅ MongoDB ΡΠΆΠ΅ source of truth ΠΈ Π½ΡΠΆΠ΅Π½ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ real-time ΡΠ»ΠΎΠΉ.
ΠΠ°ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ.




