Выпуск rqlite 7.0, распрСдСлённой отказоустойчивой Π‘Π£Π‘Π” Π½Π° основС SQLite

Бостоялся Ρ€Π΅Π»ΠΈΠ· распрСдСлённой Π‘Π£Π‘Π” rqlite 7.0, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SQLite Π² качСствС Π΄Π²ΠΈΠΆΠΊΠ° хранСния ΠΈ позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ кластСра ΠΈΠ· синхронизированных ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰. Из особСнностСй rqlite отмСчаСтся простота установки, развёртывания ΠΈ сопровоТдСния распрСдСлённого отказоустойчивого Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ Π½Π° etcd ΠΈ Consul, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ модСль Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ вмСсто Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΊΠ»ΡŽΡ‡/значСния. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Go ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

Для поддСрТания всСх ΡƒΠ·Π»ΠΎΠ² Π² синхронизированном состояния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ достиТСния консСнсуса Raft. Rqlite ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ SQLite ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ go-sqlite3, ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… запускаСтся прослойка, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ запросы ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ достиТСниС консСнсуса ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π°.

ИзмСнСния Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π²Π½ΠΎΡΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ·Π»ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π±Ρ€Π°Π½ Π² качСствС Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ, Π½ΠΎ соСдинСния с опСрациями записи ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΠ·Π»Π°ΠΌ кластСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ адрСс Π»ΠΈΠ΄Π΅Ρ€Π° для повторСния запроса (Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии ΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ автоматичСский проброс обращСния ΠΊ Π»ΠΈΠ΄Π΅Ρ€Ρƒ). Π“Π»Π°Π²Π½Ρ‹ΠΉ ΡƒΠΏΠΎΡ€ дСлаСтся Π½Π° ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ, поэтому Π‘Π£Π‘Π” ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ опСрациям чтСния, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ·ΠΊΠΈΠΌ мСстом. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ кластСр rqlite ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΈ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ SQLite ΠΏΠΎΠ²Π΅Ρ€Ρ… HTTP Π±Π΅Π· прСдоставлСния отказоустойчивости.

Π”Π°Π½Π½Ρ‹Π΅ SQLite Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅ хранятся Π½Π΅ Π² Ρ„Π°ΠΉΠ»Π΅, Π° Π² памяти. На ΡƒΡ€ΠΎΠ²Π½Π΅ слоя с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Raft вСдётся ΠΆΡƒΡ€Π½Π°Π» всСх ΠΊΠΎΠΌΠ°Π½Π΄ SQLite, приводящих ΠΊ измСнСнию Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π°Π½Π½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ (рСпликация Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ воспроизвСдСния запросов Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»Π°Ρ…), ΠΏΡ€ΠΈ запускС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΈΠ»ΠΈ для восстановлСния послС ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связности. Для сокращСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΆΡƒΡ€Π½Π°Π»Π° примСняСтся автоматичСская ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°, которая запускаСтся послС Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ фиксации снимка, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Π΅ΡΡ‚ΠΈΡΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» (состояниС Π±Π°Π·Ρ‹ Π² памяти ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ снимку + Π½Π°ΠΊΠΎΠΏΠΈΠ²ΡˆΠ΅ΠΌΡƒΡΡ ΠΆΡƒΡ€Π½Π°Π»Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ).

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ rqlite:

  • ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° развёртывания кластСра, Π±Π΅Π· нСобходимости ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ установки SQLite.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстро ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ SQL-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
  • Π“ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ для использования Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… (production-grade).
  • НаличиС HTTP(S) API, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» кластСра. Π’Π°ΠΊΠΆΠ΅ прСдоставляСтся интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ клиСнтскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языков программирования.
  • НаличиС сСрвиса для опрСдСлСния Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ кластСры динамичСски.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ настройки уровня ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ согласованности Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.
  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡƒΠ·Π»ΠΎΠ² Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… участиС Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ консСнсуса ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для увСличСния ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ кластСра ΠΏΠΎ опСрациям чтСния.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° собствСнной Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π° Π±Π°Π·Π΅ объСдинСния ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΎΠ΄Π½ΠΎΠΌ запросС (Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° Π±Π°Π·Π΅ BEGIN, COMMIT, ROLLBACK, SAVEPOINT ΠΈ RELEASE Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ).
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° создания горячих Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ.

Π’ Π½ΠΎΠ²ΠΎΠΌ выпускС:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° автоматичСского кластСринга rqlite с использованиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ сСрвиса опрСдСлСния ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π±Π°Π·Π΅ распрСдСлённых Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Consul ΠΈ etcd. БСрвис позволяСт ΡƒΠ·Π»Π°ΠΌ rqlite автоматичкСски Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° — администратору достаточно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько ΡƒΠ·Π»ΠΎΠ² Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сСрвСрах, ΡƒΠΊΠ°Π·Π°Π² ΠΎΠ±Ρ‰ΠΈΠΉ адрСс кластСра Consul ΠΈΠ»ΠΈ etcd (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «example.com:8500»), ΠΈ ΡƒΠ·Π»Ρ‹ автоматичСски Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² кластСр. Π›ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π» пСриодичСски обновляСт Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Consul ΠΈΠ»ΠΈ etcd ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ своём адрСсС, Ρ‡Ρ‚ΠΎ позволяСт Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€Π° Π±Π΅Π· нСобходимости пСрСнастройки ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ Π΄Π°ΠΆΠ΅ послС измСнСния Π»ΠΈΠ΄Π΅Ρ€Π°. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° старого сСрвиса опрСдСлСния ΡƒΠ·Π»ΠΎΠ² (Discovery mode), Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° Π±Π°Π·Π΅ AWS Lambda, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π°.
  • Π’ CLI интСрфСйсС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ сразу Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… хостов — Ссли ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠ·Π΅Π» окаТСтся нСдоступСн, Π±ΡƒΠ΄Π΅Ρ‚ осущСствлСно ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ хостам.
  • ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠΎΠ΄ для Ρ€Π°Π·Π±ΠΎΡ€Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки rqlited.
  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ использованиС ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° protobuf.
  • Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ BoltDB, примСняСмоС Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Raft, Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° bbolt, Ρ„ΠΎΡ€ΠΊ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° etcd.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru