Museria - desentralisert musikklagring

Museria - desentralisert musikklagring

En dag bestemte jeg meg for å skrive en applikasjon for å velge musikk for meg selv og lytte til den hjemme/på gaten/trening osv. Og slik at alt dette fungerer i en flyt, med minimal deltakelse fra meg. Jeg kom opp med en arkitektur, skisserte en prototype og fikk til slutt et "lite problem".

Og det er ikke klart hvor du kan få tak i selve sangfilene. På dette tidspunktet hadde VKontakte allerede stengt api, på store musikkportaler var alt også dempet, til og med sanger ble gitt ut i stykker for ikke å bli analysert. Alt som gjensto var noen individuelle fly-by-night nettsteder med massevis av reklame og all slags søppel, alle slags tvilsomme grabberprogrammer og andre "skitne" alternativer. Generelt sett ikke en eneste virkelig god løsning. Du kan selvfølgelig kjøpe et abonnement på litt Yandex-musikk eller lignende. Men igjen, det er ingen åpen offentlig API noe sted, og du har ikke tilgang til musikk programmatisk. Flere store selskaper har i hovedsak begrenset andres tilgang til musikk. Hvorfor skjedde dette i det hele tatt? Ved å grave dypere ble det klart at hovedproblemet var opphavsrett. Dagens løsning i form av abonnement passer mange kommersielle musikkforfattere og de samme selskapene. Samtidig faller ikke-kommersiell og semi-kommersiell musikk inn på den generelle listen. Du betaler enten for alt eller hører ingenting i det hele tatt.

Og jeg begynte å tenke på hva jeg skulle gjøre med alt dette. Hvordan kan vi organisere gratis distribusjon av musikk? Hva ville jeg gjort hvis jeg laget musikk selv og ønsket å tjene penger på det? Ville jeg likt det hvis sangene mine var piratkopiert? Hvilken alternativ løsning er det uansett?

Som et resultat er det to hovedproblemer som må løses:

  • Organisering av gratis distribusjon av musikk ved hjelp av metoder som er praktiske for de fleste, inkludert programvare.
  • Tilbyr alternativer for musikkskapere å tjene penger

Global desentralisert musikklagring

I utgangspunktet prøvde jeg å finne eksisterende løsninger og lage alt basert på dette. Etter en stund med leting var den første jeg likte ipfs. Jeg begynte å implementere ideen min, men etter en stund oppdaget jeg flere kritiske problemer i denne løsningen:

  • Ipfs - lagring for alt og alle. Det er bilder og musikk og videoer og alt du vil ha. Generelt en så stor planetarisk "søppelkasse". Derfor, når du starter noden din, mottar du umiddelbart en enorm belastning. Bilen bare vrir seg i smerte.
  • En slags uferdig "søppel"-oppsamlingsmekanisme. Jeg vet ikke hvordan det er nå, men i det øyeblikket, hvis du skrev i konfigurasjonen at du ønsket å begrense lagringen til ti gigabyte med data, så betydde det ingenting. Lagringen vokste og ignorerte mange konfigurasjonsparametere. Som et resultat var det nødvendig å ha en enorm reserve av harddisk til ipfs fant ut hvordan de skulle tilbakestille det unødvendige.
  • På tidspunktet for bruk av biblioteket (jeg vet ikke hvordan det er nå), hadde ikke klienten tidsavbrudd implementert. Du sender en forespørsel om å motta en fil, og hvis den ikke eksisterer, så henger du bare. Selvfølgelig kom folk opp med alle slags løsninger som delvis løste problemet, men dette var krykker. Disse tingene bør komme ut av esken.

Det var fortsatt mange mindre problemer, og inntrykket var tydelig: dette kan ikke brukes til prosjektet. Jeg fortsatte å lete etter et lagringsanlegg, utforsket forskjellige alternativer, men fant aldri noe passende.

Til slutt bestemte jeg meg for at det var verdt å prøve å skrive en desentralisert lagring selv. Selv om den ikke utgir seg for å være interplanetær, vil den løse en spesifikk oppgave.

Og slik ble det spredbar, lager, metastokel, museria, museria-global.

spredbar - dette er det viktigste, laveste laget som lar deg kombinere noder til et nettverk. Den inneholder en algoritme, som jeg så langt har implementert delvis basert på ca 10000 XNUMX servere. Den fullstendige versjonen av algoritmen er mye vanskeligere å implementere og vil kreve flere måneder (kanskje mer).

Jeg vil ikke beskrive spredbar i detalj i denne artikkelen; det er bedre å skrive en separat en dag. Her vil jeg bare legge merke til noen funksjoner:

  • Fungerer via http/https.
  • Du kan opprette et eget nettverk for en spesifikk oppgave, noe som vil redusere belastningen på hvert enkelt prosjekt betydelig enn om de alle var på samme nettverk.
  • En mekanisme med timeouts og andre småting var i utgangspunktet tenkt ut. Og dette fungerer for alle metoder både i klienten og i noden. Du kan fleksibelt administrere innstillinger fra applikasjonen din.
  • Biblioteket er skrevet i nodejs. Stakkens ytelsesproblemer oppveies av dens desentraliserte natur. Belastningen kan "spres ut" ved å øke antall noder. Til gjengjeld er det mange fordeler: et stort fellesskap, enkelhet og brukervennlighet, en isomorf klient, ingen eksterne avhengigheter osv.

lager er et lag som er arvet fra spreadable som lar deg lagre filer på nettverket. Hver fil har sin egen hash av innholdet, som kan brukes til å hente den senere. Filer er ikke delt inn i blokker, men lagres i sin helhet.

metastokel - et lag som er arvet fra spreadable, som lar deg lagre data på nettverket, men ikke filer. Grensesnittet ligner på en Nosql-database. Du kan for eksempel legge til en fil i Storacle, hente hashen og skrive den til metastocle med en lenke til noe.

museria - arvet fra lageracle og metastocle. Dette laget er direkte ansvarlig for lagring av musikk. Lagringen fungerer kun med mp3-filer og id3-tagger.

Som en "nøkkel" til sangen brukes dens fulle navn i skjemaet Artist (TPE1) – Tittel (TIT2). For eksempel:

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

Du kan finne ut så detaljert som mulig hvordan sangtitler dannes. her. Du må se på funksjonen utils.beautifySongTitle().

Prosentandelen av samsvar som er definert i nodeinnstillingene, anses å være samsvar. For eksempel betyr en verdi på 0.85 at hvis nøkkelsammenligningsfunksjonen (sangnavn) fant en likhet på mer enn 85 %, så er det samme sang.

Algoritmen for å bestemme likhet er der, i funksjonen utils.getSongSimilarity().

Cover til sangen, for senere mottak, kan også festes via tags (APIC). Verktøy har alle nødvendige metoder for å motta og behandle tagger.

Et eksempel på arbeid med lagring gjennom en klient finner du i readme.

Alle de ovennevnte lagene er selvstendige og kan brukes separat som nedre lag for andre prosjekter. For eksempel er det allerede en idé om å lage et lag for oppbevaring av bøker.

museria-global er et allerede konfigurert git-depot for å lansere din egen node i det globale musikknettverket. Kloning npm i && npm start og det er i grunnen det. Du kan konfigurere det mer detaljert, kjøre det i Docker, etc. Detaljert informasjon er tilgjengelig på githabe.

Når depotet er oppdatert, må du oppdatere noden din. Hvis det store eller mindre versjonsnummeret endres, er denne handlingen obligatorisk, ellers vil de gamle nodene bli ignorert av nettverket.

Du kan jobbe med sanger manuelt og programmatisk. Hver node kjører en server for forskjellige oppgaver. Inkludert, når du besøker standardendepunktet, vil du motta et grensesnitt for arbeid med musikk. Du kan for eksempel gå til rotnoden (lenken er kanskje ikke relevant senere, inngangsnoder kan også hentes i telegram, eller se etter oppdateringer på Github).

På denne måten kan du søke etter og laste opp sanger til lagringen. Opplasting av sanger kan foregå i to moduser: normal og moderert. Den andre modusen betyr at arbeidet utføres av en person, ikke et program. Og hvis du merker av i denne boksen når du legger til, må du løse captchaen. Sanger kan legges til med prioritet -1, 0 eller 1. Prioritet 1 kan bare settes i moderert modus. Det er nødvendig med prioriteringer slik at lagringen mer effektivt kan bestemme hva du skal gjøre når du prøver å erstatte en eksisterende sang med en ny. Jo høyere prioritet, jo mer sannsynlig er det at du overskriver en eksisterende fil. Dette bidrar til å bekjempe spam og øker kvaliteten på nedlastede sanger.

Hvis du begynner å legge til sanger til lagringen, prøv å legge ved bilder (omslag), selv om dette feltet ikke er obligatorisk. I 99 % av tilfellene er de første bildene på Google basert på sangtitler albumomslag.

Hvordan teknisk å legge til filer skjer, i et nøtteskall:

  • Klienten mottar adressen til en ledig node, som vil bli koordinator for en stund.
  • Funksjonen for å legge til en sang utløses (av en person eller kode), og det sendes en forespørsel om å legge til en koordinator til endepunktet.
  • Koordinatoren beregner hvor mange duplikater som skal lagres (konfigurerbar parameter).
  • De mest egnede nodene for lagring søkes.
  • Filen går direkte til disse nodene.

Hvordan teknisk sett mottas filene:

  • Klienten mottar adressen til en ledig node, som vil bli koordinator for en stund.
  • Funksjonen for å motta en sang (av en person eller en kode) utløses, og det sendes en forespørsel om å motta den ved koordinatorens endepunkt.
  • Koordinatoren sjekker tilstedeværelsen av lenken i cachen. Hvis det er en og den fungerer, returneres den umiddelbart til klienten, ellers blir nodene spurt etter tilgjengelighet.
  • Filen mottas fra lenken, hvis en finnes.

Alternativer for musikkskapere

Jeg har alltid vært interessert i spørsmålet om hvordan man objektivt kan vurdere verdien av mange kreative verk? Hvorfor, for eksempel, tilbyr en person musikkalbumet sitt for $10? Enten for $20 eller $100. Hvor er algoritmen? Når vi for eksempel snakker om et fysisk produkt, eller til og med mange typer tjenester, så kan vi i det minste beregne kostnadene og gå ut fra det.

Ok, la oss si at vi satser $10. Er dette veldig effektivt? La oss si at jeg hørte på et album et sted eller en sang derfra og bestemte meg for å vise min takknemlighet. Men i henhold til mine følelser og mine egne evner, er $3 mitt tak. Så hva bør vi gjøre? Mest sannsynlig vil jeg bare ikke gjøre noe, som folk flest.

Ved å sette en slags fast pris for kreativt arbeid, begrenser du rett og slett deg selv, og forhindrer at et større antall personer sender deg mindre penger, noe som totalt sett kan være mer imponerende enn de som vil kjøpe til prisen du setter. Det virker for meg at kreativitet er akkurat det området der donasjoner bør styre først. For å gjøre dette trenger du:

  • Lær folk å takke på denne måten. Skaperne må selv tydelig vise at de ønsker å motta donasjoner, legge til lenker til ulike betalingsmetoder overalt osv.
  • Det trengs flere mekanismer for å forenkle og styrke disse prosessene. Lag for eksempel en slags global nettside hvor du kan donere for kreativitet ved å bruke copyright-lenker.

    La oss si at linken er noe slikt:

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

    Hvis vi begrenser det til musikere, så:

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

    Utøveren må bekrefte kallenavnet sitt og knytte til det.

    Vi legger til en funksjon for å generere en slik lenke til museria-klienten, og alle prosjekter som bruker depotet kan plassere donasjonsknapper med disse lenkene ved siden av sangene på deres nettsider/applikasjoner. Brukere har muligheten til å gi en donasjon veldig raskt og enkelt. Naturligvis kan denne tilnærmingen brukes i alle prosjekter og kategorier av kreativitet, ikke bare gjennom lagring.

Hvorfor trenger du akkurat et musikklager, og hvordan kan du delta i det?

  • Hvis du jobber med et prosjekt relatert til musikk, eller planlegger å lage et, så er det dette alt var ment for. Du kan bruke museria til å lagre og hente sanger, noe som øker flyten av sanger på nettet. Hvis du samtidig har muligheten til å heve og holde minst en egen node, vil dette være det beste bidraget til utviklingen av nettverket.
  • Kanskje du er klar til å påta deg en annen rolle: hjelpe med koden, eller fylle ut og moderere databasen, distribuere informasjon om prosjektet til vennene dine osv.
  • Kanskje du likte ideen og er klar til å hjelpe økonomisk slik at det hele lever og utvikler seg. Jo flere noder, jo flere sanger.
  • Eller du trenger bare å finne og laste ned en sang på et tidspunkt. Du kan gjøre dette veldig enkelt, for eksempel gjennom telegram bot.

Prosjektet er nå helt i startfasen. Et testnettverk har blitt lansert, noder kan starte på nytt ofte, kreve oppdateringer osv. Hvis det ikke er noen kritiske problemer i løpet av evalueringsperioden, blir det samme nettverket forvandlet til det viktigste.

Du kan se informasjon om noden fra utsiden: antall sanger, ledig plass osv., ved å bruke en lenke som http://node-address/status eller http://node-address/status?pretty

Kontaktene mine:

Kilde: www.habr.com

Legg til en kommentar