Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π£ нас Π² Mail.ru Group Π΅ΡΡ‚ΡŒ Tarantool β€” это Ρ‚Π°ΠΊΠΎΠΉ сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Lua, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Ρƒ Π΅Ρ‰Ρ‘ ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚?). Он быстрый ΠΈ классный, Π½ΠΎ возмоТности ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвСра всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ Π±Π΅Π·Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹. Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ панацСя, поэтому Π² Tarantool Π΅ΡΡ‚ΡŒ инструмСнты для Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ β€” ΠΌΠΎΠ΄ΡƒΠ»ΡŒ vshard [1]. Он позволяСт ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ нСскольким сСрвСрам, Π½ΠΎ придётся ΠΏΠΎΠ²ΠΎΠ·ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: ΠΌΡ‹ собрали шишСк (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [2], [3]) ΠΈ Π·Π°ΠΏΠΈΠ»ΠΈΠ»ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ упростит Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π’arantool Cartridge β€” это Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ слоТных распрСдСлённых систСм. Он позволяСт ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° написании бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ вмСсто Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ инфраструктурных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Под ΠΊΠ°Ρ‚ΠΎΠΌ я расскаТу, ΠΊΠ°ΠΊ этот Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ устроСн ΠΈ ΠΊΠ°ΠΊ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΈΡΠ°Ρ‚ΡŒ распрСдСлённыС сСрвисы.

А Π² Ρ‡Ρ‘ΠΌ, собствСнно, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°?

Π£ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°Ρ€Π°Π½Ρ‚ΡƒΠ», Π΅ΡΡ‚ΡŒ vshard β€” Ρ‡Π΅Π³ΠΎ Π΅Ρ‰Ρ‘ ΠΏΠΎΠΆΠ΅Π»Π°Ρ‚ΡŒ?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π΅Π»ΠΎ Π² удобствС. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ vshard настраиваСтся Ρ‡Π΅Ρ€Π΅Π· Lua-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ распрСдСлённая систСма ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов Tarantool Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, конфигурация Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Π·Π΄Π΅ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ. Никто Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ этим Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ…ΠΎΠ΄ ΠΈΠ΄ΡƒΡ‚ всячСскиС скрипты, Ansible, систСмы развёртывания.

Cartridge сам управляСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ vshard, ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ это Π½Π° основС своСй собствСнной распрСдСлённой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. По сути, это простой YAML-Ρ„Π°ΠΉΠ», копия ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ хранится Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ экзСмплярС Tarantool. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ сам слСдит Π·Π° своСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π²Π΅Π·Π΄Π΅ Π±Ρ‹Π»Π° одинаковая.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π΄Π΅Π»ΠΎ снова Π² удобствС. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²ΡˆΠ°Ρ€Π΄ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ программиста ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Когда ΠΌΡ‹ обсуТдаСм Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Ρ‡Π°Ρ‰Π΅ всСго Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠ± ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΈ ΠΈΡ… взаимодСйствии. О Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠ΅ кластСра Π½Π° 3 Π΄Π°Ρ‚Π°Ρ†Π΅Π½Ρ‚Ρ€Π° Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π½ΠΎ.

ΠœΡ‹ Ρ€Π΅ΡˆΠ°Π»ΠΈ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π°Π· Π·Π° Ρ€Π°Π·ΠΎΠΌ, ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° всСм Π΅Π³ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅: созданиС, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, тСстированиС, CI/CD, сопровоТдСниС.

Cartridge Π²Π²ΠΎΠ΄ΠΈΡ‚ понятиС Ρ€ΠΎΠ»ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса Tarantool. Π ΠΎΠ»ΠΈ β€” это Ρ‚Π° концСпция, которая позволяСт ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π° написании ΠΊΠΎΠ΄Π°. ВсС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρ€ΠΎΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС Tarantool, ΠΈ для тСстов этого Π±ΡƒΠ΄Π΅Ρ‚ достаточно.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности Tarantool Cartridge:

  • Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ оркСстрированиС кластСра;
  • Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΎΠ²Ρ‹Ρ… Ρ€ΠΎΠ»Π΅ΠΉ;
  • шаблон прилоТСния для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ развСртывания;
  • встроСнноС автоматичСскоС ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅;
  • интСграция с тСстовым Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ Luatest;
  • ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ кластСром с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ WebUI ΠΈ API;
  • инструмСнты ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈ дСплоя.

Hello, World!

МнС Π½Π΅ тСрпится ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сам Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, поэтому рассказ ΠΏΡ€ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ оставим Π½Π° ΠΏΠΎΡ‚ΠΎΠΌ, ΠΈ Π½Π°Ρ‡Π½Ρ‘ΠΌ с простого. Если ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сам Tarantool ΡƒΠΆΠ΅ установлСн, Ρ‚ΠΎ остаётся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ

$ tarantoolctl rocks install cartridge-cli
$ export PATH=$PWD/.rocks/bin/:$PATH

Π­Ρ‚ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ установят ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ позволят ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ своё ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· шаблона:

$ cartridge create --name myapp

И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

myapp/
β”œβ”€β”€ .git/
β”œβ”€β”€ .gitignore
β”œβ”€β”€ app/roles/custom.lua
β”œβ”€β”€ deps.sh
β”œβ”€β”€ init.lua
β”œβ”€β”€ myapp-scm-1.rockspec
β”œβ”€β”€ test
β”‚   β”œβ”€β”€ helper
β”‚   β”‚   β”œβ”€β”€ integration.lua
β”‚   β”‚   └── unit.lua
β”‚   β”œβ”€β”€ helper.lua
β”‚   β”œβ”€β”€ integration/api_test.lua
β”‚   └── unit/sample_test.lua
└── tmp/

Π­Ρ‚ΠΎ git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ Β«Hello, World!Β» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ сразу ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установив зависимости (Π² Ρ‚.Ρ‡. сам Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ):

$ tarantoolctl rocks make
$ ./init.lua --http-port 8080

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΎΠ΄Π½Π° Π½ΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния. Π›ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ‹Π²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ сразу ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Π΅Π±-интСрфСйс, ΠΌΡ‹ΡˆΠΊΠΎΠΉ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кластСр ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ, Π½ΠΎ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠΊΠ° Ρ€Π°Π½ΠΎ. Пока Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ, поэтому ΠΏΡ€ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΉ я расскаТу ΠΏΠΎΡ‚ΠΎΠΌ, Π° сСйчас наступаСт врСмя ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π’ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, ΠΌΡ‹ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΈΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΈ Ρ€Π°Π· Π² сутки ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ схСму, ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½Π° Π½Π΅Ρ‘ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: gateway, storage ΠΈ scheduler. ΠŸΡ€ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ дальшС. Π Π°Π· ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² качСствС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° vshard, Ρ‚ΠΎ добавляСм Π² схСму vshard-router ΠΈ vshard-storage. Ни gateway, Π½ΠΈ scheduler ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚, для этого Π΅ΡΡ‚ΡŒ Ρ€ΠΎΡƒΡ‚Π΅Ρ€, ΠΎΠ½ для Ρ‚ΠΎΠ³ΠΎ ΠΈ создан.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π­Ρ‚Π° схСма всё Π΅Ρ‰Ρ‘ Π½Π΅ совсСм Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ выглядят абстрактно. НуТно Π΅Ρ‰Ρ‘ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ это спроСцируСтся Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Tarantool β€” сгруппируСм наши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎ процСссам.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π”Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ vshard-router ΠΈ gateway Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… экзСмплярах смысла ΠΌΠ°Π»ΠΎ. Π—Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ лишний Ρ€Π°Π· Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ сСти, Ссли это ΠΈ Ρ‚Π°ΠΊ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² обязанности Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π°? Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡΡ‚Ρ ΠΈ gateway, ΠΈ vshard.router.cfg, ΠΈ ΠΏΡƒΡΡ‚ΡŒ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ локально.

На этапС проСктирования Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с трСмя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ я, ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΏΠΎΠΊΠ° ΠΏΠΈΡˆΡƒ ΠΊΠΎΠ΄, Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎ запускС Ρ‚Ρ€Ρ‘Ρ… экзСмпляров Tarnatool. МнС Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ тСсты ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ написал gateway. Или, ΠΌΠΎΠΆΠ΅Ρ‚, я Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ Ρ„ΠΈΡ‡Ρƒ. Π—Π°Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ ΠΌΡƒΡ‡ΠΈΡ‚ΡŒΡΡ с Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Ρ‘Ρ… экзСмпляров? ИмСнно Ρ‚Π°ΠΊ Ρ€ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ концСпция Ρ€ΠΎΠ»Π΅ΠΉ. Роль β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π»ΡƒΠ°ΡˆΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ управляСт Cartridge. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ β€” gateway, router, storage, scheduler. Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС. ВсС Ρ€ΠΎΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС, ΠΈ этого Π±ΡƒΠ΄Π΅Ρ‚ достаточно.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

А ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΎ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ Π² staging ΠΈΠ»ΠΈ Π² ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ, Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ процСссу Tarantool свой Π½Π°Π±ΠΎΡ€ Ρ€ΠΎΠ»Π΅ΠΉ Π² зависимости ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… возмоТностСй:

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΊΠ°ΠΊΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹, Π½Π°Π΄ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. И это Β«Π³Π΄Π΅-Ρ‚ΠΎΒ» β€” распрСдСлённая конфигурация, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Π²Ρ‹ΡˆΠ΅. Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ Π² Π½Π΅ΠΉ β€” это топология кластСра. Π—Π΄Π΅ΡΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ 3 Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ· 5 процСссов Tarantool:

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

ΠœΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, поэтому Π±Π΅Ρ€Π΅ΠΆΠ½ΠΎ относимся ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… процСссах. Cartridge слСдит Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, ΠΎΠ½ сначала провСряСт Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ всСх экзСмпляров ΠΈ ΠΈΡ… Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. ПослС этого Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„Π°Π·ΠΎΠΉ примСняСтся ΠΊΠΎΠ½Ρ„ΠΈΠ³. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ΄ΠΈΠ½ экзСмпляр оказался Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСдоступСн, Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ просто Π½Π΅ примСнится ΠΈ Π²Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Π’Π°ΠΊΠΆΠ΅ Π² сСкции Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠ°ΠΊ Π»ΠΈΠ΄Π΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Ρ‚ΠΎΡ‚ экзСмпляр, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ΄Ρ‘Ρ‚ запись. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π°Ρ‰Π΅ всСго ΡΠ²Π»ΡΡŽΡ‚ΡΡ read-only, хотя Ρ‚ΡƒΡ‚ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Иногда смСлыС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ боятся ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° нСсколько Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСсмотря Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄Π²Π°ΠΆΠ΄Ρ‹. Для этого Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π»ΠΈΠ΄Π΅Ρ€Π°.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π–ΠΈΠ·Π½ΡŒ Ρ€ΠΎΠ»Π΅ΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ абстрактная Ρ€ΠΎΠ»ΡŒ ΠΌΠΎΠ³Π»Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. ЕстСствСнно, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ происходит Π±Π΅Π· пСрСзапуска процСсса Tarantool. Для управлСния ролями сущСствуСт 4 ΠΊΠΎΠ»Π±Π΅ΠΊΠ°. Cartridge сам Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ написано Π² распрСдСлённой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‚Π΅ΠΌ самым примСняя ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ролям.

function init()
function validate_config()
function apply_config()
function stop()

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ€ΠΎΠ»ΠΈ Π΅ΡΡ‚ΡŒ функция init. Она вызываСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ€ΠΎΠ»ΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ пСрСзапускС Tarantool’а. Π’Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ box.space.create, ΠΈΠ»ΠΈ scheduler ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ fiber, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Одной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ init ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСдостаточно. Cartridge позволяСт ролям ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠΉ распрСдСлСнной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для хранСния Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π² этой ΠΆΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ бизнСс-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π’ ΠΌΠΎΡ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ схСма Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ настройки расписания для Ρ€ΠΎΠ»ΠΈ scheduler.

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ validate_config ΠΈ apply_config ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ распрСдСлённой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Когда конфигурация примСняСтся Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, кластСр провСряСт, Ρ‡Ρ‚ΠΎ каТдая Ρ€ΠΎΠ»ΡŒ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ эту Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, ΠΈ ΠΏΡ€ΠΈ нСобходимости сообщаСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΠ± ошибкС. Когда всС согласились с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ конфигурация Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ, Ρ‚ΠΎ выполняСтся apply_config.

Π’Π°ΠΊΠΆΠ΅ Ρƒ Ρ€ΠΎΠ»Π΅ΠΉ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ stop, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для очистки Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€ΠΎΠ»ΠΈ. Если ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ scheduler Π½Π° этом сСрвСрС большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ Ρ„Π°ΠΉΠ±Π΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ запускал с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ init.

Π ΠΎΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой. ΠœΡ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° Lua, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ процСссС Π½Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎΠΉ Π½Π°ΠΌ Ρ€ΠΎΠ»ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ обращСния ΠΏΠΎ сСти, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ rpc (remote procedure call), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ построСн Π½Π° основС стандартного netbox, встроСнного Π² Tarantool. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Ссли, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ваш gateway Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ scheduler ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ прямо сСйчас, Π° Π½Π΅ ΠΆΠ΄Π°Ρ‚ΡŒ сутки.

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” обСспСчСниС отказоустойчивости. Для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π² Cartridge ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» SWIM [4]. Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅, Ρ‚ΠΎ процСссы ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ «слухами» ΠΏΠΎ UDP β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс рассказываСт своим сосСдям послСдниС новости, ΠΈ ΠΎΠ½ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚. Если Π²Π΄Ρ€ΡƒΠ³ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΡˆΡ‘Π», Tarantool Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅Π»Π°Π΄Π½ΠΎΠ΅, Π° Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π΄Π΅ΠΊΠ»Π°ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΌΠ΅Ρ€Ρ‚ΡŒ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ рассказываСт всСм ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΌ эту Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

На основС этого ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Cartridge ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΎΡ‚ΠΊΠ°Π·ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс слСдит Π·Π° своим ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ Ссли Π»ΠΈΠ΄Π΅Ρ€ Π²Π΄Ρ€ΡƒΠ³ пСрСстал ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ, Ρ‚ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ€ΠΎΠ»ΡŒ Π½Π° сСбя, Π° Cartridge ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π—Π΄Π΅ΡΡŒ Π½Π°Π΄ΠΎ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ частоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΡƒΠ΄Π°-сюда ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ автоматичСский failover Π½Π°ΠΎΠ±ΡƒΠΌ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ стоит. Надо Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, ΠΈ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ рСпликация Π½Π΅ сломаСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π»ΠΈΠ΄Π΅Ρ€ восстановится ΠΈ Π΅ΠΌΡƒ Π²Π΅Ρ€Π½ΡƒΡ‚ ΠΊΠΎΡ€ΠΎΠ½Ρƒ.

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

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Docker, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π²Π·ΡΡ‚ΡŒ Β«ΠΎΠ±Ρ€Π°Π·Β» Ρ€ΠΎΠ»ΠΈ, отнСсти Π΅Π³ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΈ Ρ‚Π°ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Наши Ρ€ΠΎΠ»ΠΈ Π½Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, ΠΊΠ°ΠΊ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС Π΄Π²Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ. Роль Π»ΠΈΠ±ΠΎ Π΅ΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ Π΅Ρ‘ Π½Π΅Ρ‚, Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС это singleton. Ну ΠΈ Π²-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π²Π½ΡƒΡ‚Ρ€ΠΈ всСй Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ€ΠΎΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Π»Π΅ΠΏΠΎ β€” Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅, Π° конфигурация разная.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ дСплоя

Π― ΠΎΠ±Π΅Ρ‰Π°Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Cartridge ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ прилоТСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΌ, Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ RPM-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹:

$ cartridge pack rpm myapp -- ΡƒΠΏΠ°ΠΊΡƒΠ΅Ρ‚ для нас ./myapp-0.1.0-1.rpm
$ sudo yum install ./myapp-0.1.0-1.rpm

УстановлСнный ΠΏΠ°ΠΊΠ΅Ρ‚ нСсёт Π² сСбС ΠΏΠΎΡ‡Ρ‚ΠΈ всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅: ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ установлСнныС Π»ΡƒΠ°ΡˆΠ½Ρ‹Π΅ зависимости. Tarantool Π½Π° сСрвСр Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠ΅Π΄Π΅Ρ‚ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ RPM-ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΈ наш сСрвис Π³ΠΎΡ‚ΠΎΠ² ΠΊ запуску. ДСлаСтся это Ρ‡Π΅Ρ€Π΅Π· systemd, Π½ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Как ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ URI ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСсса. Π’Ρ€Ρ‘Ρ… для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ…Π²Π°Ρ‚ΠΈΡ‚.

$ sudo tee /etc/tarantool/conf.d/demo.yml <<CONFIG
myapp.router: {"advertise_uri": "localhost:3301", "http_port": 8080}
myapp.storage_A: {"advertise_uri": "localhost:3302", "http_enabled": False}
myapp.storage_B: {"advertise_uri": "localhost:3303", "http_enabled": False}
CONFIG

Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ интСрСсный нюанс. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ лишь ΠΏΠΎΡ€Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ адрСс процСсса Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ hostname. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π»Ρ‹ кластСра Π·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ. ΠŸΠ»ΠΎΡ…Π°Ρ идСя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС advertise_uri адрСс 0.0.0.0, это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ внСшний IP-адрСс, Π° Π½Π΅ bind сокСта. Π‘Π΅Π· Π½Π΅Π³ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, поэтому Cartridge попросту Π½Π΅ даст Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π» с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ advertise_uri.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° конфигурация Π³ΠΎΡ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ процСссы. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ systemd-ΡŽΠ½ΠΈΡ‚ Π½Π΅ позволяСт ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса, прилоТСния Π½Π° Cartridge устанавливаСт Ρ‚.Π½. instantiated-ΡŽΠ½ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ:

$ sudo systemctl start myapp@router
$ sudo systemctl start myapp@storage_A
$ sudo systemctl start myapp@storage_B

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ HTTP-ΠΏΠΎΡ€Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Cartridge обслуТиваСт Π²Π΅Π±-интСрфСйс β€” 8080. Π—Π°ΠΉΠ΄Ρ‘ΠΌ Π½Π° Π½Π΅Π³ΠΎ ΠΈ посмотрим:

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

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

ΠΠ°Π»ΡŒΡ‘ΠΌ ΠΊΡ€ΡƒΠΆΠ΅Ρ‡ΠΊΡƒ любимого Π½Π°ΠΏΠΈΡ‚ΠΊΠ° ΠΈ расслабимся послС Π΄ΠΎΠ»Π³ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π’arantool Cartridge: ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Lua-Π±Π΅ΠΊΠ΅Π½Π΄Π° Π² Ρ‚Ρ€ΠΈ строчки

Π˜Ρ‚ΠΎΠ³ΠΈ

А Ρ‡Ρ‚ΠΎ ΠΈΡ‚ΠΎΠ³ΠΈ? ΠŸΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅, ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ, оставляйтС ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь, Π·Π°Π²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΈΠΊΠ΅Ρ‚Ρ‹ Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅.

Бсылки

[1] Tarantool Β» 2.2 Β» Reference Β» Rocks reference Β» Module vshard

[2] Как ΠΌΡ‹ внСдряли ядро инвСстиционного бизнСса ΠΠ»ΡŒΡ„Π°-Π‘Π°Π½ΠΊΠ° Π½Π° Π±Π°Π·Π΅ Tarantool

[3] АрхитСктура Π±ΠΈΠ»Π»ΠΈΠ½Π³Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ поколСния: трансформация с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° Tarantool

[4] SWIM β€” ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» построСния кластСра

[5] GitHub β€” tarantool/cartridge-cli

[6] GitHub β€” tarantool/cartridge

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