АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage
Storage Corridor by St-Pete

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! Π― Mons Anderson, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Mail.ru Cloud Solutions, расскаТу, ΠΊΠ°ΠΊ ΠΌΡ‹ построили нашС S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ оказались ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌΠΈ, Π° ΠΊΠ°ΠΊΠΈΠ΅ стоило ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ссли Π±Ρ‹ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с нуля сСйчас.

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π° Π½Π° основС Π΄ΠΎΠΊΠ»Π°Π΄Π° Π½Π° @Databases Meetup by Mail.ru Cloud Solutions & Tarantool. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ:

  • ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ устроСно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Mail.ru, ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ строили S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅;
  • Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Mail.ru Cloud Storage;
  • ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль хранСния ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ сдСланы шаги для Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½;
  • ΠΏΡ€ΠΎ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ΅Π²ΠΎΠΉ систСмы: Ρ„Π΅ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅;
  • ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³;
  • Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ с SSL-сСртификатами.

Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ.

Как Π±Ρ‹Π»ΠΎ устроСно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Mail.ru, ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ строили S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° нашСго S3 Π½Π°Ρ‡Π°Π»Π°ΡΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Облака Mail.ru, поэтому ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ стоит Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ устроСно ΠΈ Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚.

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±Π»Π°ΠΊΠ° Mail.ru состоит ΠΈΠ· сСрвСров с дисками. Π’ срСднСм соврСмСнный storage-сСрвСр β€” это 36 дисков ΠΏΠΎ 12–14 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚. РаньшС диски Π±Ρ‹Π»ΠΈ мСньшС, Π½ΠΎ Π·Π° Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ дисков выросли ΠΈ сСгодня это ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚Π° сырых Π΄Π°Π½Π½Ρ‹Ρ….

Диски с Ρ€Π°Π·Π½Ρ‹Ρ… сСрвСров Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Β«ΠΏΠ°Ρ€Ρ‹Β» (pair). ΠŸΠ°Ρ€Π° β€” это Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ unit хранСния Ρ„Π°ΠΉΠ»ΠΎΠ². По сути, это диск, смонтированный Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ, Π³Π΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ…ΡΡˆΠ°ΠΌΠΈ.

ΠŸΠ°Ρ€Π° β€” это историчСскоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ сСгодняшнСго дня, хотя сСйчас Π² ΠΏΠ°Ρ€Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° диска. Дисков ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅ хранСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 3/2.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

ΠŸΠ°Ρ€Ρ‹ (pair) β€” Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ВсС ΠΏΠ°Ρ€Ρ‹ хранятся Π² PairDB β€” это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ Tarantool. ВсС Π±Π°Π·Ρ‹ Π² нашСм Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, начиная с самых ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, β€” это Tarantool, Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Π°Π· ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ.

PairDB Ρ…Ρ€Π°Π½ΠΈΡ‚ всС ΠΏΠ°Ρ€Ρ‹, ΠΈΡ… состояния, свободноС мСсто, возмоТности ΠΎΡ‚ΠΊΠ°Π·Π°, послСдниС ошибки. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ сама Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°Ρ€Ρ‹, Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… состояниС, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ½ΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ PairDB β€” Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ снимок состояния всСх дисков нашСй систСмы.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Pair DB: Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… с состояниСм ΠΏΠ°Ρ€

На ΠΏΠ°Ρ€Π°Ρ… хранятся Ρ„Π°ΠΉΠ»Ρ‹, ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π΅ ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» находится, Π½ΡƒΠΆΠ½Π° Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π±Π°Π·Π° β€” FileDB. Она Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ соотвСтствия: Ρ„Π°ΠΉΠ» Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ хранится Π½Π° ΠΏΠ°Ρ€Π΅ Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ нСбольшоС количСство Π½ΡƒΠΆΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud StorageFile DB: мСсто, Π³Π΄Π΅ хранится Ρ„Π°ΠΉΠ»

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ Π·Π²Π΅Π½ΠΎ β€” сСрвис Nylon, Ρ€ΠΎΡƒΡ‚Π΅Ρ€ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Он являСтся Π΅Π΄ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π°, позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс ΠΊΠ°ΠΊ с PairDB, Ρ‚Π°ΠΊ ΠΈ с FileDB. Π­Ρ‚ΠΎ stateless-сСрвис, ΠΎΠ½ выполняСт балансировку запросов, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΡˆΠ°Ρ€Π΄ FileDB Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ΄Ρ‚ΠΈ, Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Nylon: Ρ€ΠΎΡƒΡ‚Π΅Ρ€ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

Π’Π°ΠΊΠΆΠ΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚. Для этого Π΅ΡΡ‚ΡŒ сСрвис β€” Streamer. Он прСдоставляСт Π΄Π²Π° HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: ΠΌΠ΅Ρ‚ΠΎΠ΄ PUT, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ GET, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚Ρ‚ΡƒΠ΄Π°. HTTP β€” довольно популярный ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Когда ΠΌΡ‹ обращаСмся ΠΊ Streamer’y, ΠΎΠ½ Ρ‡Π΅Ρ€Π΅Π· Nylon обращаСтся ΠΊ PairDB, выясняСт, Π½Π° ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ°Ρ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», послС Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ WebDAV Π½Π° эту ΠΏΠ°Ρ€Ρƒ.

По сути, любой storage сСрвСр β€” это nginx плюс диски, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ смонтированы ΠΏΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ путям. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ· Streamer Π·Π°Π»ΠΈΡ‚ΡŒ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ„Π°ΠΉΠ», ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ интСрфСйс для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ взаимодСйствия с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Streamer: Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

Π§Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ рассмотрСли ΠΎΠ±Ρ‰Π΅Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ устройство Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° PUT ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° этих Π΄Π°Π½Π½Ρ‹Ρ… Ρ…ΡΡˆ. Π‘ этим ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ впослСдствии ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΈ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ исходный Ρ„Π°ΠΉΠ». Но этого нСдостаточно для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ S3. Π’ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ S3, ΠΏΠΎΠΌΠΈΠΌΠΎ самого хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π΅ΡΡ‚ΡŒ:

  • Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… β€” Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²;
  • организация доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ посрСдством HTTP;
  • Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ β€” Π±Π°ΠΊΠ΅Ρ‚Ρ‹;
  • HTTP-S3 Endpoint. S3 ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ структуры β€” Π±Π°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдоставляСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° для хранСния Ρ„Π°ΠΉΠ»ΠΎΠ².

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этой Π»ΠΎΠ³ΠΈΠΊΠΈ Π±Ρ‹Π» Π½ΡƒΠΆΠ΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвис. Π’Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ сразу ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ для дальнСйшСго роста сСрвиса с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

Π”Π΅ΠΌΠΎΠ½, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ S3 API. Π­Ρ‚ΠΎ стандартный S3 API Amazon, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ XML для ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ позволяСт нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚. Нам Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ, всё описано ΠΈ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ.

Π’Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ сСрвисом ΠΌΡ‹ поставили Nginx. Π•Π³ΠΎ ΠΌΡ‹ использовали для Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ†ΠΈΠΈ SSL, балансировки Π½Π°Ρ€ΡƒΠ·ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° Lua (ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, Π»ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ трСйсинг).

Для хранСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… S3 ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Tarantool. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии Π·Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π΅ΠΌΠΎΠ½ S3 Ρ…ΠΎΠ΄ΠΈΠ» Π² эту Π±Π°Π·Ρƒ, сам ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Ρ…Ρ€Π°Π½ΠΈΠ» Π² большом Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ‡Π΅Ρ€Π΅Π· Streamer.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage
Nginx + S3 API + ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль хранСния

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ S3. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π°ΠΊΠ΅Ρ‚ β€” ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘Π°ΠΊΠ΅Ρ‚ адрСсуСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ хоста ΠΈ являСтся ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ сСрвиса. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π±Π°ΠΊΠ΅Ρ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ URL. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” blob, массив Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’Π°ΠΊΠΆΠ΅ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹: имя β€” Ρ‚ΠΎΡ‚ самый URL, ACL (список управлСния доступом), Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ β€” всё это сохраняСтся Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ….

Нормализованная схСма этих Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ: Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π±Π°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ составныС. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΠΎ частям, для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: uploads ΠΈ chunks. Π’Π°ΠΊΠΆΠ΅ Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для доступа ΠΈ Π±ΠΈΠ»Π»ΠΈΠ½Π³.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage
Π‘Ρ…Π΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ b2b-сСрвис с ΠΏΠ»Π°Ρ‚Π½Ρ‹ΠΌ доступом, Ρ‚ΠΎ Π² этой схСмС Π½ΡƒΠΆΠ΅Π½ Π±Ρ‹Π» Π±ΠΈΠ»Π»ΠΈΠ½Π³.
БСрвис Π±ΠΈΠ»Π»ΠΈΠ½Π³Π° ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π½Π° Tarantool.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π”ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°: шаги ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Ρƒ

ΠœΡ‹ ΡƒΠΆΠ΅ сдСлали Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ модСль, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ, Π½ΠΎ для Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².

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

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, систСма Ρ€Π΅ΠΉΡ‚-Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, которая ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° S3.

Π’ΡƒΡ‚ ΠΌΡ‹ снова использовали Tarantool. Π Π΅ΠΉΡ‚-Π»ΠΈΠΌΠΈΡ‚Ρ‹ β€” это кластСр ΠΈΠ· 21 инстанса, инстансы Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹, разнСсСны Π½Π° Ρ‚Ρ€ΠΈ физичСских ΡƒΠ·Π»Π° ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² большой топологичСский кластСр. По Π½Π΅ΠΌΡƒ автоматичСски Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ измСнСния: Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ€Π΅ΠΉΡ‚-Π»ΠΈΠΌΠΈΡ‚Ρ‹, Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρ‹ ΠΈ конфигурация. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΊΠ΅Ρ‚ обслуТиваСтся строго ΠΎΠ΄Π½ΠΈΠΌ инстансом. Когда Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π±Π°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ запрос, для Π½Π΅Π³ΠΎ вычисляСтся инстанс, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° этот Π±Π°ΠΊΠ΅Ρ‚. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… этого ΡƒΠ·Π»Π° производится подсчСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π΅ΠΉΡ‚Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΌΡƒ Π½Π° Token Bucket. Π”Π°Π»Π΅Π΅ систСма Ρ€Π΅ΠΉΡ‚-Π»ΠΈΠΌΠΈΡ‚ΠΎΠ², Π½Π° основании Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ свойств, установлСнных для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π±Π°ΠΊΠ΅Ρ‚Π°, Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос ΠΈΠ»ΠΈ Π½Π΅Ρ‚. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΈΠΌΠΈΡ‚ΠΎΠ² выполняСтся Π½Π° самой Ρ€Π°Π½Π½Π΅ΠΉ стадии выполнСния S3-запроса, защищая всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты систСмы ΠΎΡ‚ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ довольно слоТно ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· кСша. Π’ S3 подразумСваСтся ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это горячСС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ случаС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ обслуТиваСтся ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ: Streamer, FileDB, PairDB, Storage. Но ΠΏΡ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΌΡ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ доступ ΠΊ этому ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ локального кэша.

Кэш многослойный ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ nginx, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…, SSD ΠΈ RAM-дисков. Π’ΡƒΡ‚ ΠΌΡ‹ Π½Π΅ использовали Tarantool, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ‚Π°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΈΡ€ΠΈΠ½Π³ кэша. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ нас ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² 32 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°, Π° Π² Tarantool ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ малСнькиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π­Ρ‚Π° пСрвая систСма, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»ΠΈΡΡŒ, ΠΎΠ±Π»Π°Π΄Π°Π»Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ рассчитанной capacity (Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ), Π΅Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ для исслСдования, понимания ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π”ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ΅Π²ΠΎΠΉ систСмы: Ρ„Π΅ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

БистСма Π±Ρ‹Π»Π° ΡƒΠΆΠ΅ Π² бою, ΠΏΡ€ΠΈ этом Π½Π° стартС ΠΌΡ‹ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ упустили β€” Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π΅ΠΉΠ»ΠΎΠ²Π΅Ρ€ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Наш S3-Π΄Π΅ΠΌΠΎΠ½ Ρ…ΠΎΠ΄ΠΈΠ» Π·Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Tarantool. На мСсто ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΌΡ‹ поставили Tarantool, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выступал Π² Ρ€ΠΎΠ»ΠΈ прокси-Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π° запросов Π·Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния прилоТСния, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ API, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ помСнялось β€” ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π±Π°Π·Π΅ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ Tarantool, Π½ΠΎ Ρ€ΠΎΡƒΡ‚Π΅Ρ€ смог ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ„Π΅ΠΉΠ»ΠΎΠ²Π΅Ρ€. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ смогли ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»Π°, Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΡƒΠ·Ρƒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ… ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΡ€ΠΈ этом само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ β€” это ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. БистСма росла, росло количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ возмоТности для дальнСйшСго роста.

ВСрнСмся ΠΊ схСмС Π΄Π°Π½Π½Ρ‹Ρ…: Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π΅ΡΡ‚ΡŒ Π±Π°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΡ€Π΅Π΄Ρ‹ ΠΈ Π±ΠΈΠ»Π»ΠΈΠ½Π³. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с большой Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ Π² ΠΎΠ±ΠΎΠ·Ρ€ΠΈΠΌΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π΅ вырастут Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ инстанса Π½ΠΈ ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΌΡƒ, Π½ΠΈ ΠΏΠΎ запросам. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΈΡ… Π½Π΅Ρ‚ смысла ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΌΡ‹ вынСсли ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ инстанс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ останСтся Π½Π΅ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ позволяСт Π±ΠΎΠ»Π΅Π΅ консистСнтно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Π±Π°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅ΡΡ‚ΡŒ Сдиная Π½Π΅ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ°.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π’Π°ΠΊΠΆΠ΅ Π² схСмС Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ растут β€” сначала ΠΈΡ… Π±Ρ‹Π»ΠΎ сотни тысяч, сСйчас ΠΈΡ… количСство измСряСтся нСсколькими ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ вмСстС с ΠΈΡ… частями Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ унСсти Π² ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ кластСр.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π‘Ρ…Π΅ΠΌΡƒ ΠΌΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ, Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±Π°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ всСгда ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Π±Π°ΠΊΠ΅Ρ‚Ρƒ, плюс Π½Π° Π±Π°ΠΊΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ACL. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡˆΠ°Ρ€Π΄Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΌΡ‹ Π΄Π΅Ρ€ΠΆΠΈΠΌ Ρ‚Π΅Π½Π΅Π²ΡƒΡŽ копию ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°ΠΊΠ΅Ρ‚Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΎ врСмя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ выполнСния запросов, Π½ΡƒΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ объСм для выполнСния Π±ΠΈΠ»Π»ΠΈΠ½Π³Π°, поэтому Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡˆΠ°Ρ€Π΄Π΅ Π΅ΡΡ‚ΡŒ счСтчики ΠΎΡ‚ Π±ΠΈΠ»Π»ΠΈΠ½Π³Π°.

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ нСсколько Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚:

  • ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ, для уничтоТСния старых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ;
  • ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ основноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° кластСрС;
  • ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ lifecycle β€” ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ унСсли Π½Π° ΡˆΠ°Ρ€Π΄Ρ‹, понадобилась ΡˆΠ°Ρ€Π΄ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ прокси. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΎΡƒΡ‚Π΅Ρ€ ΠΏΠΎΠ΄ эту Ρ€ΠΎΠ»ΡŒ, Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ прокси, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π°Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, позволяСт ΠΈΠ· Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π° Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π½Π΅ думая ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π΅.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ расскаТу, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ взяли Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π° Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΡΡ‚ΠΎΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° устроСна. Π£ нас Π΅ΡΡ‚ΡŒ 256 доступных ΡˆΠ°Ρ€Π΄ΠΎΠ². ΠœΡ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°ΠΊΠ΅Ρ‚Π° выдСляСм Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π΅ΠΊΠΎΠΉ консистСнтной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ просто β€” Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ консистСнтной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСтС ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡˆΠ°Ρ€Π΄Ρƒ, Π²Ρ‹ опрСдСляСтС стартовый ΡˆΠ°Ρ€Π΄ ΠΈ выдСляСтС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:

f(bucket, shards) = subset

Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли Π²Π·ΡΡ‚ΡŒ Π±Π°ΠΊΠ΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ всСгда Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ подмноТСствС ΠΈΠ· всСх ΡˆΠ°Ρ€Π΄ΠΎΠ². Π­Ρ‚ΠΎ позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ влияниС ΠΎΠ΄Π½ΠΈΡ… Π±Π°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ map-reduce запросов, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ листинг ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°ΠΊΠ΅Ρ‚Π°. Для этого Π½Π°Π΄ΠΎ ΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ всС ΡˆΠ°Ρ€Π΄Ρ‹, Π³Π΄Π΅ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ хранятся. Если Π±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π»Π΅ΠΆΠ°Π»ΠΈ Π½Π° всСх ΡˆΠ°Ρ€Π΄Π°Ρ…, любой листинг Π·Π°Π΄Π΅Π²Π°Π» Π±Ρ‹ систСму Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π° здСсь ΠΎΠ½ Π·Π°Π΄Π΅Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ подмноТСство.

Π”Π°Π»Π΅Π΅ β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Π±Π°ΠΊΠ΅Ρ‚Ρƒ, поэтому ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ обращаСмся Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‚ΠΎ обращаСмся Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Π±Π°ΠΊΠ΅Ρ‚Π΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΈΠ· всСго доступного Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡˆΠ°Ρ€Π΄ΠΎΠ², Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· подмноТСства Π΅Π³ΠΎ Π±Π°ΠΊΠ΅Ρ‚Π°:

f(object, subset) = shard

ΠœΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ‚ΡƒΠ΄Π° Π½Π΅ всС ΡˆΠ°Ρ€Π΄Ρ‹, Π° подмноТСство Π΅Π³ΠΎ Π±Π°ΠΊΠ΅Ρ‚Π° β€” ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΡˆΠ°Ρ€Π΄.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π˜Ρ‚Π°ΠΊ, ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½, Π΅ΡΡ‚ΡŒ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ прокси. Π”Π°Π»ΡŒΡˆΠ΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΈΠ· Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π° ΠΈ Π±Π°Π·Ρ‹ с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡˆΠ°Ρ€Π΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ прокси. НапримСр, для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚Π΅Π½Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ β€” ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ создаСм Π±Π°ΠΊΠ΅Ρ‚, основноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ прСдставитСля этого Π±Π°ΠΊΠ΅Ρ‚Π° Π½Π° всСх ΡˆΠ°Ρ€Π΄Π°Ρ…, Π³Π΄Π΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Как ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³

Бамая большая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π° β€” это Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³. Нам Π±Ρ‹Π»ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ систСма ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. ΠŸΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΆΠΈΠ²ΠΎΠΉ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

НиТС схСма нашСго кластСра, которая ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ послС внСдрСния ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π°. Π£ нас Π΅ΡΡ‚ΡŒ nginx, S3 API, Ρ€ΠΎΡƒΡ‚Π΅Ρ€, primary-Π±Π°Π·Π° с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΡˆΠ°Ρ€Π΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ прокси ΠΈ нСпосрСдствСнно ΡˆΠ°Ρ€Π΄Ρ‹

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π’Ρ‹ΡˆΠ΅ я упустил ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ этапС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»Π° продуктовая Π·Π°Π΄Π°Ρ‡Π°: Β«Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Айсбокс, β€” ΠΊΠ°ΠΊ Π₯отбокс, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…Β». По сути, Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π½ΠΎ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ URL ΠΈ Π±Π΅Π· кэшСй.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Icebox использовался мСньшС, Ρ‡Π΅ΠΌ Hotbox, поэтому ΠΎΠ½ довольно Π΄ΠΎΠ»Π³ΠΎ обходился Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Hotbox ΠΈ Icebox Π² ΠΎΠ΄ΠΈΠ½ сСрвис, просто Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² классы хранСния.

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

Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ синхронизировали primary-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π£ нас Π±Ρ‹Π» Tarantool ΠΈ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  • ΠΊ Π±Π°Π·Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ запрос Π½Π° созданиС Π±Π°ΠΊΠ΅Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Hotbox;
  • Tarantool провСряСт Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π°Π·Π΅ (Π² этом случаС β€” Π² Icebox), Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π±Π°ΠΊΠ΅Ρ‚Π° Π½Π΅Ρ‚;
  • Ссли Π±Π°ΠΊΠ΅Ρ‚ Π΅ΡΡ‚ΡŒ, Π±Π°Π·Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСльзя, ΠΈ ΠΎΠ½ синхронизировался ΠΊΠ°ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ.
    АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage
    Бинхронизация Π±Π°ΠΊΠ΅Ρ‚ΠΎΠ²

Π’ Ρ‚ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² сСбя всС Π΄Π°Π½Π½Ρ‹Π΅, Π²Π²Π΅Π»ΠΈ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π±Π°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ, говорящий, Π³Π΄Π΅ хранится этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Он ΠΌΠΎΠ³ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ локально, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Hotbox, Π² Icebox β€” Ρ‚ΠΎΠ³Π΄Π° Π² Π½ΠΎΠ²ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Π² состоянии ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.

Если Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π±Π°ΠΊΠ΅Ρ‚Π° стоял ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Migrating, Ρ‚ΠΎ Π²ΠΎ врСмя ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ запрос выполнялся сначала Π² Π½ΠΎΠ²ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Π° Ссли ΠΈΡ… Ρ‚Π°ΠΌ Π½Π΅ Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ запросы ΠΏΠ΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ»ΠΈΡΡŒ Π½Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ API ΠΌΠΎΠ³ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ запросы Icebox, ΠΈ запросы Hotbox, ΠΌΡ‹ смогли Π±Π΅Π· Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, просто пСрСнСся хосты ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ записи Π² Nginx.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½, Nginx ΠΈ API ΠΎΡ‚ Icebox ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ.
Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΡƒΠ±Ρ€Π°Π»ΠΈ Icebox nginx ΠΈ S3 API β€” ΠΈ всё Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ:

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ запустили Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π°Π·Ρ‹ β€” ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ поэлСмСнтно всС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΈΡ… Π±Π°ΠΊΠ΅Ρ‚Ρ‹, выставляСт для Π½ΠΈΡ… ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Migrating, пСрСносит Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ пСрСноса выставляСт ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Local.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

ПослС пСрСноса Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ староС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΈ ΠΌΡ‹ ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ части старой систСмы, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΈΠ· ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ статуса ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

По Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΈ Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ ΠΈΠ· старого Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅:

  • ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ всС Π±Π°ΠΊΠ΅Ρ‚Ρ‹ ΠΊΠ°ΠΊ Non-sharded. ВсС запросы ΠΊ Π½ΠΈΠΌ шли Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅, Π½Π΅ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
  • НовыС Π±Π°ΠΊΠ΅Ρ‚Ρ‹ создавались сразу Π² статусС Sharded.
  • По ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Ρ€Π°Π»ΠΈ Π±Π°ΠΊΠ΅Ρ‚Ρ‹, ставили статус Migrating ΠΈ пСрСносили Π΄Π°Π½Π½Ρ‹Π΅.

Запросы ΠΏΡ€ΠΈ этом ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ:

  • Π§ΠΈΡ‚Π°Π΅ΠΌ Π² Π½ΠΎΠ²ΠΎΠΌ, ΠΏΠΎΡ‚ΠΎΠΌ Π² старом.
  • Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ.
  • ОбновляСм Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½ΠΎ: Ссли Π² Π½ΠΎΠ²ΠΎΠΌ Π½Π΅Ρ‚, пСрСносим ΠΈΠ· старого Π² Π½ΠΎΠ²Ρ‹ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌ обновляСм.

Π Π°Π±ΠΎΡ‚Π° с SSL-сСртификатами

На Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Nginx. Π’ нашСм случаС это Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Nginx, Π° OpenResty, Nginx с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ LuaJIT.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ кусочСк систСмы β€” Ρ€Π°Π±ΠΎΡ‚Π° с SSL-сСртификатами. Π’ S3-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ собствСнный Π΄ΠΎΠΌΠ΅Π½ для доступа ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Π±Π°ΠΊΠ΅Ρ‚Ρƒ, просто ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ CNAME. Но Π±Π΅Π· HTTPS Π½Π° сСгодняшний дСнь нСльзя: собствСнный Π΄ΠΎΠΌΠ΅Π½ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ собствСнный SSL-сСртификат.

Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Π·Π° балансировку ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ†ΠΈΡŽ SSL Ρƒ нас ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Nginx. Π’ нашСм случаС это Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Nginx, Π° OpenResty, Nginx с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ LuaJIT.

Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π½Π°ΠΌ довольно просто Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ наш Nginx ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ сСртификаты. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ Π½Π°ΠΌ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ сСртификаты динамичСски (Π±Π΅Π· нСобходимости ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ). ΠœΡ‹ воспользовались Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ssl_certificate_by_lua, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ сСртификат ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ источника нСпосрСдствСнно Π²ΠΎ врСмя TLS-Ρ…ΡΠ½Π΄ΡˆΠ΅ΠΉΠΊΠ°. Π’ качСствС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° сСртификатов ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ взяли Tarantool: это позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сСртификатами ΠΈΠ·Π²Π½Π΅ ΠΈ обСспСчиваСт ΠΊΡ€Π°ΠΉΠ½Π΅ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ ΠΎΡ‚Π΄Π°Ρ‡Ρƒ.

Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Π΅ΠΌΠΎΠ½, Π² Π·Π°Π΄Π°Ρ‡Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ рСгулярноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ сСртификатов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ выписаны ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Let’s Encrypt.

АрхитСктура S3: 3 Π³ΠΎΠ΄Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Mail.ru Cloud Storage

Π§Ρ‚ΠΎ Π±Ρ‹ я сохранил, Π° Ρ‡Ρ‚ΠΎ сдСлал ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, Ссли Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π°Π½ΠΎΠ²ΠΎ

Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с самого Π½Π°Ρ‡Π°Π»Π°

Π¨Π°Ρ€Π΄ΠΈΠ½Π³ сразу. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ доставил Ρ€Π΅ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³. Π•Π³ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ссли Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π»ΡƒΡ‡ΡˆΠ΅ сразу Π±Ρ€Π°Ρ‚ΡŒ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ кластСр, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΈ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ΅ ΡƒΠ·Π»ΠΎΠ². РСализация ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π° Π½Π° стартС ΠΏΠΎΡ‡Ρ‚ΠΈ бСсплатная Π² сравнСнии с Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π° Π² Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ систСму.

Π Π°Π±ΠΎΡ‚Π° с Tarantool Ρ‡Π΅Ρ€Π΅Π· балансировщики. БСйчас ΠΌΡ‹ всС Π½ΠΎΠ²Ρ‹Π΅ Π±Π°Π·Ρ‹ сразу ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· балансировщики. Π­Ρ‚ΠΎ позволяСт Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π΄ΠΎΠ±ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ высокой отказоустойчивости.

АвтофСйловСр. Установил Π±Ρ‹ всС инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ для Π°Π²Ρ‚ΠΎΡ„Π΅ΠΉΠ»ΠΎΠ²Π΅Ρ€Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ послС запуска Π±Ρ‹Π»ΠΈ связаны с Π΅Π³ΠΎ отсутствиСм. ПослС ΠΎΠΏΡ‹Ρ‚Π° с S3 всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ этого.

Π€ΠΈΡ‡Π° S3 «ВСрсионированиС». Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ показалось, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ вострСбованная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ систСмы ΠΊΡ€Π°ΠΉΠ½Π΅ слоТно.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±ΠΈΠ»Π»ΠΈΠ½Π³. Π’ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ встроили Π±ΠΈΠ»Π»ΠΈΠ½Π³ Π² Π½Π°ΡˆΡƒ систСму, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ сСбя Π² Π½Π°Ρ‡Π°Π»Π΅, Π½ΠΎ впослСдствии ΠΎΠ½ стал ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ, Π»ΡƒΡ‡ΡˆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΅Π³ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвиса.

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ

МодСль Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ развития сСрвиса ΠΌΡ‹ довольно Ρ‚ΠΎΡ‡Π½ΠΎ совпадаСм с модСлью Π΄Π°Π½Π½Ρ‹Ρ… Amazon, поэтому ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ Ρ„ΠΈΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΌ.

Π‘Ρ…Π΅ΠΌΠ° ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π― Π±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π» Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π½Ρ‹Π΅ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ΠΈ ΠΏΠΎ Π±Π°ΠΊΠ΅Ρ‚Π°ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это позволяСт Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ запросы ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Π±Π°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ кластСру.

ИспользованиС Tarantool. Tarantool сильно ΠΏΠΎΠΌΠΎΠ³ ΠΏΡ€ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ сСрвиса ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΌΡ‹ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, трансформировали ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΏΡ€ΠΈ этом Π½Π΅ понадобилось ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π½Π° слой прилоТСния.

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€ΠΎΠ·Π²ΡƒΡ‡Π°Π» Π½Π° @Databases Meetup by Mail.ru Cloud Solutions&Tarantool. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… выступлСний ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° анонсы мСроприятий Π² Telegram Π’ΠΎΠΊΡ€ΡƒΠ³ Kubernetes Π² Mail.ru Group.

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠΎΠΉ старый Π΄ΠΎΠΊΠ»Π°Π΄ ΠΏΡ€ΠΎ S3 ΠΈΠ»ΠΈ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΏΡ€ΠΎ Π±Π»ΠΎΡ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

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