NewSQL = NoSQL+ACID
Π”ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ΠžΠ΄Π½ΠΎΠΊΠ»Π°ΡΡΠ½ΠΈΠΊΠ°Ρ… ΠΎΠΊΠΎΠ»ΠΎ 50 Π’Π‘ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ Π² SQL Server. Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ объСма ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ быстрый ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ, Π΄Π° Π΅Ρ‰Π΅ ΠΈ устойчивый ΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρƒ Π¦ΠžΠ” доступ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ SQL Π‘Π£Π‘Π”, практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· NoSQL-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, Π½ΠΎ Π½Π΅ всё ΠΌΠΎΠΆΠ½ΠΎ пСрСнСсти Π² NoSQL: Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сущности Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π²Π΅Π»ΠΎ нас ΠΊ использованию NewSQL-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π‘Π£Π‘Π”, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ быстродСйствиС NoSQL-систСм, Π½ΠΎ ΠΏΡ€ΠΈ этом ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ для классичСских систСм ACID-Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ. Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… систСм этого Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, поэтому ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ‚Π°ΠΊΡƒΡŽ систСму сами ΠΈ запустили Π΅Π΅ Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΡƒΡŽ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ β€” Ρ‡ΠΈΡ‚Π°ΠΉ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ.

БСгодня СТСмСсячная аудитория «Одноклассников» составляСт Π±ΠΎΠ»Π΅Π΅ 70 ΠΌΠ»Π½ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… посСтитСлСй. ΠœΡ‹ Π²Ρ…ΠΎΠ΄ΠΈΠΌ Π² пятСрку ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΡ… соцсСтСй ΠΌΠΈΡ€Π°, ΠΈ Π² Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΠΊΡƒ сайтов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ проводят большС всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° «ОК» ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ высокиС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: Π±ΠΎΠ»Π΅Π΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° HTTP-запросов/сСк Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Ρ‹. Части ΠΏΠ°Ρ€ΠΊΠ° сСрвСров Π² количСствС Π±ΠΎΠ»Π΅Π΅ 8000 ΡˆΡ‚ΡƒΠΊ располоТСны Π±Π»ΠΈΠ·ΠΊΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° β€” Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… московских Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ…, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ΅Π½Π΅Π΅ 1 мс ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Cassandra с 2010 Π³ΠΎΠ΄Π°, начиная с вСрсии 0.6. БСгодня Π² эксплуатации нСсколько дСсятков кластСров. Π‘Π°ΠΌΡ‹ΠΉ быстрый кластСр ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 4 ΠΌΠ»Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду, Π° ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ 260 Π’Π±.

Однако всё это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ NoSQL-кластСры, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ для хранСния слабо согласованных Π΄Π°Π½Π½Ρ‹Ρ…. Нам ΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ основноС консистСнтноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Microsoft SQL Server, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ использовалось с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° основания «Одноклассников». Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ состояло ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 300 SQL Server Standard Edition машин, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π»ΠΎΡΡŒ 50 Π’Π± Π΄Π°Π½Π½Ρ‹Ρ… β€” бизнСс-сущностСй. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ высокой согласованности.

Для распрСдСлСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π½ΠΎΠ΄Π°ΠΌ SQL Server ΠΌΡ‹ использовали ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅, Ρ‚Π°ΠΊ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅). Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΌΡ‹ использовали ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ схСму ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…: ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сущности сопоставлялся Ρ‚ΠΎΠΊΠ΅Π½ β€” функция ΠΎΡ‚ ID сущности. Бущности с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π»ΠΈΡΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ SQL-сСрвСр. ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° master-detail Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΎΡΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ основной ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΉ записи всСгда совпадали ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ сСрвСрС. Π’ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти ΠΏΠΎΡ‡Ρ‚ΠΈ всС записи ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ β€” Π·Π½Π°Ρ‡ΠΈΡ‚, всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ подсистСмы хранятся Π½Π° ΠΎΠ΄Π½ΠΎΠΌ сСрвСрС. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² бизнСс-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда участвовали Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ SQL-сСрвСра, Ρ‡Ρ‚ΠΎ позволяло ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π±Π΅Π· нСобходимости использования ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… распрСдСлСнных ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Благодаря ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Ρƒ ΠΈ для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ SQL:

  • НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Foreign key constraints, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ID сущности ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ сСрвСрС.
  • НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ ΠΈΠ·-Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° ЦПУ Π‘Π£Π‘Π”.
  • НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ JOINs ΠΈΠ·-Π·Π° всСго Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈ мноТСства случайных Ρ‡Ρ‚Π΅Π½ΠΈΠΉ с диска.
  • Π’Π½Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Read Uncommitted.
  • ВыполняСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Π² срСднСм ΠΊΠΎΡ€ΠΎΡ‡Π΅ 100 мс).
  • НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ многорядныС UPDATE ΠΈ DELETE ΠΈΠ·-Π·Π° большого количСства Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ β€” обновляСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ записи.
  • Запросы всСгда выполняСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ индСксам β€” запрос с ΠΏΠ»Π°Π½ΠΎΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ просмотра Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для нас ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ Π‘Π” ΠΈ Π΅Π΅ ΠΎΡ‚ΠΊΠ°Π·.

Π­Ρ‚ΠΈ шаги ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π²Ρ‹ΠΆΠ°Ρ‚ΡŒ ΠΈΠ· SQL-сСрвСров ΠΏΠΎΡ‡Ρ‚ΠΈ максимум ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Однако ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ всё большС ΠΈ большС. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… рассмотрим.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с SQL

  • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ использовали самописный ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΡˆΠ°Ρ€Π΄ΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ администраторами Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Всё это врСмя ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ обслуТивали запросы.
  • По ΠΌΠ΅Ρ€Π΅ роста количСства записСй Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сниТаСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вставки ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ индСксов ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΊΡ€Π°Ρ‚Π½ΠΎ, созданиС ΠΈ пСрСсозданиС индСксов ΠΈΠ΄Ρ‘Ρ‚ с Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌΠΎΠΌ.
  • НаличиС Π² production нСбольшого количСства Windows для SQL Server затрудняСт ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ инфраструктурой

Но главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€”

ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ

Π£ классичСского SQL-сСрвСра плохая ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ. Допустим, Ρƒ вас всСго ΠΎΠ΄ΠΈΠ½ сСрвСр Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΎΠ½ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π· Π² Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄Π°. Π’ это врСмя сайт Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 20 ΠΌΠΈΠ½ΡƒΡ‚, это ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. Если Ρƒ вас 64 сСрвСра, Ρ‚ΠΎ сайт Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡƒΠΆΠ΅ Ρ€Π°Π· Π² Ρ‚Ρ€ΠΈ Π½Π΅Π΄Π΅Π»ΠΈ. А Ссли Ρƒ вас 200 сСрвСров, Ρ‚ΠΎ сайт Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ нСдСлю. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ отказоустойчивости SQL-сСрвСра? ВикипСдия ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ высокодоступный кластСр: Π³Π΄Π΅ Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° любого ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ.

Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€ΠΊΠ° дорогостоящСго оборудования: многочислСнноС Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠΏΡ‚ΠΎΠ²ΠΎΠ»ΠΎΠΊΠ½ΠΎ, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ доступа, Π΄Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎ: ΠΎΠΊΠΎΠ»ΠΎ 10% Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ΠΊΠ°Π·ΠΎΠΌ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ Π½ΠΎΠ΄Ρ‹ ΠΏΠ°Ρ€ΠΎΠ²ΠΎΠ·ΠΈΠΊΠΎΠΌ Π·Π° основной Π½ΠΎΠ΄ΠΎΠΉ.

Но Π³Π»Π°Π²Π½Ρ‹ΠΉ нСдостаток Ρ‚Π°ΠΊΠΎΠ³ΠΎ высокодоступного кластСра β€” нулСвая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ стоит. Π£ «Одноклассников» Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°, ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ Π°Π²Π°Ρ€ΠΈΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ….

Для этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Multi-Master Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ, Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Π² SQL Server. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сильно Π΄ΠΎΡ€ΠΎΠΆΠ΅ Π·Π° счСт стоимости софта ΠΈ страдаСт ΠΎΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ β€” нСпрСдсказуСмых Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈ синхронной Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΉ (ΠΈ, ΠΊΠ°ΠΊ слСдствиС, потСрянных ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ) ΠΏΡ€ΠΈ асинхронной. ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰Π΅Π΅ΡΡ ΠΆΠ΅ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ‚ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌ для нас.

ВсС эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΌΡ‹ приступили ΠΊ ΠΈΡ… Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π°Π½Π°Π»ΠΈΠ·Ρƒ. Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² основном Π΄Π΅Π»Π°Π΅Ρ‚ SQL Server β€” транзакциями.

ΠŸΡ€ΠΎΡΡ‚Π°Ρ транзакция

Рассмотрим ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ SQL-программиста, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Π² альбом. ΠΠ»ΡŒΠ±ΠΎΠΌΡ‹ ΠΈ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ хранятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ°Ρ…. Π£ альбома Π΅ΡΡ‚ΡŒ счСтчик ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ. Π’ΠΎΠ³Π΄Π° такая транзакция разбиваСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ альбом ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.
  2. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ.
  3. Если Ρƒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ статус, Ρ‚ΠΎ Π½Π°ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌ Π² альбомС счСтчик ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ, обновляСм запись ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ.

Или в видС псСвдокода:

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(…);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ самый распространённый сцСнарий бизнСс Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ β€” ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π‘Π” Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π‘Π”. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ обновляСм нСсколько сущностСй, нСсколько Ρ‚Π°Π±Π»ΠΈΡ†.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π΅Ρ… ΠΆΠ΅ самых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ систСмы. НапримСр, Антиспам ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ поэтому всС Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ†ΠΈΡŽ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ photo.status Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ счСтчики. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли данная опСрация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π΅Π· Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ атомарности примСнСния ΠΈ изоляции ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ Π² ACID, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ β€” ΠΈΠ»ΠΈ счСтчик Ρ„ΠΎΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π½Π΅ всС Ρ„ΠΎΡ‚ΠΎ отправятся Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ†ΠΈΡŽ.

Подобного ΠΊΠΎΠ΄Π°, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ бизнСс-сущностями Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π·Π° всё врСмя сущСствования Одноклассников написано ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ. По ΠΎΠΏΡ‹Ρ‚Ρƒ ΠΆΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ Π½Π° NoSQL с Eventual Consistency ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ самыС большиС слоТности (ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹) Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ согласованности Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³Π»Π°Π²Π½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ ΠΌΡ‹ считали обСспСчСниС для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ настоящих ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ, Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ, трСбованиями Π±Ρ‹Π»ΠΈ:

  • ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΈ запись Π² Π½ΠΎΠ²ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ скорости Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΎΠ²Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ количСство ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ самым, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ нСобходимости Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², поддСрТания Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Ρ… индСксов ΠΈ Ρ‚.ΠΏ.
  • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно высокой, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ эффСктивно ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ акадСмичСски строгих, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ…, Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ².
  • АвтоматичСскоС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π»Π΅Ρ‚Ρƒ.
  • ИспользованиС ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π΄Π΅ΡˆΡ‘Π²Ρ‹Ρ… сСрвСров, Π±Π΅Π· нСобходимости ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ экзотичСских ТСлСзяк.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ развития Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° силами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ отдавался своим ΠΈΠ»ΠΈ основанным Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° Java.

РСшСния, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Анализируя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π΄Π²ΡƒΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€Π°ΠΌ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” Π²Π·ΡΡ‚ΡŒ любой SQL-сСрвСр ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, отказоустойчивый кластСр, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ распрСдСлСнныС, Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΈ быстрыС ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ΠœΡ‹ ΠΎΡ†Π΅Π½ΠΈΠ»ΠΈ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠ°ΠΊ вСсьма Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΉ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” Π²Π·ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ NoSQL-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ с Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, отказоустойчивым кластСром, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ SQL самим. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π΄Π°ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ SQL, Π½Π΅ говоря ΡƒΠΆ ΠΎΠ± ACID транзакциях, выглядит Π·Π°Π΄Π°Ρ‡ΠΊΠΎΠΉ Π½Π° Π³ΠΎΠ΄Π°. Но ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ поняли, Ρ‡Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ возмоТностСй SQL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π΄Π°Π»Π΅ΠΊ ΠΎΡ‚ ANSI SQL Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄Π°Π»Π΅ΠΊΠΎ, ΠΊΠ°ΠΊ Cassandra CQL Π΄Π°Π»Π΅ΠΊ ΠΎΡ‚ ANSI SQL. ΠŸΡ€ΠΈΠ³Π»ΡΠ΄Π΅Π²ΡˆΠΈΡΡŒ Π΅Ρ‰Π΅ ΠΏΠΎΠ²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΊ CQL, ΠΌΡ‹ поняли, Ρ‡Ρ‚ΠΎ ΠΎΠ½ достаточно Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

Cassandra ΠΈ CQL

Π˜Ρ‚Π°ΠΊ, Ρ‡Π΅ΠΌ ΠΆΠ΅ интСрСсна Cassandra, ΠΊΠ°ΠΊΠΈΠΌΠΈ возмоТностями ΠΎΠ½Π° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, здСсь ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ SELECT ΠΈΠ»ΠΈ UPDATE ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ.

CREATE TABLE photos (id bigint KEY, owner bigint,…);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET … WHERE id=?;

Для обСспСчСния согласованности Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ, Cassandra ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π΅Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ряда Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π½ΠΎΠ΄Π°Ρ… кластСра, запись считаСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ, Ссли Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π½ΠΎΠ΄ (Ρ‚.Π΅ Π΄Π²Π΅ ΠΈΠ· Ρ‚Ρ€Π΅Ρ…) ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи. Π”Π°Π½Π½Ρ‹Π΅ ряда ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ согласованными, Ссли ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π½ΠΎΠ΄ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΈ ΠΈΡ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‚Ρ€Ρ‘Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ гарантируСтся полная ΠΈ мгновСнная ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ΄Ρ‹. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π½Π°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½ΡƒΡŽ схСму: всСгда ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Π½Π° всС Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, доТидаясь ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ Π΄Π²ΡƒΡ… самых быстрых. Π—Π°ΠΏΠΎΠ·Π΄Π°Π²ΡˆΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС отбрасываСтся. Π£ запоздавшСй с ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ Π½ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ этом ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” Ρ‚ΠΎΡ€ΠΌΠΎΠ·Π°, сборка мусора Π² JVM, direct memory reclaim Π² linux kernel, сбой ΠΆΠ΅Π»Π΅Π·Π°, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ сСти. Однако Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ влияСт.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ обращаСмся ΠΊ Ρ‚Ρ€Ρ‘ΠΌ Π½ΠΎΠ΄Π°ΠΌ, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ Π΄Π²ΡƒΡ…, называСтся спСкуляциСй: запрос Π½Π° лишниС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ отправляСтся Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Β«ΠΎΡ‚Π²Π°Π»ΠΈΡ‚ΡŒΡΡΒ».

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· прСимущСств Cassandra являСтся Batchlog β€” ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° вносимых Π²Π°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ A Π² ACID β€” Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ.

Π‘Π°ΠΌΠΎΠ΅ Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ ΠΊ транзакциям Π² Cassandra β€” это Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «lightweight transactions«. Но ΠΎΡ‚ «настоящих» ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΎΠ½ΠΈ Π΄Π°Π»Π΅ΠΊΠΈ: Π½Π° самом Π΄Π΅Π»Π΅, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ CAS Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ записи, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ консСнсус ΠΏΠΎ тяТСловСсному ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Paxos. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π΅Π²Π΅Π»ΠΈΠΊΠ°.

Π§Π΅Π³ΠΎ Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ Π² Cassandra

Π˜Ρ‚Π°ΠΊ, Π½Π°ΠΌ прСдстояло Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Cassandra настоящиС ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π‘ использованиСм ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… возмоТности классичСских DBMS: консистСнтныС быстрыС индСксы, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹Ρ… ID.

C*One

Π’Π°ΠΊ Ρ€ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ новая Π‘Π£Π‘Π” C*One, состоящая ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² сСрвСрных Π½ΠΎΠ΄:

  • Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° β€” (ΠΏΠΎΡ‡Ρ‚ΠΈ) стандартныС сСрвСры Cassandra, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… дисках. По ΠΌΠ΅Ρ€Π΅ роста Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ объСма Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡ… количСство ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ дСсятков ΠΈ сотСн.
  • ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ β€” ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ исполнСниС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ β€” сСрвСры ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ тысячи.

NewSQL = NoSQL+ACID

Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹ всСх Ρ‚ΠΈΠΏΠΎΠ² состоят Π² ΠΎΠ±Ρ‰Π΅ΠΌ кластСрС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» сообщСний Cassandra для общСния Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ gossip для ΠΎΠ±ΠΌΠ΅Π½Π° кластСрной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Heartbeat сСрвСры ΡƒΠ·Π½Π°ΡŽΡ‚ ΠΎ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Ρ… ΠΎΡ‚ΠΊΠ°Π·Π°Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π΅Π΄ΠΈΠ½ΡƒΡŽ схСму Π΄Π°Π½Π½Ρ‹Ρ… β€” Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈΡ… структуру ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ; схСму партиционирования, Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ кластСра, ΠΈ Ρ‚.ΠΏ.

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹

NewSQL = NoSQL+ACID

ВмСсто стандартных Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π΅ΠΆΠΈΠΌ Fat Π‘lient. Вакая Π½ΠΎΠ΄Π° Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° исполнСния запросов, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠšΠ»ΠΈΠ΅Π½Ρ‚ сам выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° своих запросов: ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅ ΠΈ быстрСС стандартного Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Π½ΠΎ ΠΈ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ запросов. Π’Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ запросы Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Если ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎ всС запросы Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.
NewSQL = NoSQL+ACID

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ C*One

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ β€” Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ для C*One с нуля. Он ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ порядком примСнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ обслуТиваСмой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ: каТдая ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ большС, Ρ‡Π΅ΠΌ Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Cassandra систСма Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² основана Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΊΠ°Ρ… (ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π½Ρ‹Ρ… записСй Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ считаСтся с позднСйшСй Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ), Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ всСгда Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ часы Лэмпорта β€” Π΄Π΅ΡˆΠ΅Π²Ρ‹ΠΉ способ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² распрСдСлСнной систСмС.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Для обСспСчСния изоляции ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ самый простой способ β€” пСссимистичныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ записи. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ запись Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. Волько послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° запись ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³Π»ΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

РСализация Ρ‚Π°ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ проста Π² нСраспрСдСлСнной срСдС. Π’ распрСдСлСнной систСмС Π΅ΡΡ‚ΡŒ Π΄Π²Π° основных ΠΏΡƒΡ‚ΠΈ: Π»ΠΈΠ±ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° кластСрС, ΠΈΠ»ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с участиСм ΠΎΠ΄Π½ΠΎΠΉ записи всСгда ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² нашСм случаС Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΠΆΠ΅ распрСдСлСны ΠΏΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² SQL, Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ Π·Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ: ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ выполняСт всС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ ΠΎΡ‚ 0 Π΄ΠΎ 9, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” с Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ ΠΎΡ‚ 10 Π΄ΠΎ 19, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· экзСмпляров ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° становится мастСром Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π’ΠΎΠ³Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ банального HashMap Π² памяти ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°.

ΠžΡ‚ΠΊΠ°Π·Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ²

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обслуТиваСт Π³Ρ€ΡƒΠΏΠΏΡƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ быстро ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ Π΅Π³ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ повторная ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° исполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΡƒΠ»ΠΎΠΆΠΈΠ»Π°ΡΡŒ Π² Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚. Π§Ρ‚ΠΎΠ±Ρ‹ это Π±Ρ‹Π»ΠΎ быстро ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ, ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ полносвязный ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ½Ρ‹ΠΉ hearbeat ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»:

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π΅ размСщаСтся ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΠΎ Π΄Π²Π΅ Π½ΠΎΠ΄Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ рассылаСт heartbeat-сообщСниС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°ΠΌ ΠΈ сообщаСт ΠΈΠΌ ΠΎ своём Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, heartbeat-сообщСния ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² кластСрС ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π» Π² послСдний Ρ€Π°Π·.

NewSQL = NoSQL+ACID

ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π² составС ΠΈΡ… heartbeat-сообщСний, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ для сСбя, ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΎΠ΄Ρ‹ кластСра Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΡΡΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ°: Ссли Π½ΠΎΠ΄Π° Π₯ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π½ΠΎΠ΄ Π² кластСрС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСний с Π½ΠΎΠ΄Ρ‹ Y, Π·Π½Π°Ρ‡ΠΈΡ‚, Y Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сообщит ΠΎ ΠΏΡ€ΠΎΠΏΠ°ΠΆΠ΅ сообщСний с Π½ΠΎΠ΄Ρ‹ Y, Π·Π½Π°Ρ‡ΠΈΡ‚, Y ΠΎΡ‚ΠΊΠ°Π·Π°Π». Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли ΠΊΠ²ΠΎΡ€ΡƒΠΌ сообщит Π½ΠΎΠ΄Π΅ Π₯, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚ Π½Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ сообщСний, Π·Π½Π°Ρ‡ΠΈΡ‚ сама Π½ΠΎΠ΄Π° X Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сСбя ΠΎΡ‚ΠΊΠ°Π·Π°Π²ΡˆΠ΅ΠΉ.

Heartbeat-сообщСния Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ с большой частотой, ΠΎΠΊΠΎΠ»ΠΎ 20 Ρ€Π°Π· Π² сСк, с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠΌ 50 мс. Π’ Java слоТно Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ прилоТСния Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 50 мс ΠΈΠ·-Π·Π° сравнимой ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ°ΡƒΠ·, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… сборщиком мусора. Нам ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° с использованиСм сборщика мусора G1, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ°ΡƒΠ· GC. Однако, ΠΈΠ½ΠΎΠ³Π΄Π°, достаточно Ρ€Π΅Π΄ΠΊΠΎ, ΠΏΠ°ΡƒΠ·Ρ‹ сборщика выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ 50 мс, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π»ΠΎΠΆΠ½ΠΎΠΌΡƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΡŽ ΠΎΡ‚ΠΊΠ°Π·Π°. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π½Π΅ сообщаСт ΠΎΠ± ΠΎΡ‚ΠΊΠ°Π·Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Π½ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠΏΠ°ΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΆΠ΅ heartbeat-сообщСния ΠΎΡ‚ Π½Π΅Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΏΡ€ΠΎΠΏΠ°Π»ΠΎ нСсколько подряд.Π’Π°ΠΊ Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ обнаруТСния ΠΎΡ‚ΠΊΠ°Π·Π° Π½ΠΎΠ΄Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° Π·Π° 200 мс.

Но ΠΌΠ°Π»ΠΎ быстро ΠΏΠΎΠ½ΡΡ‚ΡŒ, какая Π½ΠΎΠ΄Π° пСрСстала Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. НуТно Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с этим Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ схСма ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° мастСра Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Ρ‹ Π½ΠΎΠ²ΠΎΠ³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠΎΠ΄Π½Ρ‹Ρ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Однако, Ρƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со ΡΡ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ самого процСсса Π²Ρ‹Π±ΠΎΡ€ΠΎΠ². ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ схСмы замСщСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² полносвязной сСти:

NewSQL = NoSQL+ACID

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ 50. Π—Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ схСму замСщСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΎΠ΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 50 Π³Ρ€ΡƒΠΏΠΏΡ‹ Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° основного ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°. Наша Ρ†Π΅Π»ΡŒ β€” ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ систСмы ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ€Π΅Π·Π΅Ρ€Π²ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΎΠ΄Π° ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π΅Π·Π΅Ρ€Π²ΠΎΠΌ β€” Π½ΠΎΠ΄Π° ΠΈΠ· Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ. Π­Ρ‚Π° схСма выбираСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Π½Π΅ мСняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ помСняСтся топология кластСра, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° Π² Π½Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠΉΠ΄ΡƒΡ‚ Π½ΠΎΠ²Ρ‹Π΅ Π½ΠΎΠ΄Ρ‹ (Ρ‡Ρ‚ΠΎ случаСтся ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ). ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π²Ρ‹Π±ΠΎΡ€Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ мастСра ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π΅ старого Π±ΡƒΠ΄Π΅Ρ‚ всСгда Ρ‚Π°ΠΊΠΈΠΌ: Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ мастСром станСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Π·Π΅Ρ€Π², Π° Ссли ΠΈ ΠΎΠ½ пСрСстал Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π·Π΅Ρ€Π².

Вакая схСма Π½Π°Π΄Ρ‘ΠΆΠ½Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ мастСра достаточно опрСдСлСния Ρ„Π°ΠΊΡ‚Π° ΠΎΡ‚ΠΊΠ°Π·Π° старого.

Но ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠΉΠΌΡƒΡ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· мастСров сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π—Π° 50 мс Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΡΠ»Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° тысячи ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ситуация, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт запрос Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π΅Ρ‰Ρ‘ Π½Π΅ зная, Ρ‡Ρ‚ΠΎ этот мастСр ΡƒΠΆΠ΅ Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΈ запрос зависнСт Π½Π° Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ этого Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ спСкулятивно ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ запрос Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ сразу мастСру Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ ΠΎΠ±ΠΎΠΈΠΌ Π΅Π³ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π°ΠΌ, Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ Π½Π° этот запрос Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ являСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ мастСром Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’ΡΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ мастСром.

Π Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ мастСры ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ запросы Π½Π° Π½Π΅ свои Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅Ρ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π³Π΄Π΅ ΠΎΠ½ΠΈ хранятся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. Если Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ мастСр ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚, Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ мастСр ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ запросы Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈΠ· своСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Если ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ успСл ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ со старым мастСром, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚Π²Π΅Ρ‚ игнорируСтся (ΠΈ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, такая транзакция Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ).

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ транзакция

Допустим, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ прислал ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρƒ запрос Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ для Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ сущности с Ρ‚Π°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ эту ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² памяти. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ считываСт эту ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ сохраняСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² состояниС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² памяти ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°.

NewSQL = NoSQL+ACID

Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ присылаСт ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρƒ запрос Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ сущности, Π° Ρ‚ΠΎΡ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ состояния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² памяти. На этом запись Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° β€” запись Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π΅ производится.

NewSQL = NoSQL+ACID

Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ собствСнныС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ дСйствуСт Ρ‚Π°ΠΊ:

  • Ссли ID ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ бСрутся ΠΈΠ· памяти;
  • Ссли ID Π² памяти Π½Π΅Ρ‚, Ρ‚ΠΎ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π½ΠΎΠ΄-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ с ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ Π² памяти, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ отдаСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ собствСнныС измСнСния, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ эти измСнСния Π½Π΅ видят, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ хранятся ΠΎΠ½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² памяти ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°, Π² Π½ΠΎΠ΄Π°Ρ… Cassandra ΠΈΡ… Π΅Ρ‰Π΅ Π½Π΅Ρ‚.

NewSQL = NoSQL+ACID

Когда ΠΊΠ»ΠΈΠ΅Π½Ρ‚ присылаСт commit, состояниС, имСвшССся Π² памяти Ρƒ сСрвиса, сохраняСтся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π² logged batch, ΠΈ ΡƒΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ logged batch отправляСтся Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Cassandra. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π΅Π»Π°ΡŽΡ‚ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот ΠΏΠ°ΠΊΠ΅Ρ‚ Π±Ρ‹Π» Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ (ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ) ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρƒ, Π° Ρ‚ΠΎΡ‚ освобоТдаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

NewSQL = NoSQL+ACID

А для ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρƒ достаточно лишь ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π·Π°Π½ΡΡ‚ΡƒΡŽ состояниСм Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ACID:

  • ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ гарантия Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ никакая транзакция Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ зафиксирована Π² систСмС частично, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈΠ±ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС Π΅Ρ‘ ΠΏΠΎΠ΄ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ. Π£ нас этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ Π·Π° счёт logged batch Π² Cassandra.
  • Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. КаТдая ΡƒΡΠΏΠ΅ΡˆΠ½Π°Ρ транзакция ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ фиксируСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ допустимыС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Если послС открытия Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ выполнСния части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ обнаруТиваСтся, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нСдопустим, выполняСтся ΠΎΡ‚ΠΊΠ°Ρ‚.
  • Π˜Π·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΅Ρ‘ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. ΠšΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСссимистичСских Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π΅. Для Ρ‡Ρ‚Π΅Π½ΠΈΠΉ Π²Π½Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ изолированности Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Read Committed.
  • Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ. НСзависимо ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π° Π½ΠΈΠΆΠ½ΠΈΡ… уровнях β€” обСсточиваниС систСмы, сбой Π² ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ, β€” измСнСния, сдСланныС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ сохранСнными послС возобновлСния функционирования.

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксам

Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,
…)

Π£ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ ID (ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡), Π²Π»Π°Π΄Π΅Π»Π΅Ρ† ΠΈ Π΄Π°Ρ‚Π° измСнСния. НуТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ простой запрос β€” Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρƒ с Π΄Π°Ρ‚ΠΎΠΉ измСнСния Β«Π·Π° послСдниС сутки».

SELECT *
WHERE owner=?
AND modified>?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ запрос ΠΎΡ‚Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» быстро, Π² классичСской SQL Π‘Π£Π‘Π” Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ индСкс ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ (owner, modified). ПодобноС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ достаточно просто, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ ACID!

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π² C*One

Π•ΡΡ‚ΡŒ исходная Ρ‚Π°Π±Π»ΠΈΡ†Π° c фотографиями, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ID записи являСтся ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

NewSQL = NoSQL+ACID

Для индСкса C*One создаСт Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, которая являСтся ΠΊΠΎΠΏΠΈΠ΅ΠΉ исходной. ΠšΠ»ΡŽΡ‡ совпадаСт с индСксным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΡ€ΠΈ этом Π² Π½Π΅Π³ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π΅Ρ‰Π΅ ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ записи ΠΈΠ· исходной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

NewSQL = NoSQL+ACID

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запрос ΠΏΠΎ Β«Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρƒ Π·Π° послСдниС сутки» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ select ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… исходной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ photos ΠΈ индСксной i1 поддСрТиваСтся ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠΌ автоматичСски. На основании ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ схСмы Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ измСнСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½ΠΎ ΠΈ измСнСния ΠΊΠΎΠΏΠΈΠΉ. Никаких Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ индСкса Π½Π΅ выполняСтся, Π»ΠΎΠ³ΠΈ Π½Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ индСксов ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ потрСбляСт рСсурсы ΠΈ практичСски Π½Π΅ влияСт Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ примСнСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ.

C ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ACID Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксы Β«ΠΊΠ°ΠΊ Π² SQLΒ». Они ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, быстро Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ составными ΠΈ встроСны Π² язык запросов CQL. Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ индСксов Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΊΠΎΠ΄. Всё просто, ΠΊΠ°ΠΊ Π² SQL. И Ρ‡Ρ‚ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, индСксы Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исполнСния ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ исходной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π§Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ

ΠœΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ C*One Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ ΠΈ запустили Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΡƒΡŽ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ.

Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ подсистСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ хранСния Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ, ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти. Π Π΅Ρ‡ΡŒ Π½Π΅ ΠΎ самих Ρ‚Π΅Π»Π°Ρ… Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ, Π° ΠΎ всСвозмоТной ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. БСйчас Π² Β«ΠžΠ΄Π½ΠΎΠΊΠ»Π°ΡΡΠ½ΠΈΠΊΠ°Ρ…Β» ΠΎΠΊΠΎΠ»ΠΎ 20 ΠΌΠ»Ρ€Π΄ Ρ‚Π°ΠΊΠΈΡ… записСй, систСма ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ 80 тыс. запросов Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π² сСкунду, Π΄ΠΎ 8 тыс. ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² сСкунду, связанных с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

Когда ΠΌΡ‹ использовали SQL с replication factor = 1 (Π½ΠΎ Π² RAID 10), мСтаинформация Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΠ»Π°ΡΡŒ Π½Π° высокодоступном кластСрС ΠΈΠ· 32 машин с Microsoft SQL Server (плюс 11 Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Ρ…). Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ 10 сСрвСров для хранСния бэкапов. Π˜Ρ‚ΠΎΠ³ΠΎ 50 дорогостоящих машин. ΠŸΡ€ΠΈ этом систСма Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½Π° номинальной Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, Π±Π΅Π· запаса.

ПослС мигрирования Π½Π° Π½ΠΎΠ²ΡƒΡŽ систСму ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ replication factor = 3 β€” ΠΏΠΎ ΠΊΠΎΠΏΠΈΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π΅. БистСма состоит ΠΈΠ· 63 Π½ΠΎΠ΄ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Cassandra ΠΈ 6 машин ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈΡ‚ΠΎΠ³ΠΎ 69 сСрвСров. Но эти ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ дСшСвлС, ΠΈΡ… общая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ составляСт ΠΎΠΊΠΎΠ»ΠΎ 30 % стоимости систСмы Π½Π° SQL. ΠŸΡ€ΠΈ этом Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° дСрТится Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ 30 %.

Π‘ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ C*One снизились ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ: Π² SQL опСрация записи Π·Π°Π½ΠΈΠΌΠ°Π»Π° ΠΎΠΊΠΎΠ»ΠΎ 4,5 мс. Π’ C*One β€” ΠΎΠΊΠΎΠ»ΠΎ 1,6 мс. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² срСднСм мСньшС 40 мс, ΠΊΠΎΠΌΠΌΠΈΡ‚ выполняСтся Π·Π° 2 мс, Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чтСния ΠΈ записи β€” Π² срСднСм 2 мс. 99-ΠΉ ΠΏΠ΅Ρ€Ρ†Π΅Π½Ρ‚ΠΈΠ»ΡŒ β€” всСго 3-3,1 мс, количСство Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΎΠ² снизилось Π² 100 Ρ€Π°Π· β€” всё Π·Π° счСт ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ примСнСния спСкуляций.

К Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΈΠ· эксплуатации Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° большая Ρ‡Π°ΡΡ‚ΡŒ Π½ΠΎΠ΄ SQL Server, Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ c использованиСм C*One. ΠœΡ‹ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ C*One для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² нашСм ΠΎΠ±Π»Π°ΠΊΠ΅ one-cloud, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… кластСров, ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ. Π‘Π΅Π· исходного ΠΊΠΎΠ΄Π° это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТнСС ΠΈ ΠΊΠΎΡΡ‚Ρ‹Π»ΡŒΠ½Π΅Π΅.

БСйчас ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π°ΡˆΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² ΠΎΠ±Π»Π°ΠΊΠΎ β€” Π½ΠΎ это ΡƒΠΆΠ΅ совсСм другая история.

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