Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Self-Hosted Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Self-Hosted Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π£Π²Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ сообщСство, эта ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ посвящСна эффСктивному Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΠΈ Π²Ρ‹Π΄Π°Ρ‡Π΅ сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². На Π΄Π°Π½Π½ΠΎΠΌ этапС прСдлагаСтся ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для POSIX совмСстимых Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм с ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π² Ρ‚ΠΎΠΌ числС кластСрных, ΠΈ Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π΄Π°ΠΆΠ΅ ΡƒΠΆΠ΅ Π±Π΅Π· костылСй.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для этой Ρ†Π΅Π»ΠΈ я написал свой собствСнный спСциализированный сСрвСр.
По Ρ…ΠΎΠ΄Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этой Π·Π°Π΄Π°Ρ‡ΠΈ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ экономии дискового пространства ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Ρ‰Π°Π΄Π½ΠΎ потрСбляла наша кластСрная файловая систСма. БобствСнно Ρ‚Π°ΠΊΠΎΠ΅ количСство Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Ρ€Π΅Π΄Π½ΠΎ для любой кластСрной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

ИдСя такая:

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, Ρ‡Π΅Ρ€Π΅Π· сСрвСр Π·Π°Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΠ½ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π°Ρ€Ρ…ΠΈΠ², ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ, Π° большиС Ρ„Π°ΠΉΠ»Ρ‹ кладутся рядом. Π‘Ρ…Π΅ΠΌΠ°: 1 ΠΏΠ°ΠΏΠΊΠ° = 1 Π°Ρ€Ρ…ΠΈΠ², ΠΈΡ‚ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅ΠΌ нСсколько ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² с ΠΌΠ΅Π»ΠΊΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π° Π½Π΅ нСсколько сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ². И всС это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ, Π±Π΅Π· всяких скриптов ΠΈ раскладывания Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ tar/zip Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌ.

ΠŸΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠΊΠΎΡ€ΠΎΡ‡Π΅, Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΠ½ΠΎΡˆΡƒ извинСния Ссли пост Π±ΡƒΠ΄Π΅Ρ‚ Π΅ΠΌΠΊΠΈΠΌ.

ΠΠ°Ρ‡Π°Π»ΠΎΡΡŒ всС с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ подходящСго сСрвСра Π² ΠΌΠΈΡ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠ³ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· HTTP ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π°Ρ€Ρ…ΠΈΠ²Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ нСдостатков присущих ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌ. А ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ поисков стал Ρ€Π°Π·Ρ€ΠΎΡΡˆΠΈΠΉΡΡ Π΄ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΎΠ² Origin кластСр ΠΈΠ· 10 сСрвСров, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ скопилось ΡƒΠΆΠ΅ 250,000,000 ΠΌΠ΅Π»ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π° тСндСнция роста ΠΈ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π»Π°ΡΡŒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ.

Π’Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π΅ Π»ΡŽΠ±ΠΈΡ‚ ΠΈ нСбольшая докумСнтация ΠΏΡ€ΠΎΡ‰Π΅:

сюда и сюда.

И docker Π·Π°ΠΎΠ΄Π½ΠΎ, сСйчас Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСстС с nginx Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π° всякий случай:

docker run -d --restart=always -e host=localhost -e root=/var/storage 
-v /var/storage:/var/storage --name wzd -p 80:80 eltaline/wzd

Π”Π°Π»Π΅Π΅:

Если Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ, самоС ΠΎΠ±ΠΈΠ΄Π½ΠΎΠ΅, Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΈ использовании кластСрной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы (Π² рассматриваСмом случаС β€” MooseFS) Ρ„Π°ΠΉΠ», нСзависимо ΠΎΡ‚ фактичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСгда ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 64 KB. Π’ΠΎ Π΅ΡΡ‚ΡŒ для Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 3, 10 ΠΈΠ»ΠΈ 30 KB Π½Π° дискС трСбуСтся ΠΏΠΎ 64 KB. Если Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π°, ΠΌΡ‹ тСряСм ΠΎΡ‚ 2 Π΄ΠΎ 10 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚. Π”ΠΎ бСсконСчности ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ удастся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ MooseFS Π΅ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

По ΠΌΠ΅Ρ€Π΅ увСличСния количСства Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти для ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΆΠ΅ частыС большиС Π΄Π°ΠΌΠΏΡ‹ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ износу SSD-Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»Π΅ΠΉ.

Π‘Π΅Ρ€Π²Π΅Ρ€ wZD. Наводим порядок Π½Π° дисках.

Π‘Π΅Ρ€Π²Π΅Ρ€ написан Π½Π° языкС Go. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство Ρ„Π°ΠΉΠ»ΠΎΠ². Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π—Π° счёт архивирования, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±Π΅Π· компрСссии, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ мСня Ρ„Π°ΠΉΠ»Ρ‹ это ΡΠΏΠ»ΠΎΡˆΠ½Ρ‹Π΅ ΡƒΠΆΠ°Ρ‚Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡˆΠ»Π° BoltDB, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π»ΠΈΡˆΠ°Ρ‚ΡŒ нСдостатков, это ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π˜Ρ‚ΠΎΠ³ΠΎ вмСсто Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΈ ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΌΠΎΠ΅ΠΌ случаС ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Bolt Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ². Если Π±Ρ‹ Ρƒ мСня Π±Ρ‹Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ структуру наполнСния Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΈ Π΄ΠΎ 1 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° Ρ„Π°ΠΉΠ»ΠΎΠ².

ВсС ΠΌΠ΅Π»ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Bolt Π°Ρ€Ρ…ΠΈΠ²Ρ‹, автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ Π»Π΅ΠΆΠ°Ρ‚, Π° всС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ€ΡΠ΄Ρ‹ΡˆΠΊΠΎΠΌ с Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌΠΈ, ΠΈΡ… Π½Π΅Ρ‚ смысла ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, это настраиваСмо. МалСнькиС β€” Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌ, большиС β€” оставляСм Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ ΠΈ с Ρ‚Π΅ΠΌΠΈ, ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ.

АрхитСктура ΠΈ особСнности сСрвСра wZD.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Self-Hosted Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Linux, BSD, Solaris ΠΈ OSX. Π― тСстировал Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ AMD64 ΠΏΠΎΠ΄ Linux, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ ΠΈ для ARM64, PPC64, MIPS64.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΠΈΡˆΠΊΠΈ:

  • ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ;
  • ΠœΡƒΠ»ΡŒΡ‚ΠΈΡΠ΅Ρ€Π²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ;
  • Максимальная ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°;
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: GET, HEAD, PUT ΠΈ DELETE;
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈ записи Ρ‡Π΅Ρ€Π΅Π· клиСнтскиС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ;
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π³ΠΈΠ±ΠΊΠΎ настраиваСмых Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… хостов;
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° CRC цСлостности Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ записи/Ρ‡Ρ‚Π΅Π½ΠΈΠΈ;
  • ΠŸΠΎΠ»ΡƒΠ΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Ρ‹ для минимального потрСблСния памяти ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ настройки сСтСвой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;
  • ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ компакция Π΄Π°Π½Π½Ρ‹Ρ…;
  • Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ прСдлагаСтся ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ wZA для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π΅Π· остановки сСрвиса.

Π Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚:

Π― Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» ΠΈ тСстировал сСрвСр ΠΈ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ Π½Π° ΠΆΠΈΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… довольно Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя, сСйчас ΠΎΠ½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° кластСрС Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌ 250,000,000 ΠΌΠ΅Π»ΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ), располоТСнных Π² 15,000,000 Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… SATA-дисках. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ ΠΈΠ· 10 сСрвСров прСдставляСт собой Origin-сСрвСр, установлСнный Π·Π° CDN-ΡΠ΅Ρ‚ΡŒΡŽ. Для Π΅Π³ΠΎ обслуТивания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 2 сСрвСра Nginx + 2 сСрвСра wZD.

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

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

Π§Π΅ΠΌ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ‚Π΅ΠΌ быстрСС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с Π½ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ GET ΠΈ PUT. Π‘Ρ€Π°Π²Π½ΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΠ΅ врСмя записи HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π² Bolt Π°Ρ€Ρ…ΠΈΠ²Ρ‹, ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. БравниваСтся Ρ€Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 32 KB, 256 KB, 1024 KB, 4096 KB ΠΈ 32768 KB.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Bolt Π°Ρ€Ρ…ΠΈΠ²Π°ΠΌΠΈ провСряСтся Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ CRC), Π΄ΠΎ записи ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ послС записи происходит считываниС Π½Π° Π»Π΅Ρ‚Ρƒ ΠΈ пСрСсчСт, это СстСствСнно вносит Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ β€” Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ….

ВСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ я ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ» Π½Π° SSD-накопитСлях, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° SATA-дисках тСсты Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹.

Π“Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ тСстирования:

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Self-Hosted Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅
Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Self-Hosted Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Как Π²ΠΈΠ΄Π½ΠΎ, для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ чтСния ΠΈ записи ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π½Π΅Π²Π΅Π»ΠΈΠΊΠ°.

БовсСм ΠΈΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΈ тСстС чтСния ΠΈ записи Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 32 MB:

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сотСн ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Self-Hosted Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² β€” Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… 5-25 мс. Π‘ записью Π΄Π΅Π»Π° обстоят Ρ…ΡƒΠΆΠ΅, Ρ€Π°Π·Π½ΠΈΡ†Π° составляСт ΠΎΠΊΠΎΠ»ΠΎ 150 мс. Но Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈ Π½Π΅ трСбуСтся Π·Π°Π»ΠΈΠ²Π°Ρ‚ΡŒ большиС Ρ„Π°ΠΉΠ»Ρ‹, Π² этом попросту Π½Π΅Ρ‚ смысла, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΆΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ².

*ВСхничСски ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ сСрвСр ΠΈ для Π·Π°Π΄Π°Ρ‡ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… NoSQL.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с wZD сСрвСром:

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:

curl -X PUT --data-binary @test.jpg http://localhost/test/test.jpg

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π° Π² Bolt Π°Ρ€Ρ…ΠΈΠ² (Ссли Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ сСрвСрный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ fmaxsize, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² Π°Ρ€Ρ…ΠΈΠ², Ссли ΠΆΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½, Ρ‚ΠΎ Ρ„Π°ΠΉΠ» загрузится ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рядом с Π°Ρ€Ρ…ΠΈΠ²ΠΎΠΌ):

curl -X PUT -H "Archive: 1" --data-binary @test.jpg http://localhost/test/test.jpg

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° (Ссли Π½Π° дискС ΠΈ Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΏΡ€ΠΈ скачивании ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ отдаётся Π½Π΅ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ):

curl -o test.jpg http://localhost/test/test.jpg

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Bolt Π°Ρ€Ρ…ΠΈΠ²Π° (ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ):

curl -o test.jpg -H "FromArchive: 1" http://localhost/test/test.jpg

ОписаниС Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΅ΡΡ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ДокумСнтация wZD
ДокумСнтация wZA

Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTP, с HTTPS ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ поддСрТиваСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ POST (Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π½ΡƒΠΆΠ΅Π½ ΠΎΠ½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚).

ΠšΡ‚ΠΎ покопаСтся Π² исходном ΠΊΠΎΠ΄Π΅, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Ρ‚Π°ΠΌ ириску, Π΅Π΅ Π½Π΅ всС Π»ΡŽΠ±ΡΡ‚, Π½ΠΎ я Π½Π΅ привязывал основной ΠΊΠΎΠ΄ ΠΊ функциям Π²Π΅Π± Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² дальнСйшСм ΠΌΠΎΠ³Ρƒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ быстро ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π° любой Π΄Π²ΠΈΠΆΠΎΠΊ.

ToDo:

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° собствСнного Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΎΡ€Π° + Π³Π΅ΠΎ для возмоТности использования Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… систСмах Π±Π΅Π· кластСрных Π€Π‘ (Всё ΠΏΠΎ взрослому)
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ рСвСрсивного восстановлСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΠΎΠ»Π½ΠΎΠΉ ΡƒΡ‚Π΅Ρ€Π΅(Π² случаС использования Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΎΡ€Π°)
  • Нативный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для возмоТности использования постоянных сСтСвых соСдинСний ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ языкам программирования
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности использования NoSQL ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ
  • ΠšΠΎΠΌΠΏΡ€Π΅ΡΡΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (gzip, zstd, snappy) для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Bolt Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² ΠΈ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
  • Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Bolt Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² ΠΈ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
  • ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ сСрвСрная Π²ΠΈΠ΄Π΅ΠΎ конвСртация, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° GPU

Π£ мСня всё, надСюсь этот сСрвСр ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ пригодится, лицСнзия BSD-3, ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π³Π΄Π΅ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ, Π½Π΅ написал Π±Ρ‹ ΠΈ сСрвСр. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ я Π² СдинствСнном числС. Π‘ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚Π΅Π»Π΅Π½ Π·Π° Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π±Π°Π³ΠΈ ΠΈ Ρ„ΠΈΡ‡ рСквСсты.

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