Skip to content

thisroot/highload-architecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

15 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

АрхитСктура высоконагруТСнных систСм

  1. ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ качСства
  2. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ
  3. ВСстированиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  4. Π˜Π½Π΄Π΅ΠΊΡΡ‹
  5. РСпликация
  6. Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  7. ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  8. Π‘Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ сообщСний
  9. Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π Π‘Π£Π‘Π”
  10. In-memory Π‘Π£Π‘Π”

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ качСства

Π§Ρ‚ΠΎ ΠΌΠ΅Ρ€ΡΡ‚ΡŒ

  • rps, rpm - количСство запросов Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
  • pps (packets per second), mps (megabytes ...) - количСство Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
  • simultaneous connections, concurrency - количСство ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний
  • latency - Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚Π°
  • throughput - пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ систСмы (Π² Ρ…Π°ΠΉΠ»ΠΎΠ°Π΄ ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΡŽΡ‚ latency Ρ€Π°Π΄ΠΈ этого)

Как ΠΌΠ΅Ρ€ΡΡ‚ΡŒ

БтатистичСскиС Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ (95, 99) - ΠΏΠ΅Ρ€Ρ†Π΅Π½Ρ‚ΠΈΠ»ΠΈ

Π’ΠΈΠ΄Ρ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

  • Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ - ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ мощности сСрвСра
  • Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ - использованиС большСго количСства сСрвСров

к оглавлСнию >>

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах с ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ Π·Π°Π΄Π°Ρ‡ сущСствуСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ нСсколько этапов

  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ рСгистров процСссора
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ pid, tid, uid, gid, euid, egid ΠΈ Ρ‚. Π΄.
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ состояния процСсса/ΠΏΠΎΡ‚ΠΎΠΊΠ°
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π² доступа
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ рСсурсов ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ счСтчики использования рСсурсов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ использованного процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ)
  • Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ² памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… процСссу
  • ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… процСссора
  • ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° TLB, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° страничноС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… адрСсов Π½Π° физичСскиС

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ

Π’ систСмС linux процСссы ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ доступом ΠΊ памяти. Π£ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ½Π° общая

  • созданиС процСсса
     clone(
         child_stack=0, 
         ags=CLONE_CHILD_CLEARTID |
             CLONE_CHILD_SETTID |
             SIGCHLD, 
         child_tidptr=0x7fa001a93a10) = 6916
  • созданиС ΠΏΠΎΡ‚ΠΎΠΊΠ°
    clone(
      child_stack=0,
      ags=CLONE_VM|
          CLONE_FS|
          CLONE_FILES|
          CLONE_SYSVSEM|
          CLONE_SIGHAND|
          CLONE_THREAD|
          CLONE_SETTLS|
          CLONE_PARENT_S
      child_tidptr=0x7fa001a93a10) = 6916

МодСли Π’Π΅Π± сСрвСров

  • worker (ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ)
  • prefork (многопроцСссный)
  • синхронный (select)
  • async (асинхронный epol)
  • ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹

worker vs prefork

  • ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎΠ΅
  • мСньшС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти
  • ΠΏΠΎΡ‚ΠΎΠΊΠΈ слоТнСС ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹

Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ процСсс (ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ) Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ (Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…). Π’ΠΎ врСмя Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ процСсс Π½Π΅ потрСбляСт процСссорноС врСмя, Π½ΠΎ потрСбляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· сСти ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ. Π’ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· сокСта Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ (хотя Π±Ρ‹ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ), ΠΈΠ»ΠΈ сообщСниС, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹. Π§Ρ‚Π΅Π½ΠΈΠ΅ с диска ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ(*)

  • Apache - синхронный многопроцСссный
  • Nginx - асинхронный ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ Fiber

  • Асинхронный ΠΊΠΎΠ΄ - быстрый, потрСбляСт ΠΌΠ°Π»ΠΎ памяти.
  • Асинхронный ΠΊΠΎΠ΄ - слоТно ΠΏΠΈΡΠ°Ρ‚ΡŒ.
  • Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ - ΠΌΠ΅Π΄Π»Π΅Π½Π΅Π΅, потрСбляСт большС памяти.
  • Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ - просто ΠΏΠΈΡΠ°Ρ‚ΡŒ.

ΠžΠ±Π·ΠΎΡ€ языков программирования

  • Perl

    • ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ apache.
    • Π‘ΠΈΠ½Ρ…Π½Ρ€ΠΎΠ½Π½Ρ‹ΠΉ язык с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ‚Ρ€Π΅Π΄ΠΎΠ² (Ρ€Π΅Π΄ΠΊΠΎ).
    • Π•ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° AnyEvent (Π΅Ρ‰Π΅ Ρ€Π΅ΠΆΠ΅ Ρ‚Ρ€Π΅Π΄ΠΎΠ²)
    • Π•ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для fiber
  • Php

    • CLI SAPI - Π² качСствС консольной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ php для запуска Π½Π°ΡˆΠΈΡ… ΠΊΡ€ΠΎΠ½ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… cli-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (Command Line Interface)
    • apxs2 SAPI - Π² качСствС модуля ΠΊ apache2
    • CGI SAPI - Π² качСствС запускаСмого Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запросС CGI (сСйчас Ρ‚Π°ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚)
    • FPM SAPI - Fast Process Manager, написанный для PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½ΠΈΠΈ Badoo ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ сообщСством
    • МоТно Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π½ΠΎ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.
  • Python

    • Π•ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.
    • Π•ΡΡ‚ΡŒ fiber.
    • ΠŸΡ€ΠΎΡ†Π΅ΡΡ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ядро процСссора
  • Node.js

    • Асинхронный ΠΊΠΎΠ΄.
    • Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ.
  • Go

    • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ Π·Π΅Π»Π΅Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π΄ΠΎΠ².
    • Π£ΠΌΠ΅Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ядСр ЦПУ, сколько Π½ΡƒΠΆΠ½ΠΎ.
    • ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° микросСрвисы.
    • Быстрый.

ВрСхзвСнная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°

Frontend, Backend, Storage

  • Π—Π°Π΄Π°Ρ‡ΠΈ frontend (reverse proxy)
    • Π’Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ssl-соСдинСния.
    • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².
    • ΠžΡ‚Π΄Π°Ρ‡Π° статики.
    • Keep-Alive.
    • ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
    • Балансировка.
    • Π ΠΎΡƒΡ‚ΠΈΠ½Π³ ΠΏΠΎ бэкСндам
  • Π—Π°Π΄Π°Ρ‡ΠΈ backend
    • БизнСс-Π»ΠΎΠ³ΠΈΠΊΠ°
    • ОТиданиС ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰
  • Π—Π°Π΄Π°Ρ‡ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰
  • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ
  • Быстрый поиск (индСксы)
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ транзакционности (ACID)

Библиография

к оглавлСнию >>

ВСстированиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠžΠ±Π»Π°ΡΡ‚ΠΈ

  • Администраторы, backend
    • БыстрыС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ сСрвСра
    • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС оборудования
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ интСрфСйсов, Frontend, Android, iOs
    • ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ оптимизация, быстрая отрисовка
    • Π­Π½Π΅Ρ€Π³ΠΎΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ
  • Аналитики
    • Удобство использования
    • ΠŸΠΎΠ½ΡΡ‚Π½ΠΎΡΡ‚ΡŒ бизнСс-процСсса, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΠΎΡΡ‚ΡŒ

ВСстированиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ПодсисиСм сСрвСров
  • Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° диск
    • fio - flexible i/o tester https://github.com/axboe/fio
      • The following example benchmarks maximum write throughput:
           fio --ioengine=sync --direct=0 \
           --fsync_on_close=1 --randrepeat=0 --nrfiles=1  --name=seqwrite --rw=write \
           --bs=1m --size=20G --end_fsync=1 --fallocate=none  --overwrite=0 --numjobs=1 \
           --directory=/mnt/gcfs --loops=10
      • The following example benchmarks maximum write IOPS:
          fio --ioengine=sync --direct=0 \
          --fsync_on_close=1 --randrepeat=0 --nrfiles=1  --name=randwrite --rw=randwrite \
          --bs=4K --size=1G --end_fsync=1 --fallocate=none  --overwrite=0 --numjobs=80 \
          --sync=1 --directory=/mnt/standard --loops=10
  • Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° процСссор
    • Phoronix https://phoronix-test-suite.com/
       phoronix-test-suite benchmark smallpt
           Test Results:
               57.683207988739
               57.237819910049
               57.684161901474
           Average: 57.54 Seconds
  • Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° ΡΠ΅Ρ‚ΡŒ
    • iperf3 https://software.es.net/iperf/
          iperf3 -s
          iperf3 -c 192.168.1.66
          [ ID] Interval           Transfer     Bandwidth       Retr
          [  4]   0.00-10.00  sec  42.9 GBytes  36.8 Gbits/sec    0             sender
          [  4]   0.00-10.00  sec  42.9 GBytes  36.8 Gbits/sec  
CΠ΅Ρ€Π²Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° простых запросах
  • ΠŸΠΎΠ΄Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° балансировщик
    • httpperf, ab
  • ΠŸΠΎΠ΄Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…
    • sysbench (MySQL), pgbench (PostgreeSQL)
  • ΠŸΠΎΠ΄Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
    • curl, wget, ab
    • Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ TCP - tcpreplay
ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ сцСнариСв

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚ΡΡ динамичСски связанныС запросы ΠΊ систСмС, связанныС со сцСнариями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ активности, с высокой ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ

  • БамописныС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ "Π‘Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ"
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ тСст Π±Π΅Π· ΠΏΠ°ΡƒΠ· Π² нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
Π’ соотвСтствии с трСбованиями

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ точная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, Π² подходящСС врСмя, Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС, с Π½ΡƒΠΆΠ½ΠΎΠΉ силой, с Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ происходящСго

  • Appache.JMeter - простыС сцСнарии (Groovy, Java, JavaScript)
  • Gatling - слоТныС сцСнарии с дСсятками зпросов (Scala)
  • wrk - автоматизация Π½Π° Lua
  • Yandex.Tank - Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Go, Pyhon)

Валидация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²

  • Π‘ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ
  • ΠžΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (для сравнСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² тСста с показатСлями ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° систСм)
    • TIG - Telegraph, InfluxDB, Grafana
    • Prometheus - Telegraf, Prometheus, Grafana
    • Zabbix - Zabbix, Grafana.
  • Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ со стандартами для оборудования

Π’ΠΈΠ΄Ρ‹ тСстиования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

  • НагрузочноС (load testing) - Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΡ‚ срСднСго профиля Π΄ΠΎ максимального ΠΈ Π²Ρ‹ΡˆΠ΅

    • ΠΏΠΎΠ΄Π°Π΅ΠΌ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ступСнями, Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Π΅ΠΌ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ( Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΡ‚ Π»ΠΈ систСма Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΡƒΠ·ΠΊΠΈΠ΅ мСста)
    • Π²Ρ‹ΡˆΠ΅ максимума, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ Π΅ΡΡ‚ΡŒ Π»ΠΈ запас
    • ΠΈΡ‰Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ ΠΈ доступности (timeout, 504)
    • сравниваСм с ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΌ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (min, med, max)
    • ΠΈΡ‰Π΅ΠΌ ΡƒΠ·ΠΊΠΎΠ΅ мСсто, Π»ΠΈΠΌΠΈΡ‚Ρ‹, Π².Ρ‚.Ρ‡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅
    • Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы
    • ΠΈΡ‰Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ появлСния ошибок ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ
    • стараСмся ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ
    • ΠΈΡ… ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (med, max)
    • Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ для тСста ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ (80% ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ)
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ (stability testing) - Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ тСстированиС со срСднСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, поиском ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ коррСктности Ρ€Π°Π±ΠΎΡ‚Ρ‹ (Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ эксплуатации 24/7, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π° Π»ΠΈ систСма ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ быстро растСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° соСдинСний, Π½Π΅Ρ‚ Π»ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…)

    • Π½Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ ошибок
    • всю Π½ΠΎΡ‡ΡŒ ΠΈΠ»ΠΈ всС Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅
    • Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ интСрациями
    • ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  • БтрСссовоС (stress testing) - тСстированиС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… рСсурсах (Ссли Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π΅Π½Π°Π΄ΠΎΠ»Π³ΠΎ прСвысит максимум, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π»ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ рСсурсы, восстановится Π»ΠΈ систСма послС ошибок, ΠΊΠ°ΠΊΠΈΠ΅ ошибки ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ)

    • быстро ΠΈ Π½Π΅Π½Π°Π΄ΠΎΠ»Π³ΠΎ повысим Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ‚Π°ΠΊΠΎΠΉ процСсс нСсколько Ρ€Π°Π·
    • Выявим ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ рСсурсов, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
    • выявим ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ рСсурсов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ рСсурсы Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ
    • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ рСсурсы Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ частично
    • быстро Π»ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ систСмы
  • ОбьСмноС (volume testing) - тСстированиС ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ обьСмов Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· 5 Π»Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° Ссли ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²)

    • сцСнарий Ρ‡Π΅Ρ€Π΅Π· 1 Π³ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Ρ‹
    • сцСннарий Ρ‡Π΅Ρ€Π΅Π· 5 Π»Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹
    • сцСнарий Ρ‡Π΅Ρ€Π΅Π· 10 Π»Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹
    • Π½ΡƒΠΆΠ΅Π½ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Π΅Π³ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° SQL
    • ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ - Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… >
  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ (scalability testing) - сСрия Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹Ρ… тСстов для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ оборудования, количСства сСрвСров ΠΈΠ»ΠΈ ΡƒΠ·Π»ΠΎΠ² систСмы, настроСк - Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ, Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² (ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ памяти Π² 2 Ρ€Π°Π·Π°, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€Π΅Π΄Π΅Π» Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅, какая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Π΄Π²ΡƒΡ… сСрвСрах)

    • НаращиваниС ΠΌΠΎΡ‰ΡŒΠ½ΠΎΡΡ‚ΠΈ оборудования Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
    • ВСстированиС Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… конфигурациях для ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° Π·Π°Ρ‚Ρ€Π°Ρ‚
    • НаращиваниС ΠΌΠΎΡ‰ΡŒΠ½ΠΎΡΡ‚ΠΈ оборудования ΠΈΠΌΠ΅Π΅Ρ‚ тСхничСский ΠΏΡ€Π΅Π΄Π΅Π»
    • НаращиваниС количСства ΡƒΠ·Π»ΠΎΠ² Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
    • НаращиваниС количСства ΡƒΠ·Π»ΠΎΠ² закладываСтся Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ
    • НаращиваниС количСства ΡƒΠ·Π»ΠΎΠ² - Π΄Π°Π΅Ρ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ

ГСнСрация Π΄Π°Π½Π½Ρ‹Ρ…

  • Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SQL для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
    • высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ
    • ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 100Π“Π±Π°ΠΉΡ‚
    • Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
    • SQL - ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅
  • API - Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ
    • гСнСрация Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ систСмС
    • быстрый ΠΎΡ‚ΠΊΠ»ΠΈΠΊ ΠΏΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ΅

к оглавлСнию >>

Π˜Π½Π΄Π΅ΠΊΡΡ‹

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ индСксами

  • Π£ΡΠΊΠΎΡ€ΡΡŽΡ‚ запросы
  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ constaints (UNIQUE, FOREIGN KEY)
Π’ΠΈΠ΄Ρ‹ индСксов
  • BTREE
  • RTREE
  • Hash
  • FULLTEXT

BTREE

  • ΡƒΠΌΠ΅Π΅Ρ‚

    • Поиск ΠΏΠΎ равСнству (Π°=5)
    • Поиск ΠΏΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ (Π° > 5 b a < 3)
    • Поиск ΠΏΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌΡƒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ( 2 < f < 8)
  • Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚

    • Π˜ΡΠΊΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа
    • Π˜ΡΠΊΠ°Ρ‚ΡŒ суффиксы
  • для строк Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° (Like Ρ‚ΠΎ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с индСксами)

    • Ρ…ΠΎΡ€ΠΎΡˆΠΎ LIKE "a%", ΠΏΠ»ΠΎΡ…ΠΎ LIKE "%c"

Π’ΠΈΠΏΡ‹ индСксов Mysql

  • InnoDB - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ для Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° (Ρƒ любого индСкса Π΅ΡΡ‚ΡŒ скрытый элСмСнт индСкса)
  • MyIsam - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ для ΠΊΠ»ΡŽΡ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ физичСскоС смСщСниС Π² Ρ„Π°ΠΉΠ»Π΅

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

  • ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½Ρ‹ΠΌΠΈ key(a,b,c)
    • ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ элСмСнтам массива
  • Π˜Π½Π΄Π΅ΠΊΡΡ‹ дорогая ΡˆΡ‚ΡƒΠΊΠ°
    • ΠΏΡ€ΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… происходит ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ индСксов
    • ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ приходится Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ большС индСксов
  • ΠšΠ»Π°ΡΡ‚Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ - InnoDB - создаСт скрытый кластСрный ΠΊΠ»ΡŽΡ‡, ΠΈΠ· PRIMARY_KEY ΠΈΠ»ΠΈ UNIQUE_KEY ΠΈΠ»ΠΈ создаСт ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ
    • Ссли ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ кластСрный ΠΊΠ»ΡŽΡ‡,Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ высокой стСпСни Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ записСй ( ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ коммСнтария ΠΊ посту, являСтся ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° поста ΠΈ своСй части) это позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ хранСния всСх ΠΊΠΎΠΌΠΌΠ΅Π½Π°Ρ‚ΠΈΠ΅Π² рядом Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ускоряСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ индСксы

  • Поиск Π΄Π°Π½Π½Ρ‹Ρ…
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°
  • ИзбСТаниС чтСния ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы - covering indexes)
  • Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
   USE db;
 
   CREATE TABLE tbl (
           id bigint(20) NOT NULL AUTO_INCREMENT,
           a bigint(20) NOT NULL,
           b bigint(20) NOT NULL,
           c bigint(20) NOT NULL,
           d bigint(20) NOT NULL,
           e bigint(20) NOT NULL,
           str VARCHAR(54) NOT NULL,
           PRIMARY KEY (id)
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ - data/docker-compose.yml
  • Π΄Π°Π½Π½Ρ‹Π΅ - mock-generate.py

БозданиС индСкса

  • EXPLAIN SELECT a, b from tbl where a = 1;
  • type: all - ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС
    +----+-------------+-------+------------+------+---------------+------+---------+------+-------+----------+-------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows  | filtered | Extra       |
    +----+-------------+-------+------------+------+---------------+------+---------+------+-------+----------+-------------+
    |  1 | SIMPLE      | tbl   | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 21460 |    10.00 | Using where |
    +----+-------------+-------+------------+------+---------------+------+---------+------+-------+----------+-------------+
  • создаСм индСкс CREATE INDEX a ON tbl(a);
  • EXPLAIN SELECT a, b from tbl where a = 1;
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref   | rows  | filtered | Extra |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------+
    |  1 | SIMPLE      | tbl   | NULL       | ref  | a             | a    | 8       | const | 10730 |   100.00 | NULL  |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------+
  • type: ref

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс

  • EXPLAIN SELECT a from tbl where a = 1;
  • Extra: Using index - всС Π΄Π°Π½Π½Ρ‹Π΅ бСрутся ΠΈΠ· индСкса
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref   | rows  | filtered | Extra       |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
    |  1 | SIMPLE      | tbl   | NULL       | ref  | a             | a    | 8       | const | 10730 |   100.00 | Using index |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+

Запрос с прСфиксами

  • EXPLAIN SELECT a, b from tbl where a = 1 and b = 3
  • запрос ΠΏΠΎ индСску Π°, с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сканированиСм ΠΏΠΎ b
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref   | rows  | filtered | Extra       |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
    |  1 | SIMPLE      | tbl   | NULL       | ref  | a             | a    | 8       | const | 10730 |    10.00 | Using where |
    +----+-------------+-------+------------+------+---------------+------+---------+-------+-------+----------+-------------+
  • CREATE INDEX a_b ON tbl(a,b);
  • EXPLAIN SELECT a, b from tbl where a = 1 and b = 3
  • составной индСкс ΠΈ запрос ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π°ΠΌ позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ индСксом
    +----+-------------+-------+------------+------+---------------+------+---------+-------------+------+----------+-------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref         | rows | filtered | Extra       |
    +----+-------------+-------+------------+------+---------------+------+---------+-------------+------+----------+-------------+
    |  1 | SIMPLE      | tbl   | NULL       | ref  | a_b           | a_b  | 16      | const,const | 1000 |   100.00 | Using index |
    +----+-------------+-------+------------+------+---------------+------+---------+-------------+------+----------+-------------+

Когда индСкс ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ

  • CREATE INDEX a_b_c ON tbl(a,b,c)
  • Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ запросы
    • where a = 0
    • where a > 0
    • where a = 0 and b > 4
    • where a = 0 and b = 2
    • where a = 0 and b = 2 and c > 2
    • where a = 0 and b in (2,4) and c > 3
  • ΠŸΠ»ΠΎΡ…ΠΈΠ΅ запросы (индСкс Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚,Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ прСфикс Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ)
    • where b > 3
    • where b = 6
    • where b = 2
  • ЧастичноС использованиС - прСфикс индСкса Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»Π΅Π²Π° Π½Π° ΠΏΡ€Π°Π²ΠΎ, Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ условия нСравСнства Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
    • a > 0 and b = 4
    • a = 0 and b < 3 and c = 3
    • a = 0 and b > 3 and c < 3

Π˜Π½Π΄Π΅ΠΊΡΡ‹ для сортировки

  • Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ запрос
    • SELECT * FROM tbl ORDER BY a LIMIT 10
    • SELECT * FROM tbl WHERE a = 1 ORDER BY b LIMIT 10
    • SELECT * FROM tbl WHERE a > 1 ORDER BY a LIMIT 10 - Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊ сортировкС Ρ‡Ρ‚ΠΎ ΠΈ ΠΊ нСравСнству (это ΠΆΠ΅ сравнСниС)
    • SELECT * FROM tbl ORDER BY a DESC, b DESC LIMIT 10 - сортировка Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ
    • SELECT * FROM tbl ORDER BY a ASC, b ASC LIMIT 10
  • ΠŸΠ»ΠΎΡ…ΠΈΠ΅ запросы
    • SELECT * FROM tbl ORDER BY b LIMIT 10
    • SELECT * FROM tbl WHERE a > 1 ORDER BY b LIMIT 10
    • SELECT * FROM tbl WHERE a in (1,2,3) ORDER BY b LIMIT 10 - Π² сортировкС in Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!!!
    • SELECT * FROM tbl ORDER BY a ASC, d DESC LIMIT 10 - Π² Π½ΠΎΠ²Ρ‹Ρ… вСрсиях появились Ρ€Π°Π·Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ индСксы

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

  • min ΠΈ max - ΠΎΡ‡Π΅Π½ΡŒ быстро Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ индСксам, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ΡΡ
  • CREATE INDEX a_str ON tbl(a, str)
  • SELECT a, max(str) from tbl GROUP BY a

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ JOIN

  • Π’ MySQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ nested loops, Π½ΠΎ с оптимизациями
  • JOIN Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎ индСксам
    SELECT * FROM posts WHERE author='Peter'
    JOIN comments ON posts.id = comments.post_id
  • ИндСкс ΠΏΠΎ post_id - бСсполСзСн
  • ИндСкс ΠΏΠΎ comments.post_id - Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ

Index Merge

  • OR это плохая конструкция Π² запросС
  • МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° индСкса, вмСсто составного

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½Ρ‹Π΅ индСксы

  • ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ индСкс ΠΏΠΎ прСфиксу строки, Π²Π°ΠΆΠ½Π° ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ
Π₯Π°ΠΊΠΈ
  • between
    • нСльзя - SELECT * FROM tbl WHERE a BETWEEN 0 AND 5 AND b = 5
    • ΠΌΠΎΠΆΠ½ΠΎ SELECT * FROM tbl WHERE a IN (0,1,2,3,4,5) AND b = 5
  • Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ - Ссли Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· составного индСкса, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ вСсь ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ
    • SELECT * from tbl WHERE gender in('m', 'f') and city = 'Moscow' (index - gender_city)
  • сортировка
    • нСльзя SELECT * FROM tbl WHERE a IN(0,1) ORDER BY b LIMIT 10
    • ΠΌΠΎΠΆΠ½ΠΎ
        (SELECT * FROM tbl WHERE a = 0 ORDER BY b LIMIT 10)
        UNION ALL
        (SELECT * FROM tbl WHERE a = 1 ORDER BY b LIMIT 10)
        ORDER BY b LIMIT 10
    
    к оглавлСнию >>

РСпликация

РСпликация - это ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

  • ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ
  • ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство сСрвСров для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов
  • Π½Π΅ являСтся backup
Π—Π°Ρ‡Π΅ΠΌ
  • НС ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ запись
  • ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅
  • ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΈ падСниях
Master-Slave

  • ΠΎΠ΄ΠΈΠ½ источник Π΄Π°Π½Π½Ρ‹Ρ…
  • Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄
  • ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто ΠΈ понятно
  • ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ/Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ
  • мастСр ΠΈΠ½ΠΎΠ³Π΄Π° ΠΊΡ€Π°ΡˆΠΈΡ‚ΡΡ...
Master-master

  • Π½Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°
  • постоянноС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹
  • Π»Π΅Π³ΠΊΠΈΠΉ failover
  • Π½Π΅Ρ‚ консистСнтности (всС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ поломаСтся)
  • group replication?

Π’ΠΈΠ΄Ρ‹ синхронизации

  • sync
    • Π·Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΠ»ΠΈ локально, Π·Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ (Postgres)
    • сдСланноС измСнСния Π²ΠΈΠ΄Π½Ρ‹Π΅ всСм ΠΈ Π²Π΅Π·Π΄Π΅
  • async
    • Π·Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΠ»ΠΈ локально, всС (MySQL, Postgres))
    • Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠ½Ρ†Π΅
  • semi-sync
    • Π·Π°ΠΊΠΎΠΌΠΈΡ‚ΠΈΠ»ΠΈ локально, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ack (MySQL)
    • доступно здСсь, ΡƒΠΆΠ΅ скопировано Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ†

РСпликация Π² MySql

  • Master:
    • ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ запросы
    • Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
    • ΠΏΠΈΡˆΠ΅Ρ‚ binary logs
    • binlog dump thread (SHOW PROCESSLIST Π½Π° мастСрС)
  • Slave:
    • стягиваСт измСнСния с мастСра, ΠΊΠ»Π°Π΄Π΅Ρ‚ Π² relay log
    • Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· relay log ΠΈ примСняСт измСнСния
    • slave I/O thread (SHOW SLAVE STATUS Π½Π° слСйвС)
    • slave SQL thread

https://dev.mysql.com/doc/refman/5.7/en/replication-implementation-details.html

Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹
  • statement based
    • ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ сами запросы
    • гоняСтся нСбольшоС количСство Π΄Π°Π½Π½Ρ‹Ρ…
    • всС запросы Π² Π»ΠΎΠ³Π΅
    • UPDATE items SET enabled=1 WHERE time < UNIX_TIMESTAMP(NOW())-60 ΠΈ всС поломалось ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос считаСтся Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ΄Π΅ https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html
  • row based
    • ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ строчки
    • Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
    • нСпонятны Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ statementΠ°
    • Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ
    • before/after image
    • ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° binlog_row_image: full, minimal, blob https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_binlog_row_image
  • mixed

https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

  • ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ частично
  • ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ³ΠΎΡ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ слСйва
  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ остороТно!

ΠžΠΏΡ†ΠΈΠΈ:

ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΠ²

  • binary log position (FILE NAME + OFFSET)
    • mysql-bin.00078:44
    • Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ для сСрвСра
    • ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΡŠΠ΅Π΄Π΅Ρ‚ΡΡ!
  • GTID (SOURCE_ID:TRANSACTION_ID)
    • 7F33BC78-56CA-44B3-5E33-B34CC7689333:44
    • Π³Π»ΠΎΠ±Π°Π»Π΅Π½, гСнСрируСтся автоматичСски ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅
    • бСсплатная трассировка
    • простой slave promotion
    • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ!
    • https://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ рСпликация

  • ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ однопоточная рСпликация всСх Π΄Π°Π½Π½Ρ‹Ρ…
  • с MySQL5.6 ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ нСсколько Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…
  • с MySQL5.7 ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ:

  • slave-parallel-workers
  • slave-parallel-type (DATABASE|LOGICAL_CLOCK)

https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ:

  • 1 мастСр, 3 слСйва
  • ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π² 1 ΠΏΠΎΡ‚ΠΎΠΊ
  • Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π² 20 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  • Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π² 100 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  • вставка Π² 25 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π² 100 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (sysbench)

https://www.percona.com/blog/2016/02/10/estimating-potential-for-mysql-5-7-parallel-replication/

РСпликация Π² Postgrees - WAL

  • физичСскиС измСнСния страниц (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠΊΠ΅ 2564 Ρ€Π°Π²Π½ΠΎ 154)
  • сюда ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
  • ΠΎΠ΄ΠΈΠ½ Турная Π½Π° всС

https://wiki.postgresql.org/images/a/af/FOSDEM-2015-New-WAL-format.pdf

РСпликация Π² MySQL

  • Π΅ΡΡ‚ΡŒ binlog
  • Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π΅ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ WAL (InnoDB Undo/Redo Log)
  • с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния MySQL - это Ρ€Π°Π·Π½Ρ‹Π΅ Π»ΠΎΠ³ΠΈ!
  • Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ абстракций (Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹)
  • MySQL ΠΏΠΈΡˆΠ΅Ρ‚ большС Π΄Π°Π½Π½Ρ‹Ρ… для Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ (~1.5 Ρ€Π°Π·Π°)

https://dev.mysql.com/doc/refman/5.7/en/innodb-undo-logs.html

ЛогичСская рСпликация

  • Ρ‚ΠΎΡ‚ самый row based Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
  • Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ хранятся Π½Π° дискС
  • CPU-bound, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ процСссорам
  • Π’ Postgres10+ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ - https://www.postgresql.org/docs/10/logical-replication.html

ЀизичСская рСпликация

  • Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со страницами
  • slave = master Π±Π°ΠΉΡ‚ Π² Π±Π°ΠΉΡ‚
  • Postgres WAL, InnoDB Undo/RedoLog - ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… со страницами
  • IO-bound, Π½Π΅Ρ‚ смысла ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒ

Групповая рСпликация

  • ΠΏΠ»Π°Π³ΠΈΠ½ начиная с вСрсии MySQL5.7
  • ΠΏΠΎ сути - синхронная рСпликация
  • Π½Π΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚Π° master-slave, скорСС master-master
  • рСпликация ΠΌΠ΅ΠΆΠ΄Ρƒ всСми Π½ΠΎΠ΄Π°ΠΌΠΈ
  • single primary (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)
  • ΠΊΠ²ΠΎΡ€ΡƒΠΌ, ΡƒΠΌΠ΅Π΅Ρ‚ automatic failover
  • flow control (я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ отстал)
  • Π»ΠΈΠΌΠΈΡ‚ Π² 9 node

МоТно ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΡŽ Π² Π΄ΠΎΠΊΠ΅Ρ€Π΅:

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

  • ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΠΈΡŽ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΠΈΡŽ Π² binary log
  • Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΠΈΡŽ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ Π±Π°Π·Ρ‹
  • Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ

ΠžΡ‚ΡΡ‚Π°Π²Π°Π½ΠΈΠ΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

  • Π’ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ситуации отставаниС достигаСт сСкунды.
    • ΠŸΠ»ΠΎΡ…ΠΈΠ΅ запросы (ΠΈ ΠΏΠΎ мастСру, ΠΈ ΠΏΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅) ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ отставаниС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • РСкомСндация:
    • Π£Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ запросы.
    • Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ для ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов.
    • Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ кросс-Π‘Π£Π‘Π” Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
    • Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° запись-Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

  • свои Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ с мастСра, Ρ‡ΡƒΠΈΠΆΠΈΠ΅ со слСйва
  • ΠœΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅
    • ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.
    • Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅.
  • БогласованноС прСфиксноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅
    • Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ для ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….
    • Π’Π°ΠΆΠ½ΠΎ для сохранСния ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π½ΠΎ-слСдствСнных связСй.

ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

  • ИзбСганиС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².
  • Last wins.
  • Π Π°Π½Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊ. Π’Ρ‹ΠΉΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ запись ΠΎΡ‚ ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ.
  • БлияниС.
  • РСшСниС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅.
  • Conflict-free replicated data types (CRDT).
  • Mergeable persistent data structures.

БСзмастСрная рСпликация

  • ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ энтропии Π΄Π°Π½Π½Ρ‹Ρ… - Π€ΠΎΡ€ΠΌΡƒΠ»Π° для расчСта ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ°: w + r > number of replicas

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

к оглавлСнию >>

Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠžΠ±Ρ‰Π΅Π΅

ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

  • Π±Π΅Ρ€Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ раздСляСм ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ
  • Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ физичСски Π»Π΅ΠΆΠ°Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ
  • всС Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвСра!
  • Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²
  • Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС (?)

Π’ΠΈΠΏΡ‹ партицирования

  • key
  • range
  • list
  • hash
    CREATE TABLE members (
        firstname VARCHAR(25) NOT NULL,
        lastname VARCHAR(25) NOT NULL,
        username VARCHAR(16) NOT NULL,
        email VARCHAR(35),
        joined DATE NOT NULL
    )
    PARTITION BY RANGE( YEAR(joined) ) (
        PARTITION p0 VALUES LESS THAN (1960),
        PARTITION p1 VALUES LESS THAN (1970),
        PARTITION p2 VALUES LESS THAN (1980),
        PARTITION p3 VALUES LESS THAN (1990),
        PARTITION p4 VALUES LESS THAN MAXVALUE
    );

https://dev.mysql.com/doc/refman/8.0/en/partitioning.html

    CREATE TABLE measurement (
        city_id
        int not null,
        logdate
        date not null,
        peaktemp
        int,
        unitsales
        int
    ) PARTITION BY RANGE (logdate);
    CREATE TABLE measurement_y2006m02 PARTITION OF measurement
        FOR VALUES FROM ('2006-02-01') TO ('2006-03-01');
    CREATE TABLE measurement_y2006m03 PARTITION OF measurement
        FOR VALUES FROM ('2006-03-01') TO ('2006-04-01');

https://www.postgresql.org/docs/10/ddl-partitioning.html

Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

  • ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ
  • Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° куски
  • Π΄Π°Π½Π½Ρ‹Π΅ ΠΆΠΈΠ²ΡƒΡ‚ физичСски Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сСрвСрах (Π½Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊ)
  • Π½Π΅ рСпликация - !
  • Π½Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ - !

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

  • Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  • ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов (особСнно запись!)
  • ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ(*)

Π’Ρ‹Π±ΠΎΡ€ критСрия ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

  • Key Based Sharding
    • Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ hash based
    • Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ такая: F(key) -> shard_id
    • F ΠΈ key ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹
    • Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный способ
    • ΠΏΠ»ΡŽΡΡ‹
      • просто ΠΈ понятно (+)
      • Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ΅ распрСдСлСниС (+)
      • алгоритмичСскоС распрСдСлСниС (+)
    • минусы
      • Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡˆΠ°Ρ€Π΄Π° всСгда боль (-)

  • Range Based Sharding
    • ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ table function/virtual bucket
    • статичСский ΠΊΠΎΠ½Ρ„ΠΈΠ³ range -> shard
    • Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ такая: hash(key) -> virtual_bucket -> shard_id
    • ΠΏΠ»ΡŽΡΡ‹
      • прост Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (+)
    • минусы
      • ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ нСравномСрная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° (-)
      • ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (-)
  • Directory Based Sharding
    • ΠΏΠΎΡ…ΠΎΠΆ Π½Π° range based
    • ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ key -> shard_id
    • low cardinality для key - наш случай
    • ΠΏΠ»ΡŽΡΡ‹
      • Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ (+)
    • минусы
      • ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (-)
      • SPOF (-)

Π ΠΎΡƒΡ‚ΠΈΠ½Π³

  • ΠΈΠ· прилоТСния (ΡƒΠΌΠ½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚)
    • простой ΠΌΠ΅Ρ‚ΠΎΠ΄
    • Π½Π΅Ρ‚ Π»ΠΈΡˆΠ½ΠΈΡ… Ρ…ΠΎΠΏΠΎΠ²
    • ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ/Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΡ‚ΡŒ?
  • прокси
  • ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€
    • ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π΅
    • ΠΊΠΎΠ΄ Π½Π΅ мСняСтся
    • лишний Ρ…ΠΎΠΏ
    • Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°
    • SPOF

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π°

  • ΠŸΠ»ΠΎΡ…ΠΎ распрСдСлили Π΄Π°Π½Π½Ρ‹Π΅
    • ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΊΠ»ΡŽΡ‡/Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ
    • Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ (Ссли ΠΈΠΌΠ΅Π΅Ρ‚ смысл)
  • JOIN
    • Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС
    • Π΄Π΅Π»Π°Ρ‚ΡŒ вычислСния Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС

Π Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³

  • Π’ Π»ΠΎΠ±:
    • Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅
    • Ссли стСпСни 2ΠΊΠΈ - ΡƒΠΆΠ΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ~50%)
    • ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
      • Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° shard_id % count
      • 16 записСй Π½Π° 8 ΡˆΠ°Ρ€Π΄ΠΎΠ² => 2 записи Π½Π° ΡˆΠ°Ρ€Π΄
      • 16 записСй Π½Π° 16 ΡˆΠ°Ρ€Π΄ΠΎΠ² => 1 запись Π½Π° ΡˆΠ°Ρ€Π΄
  • Consistent hashing
    • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ΄Π½Ρƒ hash-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π½ΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
    • выбираСтся блиТайший ΠΏΠΎ часовой стрСлкС ΡƒΠ·Π΅Π»
    • ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ затрагиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ
    • Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ большС K/N (K-ΠΊΠ»ΡŽΡ‡ΠΈ, N-сСрвСра)
    • Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ распрСдСлСны Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ.
  • Consistent hashing - Virtual Nodes
    • ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ
    • количСство физичСских сСрвСров Π½Π΅ мСняСтся

Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов

  • запросы ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ вСроятно ускорятся
  • запросы Π½Π΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΎΠ±ΠΎΠΉΠ΄ΡƒΡ‚ всС ΡˆΠ°Ρ€Π΄Ρ‹
  • запросы ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ всС ΡˆΠ°Ρ€Π΄Ρ‹
  • aggregating, joinΡ‹ - ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°

Π‘Ρ‹Π»ΠΎ:

  • Total = Serial + Parallel

Π‘Ρ‚Π°Π»ΠΎ:

  • Total = Serial + Parallel/N + Xserial

https://en.wikipedia.org/wiki/Amdahl%27s_law

Π‘Π°Π·Ρ‹ ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³

  • MySQL Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ (NDB ?)
  • Postgres ΡƒΠΌΠ΅Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ (FDW)
  • Cassandra ΡƒΠΌΠ΅Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡˆΠ°Ρ€Π΄ΠΈΠ½Π³
  • MongoDB ΡƒΠΌΠ΅Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡˆΠ°Ρ€Π΄ΠΈΠ½Π³
    CREATE TABLE temperature (
        id BIGSERIAL PRIMARY KEY NOT NULL,
        city_id INT NOT NULL,
        timestamp TIMESTAMP NOT NULL,
        temp DECIMAL(5,2) NOT NULL
    );
    
    CREATE TABLE temperature_201904 (
        id BIGSERIAL NOT NULL,
        city_id INT NOT NULL,
        timestamp TIMESTAMP NOT NULL,
        temp DECIMAL(5,2) NOT NULL
    );
    
    CREATE EXTENSION postgres_fdw;
    GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw to app_user;
    CREATE SERVER shard02 FOREIGN DATA WRAPPER postgres_fdw
        OPTIONS (dbname 'postgres', host 'shard02', port
        '5432');
    CREATE USER MAPPING for app_user SERVER shard02
        OPTIONS (user 'fdw_user', password 'secret');
    
    CREATE FOREIGN TABLE temperature_201904 PARTITION OF temperature
        FOR VALUES FROM ('2019-04-01') TO ('2019-05-01')
        SERVER remoteserver01;

Π”ΠΎΠΏ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

к оглавлСнию >>

Vitess.io

  • БистСма для Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ MySQL
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ read-tolerance ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ мастСр-Π±Π°Π· Π² случаС Π²Ρ‹Ρ…ΠΎΠ΄Π° мастСра ΠΈΠ· строя

  • Π£ΠΌΠ΅Π΅Ρ‚
    • Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅(ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)
    • ΠΏΡƒΠ»Π»ΠΈΠ½Π³ соСдинСний
    • ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ запросов(ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»Π΅ΠΉ)
    • 2Ρ…Ρ„Π°Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚(c Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ)
    • топология(ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ consul, etcd, ZooKeeper)
    • ACL Π½Π° запросы
  • НС ΡƒΠΌΠ΅Π΅Ρ‚
    • last_inserted_id Π½Π° ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ кСйспСйсС: SELECT last_inserted_id() FROM user;
    • distinct & Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ агрСггирования: SELECT DISTINCT a, COUNT(*) FROM user
    • Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ полю, Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ написано Π² SELECT: SELECT a FROM user GROUP BY b;
    • ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡˆΠ°Ρ€Π΄Π°ΠΌ с Π»ΠΈΠΌΠΈΡ‚ΠΎΠΌ: DELETE FROM user LIMIT 10;
    • ΠŸΠΎΠ»Π½Ρ‹ΠΉ список: https://github.com/vitessio/vitess/blob/master/go/vt/vtgate/planbuilder/testdata/unsupported_cases.txt

CELL

- Cell β€” Π³Ρ€ΡƒΠΏΠΏΠ° сСрвСров ΠΈ сСтСвой инфраструктуры, ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡ‚ Π°Π²Π°Ρ€ΠΈΠΉ
Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… cell(Π΄Π°Ρ‚Π°Ρ†Π΅Π½Ρ‚Ρ€)
- ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, это ΠΈΠ»ΠΈ Π”Π¦ ΠΈΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π”Π¦, ΠΈΠ½ΠΎΠ³Π΄Π° называСтся β€œΠ·ΠΎΠ½Π°β€ ΠΈΠ»ΠΈ β€œΠ·ΠΎΠ½Π°
доступности”.

Keyspace

- Keyspace β€” логичСская Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…
- Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚ΠΎ кСйспСйс ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° нСсколько
- MySQL Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½Π°Ρ‡Π΅ Π½Π° ΠΎΠ΄Π½Ρƒ Π±Π°Π·Ρƒ
- Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· кСйспСйса прСдставляСт собой Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· MySQL

Keyspace graph

- Keyspace graph позволяСт Vitess Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΡˆΠ°Ρ€Π΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для 
ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ запроса

Shard

- Shard β€” логичСская Ρ‡Π°ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ кСйспСйса. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ содСрТит ΠΎΠ΄ΠΈΠ½ мастСр
и много MySQL слСйвов
- Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄
- SHARD=-80, Π³Π΄Π΅ -80 β€” это ΠΊΠ»ΡŽΡ‡ΠΈ [0x0, 0x80)
- Или ΠΆΠ΅ SHARD=80-, Π³Π΄Π΅ 80- β€” это ΠΊΠ»ΡŽΡ‡ΠΈ [0x80, 0xff]

Tablet

- Π’Π°Π±Π»Π΅Ρ‚ΠΊΠ° β€” это комбинация процСсса mysql ΠΈ vttablet, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° ΠΎΠ΄Π½ΠΎΠΉ 
ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ машинС.

Бостояния Tablet

  • master β€” мастСр-Π±Π°Π·Π°
  • replica β€” слСйв, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ Π΄ΠΎ мастСра
  • rdonly β€” слСйв, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ Π΄ΠΎ мастСра. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ background Π·Π°Π΄Π°Ρ‡, Π΄Π°ΠΌΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, тяТСлых запросов
  • backup β€” Π±Π°Π·Π° с остановлСнной Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ
  • restore β€” Π±Π°Π·Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π΅ΠΊΠ°ΠΏΠ°.
  • drained β€” разСзСрвированная Π±Π°Π·Π° для background Π·Π°Π΄Π°Ρ‡ Vitess’a

Topology Service

  • Π‘Π΅Ρ€Π²Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранят Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚
  • распрСдСлСнный сСрвис Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ
  • НапримСр, etcd, ZooKeeper ΠΈΠ»ΠΈ Consul
    • Π ΠΎΡƒΡ‚ΠΈΡ‚ запросы
    • ΠšΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°Π±Π»Π΅Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ собой
    • Π₯Ρ€Π°Π½ΠΈΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сСрвСров

VSchema

ОписаниС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ Π»Π΅ΠΆΠ°Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ кСйспСйсов ΠΈ ΡˆΠ°Ρ€Π΄ΠΎΠ². Π§Π°Ρ‰Π΅ всСго описываСтся JSONΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

    { 
        "sharded": true,
        "tables": {
            "dinosaurs": {
            "column_vindexes": [
                {"column": "id", "name": "hash"}
            ]
        }
    }
    

Π’ΠΈΠ΄Ρ‹ индСксов Π² VSchema

  • hash β€” 3DES null-key hash
  • consistent_lookup_unique β€” Ρ…Π΅Ρˆ ΠΏΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ значСниям Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅(primary key)
  • unicode_loose_md5 β€” md5 ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅

https://vitess.io/docs/reference/vschema/ β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ список

vtgate

  • ΠŸΡ€ΠΎΠΊΡΠΈ-сСрвСр ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ vttablet.
  • ΠžΠ±Ρ‰Π°Π΅Ρ‚ΡΡ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΠΎ MySQL ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ
  • ΠžΠ±Ρ‰Π°Π΅Ρ‚ΡΡ с vttablet ΠΏΠΎ gRPC

vtctl, vtctld

  • vtctl β€” CLI для администрирования vitess-кластСра

vtworker

  • ЗанимаСтся Π΄ΠΎΠ»Π³ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ΠΎΠΌ

к оглавлСнию >>

ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Кэш ΠΈΠ»ΠΈ кСш(Π°Π½Π³Π». cache, ΠΎΡ‚ Ρ„Ρ€. cacher β€” Β«ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒΒ»; произносится [kΓ¦Κƒ] β€” «кэш») β€” ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ с быстрым доступом ΠΊ Π½Π΅ΠΌΡƒ, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π° с наибольшСй Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ. Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² кэшС осущСствляСтся быстрСС, Ρ‡Π΅ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ памяти ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ источника, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Ρ‘ ΠΎΠ±ΡŠΡ‘ΠΌ сущСствСнно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ исходных Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π’ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ лишь нСбольшоС подмноТСство Π΄Π°Π½Π½Ρ‹Ρ….

  • Для Ρ‡Π°Ρ‚ΠΎΠ² - послСдниС сообщСния
  • Для новостСй - послСдниС новости
  • Для сСрвиса такси - Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π·Π°ΠΊΠ°Π·Ρ‹.

Алгоритмы вытСснСния

  • Алгоритм Π‘Π΅Π»Π°Π΄ΠΈ (ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ)
  • Least recently used (LRU)
  • Most Recently Used (MRU)
  • ПсСвдо-LRU
  • Least-Frequently Used
  • Adaptive Replacement Cache

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ β„–1

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π±Π΅Π· кСша. Π—Π°Π΄Π°Ρ‡Π° кСша - ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚, Π° Π½Π΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ учСния. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π±Π΅Π· кСша.

Π’ΠΈΠ΄Ρ‹ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π½ΠΈΡ

  • ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅
  • ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ страниц (ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠ²)
  • ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π°Π·Ρ‹

ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

ΠšΠ΅ΡˆΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ GET, оТидаСтся, Ρ‡Ρ‚ΠΎ GET - ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π΅Π½.

  • ETAG
  • If-Modified-Since
  • Cache-Control
  • LocalStorage

ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ инвалидация

Π‘Π°ΠΌΡ‹ΠΉ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π² Π³Π΅Ρ‚-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ…. Π•Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° md5-суммой ΠΎΡ‚ содСрТимого.

ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Nginx

    proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
    map $request_method $purge_method {
        PURGE
        1;
        default 0;
    }
    server {
    ...
        location / {
        proxy_pass http://backend;
        proxy_cache cache_zone;
        proxy_cache_key $uri;
        proxy_cache_purge $purge_method;
        }
    }

ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° сСрвСрС

ΠŸΠΎΡ…ΠΎΠ΄Ρ‹ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ достаточно Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌΠΈ. Π’ этом случаС, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ запросов ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² кСш. Π‘Π°ΠΌΡ‹ΠΌΠΈ распространСнными Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

  • Π₯Ρ€Π°Π½ΠΈΠ½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠžΠ—Π£/shared memory
  • memcache
  • redis

redis vs memcache

  • Redis:
    • Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ колличСство ΠΊΠΎΠΌΠ°Π½Π΄
    • Π•ΡΡ‚ΡŒ встроСнный lua
    • Π‘Π»ΠΎΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    • Π•ΡΡ‚ΡŒ пСрсистСнтный Ρ€Π΅ΠΆΠΈΠΌ
    • ΠšΠ»Π°ΡΡ‚Π΅Ρ€Π½Ρ‹ΠΉ
    • Π‘Π»ΠΎΠΆΠ½Ρ‹ΠΉ Π² настройках
  • Memcache:
    • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ
    • ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ
    • Для кластСрных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π΅ΡΡ‚ΡŒ moxy.
    • Tarantool ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» memcache

Cache miss

AverageTime = DbAccessTime * CacheMissRate + CacheAccessTime

ΠŸΡƒΡΡ‚ΡŒ:

  • DbAccessTime = 100ms CacheAccessTime = 20ms
  • Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ CacheMissRate > 0.8 - кСш Π²Ρ€Π΅Π΄Π΅Π½!

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΉΠΊΠ° кСша (Thundering herd)

ΠŸΡ€ΠΈ отсутствии ΠΊΠ»ΡŽΡ‡Π° Π΅ΡΡ‚ΡŒ большой риск ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ. Для избСТания ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π±Π°Π·Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠΈ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - новая запись Π² Π±Π»ΠΎΠ³Π΅ ΠΏΠΎΠ΄ высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

  • ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ доступ ΠΊ ΠΊΡΡˆΡƒ cache, Π΅Π³ΠΎ срок ΠΆΠΈΠ·Π½ΠΈ истёк.
  • ΠŸΡ‹Ρ‚Π°Π΅ΠΌΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ user_cache_lock.
  • НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ:
    • ΠΆΠ΄Ρ‘ΠΌ снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ;
  • НС доТдались
    • Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ старыС Π΄Π°Π½Π½Ρ‹Π΅ кэша;
  • Π”ΠΎΠΆΠ΄Π°Π»ΠΈΡΡŒ
    • Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ значСния ΠΊΠ»ΡŽΡ‡Π° Π·Π°Π½ΠΎΠ²ΠΎ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (построСнный кэш Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом).
  • Удалось ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ:
    • строим кэш ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π‘Ρ‚Π°Ρ€Ρ‚ с Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΌ кСшом

ПослС Π°Π²Π°Ρ€ΠΈΠΈ кСш, скорСС всСго Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Π½. А Π² случаС нСпСрсистСнтных Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ кСша Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ питания. ΠŸΠΎΠ΄Π½ΡΡ‚ΡŒΡΡ с Π½Π΅ΠΏΡ€ΠΎΠ³Ρ€Π΅Ρ‚Ρ‹ΠΌ кСшом слоТная Π·Π°Π΄Π°Ρ‡Π°. ΠžΠ±Ρ‰ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚:

  • Π—Π°Ρ€Π°Π½Π΅Π΅ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ скрипт ΠΏΡ€ΠΎΠ³Ρ€Π΅Π²Π° кСшСй
  • Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΏΠ»Π°Π²Π½ΠΎ
  • ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π΅ No1

Π˜Π½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ кСша

  • Π˜Π½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

    • Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ TTL
    • ПослС устарСваниС, автоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
    • Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ консистСнтны ΠΏΡ€ΠΈ большом TTL.
    • ΠŸΡ€ΠΈ ΠΌΠ°Π»ΠΎΠΌ TTL Π±ΡƒΠ΄Π΅Ρ‚ высокий cache miss.
  • Π˜Π½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ

    • УдаляСм Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· кСша ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² Π±Π°Π·Π΅
    • Опасно ΠΈΠ·-Π·Π° риска ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ.
  • Π˜Π½Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ

    • МСняСм Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Π΅
    • Π’ ΠΊΠ»ΡŽΡ‡ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ
    • Π’Π΅Ρ€ΡΠΈΡŽ Ρ…Ρ€Π°Π½ΠΈΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ
    • Π‘Ρ‚Π°Ρ€Ρ‹Π΅ вСрсии ΠΏΡ€ΠΎΡ‚ΡƒΡ…Π°ΡŽΡ‚ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ
    • Плюс - высокая ΠΊΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ.

Π’Π΅Π³Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ

    ВСрсии тэгов:
        tag1 -> 25
        tag2 -> 63
    Кэш Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ:
    [
        срок годности: 2008-11-07 21:00
            Π΄Π°Π½Π½Ρ‹Π΅ кэша: [
            ...
    ]
        тэги: [
            tag1: 25
            tag2: 63
        ]
    ]

к оглавлСнию >>

Π‘Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ сообщСний

Π Π΅ΡˆΠ°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

  • АсинхронныС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° Π΄ΠΎΠ»Π³ΠΈΠ΅ запросы
    • построСниС ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ²
    • аналитичСскиС, бухгалтСрскиС запросы
  • Асинхронная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ запросов
  • ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями, микросСрвисами

РСшСния

  • использованиС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    • ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, нСэффСктивно
  • использованиС IPC, shared memory
    • слоТная рСализация, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ
    • отсутствиС кластСризации
  • использованиС систСм доставки сообщСний
    • Rabbitmq
    • Kafka
    • NATS
    • Redis ( pub/sub, streams)

ВрСбования ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌ

  • Гарантия доставки сообщСний
    • at least once delivery
    • at most once delivery
    • exactly once
  • ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ)
  • Π—Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» AMPQ

AMQP (Advanced Message Queuing Protocol) обСспСчиваСт взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ (ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ПО для ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями).

  • ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» обСспСчиваСт:
    • ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ доставки сообщСний
    • Π’Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доставки сообщСний
    • ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ° сообщСний

ВСрминология AMPQ

  • Π‘Ρ€ΠΎΠΊΠ΅Ρ€ – это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ модСль AMQP, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ соСдинСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сообщСний ΠΈ Ρ‚.ΠΏ.
  • Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ (message) – это Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ сообщСния).
  • ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ (consumer) – ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ (producer)– ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отправляСт сообщСния Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΠΌΠ΅Π½.

RabbitMQ

  • гарантия доставки сообщСний
    • at least once delivery
    • at most once delivery
  • Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ порядок ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний (FIFO)
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сохранСния Π½Π° диск
  • ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ получСния
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»-Π²Π° отправляСмых сообщСниС
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… сообщСний
  • ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ
  • Π—Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ взаимодСйствия

  • consume
  • pub/sub
  • Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³ / Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ
  • запрос / ΠΎΡ‚Π²Π΅Ρ‚

ВСрминология

  • Producer, consumer, message - (рассмотрСли Ρ€Π°Π½Π΅Π΅)
  • Queue: Π‘ΡƒΡ„Π΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ сообщСния
  • Connection: TCP соСдинСниС ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ
  • Channel: Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ соСдинСниС Π²Π½ΡƒΡ‚Ρ€ΠΈ соСдинСния. Когда Π²Ρ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ сообщСния Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ – это всС дСлаСтся Π² ΠΊΠ°Π½Π°Π»Π΅.
  • Exchange: ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΎΡ‚ поставщика ΠΈ отправляСт Π΅Π³ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°.
  • Binding: Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ сообщСний
  • Routing key: ΠšΠ»ΡŽΡ‡ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смотрит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС
  • Users: Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ сообщСний с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ пароля.
  • Vhost, virtual host: Бпособ раздСлСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр RabbitMQ.

RabbitMQ: Exchange

БообщСния ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ Π½Π° ΠΏΡ€ΡΠΌΡƒΡŽ, вмСсто этого, поставщик ΡˆΠ»Π΅Ρ‚ сообщСниС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сообщСния Π² Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ½Π΄ΠΈΠ½Π³Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π°.

  1. ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ сообщСниС Π² exchange: direct, fanout, topics, headers Exchange. Π’ΠΈΠΏΡ‹
  2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±Π΅Ρ€Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ, ΠΊΠ»ΡŽΡ‡ Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π°, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° Ρ‚ΠΈΠΏ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.
  3. БоздаСтся связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ
  4. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ остаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ.
  5. ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСниС

ΠšΠ»ΡŽΡ‡ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ указываСтся ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ сообщСния Π² Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½Π°, слуТит для опрСдСлСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ сообщСниС.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ сообщСния β€” Π½Π°Π±ΠΎΡ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²ΠΈΠ΄Π° ΠΊΠ»ΡŽΡ‡- Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ связанных с сообщСниСм.

Π’ΠΈΠΏΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

  • direct β€” сообщСния попавшиС Π² эту Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½Π° Π±ΡƒΠ΄ΡƒΡ‚ скопированы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½Π° строгим ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

  • fanout β€” сообщСниС ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠ΅Π΅ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½Π° копируСтся Π²ΠΎ всС привязанныС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠ»ΡŽΡ‡Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° сообщСния.

  • topic β€” ΠΊΠ»ΡŽΡ‡ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ составным, ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°, для Ρ‡Π΅Π³ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символа: * β€” ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ слово, # β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько слов. Π‘Π»ΠΎΠ²Π° Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: routingKey = "*.database"

  • headers β€” ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ связываСтся с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ сообщСния, указываСтся условиС, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΡ… значСния ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ΡΡ

Π€Π»Π°Π³ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

  • auto_delete β€” Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ пустая ΠΈ ΠΊ Π½Π΅ΠΉ Π½Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ автоматичСски удаляСтся
  • durable β€” устойчивая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, сообщСния Π½Π΅ Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ рСстартС rabbitMQ (ΠΈΠ»ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅), ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π΄ΠΎ окончания ΠΎΡ‚Π΄Π°Ρ‡ΠΈ хранятся Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • exclusive β€” ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ
  • passive β€” ΠΏΡ€ΠΈ объявлСнии ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ пассивной, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΡƒΠΆΠ΅ создана, Ρ‚.Π΅. Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π΅ Π² случаС отсутствия, этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½ΡƒΠΆΠ΅Π½ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ сСрвСру Π½Π΅ измСняя Π΅Π³ΠΎ состояниС.
  • internal - ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ exchanges

ΠšΠ»Π°ΡΡ‚Π΅Ρ€

  • Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ /var/lib/rabbitmq/.erlang.cookie
    • rabbitmqctl stop_app
    • rabbitmqctl join_cluster --ram rabbit@master
    • rabbitmqctl start_app
  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅ синхронизированы!
    • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ зСркалирования ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ
      • # rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

ΠŸΠ°ΠΌΡΡ‚ΡŒ

По-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π² случаС Ссли RabbitMQ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ большС 40% ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ объСма памяти, Ρ‚ΠΎ всС соСдинСния Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈ высвобоТдСнии памяти Π΄ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ уровня Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ процСсс Ρ€Π°Π±ΠΎΡ‚Ρ‹ RabbitMQ возобновляСтся. ΠŸΠΎΡ€ΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ: rabbitmqctl set_vm_memory_high_watermark 0.5 ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€ΠΌΠ°Π½Π΅Π½Ρ‚Π½ΠΎ Π² /etc/rabbitmq/rabbitmq.config

    [{rabbit, [{vm_memory_high_watermark, 0.5}]}].

Apache Kafka

  • Kafka β€” это
    • распрСдСлСнный
    • Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ
    • ΠΆΡƒΡ€Π½Π°Π» фиксации ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (commit log).

Π₯арактСристики

  • Гарантия доставки
  • РСпликация ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈ синхронизация Ρ€Π΅ΠΏΠ»ΠΈΠΊ
  • Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ смСщСнии(offset) получатСля
  • Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСния для ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Π°
  • Ρ…Ρ€Π°Π½ΠΈΡ‚ свои записи Π½Π° дискС ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Ρ€ΠΆΠΈΡ‚ Π² -ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти
    • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ считывания ΠΈ записи Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π·Π° постоянноС врСмя O(1)
  • ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись Π½Π° диск
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ кэш диска
  • API для producers/consumers
  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° KSQL
  • Consumer Ρ‡Π΅Ρ€Π΅Π· pull Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΎ появлСнии Π½ΠΎΠ²Ρ‹Ρ… сообщСний
  • Π–ΡƒΡ€Π½Π°Π» очищаСтся Π½Π° основС настроСк Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
  • Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сТатия ΠΆΡƒΡ€Π½Π°Π»Π°
  • Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сдвига смСщСния для пСрСигрывания ΠΏΡ€ΠΈΠ΅ΠΌΠ° сообщСний
  • Для хранСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ zookeeper, Π² послСдних вСрсиях ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΠΏΠΈΠΊΠΈ kafka

ВСрминология

  • Record – Π—Π°ΠΏΠΈΡΡŒ, состоящая ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния
  • Topic – катСгория ΠΈΠ»ΠΈ имя ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΡƒΠ΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ записи
  • Producer – процСсс ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎΠΏΠΈΠΊ
  • Consumer – процСсс Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚ΠΎΠΏΠΈΠΊΠ°
  • Offset – позиция записи
  • Partition – ΡˆΠ°Ρ€Π΄ Ρ‚ΠΎΠΏΠΈΠΊΠ°

Consumers ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ - Zookeper

  • Zookeeper – это распрСдСлСнноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Оно сильно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ для считывания, Π½ΠΎ записи Π² Π½Π΅ΠΌ происходят ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ для хранСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² кластСризации (hearbeat, распрСдСлСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ обновлСния, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‚.Π΄.).
    • Offset Π³Ρ€ΡƒΠΏΠΏ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… сСкции
    • ACL β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ограничСния доступа /Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ
    • ΠšΠ²ΠΎΡ‚Ρ‹ β€” ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ количСства сообщСний Π² сСкунду
    • Partition Leaders ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΡ… работоспособности

к оглавлСнию >>

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π Π‘Π£Π‘Π”

  • ПО ΠΈΠ»ΠΈ Π°ΠΏΠΏΠ°Ρ€Ρ‚Π½ΠΎΠ΅ обСспСчСниС ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒ Π² любоС врСмя
  • Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ сбой ПО
  • ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Ρ‹Π² сСти
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π±Π°Π·ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ частично ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ состояния

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Вранзакция β€” способ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи ΠΈ чтСния Π² ΠΎΠ΄Π½Ρƒ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. По сути, всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи ΠΈ чтСния Π² Π½Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π°: вся транзакция ΠΈΠ»ΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ выполняСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (с фиксациСй ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ), ΠΈΠ»ΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ (с ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠΌ). Появились Π² сСрСдинС 1970-Ρ…, с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ Π½Π΅ сильно мСнялись. Π’ NoSQL ΠΎΡ‚ Π½ΠΈΡ… часто ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ.

ACID

  • Atomicity: ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "всС ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ". Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹, Π»ΠΈΠ±ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ…. Благодаря этому появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π½Π΅ опасаясь Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°.
  • Consistency: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ систСмы: ( Π”Π΅Π±ΠΈΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ сходится с ΠΊΡ€Π΅Π΄ΠΈΡ‚ΠΎΠΌ, Π¦Π΅Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€ΡƒΡ‡ΠΊΠ΅ Π·Π° сСанс.)
    • Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ constaints Π±ΡƒΠ΄ΡƒΡ‚ выполнятся.
    • По сути, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ согласованности - Π·Π°Π΄Π°Ρ‡Π° прилоТСния, Π° Π½Π΅ Π±Π°Π·Ρ‹.
  • Isolation: Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ - свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. БущСствуСт нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ. Π’ ΠΏΠΎΠ»Π½ΠΎΠΌ смыслС ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ обСспСчиваСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ SERIALIZABLE.
  • Durability: Под этим свойством ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ - Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΎΡ‚Π΄Π°Ρ‡Π΅ ΠΎΡ‚Π²Π΅Ρ‚Π° зафиксированны Π² энСргонСзависимой памяти (fsync). ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ это свойство ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Диски сбоят. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ (рСпликация) Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ.

АтомарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

МногиС NoSQL Π±Π°Π·Ρ‹, Ρ…ΠΎΡ‚ΡŒ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Для memcached это:

  • inc
  • dec

Аномалия dirty reads

  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, которая впослСдствии Π½Π΅ подтвСрдится (откатится).

Аномалия dirty writes

Аномалия lost update

  • ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ транзакциями Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ всС измСнСния, ΠΊΡ€ΠΎΠΌΠ΅ послСднСго;

Аномалия Unrepeatable read

Битуация, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΌΠΈ.

Аномалия "Π€Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅"

  • Битуация, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ мноТСства строк.

Π£Ρ€ΠΎΠ²Π½ΠΈ изоляции

Под Β«ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ изоляции Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉΒ» понимаСтся ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ обСспСчиваСмой Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ Π‘Π£Π‘Π” (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования) Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ всСх ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… нСсогласованности Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ SQL-92 опрСдСляСт ΡˆΠΊΠ°Π»Ρƒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции: Read uncommitted, Read committed, Repeatable read, Serializable. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… являСтся самым слабым, послСдний β€” самым ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅.

Read uncommitted (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ нСзафиксированных Π΄Π°Π½Π½Ρ‹Ρ…)

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

Read committed (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ фиксированных Π΄Π°Π½Π½Ρ‹Ρ…)

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… Π‘Π£Π‘Π”, Π² частности, Microsoft SQL Server, PostgreSQL ΠΈ Oracle, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. На этом ΡƒΡ€ΠΎΠ²Π½Π΅ обСспСчиваСтся Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΎΠ³ΠΎ, «грязного» чтСния, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ другая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΠΈ сдСланныС Сю измСнСния зафиксированы. Π’ ΠΈΡ‚ΠΎΠ³Π΅ пСрвая транзакция Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

  • ΠŸΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ
    • dirty reads
    • dirty writes
  • РСализация:
    • Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° строк ΠΏΡ€ΠΈ записи
    • БохраняСм послС записи старыС значСния строк Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Repeatable reads

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π°Ρ транзакция Β«Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Β» измСнСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Сю Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹. ΠŸΡ€ΠΈ этом никакая другая транзакция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΠΊΠ° Ρ‚Π° Π½Π΅ ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°.

  • ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚
    • unrepeatable reads
  • рСализация
    • Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ запись, Π° запись Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅)
    • MVCC
      • Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… создаСт список всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… выполняСмых Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ зафиксированных ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½Ρ‹Ρ…). ВсС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ этими транзакциями измСнСния ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π΄Π°ΠΆΠ΅ Ссли впослСдствии ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ зафиксированы.
      • ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½Ρ‹ΠΌΠΈ транзакциями, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.
      • ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ транзакциями с Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°Ρ‡Π°Π²ΡˆΠΈΠ΅ΡΡ послС запуска Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ), ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΈ Π»ΠΈ ΠΎΠ½ΠΈ зафиксированы.
      • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи Π²ΠΈΠ΄Π½Ρ‹ запросам прилоТСния.

Serializable (ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ)

Π‘Π°ΠΌΡ‹ΠΉ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изолированности; Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, каТдая выполняСтся Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π΅ сущСствуСт. Волько Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ эффСкту Β«Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ³ΠΎ чтСния».

  • ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚
    • Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅
  • рСализация
    • ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
    • двухфазная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (2-Phase Lock)
    • ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ оптимистичСского управлСния ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹ΠΌ доступом

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€ - tarantool, redis.
  • Π₯ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для In-Memory Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ€Π°ΠΉΠ½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ (Π½ΠΎ кросс-ΡˆΠ°Ρ€Π΄ запросы Π½Π°Π΄ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ).
  • Π•ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. OLAP - выносится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ выполнСния с MVCC.

к оглавлСнию >>

In-memory Π‘Π£Π‘Π” Tarantool

  • УскорСниС Ρ€Π°Π±ΠΎΡ‚Ρ‹
  • ИзбСгаСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ кСшСй
  • Экономия Π΄Π΅Π½Π΅Π³
  • Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
  • ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ lua application server

Когда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

  • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΠ²
  • АналитичСскиС запросы
  • ВяТСлыС запросы

ВСрминология

  • space - Ρ‚Π°Π±Π»ΠΈΡ†Π°
  • tuple - строка Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ space

  • box.schema.space.create('myspace', {if_not_exists=true})

БозданиС индСкса

box.space.myspace:create_index(
    'primary', {
        type="TREE", 
        unique=true,
        parts={
            1, 'unsigned', 2, 'string'
        }, 
        if_not_exists=true
    })

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ индСксов

  • type - Ρ‚ΠΈΠΏ индСкса: TREE, HASH, RTREE, BITMAP
  • unique - ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ индСкса
  • parts - индСксныС поля. Π’Π°ΠΆΠ½ΠΎ - ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСфикс индСкса

Вставка Π΄Π°Π½Π½Ρ‹Ρ…

        > box.space.myspace:insert({"test", 3, 6})
        ---
        - error: 'Tuple field 1 type does not
        match one required by operation: expected unsigned'
        ...
        > box.space.myspace:insert({1, 'qwerty', 6})
        ---
        - [1, 'qwerty', 6]
        ...
        > box.space.myspace:insert({1, 10, 6})
        ---
        - error: Duplicate key exists in unique index
        'primary' in space 'myspace'
        ...
        > box.space.myspace:insert({2, 10, 6})
        ---
        - [2, 10, 6]
        ...
        > box.space.myspace:insert({3, 10, 6, 98})
        ---
        - [3, 10, 6, 98]
        ...
  • Π’ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число столбцов
  • Π’ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ слоТныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² нСиндСксных полях ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…

    > box.space.myspace:update({2}, {{'+', 3, 1}})
    ---
    - [2, 10, 7]
    ...
    > box.space.myspace:update({2}, {{'+', 3, 1}})
    ---
    - [2, 10, 8]
    ...
    > box.space.myspace:update({2}, {{'+', 3, 10}})
    ---
    - [2, 10, 18]
    ...
    > box.space.myspace:update({2}, {{'-', 3, 3}})
    ---
    - [2, 10, 15]
    ...
    > box.space.myspace:update({2}, {{'=', 3, 148}})
    ---
    - [2, 10, 148]
    ...
  • Π’Π°ΠΆΠ½ΠΎ: ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ индСксу.

SELECT

    box.space.myspace:create_index('tindex', {type="TREE", parts={3, 'unsigned'}, unique=false})
    box.space.myspace:create_index('hindex', {type="HASH", parts={1, 'unsigned'}})
    box.space.myspace:select({}) box.space.myspace.index.tindex:select({}) box.space.myspace.index.tindex:select({148})
    box.space.myspace.index.tindex:select({148}, {iterator='GT'}) box.space.myspace.index.tindex:select({148}, {iterator='GE'})
    box.space.myspace.index.hindex:select({3}, {iterator='GE'})

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

  • replace
  • delete
  • upsert

Π₯Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

    function myproc(id)
        local tup = box.space.myspace.index.tindex:select({id}, {iterator='GE'})
        return tup[2]
    end

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

  • НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°Ρ€Π°Π½Ρ‚ΡƒΠ» ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π΅Π½.
  • Π’Π°Ρ€Π°Π½Ρ‚ΡƒΠ» ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сам ΠΏΡ€ΠΈ:
    • ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… опСрациях
    • Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… систСмных Π²Ρ‹Π·ΠΎΠ²Π°Ρ…
  • select Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅
    • Π’ΠΎ врСмя Π΄ΠΎΠ»Π³ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ fiber.yield()

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

  • Начало Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ - box.begin()
  • ΠžΡ‚ΠΊΠ°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ - box.rollback()
  • ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ - box.commit() Π’Π°ΠΆΠ½ΠΎ: Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ автоматичСски

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ сСрвис ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠŸΠΎΡ‡Ρ‚Π°@Mail.ru

РСпликация mysql <-> tarantol

к оглавлСнию >>

Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

к оглавлСнию >>

Π¨Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

About

stages of build highload systems

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages