Museria - дэцэнтралізаванае сховішча музыкі

Museria - дэцэнтралізаванае сховішча музыкі

Сабраўся я аднойчы напісаць дадатак, каб адбіраць музыку для сябе і слухаць дома/на вуліцы/трэніроўках і.т.д. І каб усё гэта працавала ў плыні, з мінімальным маім удзелам. Прыдумаў архітэктуру, накідаў прататып і ў выніку сутыкнуўся з адной "невялікай праблемай".

А незразумела, адкуль браць самі файлы песень. Да гэтага моманту ўкантакце ўжо закрыла api, на буйных музычных парталах таксама ўсё глуха, нават песні аддаюцца кавалкамі, каб не парсілі. Заставаліся толькі нейкія асобныя сайты-аднадзёнкі з тоннай рэкламы і ўсякага смецця, усякія сумнеўныя праграмы-граберы і іншыя "брудныя" варыянты. Увогуле, ніводнага сапраўднага добрага рашэння. Можна, вядома, купіць падпіску на якую-небудзь яндэкс музыку ці падобнае. Але зноў жа, там нідзе няма адчыненага публічнага api і ў цябе няма доступу да музыкі праграмна. Некалькі буйных кампаній, па сутнасці, абмежавалі астатнім доступ да музыкі. Чаму так адбылося ўвогуле? Капнуўшы глыбей, стала зразумела, што асноўная праблема ў аўтарскіх правах. Бягучы рашэнне ў выглядзе падпісак задавальняе многіх камерцыйных аўтараў музычных твораў і гэтыя самыя кампаніі. Пры гэтым некамерцыйная і ўмоўна-камерцыйная музыка таксама трапляюць у агульны спіс. Ты альбо плаціш за ўсё, альбо не слухаеш увогуле нічога.

І я пачаў думаць, што з гэтым усім рабіць. Як можна арганізаваць свабоднае распаўсюджванне музыкі? Што б я рабіў, калі б сам займаўся стварэньнем музыкі і хацеў бы зарабляць на гэтым? Спадабалася б мне, калі б мае песні пачалі распаўсюджваць пірацкай выявай? Якое ўвогуле ёсць альтэрнатыўнае рашэнне?

У выніку склаліся дзве асноўныя праблемы, якія трэба вырашаць:

  • Арганізацыя вольнага распаўсюджвання музыкі зручнымі для большасці людзей метадамі, у тым ліку праграмнымі.
  • Прапанова альтэрнатыў стваральнікам музыкі для заробку

Глабальнае дэцэнтралізаванае сховішча музыкі

Першапачаткова я паспрабаваў знайсці ўжо існуючыя рашэнні і стварыць усё на базе гэтага. Пасля некаторага часу пошукаў, першым спадабаўся ipfs. Я пачаў рэалізацыю сваёй ідэі, але праз некаторы час выявіў некалькі крытычных праблем у гэтым рашэнні:

  • Ipfs - сховішча для ўсяго і ўся. Тут і выявы і музыка і відэа і ўсё што заўгодна. Увогуле-то вялікая такая планетарная «памыйніца». Таму калі ты запускаеш свой вузел, то адразу атрымліваеш вялізную нагрузку. Машына проста курчыцца ад болю.
  • Нейкі недароблены механізм зборкі смецця. Не ведаю як з гэтым зараз, але ў той момант, калі ты ў канфігу прапісваў, што хочаш абмежаваць сховішча дзесяццю гігабайтамі дадзеных, то гэта не значыла нічога. Сховішча разрасталася, ігнаруючы шматлікія параметры канфігурацыі. У выніку, трэба было мець вялікі запас цвёрдай кружэлкі, пакуль ipfs зразумее як ​​скінуць непатрэбнае.
  • На момант выкарыстання бібліятэкі (не ведаю як з гэтым зараз), у кліента не былі рэалізаваны таймаўты. Дасылаеш запыт на атрыманне файла, і калі яго няма, то проста вісіш. Вядома, людзі прыдумалі ўсякія абыходныя шляхі, якія збольшага вырашалі праблему, але гэта было мыліцы. Такія рэчы павінны быць са скрынкі.

Яшчэ было шмат дробных праблем, уражанне склалася тады адназначнае: гэта нельга выкарыстоўваць для праекту. Я працягнуў пошукі сховішча, вывучаў розныя варыянты, але так і не знайшоў нічога прыдатнага.

У выніку вырашыў, што варта паспрабаваць напісаць дэцэнтралізаванае сховішча самому. Няхай яно не будзе прэтэндаваць на ролю міжпланетнага, але будзе вырашаць канкрэтна пастаўленую задачу.

Так і атрымаліся расцякаецца, storacle, metastocle, museria, museria-global.

расцякаецца - гэта асноўны, самы ніжні пласт, які дазваляе аб'ядноўваць вузлы ў сетку. У ім закладзены алгарытм, які я пакуль рэалізаваў часткова з разліку недзе на 10000 сервераў. Поўная версія алгарытму нашмат складаней у рэалізацыі і запатрабавала б яшчэ некалькі дадатковых месяцаў (можа і больш).

Падрабязна я spreadable у гэтым артыкуле не буду апісваць, лепш напішу асобную як-небудзь. Тут толькі адзначу некаторыя асаблівасці:

  • Працуе праз http/https.
  • Можна ствараць асобную сетку пад пэўную задачу, што істотна знізіць нагрузку на кожны асобны праект, чым калі б яны ўсе былі ў адной сетцы.
  • Першапачаткова прадуманы механізм з таймаўтамі і іншымі дробязямі. І гэта працуе для ўсіх метадаў і ў кліенце і ў вузле. Можна гнутка кіраваць параметрамі са свайго прыкладання.
  • Бібліятэка напісана на nodejs. Праблемы з прадукцыйнасцю стэка кампенсуюцца дэцэнтралізаванай прыродай. Нагрузку можна "размазаць", павелічэннем колькасці вузлоў. Узамен шмат плюсаў: велізарная супольнасць, прастата і выгода працы, ізаморфны кліент, адсутнасць вонкавых залежнасцяў і.т.д.

storacle - Гэта пласт, які ўспадкоўваецца ад spreadable, які дазваляе захоўваць у сетцы файлы. Кожны файл мае свой хэш па змесціве, па якім яго пазней і можна атрымаць. Файлы не падзяляюцца на блокі, а захоўваюцца цалкам.

metastocle - пласт, які ўспадкоўваецца ад spreadable, які дазваляе захоўваць у сетцы дадзеныя, але не файлы. Інтэрфейс падобны да nosql базы дадзеных. Можна, напрыклад, дадаць файл у storacle, атрымаць яго хэш і запісаць у metastocle з прывязкай да чаго-небудзь.

museria - успадкоўваецца ад storacle і metastocle. Гэты пласт непасрэдна адказвае за захоўванне музыкі. Сховішча працуе толькі з mp3 файламі і id3 тэгамі.

У якасці «ключа» да песні выкарыстоўваецца яе поўная назва ў выглядзе Выканаўца (TPE1) - Назва (TIT2). напрыклад:

  • Brimstone - The Burden
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Максімальна падрабязна даведацца як фарміруюцца назвы песень можна тут. Трэба глядзець функцыю utils.beautifySongTitle().

Супадзеннем па ключах лічыцца вызначаны ў наладах вузла працэнт. Напрыклад, значэнне 0.85 азначае, што калі функцыя параўнання ключоў (назв песень) выявіла падабенства больш за 85%, то гэта адна і тая ж песня.

Алгарытм вызначэння падабенства там жа, у функцыі utils.getSongSimilarity().

Cover да песні, для наступнага атрымання, таксама прымацоўвацца праз тэгі (APIC). Ва ўтылітах (utils) ёсць усе неабходныя метады для атрымання і апрацоўкі тэгаў.

Прыклад працы са сховішчам праз кліент можна паглядзець у ридми.

Усе вышэйпералічаныя пласты з'яўляюцца самадастатковымі і могуць быць скарыстаны асобна як ніжэйшыя пласты для іншых праектаў. Напрыклад, ужо зараз ёсць думка зрабіць пласт для захоўвання кніг.

museria-global — гэта ўжо сканфігураваны гіт-рэпазітар для запуску ўласнага вузла ў глабальнай сетцы музыкі. Клануеце, npm i && npm start і па сутнасці ўсё. Можна наладзіць больш дэталёва, запусціць у докеры і.т.д. Падрабязная інфармацыя ёсць на гітхабе.

Калі рэпазітар абнаўляецца, трэба абнавіць і свой вузел. Калі змяняецца мажорны ці мінорны нумар версіі, тое гэта дзеянне абавязкова, інакш старыя вузлы будуць ігнаравацца сеткай.

Працаваць з песнямі можна ўручную і праграмна. Кожны вузел запускае сервер для розных задач. У тым ліку, пры наведванні дэфолтнага эндпоінта, вы атрымаеце інтэрфейс для працы з музыкай. Напрыклад, можна зайсці на каранёвы вузел (спасылка можа быць не актуальная пазней, уваходныя вузлы можна атрымаць таксама ў тэлеграме, альбо паглядзець абнаўлення на гітхабе).

Дык вы можаце шукаць і загружаць песні ў сховішча. Загрузка песень можа праходзіць у двух рэжымах: звычайны і які мадэруецца. Другі рэжым азначае, што працу вядзе чалавек, а ня праграма. І калі вы ставіце гэтую галачку пры даданні, тое трэба будзе вырашыць капчу. Песні можна дадаваць з прыярытэтамі -1, 0 ці 1. Прыярытэт 1 можна ставіць толькі ў які мадэруецца рэжыме. Прыярытэты патрэбныя, каб сховішча больш эфектыўна прымала рашэнне, што рабіць, калі вы спрабуеце замяніць ужо існуючую песню новай. Чым больш прыярытэт, тым больш шанцаў, што вы перазапішаце існуючы файл. Гэта дапамагае змагацца са спамам і павялічвае якасць загружаных песень.

Калі вы пачнеце дадаваць песні ў сховішча, старайцеся прымацоўваць і выявы (cover), хоць гэтае поле і не абавязковае. У 99% выпадкаў першыя ж карцінкі ў гугле па назвах песень гэта каверы альбомаў.

Як тэхнічна адбываецца даданне файлаў, у двух словах:

  • Кліент атрымлівае адрас вольнага вузла, які на некаторы час стане каардынатарам.
  • Трыгерыцца функцыя дадання песні (чалавекам або кодам), адбываецца запыт на даданне на эндпоінт каардынатара.
  • Каардынатар вылічае, колькі дублікатаў трэба захаваць (канфігуруемы параметр).
  • Шукаюцца найбольш прыдатныя вузлы для захавання.
  • Файл, непасрэдна, ідзе на гэтыя вузлы.

Як тэхнічна адбываецца атрыманне файлаў:

  • Кліент атрымлівае адрас вольнага вузла, які на некаторы час стане каардынатарам.
  • Трыгерыцца функцыя атрымання песні (чалавекам ці кодам), адбываецца запыт на атрыманне на эндпоінт каардынатара.
  • Каардынатар правярае наяўнасць спасылкі ў кэшы. Калі такая ёсць і яна працоўная, тое адразу вяртаецца кліенту, інакш апытваюцца вузлы на прадмет наяўнасці.
  • Адбываецца атрыманне файла па спасылцы, калі такая знайшлася.

Альтэрнатывы для стваральнікаў музыкі

Мяне заўсёды цікавіла пытанне, як увогуле можна ацаніць аб'ектыўна кошт многіх творчых твораў? Чаму, напрыклад, чалавек выстаўляе свой музычны альбом за 10$? Або за 20$ ці за 100$. Дзе алгарытм? Калі, напрыклад, мы гаворым аб нейкім фізічным прадукце, ці нават многіх відах паслуг, то мы можам як мінімум палічыць сабекошт і зыходзіць з гэтага.

Окей, дапусцім 10 $ паставілі. Ці вельмі гэта эфектыўна? Дапусцім я паслухаў альбом дзе-небудзь ці песню адтуль і вырашыў аддзячыць. Але па маіх адчуваннях і ўласных магчымасцях 3 $ - мая столь. І як тут быць? Хутчэй за ўсё, я проста не зраблю нічога, як і большасць людзей.

Выстаўляючы нейкую фіксаваную цану за творчую працу, ты проста абмяжоўваеш сябе, не даеш большай колькасці людзей адправіць табе меншыя грошы, якія ў суме могуць быць большымі, чым у тых хто купяць па ўсталяваным табой кошце. Мне падаецца творчасць - гэта менавіта тая сфера, дзе ў першую чаргу павінны руліць донаты. Для гэтага трэба:

  • Навучыць людзей дзякаваць менавіта такім чынам. Творцы самі павінны гэта дакладна паказваць, што хацелі б атрымліваць донаты, дадаваць усюды спасылкі на розныя спосабы аплаты і г.д.
  • Трэба больш механізмаў для спрашчэння і ўзмацнення гэтых працэсаў. Напрыклад, стварыць нейкі глабальны сайт, куды можна данажыць за творчасць з дапамогай аўтарскіх спасылак.

    Дапушчальны, спасылка прыкладна такая:

    http://someartistsdonationsite.site/category/artist?external-info

    Калі звузіць да музыкаў, то:

    http://someartistsdonationsite.com/music/miyagi?song=blabla

    Выканаўцу трэба верыфікаваць свой нікнэйм і прымацавацца за ім.

    У кліент museria дадаем функцыю генерацыі падобнай спасылкі, і ўсе праекты якія выкарыстоўваюць сховішча, могуць размясціць на сваіх сайты/прыкладаннях кнопкі для донатаў з гэтымі спасылкамі побач з песнямі. Карыстальнікі маюць магчымасць вельмі хутка і проста зрабіць донат. Натуральна, гэты падыход можна выкарыстоўваць у любым праекце і катэгорыі творчасці, не толькі праз сховішча.

Навошта, менавіта табе, музычнае сховішча, і як у гэтым можна ўдзельнічаць

  • Калі ты працуеш над праектам, звязаным з музыкай, альбо плануеш такі стварыць, то дзеля гэтага ўсё і было задумана. Ты можаш выкарыстоўваць museria для захоўвання і атрымання песень, павялічваючы паток песень у сетцы. Калі, пры гэтым, у цябе ёсць магчымасці падняць і ўтрымліваць хаця б адзін уласны вузел, то гэта будзе найлепшым укладам у развіццё сеткі.
  • Магчыма ты гатовы ўзяць нейкую іншую ролю на сябе: дапамагчы з кодам, ці запаўняць і мадэраваць базу, распаўсюджваць інфармацыю аб праекце сваім знаёмым і.т.д.
  • Можа быць, табе спадабалася ідэя і ты гатовы дапамагчы матэрыяльна, каб гэта ўсё жыло і развівалася. Чым больш вузлоў, тым больш песень.
  • Або табе проста ў нейкі момант спатрэбіцца знайсці і спампаваць песню. Ты зможаш зрабіць гэта вельмі проста, напрыклад, праз тэлеграм бота.

Праект зараз на самай пачатковай стадыі. Запушчана тэставая сетка, вузлы могуць часта перазагружацца, патрабаваць абнаўленняў і т.д. У выпадкі адсутнасці крытычных праблем на працягу ацэначнага перыяду, гэтая ж сетка і трансфармуецца ў асноўную.

Паглядзець інфармацыю аб вузле звонку: колькасць песень, вольнага месца і.т.д., можна па спасылцы выгляду http://node-address/status або http://node-address/status?pretty

Мае кантакты:

Крыніца: habr.com

Дадаць каментар