Выпуск Dragonfly 1.0, систСмы для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

Бостоялся Ρ€Π΅Π»ΠΈΠ· систСмы ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Dragonfly, которая ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ лСгковСсноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ высоконагруТСнных сайтов, ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ запросы ΠΊ Π‘Π£Π‘Π” ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Dragonfly ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Memcached ΠΈ Redis, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ клиСнтскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Dragonfly ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Memcached ΠΈ Redis.

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Redis Π² Dragonfly ΠΏΡ€ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π²ΠΈΠ΄Π°Ρ… Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Amazon EC2 c6gn.16xlarge ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ 25-ΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (3.8 ΠΌΠ»Π½ запросов Π² сСкунду). По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Memcached Π² AWS-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ c6gn.16xlarge Dragonfly смог Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² 4.7 Ρ€Π°Π·Π° большС запросов Π² сСкунду Π½Π° запись (3.8 ΠΌΠ»Π½ ΠΏΡ€ΠΎΡ‚ΠΈΠ² 806 тысяч) ΠΈ Π² 1.77 Ρ€Π°Π· большС запросов Π² сСкунду Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (3.7 ΠΌΠ»Π½ ΠΏΡ€ΠΎΡ‚ΠΈΠ² 2.1 ΠΌΠ»Π½).

Выпуск Dragonfly 1.0, систСмы для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

Π’ тСстах Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ 5 Π“Π‘ Π΄Π°Π½Π½Ρ‹Ρ… Dragonfly ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» Π½Π° 30% мСньшС памяти, Ρ‡Π΅ΠΌ Redis. Π’ΠΎ врСмя создания ΡΠ½Π°ΠΏΡˆΠΎΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ «bgsave» ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти возрастаСт, Π½ΠΎ Π² ΠΏΠΈΠΊΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΠ½ΠΎ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° мСньшС, Ρ‡Π΅ΠΌ Π² Redis, Π° сама опСрация записи ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π° выполняСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС (Π² тСстС ΡΠ½Π°ΠΏΡˆΠΎΡ‚ Π² Dragonfly Π±Ρ‹Π» записан Π·Π° 30 сСкунд, Π° Redis — Π·Π° 42 сСкунды).

Выпуск Dragonfly 1.0, систСмы для ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

Высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ достигаСтся благодаря ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π±Π΅Π· раздСлСния рСсурсов (shared-nothing), ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰Π΅ΠΉ, Ρ‡Ρ‚ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ привязываСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ обособлСнный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ со своСй ΠΏΠΎΡ€Ρ†ΠΈΠ΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π±Π΅Π· ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ² ΠΈ spin-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. Для обСспСчСния атомарности ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с нСсколькими ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ лСгковСсныС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ VLL. Для эффСктивного хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² памяти примСняСтся структура dashtable, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ сСкционированных Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†.

НСкоторыС возмоТности Dragonfly:

  • Π Π΅ΠΆΠΈΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ автоматичСски обСспСчиваСтся вытСснСниС старых Π΄Π°Π½Π½Ρ‹Ρ… Π½ΠΎΠ²Ρ‹ΠΌΠΈ послС исчСрпания свободной памяти.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° привязки ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сброса состояния Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π° диск Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ восстановлСния послС пСрСзапуска.
  • НаличиС HTTP-консоли (привязываСтся ΠΊ TCP-ΠΏΠΎΡ€Ρ‚Ρƒ 6379) для управлСния систСмой ΠΈ API для ΠΎΡ‚Π΄Π°Ρ‡ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, совмСстимый с Prometheus.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° 185 ΠΊΠΎΠΌΠ°Π½Π΄ Redis, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ соотвСтствуСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ выпуска Redis 5.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° всСх ΠΊΠΎΠΌΠ°Π½Π΄ Memcached, ΠΊΡ€ΠΎΠΌΠ΅ CAS (check-and-set).
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° асинхронных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для создания ΡΠ½Π°ΠΏΡˆΠΎΡ‚ΠΎΠ².
  • ΠŸΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти.
  • ВстроСнный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Lua 5.4.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слоТных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ…ΡΡˆΠΈ, мноТСства, списки (ZSET, HSET, LIST, SETS ΠΈ STRING) ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° для обСспСчСния отказоустойчивости ΠΈ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Код Dragonfly написан Π½Π° языках C/Π‘++ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSL (Business Source License). ЛицСнзия BSL Π±Ρ‹Π»Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° соосноватСлями MySQL Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ Open Core. Π‘ΡƒΡ‚ΡŒ BSL Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ доступСн для внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½ΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ бСсплатно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ соблюдСнии Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… условий, для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… трСбуСтся ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ коммСрчСской Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Π΅ условия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Dragonfly ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΠ΄Π° Π½Π° Π»ΠΈΡ†Π΅Π½Π·ΠΈΡŽ Apache 2.0 15 ΠΌΠ°Ρ€Ρ‚Π° 2028 Π³ΠΎΠ΄Π°. Π”ΠΎ этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ лицСнзия Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ использованиС ΠΊΠΎΠ΄Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для обСспСчСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ своих сСрвисов ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ², Π½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ для создания ΠΏΠ»Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… сСрвисов, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… надстройкой Π½Π°Π΄ Dragonfly.

ВСрсия Dragonfly 1.0 ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ сСрвСра Π½Π° Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ. ΠŸΡ€ΠΈ этом Dragonfly ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ для использования Π² качСствС Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ сСрвСра ΠΊΠ°ΠΊ Π½Π° Π±Π°Π·Π΅ Dragonfly, Ρ‚Π°ΠΊ ΠΈ Π½Π° Π±Π°Π·Π΅ Redis. API для управлСния Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ совмСстим с Redis ΠΈ основан Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ROLE ΠΈ REPLICAOF (SLAVEOF).

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ