Π—Π°Ρ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° полуасинхронна рСпликация?

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички. Аз съм Владислав Π ΠΎΠ΄ΠΈΠ½. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°ΠΌ курсовС Π½Π° ΠΏΠΎΡ€Ρ‚Π°Π»Π° OTUS, посвСтСни Π½Π° софтуСрната Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° софтуСра, ΠΏΠΎΠ΄Π»ΠΎΠΆΠ΅Π½ Π½Π° високо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. Π’ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π·Π° старта Π½Π° Π½ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° курса β€žΠΡ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ Π½Π° високи Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½ΠΈΡβ€œ Ρ€Π΅ΡˆΠΈΡ… Π΄Π° напиша ΠΊΡ€Π°Ρ‚ΡŠΠΊ авторски ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΊΠΎΠΉΡ‚ΠΎ искам Π΄Π° сподСля с вас.

Π—Π°Ρ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° полуасинхронна рСпликация?

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π½Π° HDD ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ само ΠΎΠΊΠΎΠ»ΠΎ 400-700 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² сСкунда (ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ нСсравнимо с Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈΡ‚Π΅ rps, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΠ°Π΄Π°Ρ‚ Π½Π° високо Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½Π° систСма), класичСската дискова Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ сС ΠΎΠΊΠ°Π·Π²Π° тясно място Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°. Π—Π°Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ особСно Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π·Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ 2 ΠΌΠΎΠ΄Π΅Π»Π° Π·Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ: рСпликация ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΈΠ½Π³. Π¨Π°Ρ€Π΄ΠΈΡ€ΠΈΠ½Π³ΡŠΡ‚ позволява Π΄Π° сС ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π° опСрацията ΠΏΠΎ запис, Π° Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ rps Π½Π° запис, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΏΠ°Π΄Π° Π½Π° Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€ ΠΎΡ‚ вашия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€. РСпликацията позволява ΡΡŠΡ‰ΠΎΡ‚ΠΎ, Π½ΠΎ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅. ИмСнно Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» Π΅ посвСтСна настоящата статия.

РСпликация

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π½Π° рСпликацията Π½Π° Π΅Π΄Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ високо Π½ΠΈΠ²ΠΎ, Ρ‚ΠΎΠ²Π° Π΅ проста Ρ€Π°Π±ΠΎΡ‚Π°: ΠΈΠΌΠ°Π»ΠΈ стС Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅, Π° слСд Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠ·ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ Π΅ прСстанал Π΄Π° сС справя с Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π’ΠΈΠ΅ добавятС ΠΎΡ‰Π΅ няколко ΡΡŠΡ€Π²ΡŠΡ€Π°, синхронизиратС Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° всички ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, Π° потрСбитСлят ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΡΡŠΡ€Π²ΡŠΡ€ ΠΎΡ‚ вашия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€.

Π’ΡŠ despite Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠ°Ρ‚Π° простота, ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ няколко Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π·Π° класифициранС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚Π°Π·ΠΈ схСма:

  • Π‘ΠΏΠΎΡ€Π΅Π΄ Ρ€ΠΎΠ»ΠΈΡ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° (master-master ΠΈΠ»ΠΈ master-slave)
  • Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ (row-based, statement-based ΠΈΠ»ΠΈ mixed)
  • Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° синхронизация Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅

ДнСс Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ 3-ия ΠΏΡƒΠ½ΠΊΡ‚.

Как ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΊΠΎΠΌΠΈΡ‚ Π½Π° транзакцията

Π’Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ° Π½Π΅ Π΅ пряко ΡΠ²ΡŠΡ€Π·Π°Π½Π° с рСпликацията, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС написана ΠΎΡ‚Π΄Π΅Π»Π½Π° статия ΠΏΠΎ нСя, ΠΎΠ±Π°Ρ‡Π΅ Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π±Π΅Π· Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° ΠΊΠΎΠΌΠΈΡ‚ Π½Π° транзакцията ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½ΠΎΡ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π΅ Π±Π΅Π·ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‰Π΅ си позволя Π΄Π° напомня Π½Π°ΠΉ-основнитС Π½Π΅Ρ‰Π°. ΠšΠΎΠΌΠΈΡ‚ΡŠΡ‚ Π½Π° транзакцията ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· 3 Π΅Ρ‚Π°ΠΏΠ°:

  1. Запис Π½Π° транзакцията Π² ΠΆΡƒΡ€Π½Π°Π» Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  3. Π’Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията.

Π’ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π±Π°Π·ΠΈ Π² Ρ‚ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ нюанси: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² двигатСля InnoDB Π½Π° Π±Π°Π·Π°Ρ‚Π° MySQL ΠΈΠΌΠ° 2 Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°: Π΅Π΄ΠΈΠ½ Π·Π° рСпликация (binary log) ΠΈ Π΄Ρ€ΡƒΠ³ Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° ACID (undo/redΠΎ log), Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π² PostgreSQL ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ Π΄Π½Π΅Π²Π½ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ изпълнява ΠΈ Π΄Π²Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (write ahead log = WAL). Но Ρ‚ΡƒΠΊ Π΅ прСдставСна ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ‰Π°Ρ‚Π° концСпция, която позволява Ρ‚Π΅Π·ΠΈ нюанси Π΄Π° Π½Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π²Π·ΠΈΠΌΠ°Π½ΠΈ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄.

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Π° (sync) рСпликация

НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° ΠΊΠΎΠΌΠΈΡ‚ Π½Π° транзакцията Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  1. Запис Π½Π° транзакцията Π² ΠΆΡƒΡ€Π½Π°Π» Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  3. Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π΄ΠΎ всички Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ.
  4. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ всички Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π·Π° изпълнСниС Π½Π° транзакцията.
  5. Π’Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията.

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ€Π΅Π΄ΠΈΡ†Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ:

  • ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Ρ‡Π°ΠΊΠ° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° всички Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ.
  • с ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° броя Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° намалявамС вСроятността опСрацията Π·Π° запис Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Ако с ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° всичко Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ясно, Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ пояснСни. Ако ΠΏΡ€ΠΈ синхронна рСпликация Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΏΠΎΠ½Π΅ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ възСл, Π½ΠΈΠ΅ отмСнямС транзакцията. Π’Π°ΠΊΠ°, ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°ΠΉΠΊΠΈ броя Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Ρ‚Π΅ вСроятността, Ρ‡Π΅ опСрацията Π·Π° запис Ρ‰Π΅ сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ.

МоТСм Π»ΠΈ Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈΠ΅ само ΠΎΡ‚ някаква част ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ 51% (ΠΊΠ²ΠΎΡ€ΡƒΠΌ)? Π”Π°, ΠΌΠΎΠΆΠ΅ΠΌ, ΠΎΠ±Π°Ρ‡Π΅ Π² класичСския Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ всички възли, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° осигурим пълна консистСнтност Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ бСзспорно прСдимство Π½Π° Ρ‚ΠΎΠ·ΠΈ Π²ΠΈΠ΄ рСпликация.

Асинхронна (async) рСпликация

НСка ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ. Π”Π°Π½Π½ΠΈΡ‚Π΅ Π΄ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ "някога послС", ΠΈ "някога послС" ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅:

  1. Запис Π½Π° транзакцията Π² ΠΆΡƒΡ€Π½Π°Π» Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  3. Π’Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията.
  4. Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π΄ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΡ‚ тях.

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±ΡŠΡ€Π·ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ Π΄ΡŠΡ€ΠΆΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ достигнат Π΄ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅ ΠΈ бъдС ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ.

Но условиСто Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π΄ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ "някога послС" ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π·Π°Π³ΡƒΠ±Π° Π½Π° транзакция, ΠΈ Ρ‚ΠΎ Π·Π°Π³ΡƒΠ±Π° Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄Π΅Π½Π° Π·Π° потрСбитСля транзакция, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π°ΠΊΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π΅ са успСли Π΄Π° сС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Ρ‚, ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° опСрацията Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΎ, Π° ΠΏΡ€ΠΈ възСла, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ са достигнали ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, HDD Π΅ изгорял, Π½ΠΈΠ΅ Π³ΡƒΠ±ΠΈΠΌ транзакцията, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ нСприятни послСдици.

ΠŸΠΎΠ»ΡƒΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Π° (semisync) рСпликация

Най-накрая стигнахмС Π΄ΠΎ полусинхронната рСпликация. Π’ΠΎΠ·ΠΈ Π²ΠΈΠ΄ рСпликация Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‚ ΠΈ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ разпространСн, Π½ΠΎ прСдставлява Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ интСрСс, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΡ‡Π΅Ρ‚Π°Π΅ прСдимствата ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° синхронната, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° асинхронната рСпликация.

НСка Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈΠΌ Π΄Π²Π°Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Няма Π΄Π° Π΄ΡŠΡ€ΠΆΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° дълго, Π½ΠΎ Ρ‰Π΅ изискамС Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Π½ΠΈ:

  1. Запис Π½Π° транзакцията Π² ΠΆΡƒΡ€Π½Π°Π» Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  3. Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ към Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅.
  4. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π° Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ (Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ "някога ΠΏΠΎ-късно").
  5. Π’Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията.

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠ·ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° транзакция Π½Π°ΡΡ‚ΡŠΠΏΠ²Π° само Π² случай Π½Π° срив ΠΈ Π½Π° Π½ΠΎΠ΄Π°, ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‰ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, ΠΈ Π½Π° рСпликационния Π½ΠΎΠ΄. ВСроятността Π·Π° Ρ‚Π°ΠΊΡŠΠ² срив сС счита Π·Π° ниска, ΠΈ Ρ‚Π΅Π·ΠΈ рисковС сС ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚.

Но ΠΏΡ€ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ възмоТСн риск ΠΎΡ‚ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΈ чСтСния. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ слСдният сцСнарий: Π² ΡΡ‚ΡŠΠΏΠΊΠ° 4 Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°. НиС трябва Π΄Π° ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠΌ Ρ‚Π°Π·ΠΈ транзакция, Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄Π° Π½Π΅ прСдоставямС ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅. Въй ΠΊΠ°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ бяха ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ Π² ΡΡ‚ΡŠΠΏΠΊΠ° 2, ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡ‚ΡŠΠΏΠΊΠ° 2 ΠΈ отмяната Π½Π° транзакцията ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ†, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° видят Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ Π±ΠΈ трябвало Π΄Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π² Π±Π°Π·Π°Ρ‚Π°.

Lose-less полусинхронна рСпликация

Ако помислим ΠΌΠ°Π»ΠΊΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° Ρ€Π°Π·ΠΌΠ΅Π½ΠΈΠΌ мСстата Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π·Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΈΡ‚Π΅ чСтСния Π² Ρ‚ΠΎΠ·ΠΈ сцСнарий:

  1. Запис Π½Π° транзакцията Π² ΠΆΡƒΡ€Π½Π°Π» Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  2. Π˜Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π°.
  3. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚Π° Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ (Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ "някога ΠΏΠΎ-късно").
  4. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.
  5. Π’Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° транзакцията.

Π‘Π΅Π³Π° Π°Π½Π³Π°ΠΆΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ само Π°ΠΊΠΎ Ρ‚Π΅ са Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Π½ΠΈ.

Извод

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠ½Π°Π³ΠΈ, няма ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π° ΠΈΠΌΠ° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, всяко ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π° свои прСдимства ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ ΠΈ Π΅ подходящо Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ класовС Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ΠΎΠ²Π° Π²Π°ΠΆΠΈ ΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° синхронизиранС Π½Π° Π΄Π°Π½Π½ΠΈ Π² Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Π½Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠΠ°Π±ΠΎΡ€ΡŠΡ‚ ΠΎΡ‚ прСдимства, ΠΊΠΎΠΈΡ‚ΠΎ полусинхронната рСпликация ΠΏΡ€Π΅Π΄Π»Π°Π³Π°, Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ солидСн ΠΈ интСрСсСн, Π·Π° Π΄Π° бъдС ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ Π·Π° заслуТаващ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π΅ ΠΌΠ°Π»ΠΊΠΎ разпространСн.

Π’ΠΎΠ²Π° Π΅ всичко. Π”ΠΎ Π½ΠΎΠ²ΠΈ срСщи Π½Π° курса!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster