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

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

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

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

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

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

РСпликация

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

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

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

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

Как сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΊΠΎΠΌΠΈΡ‚ Π½Π° транзакция

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

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

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

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

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

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

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

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

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

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

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

НСка ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ. Π”Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ "ΠΏΠΎ-късно" ΠΈ "ΠΏΠΎ-късно" ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅:

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

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

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

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

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

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

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

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

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

Lose-less semisync рСпликация

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

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

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

Извод

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

Π‘ Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°ΠΌ. Π”ΠΎ Π½ΠΎΠ²ΠΈ срСщи Π½Π° курса!

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

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