Museria - төвлөрсөн бус хөгжмийн хадгалалт

Museria - төвлөрсөн бус хөгжмийн хадгалалт

Нэг өдөр би өөрөө өөртөө хөгжим сонгоод гэртээ/гудамжинд/дасгалт гэх мэт хөгжим сонсох программ бичихээр шийдлээ. Ингэснээр энэ бүхэн миний оролцоо багатай урсгалаар явагдана. Би архитектур зохион бүтээж, эх загвараа зурж, эцэст нь нэг "жижиг асуудалтай" тулгарсан.

Дууны файлуудыг хаанаас авах нь тодорхойгүй байна. Энэ үед ВКонтакте аль хэдийн api-г хаасан байсан, том хөгжмийн порталууд дээр бүх зүйл дуугүй болсон, тэр ч байтугай дуунуудыг задлан шинжлэхгүйн тулд хэсэг хэсгээр нь өгсөн. Үлдсэн зүйл бол олон тонн зар сурталчилгаа, янз бүрийн хог хаягдал, янз бүрийн эргэлзээтэй хөтөлбөрүүд болон бусад "бохир" сонголтуудтай шөнийн цагаар нисдэг сайтууд байв. Ерөнхийдөө ганц ч сайн шийдэл байдаггүй. Мэдээжийн хэрэг, та Yandex-ийн хөгжим эсвэл үүнтэй төстэй зүйлийг захиалах боломжтой. Гэхдээ дахин хэлэхэд, нээлттэй нийтийн API хаана ч байхгүй бөгөөд та программчлагдсан хөгжимд хандах эрхгүй. Хэд хэдэн томоохон компаниуд бусдын хөгжим сонсох боломжийг үндсэндээ хязгаарласан. Ер нь яагаад ийм зүйл болсон бэ? Гүн ухаж үзвэл гол асуудал нь зохиогчийн эрх гэдэг нь тодорхой болсон. Захиалгын хэлбэрийн одоогийн шийдэл нь олон арилжааны хөгжмийн зохиолчид болон эдгээр компаниудад тохиромжтой. Үүний зэрэгцээ арилжааны бус болон хагас арилжааны хөгжим ч ерөнхий жагсаалтад багтдаг. Та нэг бол бүх зүйлээ төлөх эсвэл юу ч сонсохгүй.

Тэгээд энэ бүхнийг яах вэ гэж бодож эхлэв. Хөгжим үнэгүй түгээх ажлыг хэрхэн зохион байгуулах вэ? Хэрэв би өөрөө хөгжим бүтээж, түүгээрээ мөнгө олохыг хүсч байвал яах вэ? Миний дуунууд дээрэмчин байвал би таалагдах уу? Өөр ямар шийдэл байгаа вэ?

Үүний үр дүнд шийдвэрлэх шаардлагатай хоёр үндсэн асуудал байна.

  • Ихэнх хүмүүст тохиромжтой аргууд, түүний дотор програм хангамжийг ашиглан хөгжим үнэгүй түгээх зохион байгуулалт.
  • Хөгжим бүтээгчид мөнгө олох өөр хувилбаруудыг санал болгож байна

Дэлхийн төвлөрсөн бус хөгжмийн хадгалалт

Эхэндээ би одоо байгаа шийдлүүдийг хайж, үүн дээр үндэслэн бүх зүйлийг бүтээхийг хичээсэн. Хэсэг хугацаанд хайсны эцэст хамгийн түрүүнд таалагдсан нь надад таалагдсан ipfs. Би санаагаа хэрэгжүүлж эхэлсэн боловч хэсэг хугацааны дараа энэ шийдэлд хэд хэдэн чухал асуудлуудыг олж мэдсэн:

  • Ipfs - бүх зүйл, хүн бүрт зориулсан хадгалалт. Зураг, хөгжим, видео гээд таны хүссэн бүхэн бий. Ерөнхийдөө ийм том гаригийн "хогийн сав". Тиймээс, та зангилаагаа эхлүүлэхэд тэр даруй асар их ачааллыг хүлээн авдаг. Машин зүгээр л өвдөж эргэлдэж байна.
  • Ямар нэгэн дуусаагүй “хог” цуглуулах механизм. Одоо ямар байгааг мэдэхгүй байна, гэхдээ тэр үед та тохиргоондоо санах ойг арван гигабайтаар хязгаарлахыг хүссэн бол энэ нь юу ч биш гэсэн үг. Хадгалах хэмжээ ихсэж, олон тохиргооны параметрүүдийг үл тоомсорлов. Үүний үр дүнд ipfs шаардлагагүй дискийг хэрхэн дахин тохируулахыг олж мэдэх хүртэл хатуу дискний асар их нөөцтэй байх шаардлагатай байв.
  • Номын санг ашиглах үед (одоо яаж байгааг мэдэхгүй байна) үйлчлүүлэгчид завсарлага аваагүй. Та файл хүлээн авах хүсэлт илгээж, хэрэв байхгүй бол та зүгээр л өлгөх болно. Мэдээжийн хэрэг, хүмүүс асуудлыг хэсэгчлэн шийдсэн янз бүрийн арга замыг гаргаж ирсэн боловч эдгээр нь таяг байсан. Эдгээр зүйлс хайрцагнаас гарах ёстой.

Олон жижиг асуудлууд байсаар байсан бөгөөд энэ нь төсөлд ашиглах боломжгүй гэсэн сэтгэгдэл тодорхой байв. Би хадгалах байгууламжийг үргэлжлүүлэн хайж, янз бүрийн хувилбаруудыг судалж үзсэн боловч тохирох зүйл олдсонгүй.

Эцэст нь би өөрөө төвлөрсөн бус хадгалах сан бичихийг оролдох нь зүйтэй гэж шийдсэн. Гариг хоорондын дүр эсгэдэггүй ч гэсэн тодорхой ажлыг шийднэ.

Тэгээд ийм зүйл болсон тархах боломжтой, агуулах, метасток, музей, museria-дэлхийн.

тархах боломжтой - энэ бол зангилааг сүлжээнд нэгтгэх боломжийг олгодог гол, хамгийн доод давхарга юм. Энэ нь 10000 сервер дээр тулгуурлан хэсэгчлэн хэрэгжүүлсэн алгоритмыг агуулдаг. Алгоритмын бүрэн хувилбарыг хэрэгжүүлэхэд илүү төвөгтэй бөгөөд нэмэлт хэдэн сар (магадгүй илүү) шаардлагатай болно.

Би энэ нийтлэлд тарааж болох талаар дэлгэрэнгүй тайлбарлахгүй, хэзээ нэгэн цагт тусад нь бичих нь дээр. Энд би зөвхөн зарим шинж чанаруудыг тэмдэглэх болно:

  • http/https-ээр ажилладаг.
  • Та тодорхой даалгаварт зориулж тусдаа сүлжээ үүсгэж болох бөгөөд энэ нь бүгд нэг сүлжээнд байсантай харьцуулахад бие даасан төсөл бүрийн ачааллыг мэдэгдэхүйц бууруулах болно.
  • Хугацаа болон бусад жижиг зүйлүүдтэй механизмыг анх бодож үзсэн. Энэ нь үйлчлүүлэгч болон зангилааны бүх аргуудад ажилладаг. Та өөрийн аппликешн дотроос тохиргоог уян хатан удирдах боломжтой.
  • Номын сан нь nodejs дээр бичигдсэн байдаг. Стекийн гүйцэтгэлийн асуудлууд нь төвлөрсөн бус шинж чанараараа нөхөгддөг. Зангилааны тоог нэмэгдүүлэх замаар ачааллыг "тархаж" болно. Үүний хариуд олон давуу тал бий: асар том нийгэмлэг, энгийн бөгөөд ашиглахад хялбар, изоморф үйлчлүүлэгч, гадны хамааралгүй гэх мэт.

агуулах нь файлуудыг сүлжээнд хадгалах боломжийг олгодог тархалтаас өвлөн авсан давхарга юм. Файл бүр өөрийн агуулгын хэштэй бөгөөд үүнийг дараа нь сэргээхэд ашиглаж болно. Файлууд нь блокуудад хуваагддаггүй, гэхдээ бүхэлд нь хадгалагддаг.

метасток - файлд биш харин сүлжээнд өгөгдөл хадгалах боломжийг олгодог тархалтаас өвлөн авсан давхарга. Интерфэйс нь Nosql мэдээллийн сантай төстэй. Жишээлбэл, та хадгалалтад файл нэмж, түүний хэшийг авч, метастокл руу ямар нэг зүйлийн холбоосоор бичиж болно.

музей - агуулах ба метастокулаас удамшсан. Энэ давхарга нь хөгжим хадгалах шууд үүрэгтэй. Хадгалалт нь зөвхөн mp3 файл болон id3 шошготой ажилладаг.

Дууны "түлхүүр" болгон түүний бүтэн нэрийг хэлбэрээр ашигласан болно Уран бүтээлч (TPE1) - Гарчиг (TIT2). Жишээ нь:

  • Хүхрийн чулуу - Ачаа
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Дууны нэр хэрхэн үүсдэгийг та аль болох нарийвчлан олж мэдэх боломжтой. энд. Та функцийг харах хэрэгтэй utils.beautifySongTitle().

Зангилааны тохиргоонд тодорхойлсон тохирлын хувь нь тохирч байна гэж үзнэ. Жишээлбэл, 0.85 утга нь гол харьцуулах функц (дууны нэр) 85% -иас дээш ижил төстэй байдлыг олсон бол энэ нь ижил дуу байна гэсэн үг юм.

Ижил төстэй байдлыг тодорхойлох алгоритм нь функцэд байдаг utils.getSongSimilarity().

Дууны коверыг дараа нь хүлээн авахын тулд шошгон дээр хавсаргаж болно (APIC). Хэрэгслүүд нь шошгыг хүлээн авах, боловсруулахад шаардлагатай бүх аргуудтай байдаг.

Үйлчлүүлэгчээр дамжуулан хадгалах сантай ажиллах жишээг эндээс олж болно README.

Дээрх бүх давхаргууд нь бие даасан бөгөөд бусад төслүүдийн доод давхарга болгон тусад нь ашиглаж болно. Жишээлбэл, ном хадгалах давхарга хийх санаа аль хэдийн бий болсон.

museria-дэлхийн нь дэлхийн хөгжмийн сүлжээнд өөрийн зангилааг эхлүүлэхэд зориулагдсан аль хэдийн тохируулагдсан git репозитор юм. Хувилах npm i && npm эхлэх ба энэ нь үндсэндээ юм. Та үүнийг илүү нарийвчлан тохируулах, Docker дээр ажиллуулах гэх мэт боломжтой. Дэлгэрэнгүй мэдээллийг хаягаар авах боломжтой github.

Хадгалах газар шинэчлэгдсэн үед та зангилаагаа шинэчлэх хэрэгтэй. Хэрэв үндсэн эсвэл бага хувилбарын дугаар өөрчлөгдвөл энэ үйлдэл нь заавал байх ёстой, эс тэгвээс хуучин зангилааг сүлжээ үл тоомсорлох болно.

Та дуунуудтай гараар болон программчлагдсан байдлаар ажиллах боломжтой. Зангилаа бүр өөр өөр ажлуудад зориулж сервер ажиллуулдаг. Үүний дотор та үндсэн төгсгөлийн цэг дээр очиход хөгжимтэй ажиллах интерфейсийг хүлээн авах болно. Жишээлбэл, та очиж болно үндэс зангилаа (холбоос дараа нь хамааралгүй байж магадгүй, оролтын зангилаануудыг эндээс авах боломжтой цахилгаан, эсвэл Github дээрх шинэчлэлтүүдийг хайх).

Ингэснээр та дуу хайж, хадгалах санд байршуулах боломжтой. Дуу байршуулах нь ердийн ба зохицуулагдсан гэсэн хоёр горимоор явагдана. Хоёрдахь горим гэдэг нь тухайн ажлыг программ биш хүн гүйцэтгэдэг гэсэн үг. Хэрэв та нэмэхдээ энэ нүдийг чагталвал captcha-г шийдэх хэрэгтэй болно. Дууг -1, 0 эсвэл 1 гэсэн тэргүүлэх ач холбогдол бүхий нэмэх боломжтой. 1-р тэргүүлэх чиглэлийг зөвхөн тохируулсан горимд тохируулах боломжтой. Одоо байгаа дууг шинэ дуугаар солихыг оролдох үед хадгалах сан нь юу хийхээ илүү үр дүнтэй шийдэхийн тулд тэргүүлэх чиглэлүүд шаардлагатай. Тэргүүлэх ач холбогдол өндөр байх тусам одоо байгаа файлыг дарж бичих магадлал өндөр болно. Энэ нь спамтай тэмцэж, татаж авсан дууны чанарыг нэмэгдүүлдэг.

Хэрэв та хадгалах сандаа дуу нэмж эхэлбэл, энэ талбар шаардлагагүй ч гэсэн зураг (бүрхүүл) хавсаргана уу. Тохиолдлын 99% нь Google дээрх дууны нэр дээр суурилсан анхны зургууд нь цомгийн хавтас юм.

Техникийн хувьд файлуудыг хэрхэн нэмэх талаар товчхондоо:

  • Үйлчлүүлэгч нь чөлөөт зангилааны хаягийг хүлээн авдаг бөгөөд энэ нь хэсэг хугацаанд зохицуулагч болно.
  • Дуу нэмэх функцийг (хүн эсвэл кодоор) эхлүүлж, төгсгөлийн цэгт зохицуулагч нэмэх хүсэлтийг гаргадаг.
  • Зохицуулагч нь хичнээн хуулбарыг хадгалах ёстойг тооцоолдог (тохируулж болох параметр).
  • Хадгалахад хамгийн тохиромжтой цэгүүдийг хайж байна.
  • Файл нь эдгээр цэгүүд рүү шууд очдог.

Техникийн хувьд файлуудыг хэрхэн хүлээж авдаг вэ:

  • Үйлчлүүлэгч нь чөлөөт зангилааны хаягийг хүлээн авдаг бөгөөд энэ нь хэсэг хугацаанд зохицуулагч болно.
  • Дууг (хүн эсвэл кодоор) хүлээн авах функцийг ажиллуулж, зохицуулагчийн төгсгөлд хүлээн авах хүсэлтийг тавьдаг.
  • Зохицуулагч нь кэш дэх холбоос байгаа эсэхийг шалгадаг. Хэрэв нэг байгаа бөгөөд энэ нь ажиллаж байгаа бол тэр даруй үйлчлүүлэгч рүү буцаана, эс тэгвээс зангилаанууд бэлэн эсэхийг шалгана.
  • Файл олдвол холбоосоос хүлээн авна.

Хөгжим бүтээгчдэд зориулсан хувилбарууд

Олон бүтээлч бүтээлийн үнэ цэнийг хэрхэн бодитойгоор үнэлэх вэ гэдэг асуулт миний сонирхлыг үргэлж татсаар ирсэн. Жишээлбэл, хүн яагаад хөгжмийн цомгоо 10 доллараар санал болгодог вэ? 20 доллар эсвэл 100 доллараар. Алгоритм хаана байна? Жишээлбэл, бид ямар нэгэн биет бүтээгдэхүүн, тэр ч байтугай олон төрлийн үйлчилгээний талаар ярьж байгаа бол бид ядаж зардлаа тооцож, үүнээс цааш явах боломжтой.

За, бид 10 доллар бооцоо тавьсан гэж бодъё. Энэ маш үр дүнтэй юу? Хаа нэгтээ цомог, тэндээс дуу сонсоод баярласнаа илэрхийлэхээр шийдсэн гэж бодъё. Гэхдээ миний мэдрэмж, өөрийн боломжоор бол 3 доллар бол миний дээд хязгаар юм. Тэгэхээр бид яах ёстой вэ? Би ихэнх хүмүүсийн адил юу ч хийхгүй байх магадлалтай.

Бүтээлч ажилд тодорхой үнэ тогтоосноор та зүгээр л өөрийгөө хязгаарлаж, олон тооны хүмүүс танд бага мөнгө илгээхээс сэргийлж, энэ нь таны тогтоосон үнээр худалдаж авах хүмүүсээс илүү гайхалтай байх болно. Бүтээлч байдал бол хандив тусламж хамгийн түрүүнд байх ёстой салбар юм шиг надад санагддаг. Үүнийг хийхийн тулд танд хэрэгтэй:

  • Ийм байдлаар талархал илэрхийлэхийг хүмүүст заа. Бүтээгчид өөрсдөө хандив авах, өөр өөр төлбөрийн аргуудын холбоосыг хаа сайгүй нэмэх гэх мэтийг тодорхой харуулах ёстой.
  • Эдгээр үйл явцыг хялбарчлах, бэхжүүлэхийн тулд илүү олон механизм шаардлагатай. Жишээлбэл, зохиогчийн эрхийн холбоосыг ашиглан бүтээлч сэтгэлгээнд хандивлах боломжтой дэлхийн хэмжээний вэбсайт үүсгэ.

    Холбоос дараах байдалтай байна гэж бодъё.

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

    Хэрэв бид үүнийг хөгжимчид рүү нарийсгавал:

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

    Жүжигчин өөрийн хочоо баталгаажуулж, түүнд хавсаргах хэрэгтэй.

    Бид museria клиент рүү ийм холбоос үүсгэх функцийг нэмж байгаа бөгөөд хадгалах газрыг ашиглаж буй бүх төслүүд өөрсдийн вэбсайт/аппликейшн дээрх дууны хажууд эдгээр холбоос бүхий хандивын товчлууруудыг байрлуулж болно. Хэрэглэгчид хандиваа маш хурдан бөгөөд хялбар хийх боломжтой. Мэдээжийн хэрэг, энэ аргыг зөвхөн хадгалах замаар бус аливаа төсөл, бүтээлч байдлын ангилалд ашиглаж болно.

Яагаад танд хөгжим хадгалах байгууламж хэрэгтэй байна вэ, та үүнд хэрхэн оролцох вэ?

  • Хэрэв та хөгжимтэй холбоотой төсөл дээр ажиллаж байгаа эсвэл бүтээхээр төлөвлөж байгаа бол бүх зүйл үүнд зориулагдсан болно. Та museria-г ашиглан дууг хадгалах, татаж авах боломжтой бөгөөд ингэснээр онлайн дууны урсгалыг нэмэгдүүлэх боломжтой. Хэрэв та өөрийн гэсэн дор хаяж нэг зангилаа босгож, барих чадвартай бол энэ нь сүлжээг хөгжүүлэхэд хамгийн сайн хувь нэмэр оруулах болно.
  • Магадгүй та өөр үүрэг гүйцэтгэхэд бэлэн байж магадгүй: код бичихэд туслах, мэдээллийн баазыг бөглөх, зохицуулах, төслийн талаарх мэдээллийг найзууддаа түгээх гэх мэт.
  • Магадгүй танд энэ санаа таалагдсан бөгөөд бүх зүйл амьдарч, хөгжихийн тулд санхүүгийн хувьд туслахад бэлэн байна. Илүү олон зангилаа, илүү олон дуу.
  • Эсвэл та хэзээ нэгэн цагт дууг олж татаж авах хэрэгтэй. Та үүнийг маш энгийнээр, жишээлбэл, дамжуулан хийж болно телеграм бот.

Төсөл одоо хамгийн эхний шатандаа явж байна. Туршилтын сүлжээ нээгдсэн, зангилаанууд байнга дахин ачаалж, шинэчлэлт шаарддаг гэх мэт. Үнэлгээний хугацаанд ямар нэгэн ноцтой асуудал гарахгүй бол ижил сүлжээг үндсэн сүлжээ болгон хувиргадаг.

Та зангилааны талаарх мэдээллийг гаднаас нь харж болно: дууны тоо, сул зай гэх мэт холбоосыг ашиглан http://node-address/status буюу http://node-address/status?pretty

Миний харилцагчид:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх