Museria - desentralisadong imbakan ng musika

Museria - desentralisadong imbakan ng musika

Isang araw nagpasya akong magsulat ng isang application para pumili ng musika para sa aking sarili at pakinggan ito sa bahay/sa kalye/pag-eehersisyo, atbp. At upang ang lahat ng ito ay gumagana sa isang daloy, na may kaunting partisipasyon mula sa akin. Nakabuo ako ng isang arkitektura, nag-sketch ng isang prototype, at kalaunan ay nakatagpo ako ng isang "maliit na problema."

At hindi malinaw kung saan kukunin ang mga file ng kanta mismo. Sa oras na ito, isinara na ng VKontakte ang api, sa malalaking portal ng musika ang lahat ay naka-mute din, kahit na ang mga kanta ay binigay sa mga piraso upang hindi ma-parse. Ang natitira na lang ay ilang indibidwal na fly-by-night na site na may isang toneladang advertising at lahat ng uri ng basura, lahat ng uri ng mga kahina-hinalang programa ng grabber at iba pang "marumi" na mga opsyon. Sa pangkalahatan, hindi isang solong talagang mahusay na solusyon. Maaari kang, siyempre, bumili ng isang subscription sa ilang Yandex music o katulad nito. Ngunit muli, walang bukas na pampublikong API kahit saan at wala kang access sa musika sa programmatically. Pinaghigpitan ng ilang malalaking kumpanya ang pag-access ng iba sa musika. Bakit nangyari ito sa lahat? Sa paghuhukay ng mas malalim, naging malinaw na ang pangunahing problema ay copyright. Ang kasalukuyang solusyon sa anyo ng mga subscription ay nababagay sa maraming may-akda ng komersyal na musika at mga parehong kumpanyang ito. Kasabay nito, nahuhulog din sa pangkalahatang listahan ang non-commercial at semi-commercial na musika. Magbabayad ka para sa lahat o makinig sa wala.

At nagsimula akong mag-isip kung ano ang gagawin sa lahat ng ito. Paano natin maisasaayos ang libreng pamamahagi ng musika? Ano ang gagawin ko kung ako mismo ang gumagawa ng musika at gustong kumita mula dito? Gusto ko ba kung pirated ang mga kanta ko? Anong alternatibong solusyon ang mayroon pa rin?

Bilang resulta, mayroong dalawang pangunahing problema na kailangang lutasin:

  • Organisasyon ng libreng pamamahagi ng musika gamit ang mga pamamaraan na maginhawa para sa karamihan ng mga tao, kabilang ang software.
  • Nag-aalok ng mga alternatibo para sa mga tagalikha ng musika upang kumita ng pera

Global desentralisadong imbakan ng musika

Sa una, sinubukan kong maghanap ng mga umiiral na solusyon at lumikha ng lahat batay dito. Pagkatapos ng ilang oras ng paghahanap, ang una kong nagustuhan ay ipfs. Sinimulan kong ipatupad ang aking ideya, ngunit pagkaraan ng ilang sandali ay natuklasan ko ang ilang mga kritikal na problema sa solusyon na ito:

  • Ipfs - imbakan para sa lahat at lahat. Mayroong mga larawan at musika at mga video at lahat ng gusto mo. Sa pangkalahatan, tulad ng isang malaking planetary "dustbin". Samakatuwid, kapag inilunsad mo ang iyong node, agad kang makakatanggap ng malaking load. Namilipit na lang sa sakit ang sasakyan.
  • Ilang uri ng hindi natapos na mekanismo ng pangongolekta ng "basura". Hindi ko alam kung paano ito ngayon, ngunit sa sandaling iyon, kung isinulat mo sa config na nais mong limitahan ang imbakan sa sampung gigabytes ng data, kung gayon wala itong ibig sabihin. Lumaki ang storage, hindi pinapansin ang maraming parameter ng configuration. Bilang resulta, kinailangan na magkaroon ng malaking reserba ng hard disk hanggang sa maisip ng ipfs kung paano i-reset ang hindi kailangan.
  • Sa oras ng paggamit ng library (hindi ko alam kung paano ito ngayon), ang kliyente ay walang mga timeout na ipinatupad. Nagpapadala ka ng kahilingan para makatanggap ng file, at kung wala ito, mag-hang ka lang. Siyempre, ang mga tao ay gumawa ng lahat ng uri ng mga workaround na bahagyang nalutas ang problema, ngunit ito ay mga saklay. Ang mga bagay na ito ay dapat lumabas sa kahon.

Marami pa ring maliliit na problema, at malinaw ang impresyon: hindi ito magagamit para sa proyekto. Nagpatuloy ako sa paghahanap ng pasilidad ng imbakan, nag-explore ng iba't ibang opsyon, ngunit wala akong nakitang angkop.

Sa huli, nagpasya ako na sulit na subukang magsulat ng isang desentralisadong imbakan sa aking sarili. Kahit na hindi ito nagpapanggap na interplanetary, malulutas nito ang isang partikular na problema.

At kaya pala nakakalat, imbakan, metastocle, museria, museria-global.

nakakalat - ito ang pangunahing, pinakamababang layer na nagbibigay-daan sa iyong pagsamahin ang mga node sa isang network. Naglalaman ito ng isang algorithm, na hanggang ngayon ay ipinatupad ko nang bahagya batay sa humigit-kumulang 10000 server. Ang buong bersyon ng algorithm ay mas mahirap ipatupad at mangangailangan ng ilang karagdagang buwan (marahil higit pa).

Hindi ko ilalarawan nang detalyado ang pagkalat sa artikulong ito; mas mainam na magsulat ng hiwalay na isa balang araw. Dito ko mapapansin ang ilang mga tampok:

  • Gumagana sa pamamagitan ng http/https.
  • Maaari kang lumikha ng isang hiwalay na network para sa isang partikular na gawain, na makabuluhang bawasan ang pagkarga sa bawat indibidwal na proyekto kaysa sa kung lahat sila ay nasa parehong network.
  • Ang isang mekanismo na may mga timeout at iba pang maliliit na bagay ay unang naisip. At ito ay gumagana para sa lahat ng mga pamamaraan kapwa sa kliyente at sa node. Maaari mong flexible na pamahalaan ang mga setting mula sa loob ng iyong application.
  • Ang library ay nakasulat sa nodejs. Ang mga isyu sa pagganap ng stack ay binabayaran ng desentralisadong katangian nito. Ang load ay maaaring "pagkalat" sa pamamagitan ng pagtaas ng bilang ng mga node. Bilang kapalit, maraming mga pakinabang: isang malaking komunidad, pagiging simple at kadalian ng paggamit, isang isomorphic na kliyente, walang mga panlabas na dependencies, atbp.

imbakan ay isang layer na minana mula sa spreadable na nagbibigay-daan sa iyong mag-imbak ng mga file sa network. Ang bawat file ay may sariling hash ng mga nilalaman nito, na maaaring magamit upang makuha ito sa ibang pagkakataon. Ang mga file ay hindi nahahati sa mga bloke, ngunit ganap na nakaimbak.

metastocle - isang layer na minana mula sa spreadable, na nagbibigay-daan sa iyong mag-imbak ng data sa network, ngunit hindi ang mga file. Ang interface ay katulad ng isang database ng Nosql. Maaari kang, halimbawa, magdagdag ng file sa storacle, kunin ang hash nito at isulat ito sa metastocle na may link sa isang bagay.

museria - minana mula sa storacle at metastocle. Direktang responsable ang layer na ito sa pag-iimbak ng musika. Gumagana lang ang storage sa mga mp3 file at id3 tag.

Bilang isang "susi" sa kanta, ang buong pangalan nito ay ginagamit sa anyo Artist (TPE1) - Pamagat (TIT2). Halimbawa:

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

Maaari mong malaman sa mas maraming detalye hangga't maaari kung paano nabuo ang mga pamagat ng kanta. dito. Kailangan mong tingnan ang function utils.beautifySongTitle().

Ang porsyento ng mga tugma na tinukoy sa mga setting ng node ay itinuturing na isang tugma. Halimbawa, ang halaga na 0.85 ay nangangahulugan na kung ang pangunahing pagpapaandar ng paghahambing (mga pangalan ng kanta) ay nakakita ng pagkakatulad na higit sa 85%, ito ay ang parehong kanta.

Ang algorithm para sa pagtukoy ng pagkakatulad ay naroon, sa function utils.getSongSimilarity().

Cover sa kanta, para sa susunod na resibo, maaari ding i-attach sa pamamagitan ng mga tag (APIC). Nasa mga utility ang lahat ng kinakailangang pamamaraan para sa pagtanggap at pagproseso ng mga tag.

Isang halimbawa ng pagtatrabaho sa storage sa pamamagitan ng isang kliyente ay makikita sa readme.

Ang lahat ng mga layer sa itaas ay self-contained at maaaring gamitin nang hiwalay bilang mas mababang mga layer para sa iba pang mga proyekto. Halimbawa, mayroon nang ideya na gumawa ng isang layer para sa pag-iimbak ng mga libro.

museria-global ay isang naka-configure na git repository para sa paglulunsad ng iyong sariling node sa pandaigdigang network ng musika. Pag-clone npm i && npm magsimula at iyon talaga. Maaari mong i-configure ito nang mas detalyado, patakbuhin ito sa Docker, atbp. Ang detalyadong impormasyon ay makukuha sa github.

Kapag na-update ang repository, kailangan mong i-update ang iyong node. Kung nagbabago ang mayor o minor na numero ng bersyon, ang pagkilos na ito ay sapilitan, kung hindi, ang mga lumang node ay hindi papansinin ng network.

Maaari kang magtrabaho sa mga kanta nang manu-mano at programmatically. Ang bawat node ay nagpapatakbo ng isang server para sa iba't ibang mga gawain. Kasama, kapag binisita mo ang default na endpoint, makakatanggap ka ng interface para sa pagtatrabaho sa musika. Halimbawa, maaari kang pumunta sa ugat node (maaaring hindi nauugnay ang link sa ibang pagkakataon, maaari ding makuha ang mga input node sa telegrama, o maghanap ng mga update sa Github).

Sa ganitong paraan maaari kang maghanap at mag-upload ng mga kanta sa storage. Maaaring maganap ang pag-upload ng mga kanta sa dalawang mode: normal at moderated. Ang pangalawang mode ay nangangahulugan na ang gawain ay isinasagawa ng isang tao, hindi isang programa. At kung lagyan mo ng check ang kahon na ito kapag nagdadagdag, kakailanganin mong lutasin ang captcha. Maaaring magdagdag ng mga kanta na may mga priyoridad -1, 0 o 1. Ang Priyoridad 1 ay maaari lamang itakda sa moderated mode. Kailangan ang mga priyoridad upang mas epektibong makapagpasya ang storage kung ano ang gagawin kapag sinubukan mong palitan ng bago ang isang kasalukuyang kanta. Kung mas mataas ang priyoridad, mas malamang na i-overwrite mo ang isang umiiral na file. Nakakatulong ito na labanan ang spam at pinapataas ang kalidad ng mga na-download na kanta.

Kung magsisimula kang magdagdag ng mga kanta sa repository, subukang mag-attach ng mga larawan (cover), bagama't hindi kinakailangan ang field na ito. Sa 99% ng mga kaso, ang mga unang larawan sa Google batay sa mga pamagat ng kanta ay mga pabalat ng album.

Paano nangyayari ang teknikal na pagdaragdag ng mga file, sa maikling salita:

  • Natatanggap ng kliyente ang address ng isang libreng node, na magiging isang coordinator nang ilang sandali.
  • Ang function ng pagdaragdag ng isang kanta ay na-trigger (ng isang tao o code), at isang kahilingan ay ginawa upang magdagdag ng isang coordinator sa endpoint.
  • Kinakalkula ng coordinator kung gaano karaming mga duplicate ang dapat iimbak (nako-configure na parameter).
  • Hinahanap ang pinaka-angkop na mga node para sa pag-save.
  • Direktang napupunta ang file sa mga node na ito.

Paano teknikal na natatanggap ang mga file:

  • Natatanggap ng kliyente ang address ng isang libreng node, na magiging isang coordinator nang ilang sandali.
  • Ang function ng pagtanggap ng kanta (ng isang tao o isang code) ay na-trigger, at isang kahilingan ay ginawa upang matanggap ito sa endpoint ng coordinator.
  • Sinusuri ng coordinator ang presensya ng link sa cache. Kung mayroong isa at ito ay gumagana, ito ay agad na ibinalik sa kliyente, kung hindi man ang mga node ay poll para sa availability.
  • Ang file ay natanggap mula sa link, kung ang isa ay natagpuan.

Mga Alternatibo para sa Mga Tagalikha ng Musika

Palagi akong interesado sa tanong kung paano masusuri ng isa ang halaga ng maraming malikhaing gawa? Bakit, halimbawa, nag-aalok ang isang tao ng kanyang music album sa halagang $10? Alinman sa $20 o $100. Nasaan ang algorithm? Kapag, halimbawa, pinag-uusapan natin ang ilang pisikal na produkto, o kahit na maraming uri ng mga serbisyo, kung gayon maaari nating kalkulahin ang gastos at magpatuloy mula doon.

Okay, sabihin nating tumaya tayo ng $10. Ito ba ay napaka-epektibo? Sabihin nating nakinig ako sa isang album sa isang lugar o isang kanta mula doon at nagpasyang ipakita ang aking pasasalamat. Ngunit ayon sa aking damdamin at sa aking sariling mga kakayahan, $3 ang aking kisame. So anong dapat nating gawin? Malamang na wala lang akong gagawin, tulad ng karamihan sa mga tao.

Sa pamamagitan ng pagtatakda ng ilang uri ng nakapirming presyo para sa malikhaing gawain, nililimitahan mo lang ang iyong sarili, na pinipigilan ang mas malaking bilang ng mga tao na magpadala sa iyo ng mas kaunting pera, na sa kabuuan ay maaaring maging mas kahanga-hanga kaysa sa mga bibili sa presyong iyong itinakda. Tila sa akin na ang pagkamalikhain ay eksaktong lugar kung saan ang mga donasyon ay dapat unang mamuno. Upang gawin ito kailangan mo:

  • Turuan ang mga tao na magpasalamat sa ganitong paraan. Ang mga tagalikha mismo ay dapat na malinaw na ipakita na gusto nilang makatanggap ng mga donasyon, magdagdag ng mga link sa iba't ibang paraan ng pagbabayad sa lahat ng dako, atbp.
  • Higit pang mga mekanismo ang kailangan para pasimplehin at palakasin ang mga prosesong ito. Halimbawa, lumikha ng ilang uri ng pandaigdigang website kung saan maaari kang mag-donate para sa pagkamalikhain gamit ang mga link sa copyright.

    Sabihin nating ang link ay parang ganito:

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

    Kung paliitin natin ito sa mga musikero, kung gayon:

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

    Kailangang i-verify ng performer ang kanyang palayaw at ilakip dito.

    Nagdaragdag kami ng function para sa pagbuo ng ganoong link sa museria client, at lahat ng proyektong gumagamit ng repository ay maaaring maglagay ng mga pindutan ng donasyon kasama ang mga link na ito sa tabi ng mga kanta sa kanilang mga website/application. Ang mga gumagamit ay may pagkakataon na gumawa ng donasyon nang napakabilis at madali. Naturally, ang diskarte na ito ay maaaring gamitin sa anumang proyekto at kategorya ng pagkamalikhain, hindi lamang sa pamamagitan ng imbakan.

Bakit eksaktong kailangan mo ng pasilidad ng imbakan ng musika, at paano ka makakasali dito?

  • Kung nagtatrabaho ka sa isang proyekto na may kaugnayan sa musika, o nagpaplanong lumikha ng isa, kung gayon ito ang inilaan para sa lahat. Maaari mong gamitin ang museria upang mag-imbak at kumuha ng mga kanta, na nagpapataas ng daloy ng mga kanta online. Kung, sa parehong oras, mayroon kang kakayahang itaas at hawakan ang hindi bababa sa isang node sa iyong sarili, kung gayon ito ang magiging pinakamahusay na kontribusyon sa pag-unlad ng network.
  • Marahil ay handa ka nang gampanan ang ibang tungkulin: tumulong sa code, o punan at i-moderate ang database, ipamahagi ang impormasyon tungkol sa proyekto sa iyong mga kaibigan, atbp.
  • Marahil ay nagustuhan mo ang ideya at handa kang tumulong sa pananalapi upang mabuhay at umunlad ang lahat. Mas maraming node, mas maraming kanta.
  • O kailangan mo lang maghanap at mag-download ng kanta sa isang punto. Magagawa mo ito nang napakasimple, halimbawa, sa pamamagitan ng bot ng telegrama.

Ang proyekto ay nasa pinakasimulang yugto na ngayon. Ang isang pagsubok na network ay inilunsad, ang mga node ay maaaring mag-reboot nang madalas, nangangailangan ng mga update, atbp. Kung walang mga kritikal na problema sa panahon ng pagsusuri, ang parehong network na ito ay binago sa pangunahing network.

Maaari mong tingnan ang impormasyon tungkol sa node mula sa labas: ang bilang ng mga kanta, libreng espasyo, atbp., gamit ang isang link tulad ng http://node-address/status o http://node-address/status?pretty

Aking mga contact:

Pinagmulan: www.habr.com

Magdagdag ng komento