Museria - gedesentraliseerde musiekberging

Museria - gedesentraliseerde musiekberging

Ek het eendag besluit om 'n toepassing te skryf om musiek vir myself te kies en tuis/op straat daarna te luister/oefensessies, ens. En sodat dit alles in 'n vloei werk, met minimale deelname van my. Ek het met 'n argitektuur vorendag gekom, 'n prototipe geskets en uiteindelik een "klein probleem" teëgekom.

En dit is nie duidelik waar om die liedjielêers self te kry nie. Teen hierdie tyd het VKontakte reeds die api gesluit, op groot musiekportale was alles ook gedemp, selfs liedjies is in stukke uitgegee om nie ontleed te word nie. Al wat oorgebly het, was 'n paar individuele vlieg-deur-nag-webwerwe met 'n klomp advertensies en allerhande gemors, allerhande twyfelagtige grypprogramme en ander "vuil" opsies. Oor die algemeen, nie 'n enkele regtig goeie oplossing nie. U kan natuurlik 'n intekening op sommige Yandex-musiek of dies meer koop. Maar weereens, daar is geen oop publieke API oral nie en jy het nie programmaties toegang tot musiek nie. Verskeie groot maatskappye het in wese ander se toegang tot musiek beperk. Hoekom het dit hoegenaamd gebeur? Deur dieper te delf, het dit duidelik geword dat die hoofprobleem kopiereg was. Die huidige oplossing in die vorm van intekeninge pas by baie kommersiële musiekouteurs en dieselfde maatskappye. Terselfdertyd val nie-kommersiële en semi-kommersiële musiek ook in die algemene lys. Jy betaal óf vir alles óf luister na niks nie.

En ek het begin dink wat om met dit alles te doen. Hoe kan ons die gratis verspreiding van musiek organiseer? Wat sou ek doen as ek self musiek skep en geld daaruit wil maak? Sal ek daarvan hou as my liedjies seerower is? Watter alternatiewe oplossing is daar in elk geval?

As gevolg hiervan is daar twee hoofprobleme wat opgelos moet word:

  • Organisasie van gratis verspreiding van musiek met behulp van metodes wat geskik is vir die meeste mense, insluitend sagteware.
  • Bied alternatiewe vir musiekskeppers om geld te maak

Wêreldwye gedesentraliseerde musiekberging

Ek het aanvanklik probeer om bestaande oplossings te vind en alles op grond hiervan te skep. Na 'n geruime tyd van soek, was die eerste een waarvan ek gehou het ipfs. Ek het my idee begin implementeer, maar na 'n rukkie het ek verskeie kritieke probleme in hierdie oplossing ontdek:

  • Ipfs - berging vir alles en almal. Daar is beelde en musiek en video's en alles wat jy wil hê. Oor die algemeen so 'n groot planetêre "asblik". Daarom, wanneer u u nodus begin, ontvang u onmiddellik 'n groot vrag. Die kar wriem net van pyn.
  • Een of ander onvoltooide "rommel" versamelingsmeganisme. Ek weet nie hoe dit nou is nie, maar op daardie oomblik, as jy in die config geskryf het dat jy die berging tot tien gigagrepe data wil beperk, dan het dit niks beteken nie. Die berging het gegroei en baie konfigurasieparameters geïgnoreer. As gevolg hiervan was dit nodig om 'n groot reserwe hardeskyf te hê totdat ipfs uitgevind het hoe om die onnodige terug te stel.
  • Ten tyde van die gebruik van die biblioteek (ek weet nie hoe dit nou is nie), het die kliënt nie time-outs geïmplementeer gehad nie. Jy stuur 'n versoek om 'n lêer te ontvang, en as dit nie bestaan ​​nie, dan hang jy net. Natuurlik het mense met allerhande oplossings vorendag gekom wat die probleem gedeeltelik opgelos het, maar dit was krukke. Hierdie dinge moet uit die boks kom.

Daar was nog baie klein probleme, en die indruk was duidelik: dit kan nie vir die projek gebruik word nie. Ek het voortgegaan om na 'n bergingsfasiliteit te soek, verskillende opsies te ondersoek, maar het nooit iets geskik gevind nie.

Op die ou end het ek besluit dat dit die moeite werd is om self 'n gedesentraliseerde stoor te probeer skryf. Selfs as dit nie voorgee dat dit interplanetêr is nie, sal dit 'n spesifieke taak oplos.

En so het dit geblyk smeerbaar, stoorplek, metastakel, museria, museria-globaal.

smeerbaar - dit is die belangrikste, laagste laag waarmee u nodusse in 'n netwerk kan kombineer. Dit bevat 'n algoritme wat ek tot dusver gedeeltelik op ongeveer 10000 XNUMX bedieners geïmplementeer het. Die volledige weergawe van die algoritme is baie moeiliker om te implementeer en sal 'n paar ekstra maande (miskien meer) benodig.

Ek sal nie verspreibaar in detail in hierdie artikel beskryf nie; dit is beter om eendag 'n aparte een te skryf. Hier sal ek net 'n paar kenmerke opmerk:

  • Werk via http/https.
  • Jy kan 'n aparte netwerk vir 'n spesifieke taak skep, wat die las op elke individuele projek aansienlik sal verminder as wanneer hulle almal op dieselfde netwerk was.
  • ’n Meganisme met time-outs en ander klein goedjies is aanvanklik uitgedink. En dit werk vir alle metodes beide in die kliënt en in die nodus. U kan instellings buigsaam binne u toepassing bestuur.
  • Die biblioteek is in nodejs geskryf. Die prestasieprobleme van die stapel word geneutraliseer deur die gedesentraliseerde aard daarvan. Die las kan "verspreid" word deur die aantal nodusse te vermeerder. In ruil daarvoor is daar baie voordele: 'n groot gemeenskap, eenvoud en gemak van gebruik, 'n isomorfe kliënt, geen eksterne afhanklikhede, ens.

stoorplek is 'n laag geërf van spreadable wat jou toelaat om lêers op die netwerk te stoor. Elke lêer het sy eie hash van sy inhoud, wat gebruik kan word om dit later te herwin. Lêers word nie in blokke verdeel nie, maar word volledig gestoor.

metastakel - 'n laag geërf van verspreibare, wat jou toelaat om data op die netwerk te stoor, maar nie lêers nie. Die koppelvlak is soortgelyk aan 'n Nosql-databasis. Jy kan byvoorbeeld 'n lêer by Storacle voeg, sy hash kry en dit na metastocle skryf met 'n skakel na iets.

museria - geërf van stoor en metastokel. Hierdie laag is direk verantwoordelik vir die berging van musiek. Die berging werk slegs met mp3-lêers en id3-etikette.

As 'n "sleutel" tot die liedjie word sy volle naam in die vorm gebruik Kunstenaar (TPE1) - Titel (TIT2). Byvoorbeeld:

  • Swael - Die las
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Jy kan in soveel detail as moontlik uitvind hoe liedtitels gevorm word. hier. Jy moet na die funksie kyk utils.beautifySongTitle().

Die persentasie passings wat in die nodusinstellings gedefinieer word, word as 'n passing beskou. Byvoorbeeld, 'n waarde van 0.85 beteken dat as die sleutelvergelykingsfunksie (liedjiename) 'n ooreenkoms van meer as 85% gevind het, dit dieselfde liedjie is.

Die algoritme vir die bepaling van ooreenkoms is daar, in die funksie utils.getSongSimilarity().

Omslag van die liedjie, vir latere ontvangs, kan ook aangeheg word via etikette (APIC). Hulpprogramme het al die nodige metodes om etikette te ontvang en te verwerk.

'n Voorbeeld van werk met berging deur 'n kliënt kan gevind word in readme.

Al die bogenoemde lae is selfstandig en kan apart as onderste lae vir ander projekte gebruik word. Daar is byvoorbeeld reeds 'n idee om 'n laag te maak vir die bêre van boeke.

museria-globaal is 'n reeds gekonfigureerde git-bewaarplek vir die bekendstelling van jou eie nodus in die globale musieknetwerk. Kloning npm i && npm begin en dit is basies dit. U kan dit in meer besonderhede opstel, dit in Docker laat loop, ens. Gedetailleerde inligting is beskikbaar by github.

Wanneer die bewaarplek opgedateer is, moet jy jou nodus opdateer. As die hoof- of klein weergawenommer verander, is hierdie aksie verpligtend, anders sal die ou nodusse deur die netwerk geïgnoreer word.

Jy kan handmatig en programmaties met liedjies werk. Elke nodus bestuur 'n bediener vir verskillende take. Insluitend, wanneer jy die verstek eindpunt besoek, sal jy 'n koppelvlak ontvang om met musiek te werk. Byvoorbeeld, jy kan gaan na wortelknoop (die skakel sal dalk later nie relevant wees nie, insetnodusse kan ook verkry word in telegram, of soek opdaterings op Github).

Op hierdie manier kan jy liedjies soek en oplaai na die berging. Die oplaai van liedjies kan in twee modusse plaasvind: normaal en gemodereer. Die tweede modus beteken dat die werk deur 'n persoon uitgevoer word, nie 'n program nie. En as jy hierdie blokkie merk wanneer jy byvoeg, sal jy die captcha moet oplos. Liedjies kan bygevoeg word met prioriteite -1, 0 of 1. Prioriteit 1 kan slegs in gemodereer modus gestel word. Prioriteite is nodig sodat die berging meer effektief kan besluit wat om te doen wanneer jy probeer om 'n bestaande liedjie met 'n nuwe een te vervang. Hoe hoër die prioriteit, hoe groter is die kans dat jy 'n bestaande lêer sal oorskryf. Dit help om strooipos te beveg en verhoog die kwaliteit van afgelaaide liedjies.

As jy liedjies by jou berging begin voeg, probeer om prente (omslag) aan te heg, alhoewel hierdie veld nie vereis word nie. In 99% van die gevalle is die eerste prente op Google wat op liedjietitels gebaseer is, albumomslae.

Hoe tegnies die byvoeging van lêers plaasvind, in 'n neutedop:

  • Die kliënt ontvang die adres van 'n gratis nodus, wat vir 'n rukkie 'n koördineerder sal word.
  • Die funksie om 'n liedjie by te voeg, word geaktiveer (deur 'n persoon of kode), en 'n versoek word gerig om 'n koördineerder by die eindpunt te voeg.
  • Die koördineerder bereken hoeveel duplikate gestoor moet word (konfigureerbare parameter).
  • Die mees geskikte nodusse vir stoor word deursoek.
  • Die lêer gaan direk na hierdie nodusse.

Hoe tegnies die lêers ontvang word:

  • Die kliënt ontvang die adres van 'n gratis nodus, wat vir 'n rukkie 'n koördineerder sal word.
  • Die funksie om 'n liedjie te ontvang (deur 'n persoon of 'n kode) word geaktiveer, en 'n versoek word gerig om dit by die koördineerder se eindpunt te ontvang.
  • Die koördineerder kyk vir die teenwoordigheid van die skakel in die kas. As daar een is en dit werk, word dit onmiddellik aan die kliënt teruggestuur, anders word die nodusse vir beskikbaarheid gepeil.
  • Die lêer word vanaf die skakel ontvang, indien een gevind word.

Alternatiewe vir musiekskeppers

Ek was nog altyd geïnteresseerd in die vraag hoe 'n mens die waarde van baie kreatiewe werke objektief kan evalueer? Hoekom, byvoorbeeld, bied 'n persoon sy musiekalbum vir $10 aan? Óf vir $20 of $100. Waar is die algoritme? Wanneer ons byvoorbeeld praat van een of ander fisiese produk, of selfs baie soorte dienste, dan kan ons ten minste die koste bereken en daarvan afgaan.

Goed, kom ons sê ons wed $10. Is dit baie effektief? Kom ons sê ek het iewers na 'n album of 'n liedjie daarvan geluister en besluit om my dankbaarheid te betoon. Maar volgens my gevoelens en my eie vermoëns is $3 my plafon. So wat moet ons doen? Heel waarskynlik sal ek net niks doen nie, soos meeste mense.

Deur 'n soort vaste prys vir kreatiewe werk te stel, beperk jy jouself eenvoudig, wat verhoed dat 'n groter aantal mense vir jou minder geld stuur, wat in totaal meer indrukwekkend kan wees as diegene wat teen die prys wat jy bepaal sal koop. Dit lyk vir my asof kreatiwiteit presies die area is waar skenkings eerste moet regeer. Om dit te doen benodig jy:

  • Leer mense om op hierdie manier dankie te sê. Die skeppers moet self duidelik wys dat hulle graag skenkings wil ontvang, oral skakels na verskillende betaalmetodes byvoeg, ens.
  • Meer meganismes is nodig om hierdie prosesse te vereenvoudig en te versterk. Skep byvoorbeeld 'n soort wêreldwye webwerf waar jy kan skenk vir kreatiwiteit deur kopieregskakels te gebruik.

    Kom ons sê die skakel is iets soos hierdie:

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

    As ons dit beperk tot musikante, dan:

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

    Die kunstenaar moet sy bynaam verifieer en daaraan koppel.

    Ons voeg 'n funksie by om so 'n skakel na die museria-kliënt te genereer, en alle projekte wat die bewaarplek gebruik, kan skenkingsknoppies met hierdie skakels langs die liedjies op hul webwerwe/toepassings plaas. Gebruikers het die geleentheid om baie vinnig en maklik 'n skenking te maak. Natuurlik kan hierdie benadering in enige projek en kategorie van kreatiwiteit gebruik word, nie net deur berging nie.

Hoekom het jy presies 'n musiekbergingsfasiliteit nodig, en hoe kan jy daaraan deelneem?

  • As jy aan 'n projek werk wat met musiek verband hou, of beplan om een ​​te skep, dan is dit waarvoor alles bedoel was. Jy kan museria gebruik om liedjies te stoor en op te haal, wat die vloei van liedjies aanlyn verhoog. As jy terselfdertyd die vermoë het om ten minste een nodus van jou eie te verhoog en te hou, dan sal dit die beste bydrae tot die ontwikkeling van die netwerk wees.
  • Miskien is jy gereed om 'n ander rol aan te neem: help met die kode, of vul die databasis in en modereer, versprei inligting oor die projek aan jou vriende, ens.
  • Miskien het jy van die idee gehou en is jy gereed om finansieel te help sodat dit alles leef en ontwikkel. Hoe meer nodusse, hoe meer liedjies.
  • Of jy moet net een of ander tyd 'n liedjie vind en aflaai. Jy kan dit baie eenvoudig doen, byvoorbeeld deur telegram bot.

Die projek is nou heel aan die begin stadium. 'n Toetsnetwerk is geloods, nodusse kan gereeld herlaai, opdaterings benodig, ens. As daar geen kritieke probleme tydens die evalueringsperiode is nie, word dieselfde netwerk in die hoof een omskep.

Jy kan inligting oor die nodus van buite af bekyk: die aantal liedjies, vrye spasie, ens., deur 'n skakel soos http://node-address/status of http://node-address/status?pretty

My kontakte:

Bron: will.com

Voeg 'n opmerking