Museria - decentraliserad musiklagring

Museria - decentraliserad musiklagring

En dag bestämde jag mig för att skriva en applikation för att välja musik åt mig själv och lyssna på den hemma/på gatan/träningspass osv. Och så att allt detta fungerar i ett flöde, med minimalt deltagande från mig. Jag kom på en arkitektur, skissade på en prototyp och stötte så småningom på ett "litet problem".

Och det är inte klart var man kan få tag i själva låtfilerna. Vid den här tiden hade VKontakte redan stängt api:n, på stora musikportaler var allt också dämpat, till och med låtar gavs ut i bitar för att inte analyseras. Det enda som återstod var några individuella sajter som gick runt på natten med massor av reklam och alla sorters skräp, alla möjliga tvivelaktiga grabberprogram och andra "smutsiga" alternativ. Generellt sett inte en enda riktigt bra lösning. Du kan naturligtvis köpa en prenumeration på lite Yandex-musik eller liknande. Men återigen, det finns ingen öppen publik API någonstans och du har inte tillgång till musik programmatiskt. Flera stora företag har i huvudsak begränsat andras tillgång till musik. Varför hände detta överhuvudtaget? När man grävde djupare blev det tydligt att huvudproblemet var upphovsrätten. Den nuvarande lösningen i form av prenumerationer passar många kommersiella musikförfattare och samma företag. Samtidigt faller även icke-kommersiell och semi-kommersiell musik in i den allmänna listan. Antingen betalar du för allt eller lyssnar på ingenting alls.

Och jag började fundera på vad jag skulle göra med allt detta. Hur kan vi organisera gratis distribution av musik? Vad skulle jag göra om jag skapade musik själv och ville tjäna pengar på det? Skulle jag gilla om mina låtar var piratkopierade? Vilken alternativ lösning finns det ändå?

Som ett resultat finns det två huvudproblem som måste lösas:

  • Organisation av gratis distribution av musik med metoder som är bekväma för de flesta, inklusive programvara.
  • Erbjuder alternativ för musikskapare att tjäna pengar

Global decentraliserad musiklagring

Till en början försökte jag hitta befintliga lösningar och skapa allt utifrån detta. Efter en stunds letande var den första jag gillade ipfs. Jag började implementera min idé, men efter ett tag upptäckte jag flera kritiska problem i denna lösning:

  • Ipfs - förvaring för allt och alla. Det finns bilder och musik och videor och allt du vill ha. I allmänhet en sådan stor planetarisk "soptunna". Därför, när du startar din nod, får du omedelbart en enorm belastning. Bilen bara vrider sig av smärta.
  • Någon form av oavslutad "sopsamlingsmekanism". Jag vet inte hur det är nu, men i det ögonblicket, om du skrev i konfigurationen att du ville begränsa lagringen till tio gigabyte data, så betydde det ingenting. Lagringen växte och ignorerade många konfigurationsparametrar. Som ett resultat var det nödvändigt att ha en enorm reserv av hårddisk tills ipfs kom på hur man återställer det onödiga.
  • Vid tidpunkten för användning av biblioteket (jag vet inte hur det är nu) hade klienten inga timeouts implementerade. Du skickar en begäran om att ta emot en fil, och om den inte finns, hänger du bara. Naturligtvis kom folk på alla möjliga lösningar som delvis löste problemet, men dessa var kryckor. Dessa saker borde komma ur lådan.

Det fanns fortfarande många mindre problem, och intrycket var tydligt: ​​detta kan inte användas för projektet. Jag fortsatte leta efter en lagringsanläggning, utforskade olika alternativ, men hittade aldrig något lämpligt.

Till slut bestämde jag mig för att det var värt att försöka skriva en decentraliserad lagring själv. Även om den inte utger sig för att vara interplanetär, kommer den att lösa ett specifikt problem.

Och så blev det spridbar, förråd, metastokel, museria, museria-global.

spridbar - detta är det huvudsakliga, lägsta lagret som låter dig kombinera noder till ett nätverk. Den innehåller en algoritm, som jag hittills har implementerat delvis baserat på cirka 10000 XNUMX servrar. Den fullständiga versionen av algoritmen är mycket svårare att implementera och skulle kräva ytterligare flera månader (kanske mer).

Jag kommer inte att beskriva spridbar i detalj i den här artikeln; det är bättre att skriva en separat någon gång. Här kommer jag bara att notera några funktioner:

  • Fungerar via http/https.
  • Du kan skapa ett separat nätverk för en specifik uppgift, vilket avsevärt kommer att minska belastningen på varje enskilt projekt än om de alla var på samma nätverk.
  • En mekanism med timeouts och andra småsaker var till en början genomtänkt. Och detta fungerar för alla metoder både i klienten och i noden. Du kan flexibelt hantera inställningar från din applikation.
  • Biblioteket är skrivet i nodejs. Stackens prestandaproblem kompenseras av dess decentraliserade karaktär. Belastningen kan "spridas ut" genom att öka antalet noder. I gengäld finns det många fördelar: en enorm gemenskap, enkelhet och användarvänlighet, en isomorf klient, inga externa beroenden osv.

förråd är ett lager som är ärvt från spreadable som låter dig lagra filer i nätverket. Varje fil har sin egen hash av sitt innehåll, som kan användas för att hämta den senare. Filer är inte uppdelade i block, utan lagras helt.

metastokel - ett lager som ärvt från spridbar, vilket gör att du kan lagra data på nätverket, men inte filer. Gränssnittet liknar en Nosql-databas. Du kan till exempel lägga till en fil i Storacle, hämta dess hash och skriva den till metastocle med en länk till något.

museria - ärvt från lager och metastokel. Detta lager är direkt ansvarigt för att lagra musik. Lagringen fungerar endast med mp3-filer och id3-taggar.

Som en "nyckel" till låten används dess fullständiga namn i formuläret Artist (TPE1) - Titel (TIT2). Till exempel:

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

Du kan ta reda på så detaljerat som möjligt hur låttitlar bildas. här. Du måste titta på funktionen utils.beautifySongTitle().

Procentandelen matchningar som definieras i nodinställningarna anses vara en matchning. Till exempel betyder ett värde på 0.85 att om tangentjämförelsefunktionen (låtnamn) hittade en likhet på mer än 85 %, så är det samma låt.

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

Cover till låten, för senare mottagande, kan även bifogas via taggar (APIC). Verktyg har alla nödvändiga metoder för att ta emot och bearbeta taggar.

Ett exempel på att arbeta med lagring genom en klient finns i readme.

Alla ovanstående lager är fristående och kan användas separat som undre lager för andra projekt. Det finns till exempel redan en idé att göra ett lager för förvaring av böcker.

museria-global är ett redan konfigurerat git-förråd för att starta din egen nod i det globala musiknätverket. Kloning npm i && npm börja och det är i princip allt. Du kan konfigurera det mer i detalj, köra det i Docker, etc. Detaljerad information finns på github.

När förvaret är uppdaterat måste du uppdatera din nod. Om det stora eller mindre versionsnumret ändras är denna åtgärd obligatorisk, annars kommer de gamla noderna att ignoreras av nätverket.

Du kan arbeta med låtar manuellt och programmatiskt. Varje nod kör 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. Du kan till exempel gå till rotnod (länken kanske inte är relevant senare, ingångsnoder kan också erhållas i telegram, eller leta efter uppdateringar på Github).

På så sätt kan du söka och ladda upp låtar till lagringen. Uppladdning av låtar kan ske i två lägen: normal och modererad. Det andra läget innebär att arbetet utförs av en person, inte ett program. Och om du markerar den här rutan när du lägger till måste du lösa captcha. Låtar kan läggas till med prioritet -1, 0 eller 1. Prioritet 1 kan endast ställas in i modererat läge. Prioriteringar behövs så att lagringen mer effektivt kan bestämma vad som ska göras när du försöker ersätta en befintlig låt med en ny. Ju högre prioritet, desto mer sannolikt är det att du skriver över en befintlig fil. Detta hjälper till att bekämpa spam och ökar kvaliteten på nedladdade låtar.

Om du börjar lägga till låtar till din lagring, försök att bifoga bilder (omslag), även om detta fält inte är obligatoriskt. I 99 % av fallen är de första bilderna på Google baserade på låttitlar skivomslag.

Hur tekniskt lägger till filer sker, i ett nötskal:

  • Klienten får adressen till en ledig nod, som kommer att bli koordinator ett tag.
  • Funktionen att lägga till en låt utlöses (av en person eller kod), och en begäran görs om att lägga till en koordinator till slutpunkten.
  • Koordinatorn beräknar hur många dubbletter som ska lagras (konfigurerbar parameter).
  • De mest lämpliga noderna för att spara genomsöks.
  • Filen går direkt till dessa noder.

Hur tekniskt filerna tas emot:

  • Klienten får adressen till en ledig nod, som kommer att bli koordinator ett tag.
  • Funktionen att ta emot en låt (av en person eller en kod) utlöses och en begäran görs om att ta emot den vid koordinatorns slutpunkt.
  • Koordinatorn kontrollerar om länken finns i cachen. Om det finns en och den fungerar, returneras den omedelbart till klienten, annars avfrågas noderna för tillgänglighet.
  • Filen tas emot från länken, om en hittas.

Alternativ för musikskapare

Jag har alltid varit intresserad av frågan om hur man objektivt kan utvärdera värdet av många kreativa verk? Varför, till exempel, erbjuder en person sitt musikalbum för $10? Antingen för $20 eller $100. Var är algoritmen? När vi till exempel pratar om någon fysisk produkt, eller till och med många typer av tjänster, då kan vi åtminstone räkna ut kostnaden och utgå från det.

Okej, låt oss säga att vi satsar $10. Är detta mycket effektivt? Låt oss säga att jag lyssnade på ett album någonstans eller en låt därifrån och bestämde mig för att visa min tacksamhet. Men enligt mina känslor och min egen förmåga är $3 mitt tak. Så vad ska vi göra? Troligtvis kommer jag bara inte att göra någonting, som de flesta andra.

Genom att sätta något slags fast pris för kreativt arbete begränsar du helt enkelt dig själv, vilket förhindrar att ett större antal personer skickar dig mindre pengar, vilket totalt sett kan vara mer imponerande än de som kommer att köpa till det pris du anger. Det förefaller mig som att kreativitet är precis det område där donationer bör styra först. För att göra detta behöver du:

  • Lär människor att tacka på det här sättet. Skaparna själva måste tydligt visa att de skulle vilja ta emot donationer, lägga till länkar till olika betalningsmetoder överallt osv.
  • Det behövs fler mekanismer för att förenkla och stärka dessa processer. Skapa till exempel någon form av global webbplats där du kan donera för kreativitet med hjälp av upphovsrättslänkar.

    Låt oss säga att länken är ungefär så här:

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

    Om vi ​​begränsar det till musiker, då:

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

    Utövaren måste verifiera sitt smeknamn och bifoga det.

    Vi lägger till en funktion för att generera en sådan länk till museria-klienten, och alla projekt som använder arkivet kan placera donationsknappar med dessa länkar bredvid låtarna på sina webbplatser/applikationer. Användare har möjlighet att göra en donation mycket snabbt och enkelt. Naturligtvis kan detta tillvägagångssätt användas i alla projekt och kategorier av kreativitet, inte bara genom lagring.

Varför behöver du just en musiklagringsanläggning och hur kan du delta i den?

  • Om du arbetar med ett projekt relaterat till musik, eller planerar att skapa ett, så är det detta som allt var tänkt för. Du kan använda museria för att lagra och hämta låtar, vilket ökar flödet av låtar online. Om du samtidigt har förmågan att höja och hålla minst en egen nod, då kommer detta att vara det bästa bidraget till utvecklingen av nätverket.
  • Kanske är du redo att ta på dig någon annan roll: hjälpa till med koden, eller fyll i och moderera databasen, distribuera information om projektet till dina vänner, etc.
  • Kanske gillade du idén och är redo att hjälpa till ekonomiskt så att det hela lever och utvecklas. Ju fler noder, desto fler låtar.
  • Eller så behöver du bara hitta och ladda ner en låt någon gång. Du kan göra detta mycket enkelt, till exempel genom telegram bot.

Projektet är nu i början. Ett testnätverk har lanserats, noder kan starta om ofta, kräva uppdateringar etc. Om det inte finns några kritiska problem under utvärderingsperioden, omvandlas samma nätverk till det huvudsakliga.

Du kan se information om noden från utsidan: antalet låtar, ledigt utrymme, etc., med hjälp av en länk som http://node-address/status eller http://node-address/status?pretty

Mina kontakter:

Källa: will.com

Lägg en kommentar