Museria — ett decentraliserat musikarkiv

Museria — ett decentraliserat musikarkiv

En gÄng bestÀmde jag mig för att skriva en applikation för att vÀlja musik för mig sjÀlv att lyssna pÄ hemma, ute, under trÀning osv. Jag skissade en arkitektur, ritade en prototyp och stötte slutligen pÄ ett 'litet problem'.

Men det var oklart var jag skulle hÀmta sjÀlva lÄtarna ifrÄn. Vid det hÀr laget hade VKontakte redan stÀngt sitt API, och pÄ stora musikportaler var allt ocksÄ dött, till och med lÄtarna delades upp i bitar för att förhindra parsning. Det fanns bara nÄgra enskilda engÄngssidor med massor av reklam och skrÀp, diverse tveksamma program för nedladdning och andra 'smutsiga' alternativ. I allmÀnhet fanns det inget verkligt bra alternativ. Man kan förstÄs köpa en prenumeration pÄ nÄgon typ av Yandex Musik eller liknande. Men Äterigen, det finns ingen öppen offentlig API dÀr och du har inget programmeringsmÀssigt tillgÄng till musiken. Flera stora företag har i praktiken begrÀnsat tillgÄngen till musiken för andra. Varför hÀnde detta överhuvudtaget? NÀr jag grÀvde djupare blev det tydligt att det frÀmsta problemet ligger i upphovsrÀtten. Den nuvarande lösningen i form av prenumerationer passar mÄnga kommersiella upphovsmÀn till musikverk och dessa företag. Samtidigt hamnar ocksÄ icke-kommersiell och villkorligt kommersiell musik i den allmÀnna listan. Antingen betalar du för allt, eller sÄ lyssnar du överhuvudtaget inte pÄ nÄgot.

Och jag började tÀnka pÄ vad jag skulle göra med allt detta. Hur kan man organisera fri spridning av musik? Vad skulle jag göra om jag sjÀlv sysslade med musikskapande och ville tjÀna pengar pÄ det? Skulle jag gilla om mina lÄtar började spridas pÄ pirat sÀtt? Vad finns det för alternativa lösningar?

I slutÀndan formades tvÄ huvudproblem som mÄste lösas:

  • Att organisera fri spridning av musik med metoder som Ă€r bekvĂ€ma för de flesta mĂ€nniskor, inklusive programvarubaserade.
  • Att erbjuda alternativ för skapare av musik för att tjĂ€na pengar.

En global, decentraliserad musiklagring.

Inledningsvis försökte jag hitta redan existerande lösningar och skapa allt baserat pÄ detta. Efter en tid av sökande, fastnade jag först för ipfs. Jag började implementera min idé, men efter ett tag upptÀckte jag flera kritiska problem med denna lösning:

  • Ipfs — ett lagringssystem för allt och alla. HĂ€r finns bilder, musik, video och allt möjligt. I stort sett en stor planetarisk "soptipp". SĂ„ nĂ€r du startar din nod sĂ„ fĂ„r du omedelbart en stor belastning. Maskinen knĂ€ar under trycket.
  • En slags ofullstĂ€ndig samlingsmekanism för "skrĂ€p". Jag vet inte hur det Ă€r nu, men dĂ„, om du i konfigurationsfilen angav att du ville begrĂ€nsa lagringen till tio gigabyte data, betydde det ingenting. Lagringen vĂ€xte, medan mĂ„nga konfigurationsparametrar ignorerades. Till slut behövde man ha en stor mĂ€ngd hĂ„rddiskutrymme tills ipfs lyckades förstĂ„ hur man skulle slĂ€ppa överflöden.
  • Vid tidpunkten för anvĂ€ndningen av biblioteket (jag vet inte hur det Ă€r nu) hade klienten inte implementerat tidsgrĂ€nser. Du skickade en begĂ€ran om att hĂ€mta en fil, och om den inte fanns sĂ„ stod du bara stilla. SjĂ€lvklart hade mĂ€nniskor kommit pĂ„ diverse lösningar som delvis löste problemet, men det var nödlösningar. SĂ„dana funktioner borde finnas frĂ„n början.

Det fanns ocksÄ mÄnga smÄproblem, och intrycket blev dÄ entydigt: detta gÄr inte att anvÀnda för ett projekt. Jag fortsatte leta efter lagringslösningar och utforskade olika alternativ, men hittade inget passande.

Till slut bestĂ€mde jag mig för att försöka skriva ett decentraliserat lagringssystem sjĂ€lv. Även om det inte kommer att pĂ„stĂ„ sig vara interplanetariskt, kommer det att lösa en specifik uppgift.

SĂ„ blev det till spreadable, storacle, metastocle, museria, museria-global.

spreadable — det Ă€r det grundlĂ€ggande, nedersta lagret som gör det möjligt att sammanlĂ€nka noder i ett nĂ€tverk. Det innehĂ„ller en algoritm som jag hittills har delvis implementerat med antagande om cirka 10 000 servrar. Den kompletta versionen av algoritmen Ă€r mycket mer komplex och skulle krĂ€va ytterligare nĂ„gra mĂ„nader (kanske mer).

Jag kommer inte att beskriva spreadable i detalj i denna artikel; istÀllet skriver jag hellre en separat artikel nÄgon gÄng. HÀr vill jag bara nÀmna nÄgra egenskaper:

  • Den fungerar via http/https.
  • Det Ă€r möjligt att skapa ett separat nĂ€tverk för en specifik uppgift, vilket avsevĂ€rt minskar belastningen pĂ„ varje enskilt projekt jĂ€mfört med om de alla befann sig i samma nĂ€tverk.
  • En mekanism med tidsgrĂ€nser och andra smĂ„saker var ursprungligen genomtĂ€nkt. Och det fungerar för alla metoder, bĂ„de i klienten och i noden. Man kan flexibelt styra parametrarna frĂ„n sin applikation.
  • Biblioteket Ă€r skrivet i nodejs. Prestandaproblemen i stacken kompenseras av den decentraliserade naturen. Belastningen kan "spridas ut" genom att öka antalet noder. I gengĂ€ld finns det mĂ„nga fördelar: en stor gemenskap, enkelhet och anvĂ€ndarvĂ€nlighet, isomorfisk klient, avsaknad av externa beroenden, etc.

storacle — Ă€r ett lager som Ă€rvt frĂ„n spreadable, vilket möjliggör lagring av filer i nĂ€tverket. Varje fil har sin egen hash som baseras pĂ„ innehĂ„llet, vilket gör att den senare kan hĂ€mtas. Filer delas inte upp i block utan lagras i sin helhet.

metastocle — ett lager som Ă€rvt frĂ„n spreadable, vilket möjliggör lagring av data i nĂ€tverket, men inte filer. GrĂ€nssnittet liknar nosql-databaser. Man kan till exempel lĂ€gga till en fil i storacle, hĂ€mta dess hash och skriva den i metastocle kopplad till nĂ„got.

museria — Ă€rver frĂ„n storacle och metastocle. Detta lager ansvarar direkt för lagring av musik. Lagringen fungerar endast med mp3-filer och id3-taggar.

Som "nyckel" till lĂ„ten anvĂ€nds dess fullstĂ€ndiga namn i form av Artist (TPE1) — Titel (TIT2)Juniper (MX/QFX/ACX)

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

För att fÄ maximal information om hur lÄt titlar bildas, kan man ). Ett typiskt exempel pÄ anvÀndning:. Man behöver kolla pÄ funktionen utils.beautifySongTitle().

En överensstÀmmelse baserad pÄ nycklar anses vara den procentandel som definieras i nodens instÀllningar. Till exempel, om vÀrdet 0,85 anges, betyder det att om nyckeljÀmförelsefunktionen (lÄt titlar) upptÀckte en likhet pÄ mer Àn 85%, sÄ Àr det samma lÄt.

Algoritmen för att bestÀmma likhet finns ocksÄ dÀr, i funktionen utils.getSongSimilarity().

Omslaget till lÄten, för senare hÀmtning, ska ocksÄ kopplas via taggar (APIC). I verktygen (utils) finns alla nödvÀndiga metoder för att hÀmta och bearbeta taggar.

Exempel pÄ hur man arbetar med lagringen via klienten kan ses i readme.

Alla ovan nÀmnda lager Àr sjÀlvförsörjande och kan anvÀndas separat som lÀgre lager för andra projekt. Till exempel finns det redan tankar pÄ att skapa ett lager för lagring av böcker.

museria-global — det hĂ€r Ă€r redan en konfigurerad git-repository för att starta en egen nod i det globala musiknĂ€tverket. Klona, npm i && npm start och i princip Ă€r det allt. Man kan konfigurera mer i detalj, starta i Docker, etc. Det finns detaljerad information pĂ„ GitHub.

NÀr ett repo uppdateras mÄste Àven din nod uppdateras. Om huvud- eller minorversionsnumret förÀndras Àr denna ÄtgÀrd obligatorisk, annars kommer gamla noder att ignoreras av nÀtverket.

Arbeta med lÄtar kan göras manuellt eller programmÀssigt. Varje nod startar en server för olika uppgifter. NÀr du besöker standardÀndpunkten fÄr du ett grÀnssnitt för att arbeta med musik. Till exempel kan du gÄ till rotnoden (lÀnken kan bli obsolet senare, ingÄngsnoder kan Àven erhÄllas via telegram, eller se uppdateringar pÄ GitHub).

PÄ sÄ sÀtt kan du söka och ladda ner lÄtar till lagret. Uppladdning av lÄtar kan ske i tvÄ lÀgen: vanligt och modererat. Det andra lÀget innebÀr att en mÀnniska, och inte ett program, hanterar arbetet. Om du markerar denna ruta vid tillÀgg mÄste du lösa en captcha. LÄtar kan lÀggas till med prioriteter -1, 0 eller 1. Prioritet 1 kan endast anges i det modererade lÀget. Prioriteter behövs för att lagret bÀttre ska kunna avgöra vad som ska göras nÀr du försöker ersÀtta en redan existerande lÄt med en ny. Ju högre prioritet, desto större chans att du överskrider den befintliga filen. Detta hjÀlper till att bekÀmpa spam och ökar kvaliteten pÄ de uppladdade lÄtarna.

Om du börjar lÀgga till lÄtar i lagret, försök Àven att bifoga bilder (cover), Àven om detta fÀlt inte Àr obligatoriskt. I 99% av fallen Àr de första bilderna du hittar pÄ Google med lÄttitlar albumcovers.

SÄ hÀr sker tekniskt tillÀgget av filer, i korthet:

  • Klienten fĂ„r adressen till en ledig nod som för en tid kommer att fungera som koordinator.
  • Funktionen för att lĂ€gga till en lĂ„t triggas (av en mĂ€nniska eller kod), en begĂ€ran om tillĂ€gg skickas till koordinatorns Ă€ndpunkt.
  • Koordinatorn berĂ€knar hur mĂ„nga dubbletter som ska sparas (konfigurerbar parameter).
  • De mest lĂ€mpliga noderna för lagring söks.
  • Filen gĂ„r direkt till dessa noder.

SÄ hÀr sker tekniskt hÀmtning av filer:

  • Klienten fĂ„r adressen till en ledig nod som för en tid kommer att fungera som koordinator.
  • Funktionen för att hĂ€mta en lĂ„t triggas (av en mĂ€nniska eller kod), en begĂ€ran om hĂ€mtning skickas till koordinatorns Ă€ndpunkt.
  • Koordinatorn kontrollerar om det finns en lĂ€nk i cachen. Om den finns och fungerar Ă„terstĂ€lls den omedelbart till klienten, annars frĂ„gas noderna om de har den.
  • Filen hĂ€mtas via lĂ€nken, om en sĂ„dan finns.

Alternativ för musikskapare

Jag har alltid undrat hur man objektivt kan vÀrdera mÄnga kreativa verk. Varför sÀtter en person till exempel sitt musikalbum till 10$? Eller 20$ eller 100$. Vad Àr algoritmen? NÀr vi pratar om en fysisk produkt, eller till och med mÄnga typer av tjÀnster, kan vi Ätminstone rÀkna kostnaden och utgÄ frÄn det.

Okej, lĂ„t oss sĂ€ga att 10$ Ă€r satt. Är det verkligen effektivt? LĂ„t sĂ€ga att jag lyssnar pĂ„ ett album nĂ„gonstans eller en lĂ„t dĂ€rifrĂ„n och beslutar att tacka. Men utifrĂ„n mina kĂ€nslor och min egen ekonomi Ă€r 3$ min grĂ€ns. Vad ska jag göra dĂ„? Antagligen kommer jag bara inte att göra nĂ„got, precis som de flesta.

Genom att sÀtta ett fast pris för kreativt arbete begrÀnsar du dig sjÀlv, du ger inte fler mÀnniskor möjlighet att skicka mindre pengar, vilket i summan kan bli mer Àn de som köper till det pris du satt. Jag tror att kreativitet Àr just den sfÀren dÀr donationer frÀmst bör styra. För detta behövs:

  • Att lĂ€ra mĂ€nniskor att tacka pĂ„ detta sĂ€tt. Skaparena sjĂ€lva mĂ„ste tydligt visa att de vill ta emot donationer, lĂ€gga till lĂ€nkar till olika betalningsmetoder överallt osv.
  • Fler mekanismer behövs för att förenkla och stĂ€rka dessa processer. Till exempel, skapa en global webbplats dĂ€r man kan donera för kreativitet genom egna lĂ€nkar.

    LÄt oss sÀga att lÀnken ser ungefÀr ut sÄ hÀr:

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

    Om vi smalnar av det till musiker, dÄ:

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

    Artisten behöver verifiera sitt anvÀndarnamn och koppla det till sig.

    I klienten museria lÀgger vi till en funktion för att generera liknande lÀnkar, och alla projekt som anvÀnder lagringen kan placera knappar för donationer med dessa lÀnkar bredvid lÄtarna pÄ sina webbplatser/appar. AnvÀndare har möjlighet att mycket snabbt och enkelt göra en donation. SjÀlvklart kan denna metod anvÀndas i vilket projekt och kategori av kreativitet som helst, inte bara genom lagringen.

Varför, just för dig, ett musiklagringsutrymme, och hur kan man delta i detta?

  • Om du arbetar med ett projekt relaterat till musik, eller planerar att skapa ett sĂ„dant, sĂ„ Ă€r det precis dĂ€rför detta har skapats. Du kan anvĂ€nda museria för att lagra och hĂ€mta lĂ„tar, vilket ökar flödet av lĂ„tar pĂ„ nĂ€tet. Om du dessutom har möjlighet att starta och upprĂ€tthĂ„lla Ă„tminstone en egen nod, sĂ„ kommer det att vara det bĂ€sta bidraget till nĂ€tverkets utveckling.
  • Kanske Ă€r du redo att ta pĂ„ dig en annan roll: hjĂ€lpa till med koden, eller fylla i och moderera databasen, sprida information om projektet till dina bekanta, osv.
  • Kanske gillar du idĂ©n och Ă€r villig att bidra ekonomiskt sĂ„ att allt kan leva vidare och utvecklas. Ju fler noder, desto fler lĂ„tar.
  • Eller sĂ„ kan du bara behöva hitta och ladda ner en lĂ„t vid nĂ„got tillfĂ€lle. Du kan enkelt göra det, till exempel genom telegrambotten.

Projektet Àr just nu i ett mycket tidigt skede. Ett testnÀt har startats, noderna kan ofta startas om, krÀva uppdateringar, osv. Om det inte uppstÄr nÄgra kritiska problem under den uppskattade perioden, kommer det hÀr nÀtverket ocksÄ att omvandlas till en huvudnÀt.

Du kan se information om noden utifrÄn: antal lÄtar, ledigt utrymme osv., pÄ en lÀnk av typen http://node-address/status eller http://node-address/status?pretty

Mina kontaktuppgifter:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster