Museria - พื้นที่จัดเก็บเพลงแบบกระจายอำนาจ

Museria - พื้นที่จัดเก็บเพลงแบบกระจายอำนาจ

วันหนึ่งฉันตัดสินใจเขียนแอปพลิเคชันเพื่อเลือกเพลงสำหรับตัวเองและฟังที่บ้าน/บนท้องถนน/ออกกำลังกาย ฯลฯ และเพื่อให้ทั้งหมดนี้ดำเนินไปอย่างราบรื่นโดยมีส่วนร่วมน้อยที่สุดจากฉัน ฉันคิดสถาปัตยกรรม ร่างต้นแบบ และในที่สุดก็พบ “ปัญหาเล็กๆ” อย่างหนึ่ง

และยังไม่ชัดเจนว่าจะรับไฟล์เพลงได้ที่ไหน มาถึงตอนนี้ VKontakte ได้ปิด API แล้ว ทุกอย่างก็ถูกปิดบนพอร์ทัลเพลงขนาดใหญ่ แม้แต่เพลงก็แจกเป็นชิ้น ๆ เพื่อไม่ให้แยกวิเคราะห์ สิ่งที่เหลืออยู่คือไซต์ที่บินกลางคืนซึ่งมีโฆษณามากมายและขยะทุกประเภท โปรแกรม Grabber ที่น่าสงสัยทุกประเภทและตัวเลือก "สกปรก" อื่น ๆ โดยทั่วไปแล้ว ไม่ใช่วิธีแก้ปัญหาที่ดีสักวิธีเดียว แน่นอนคุณสามารถซื้อการสมัครสมาชิกเพลง Yandex หรือสิ่งที่คล้ายกันได้ แต่ขอย้ำอีกครั้งว่าไม่มี API สาธารณะแบบเปิดที่ไหนเลย และคุณไม่สามารถเข้าถึงเพลงโดยทางโปรแกรมได้ บริษัทขนาดใหญ่หลายแห่งจำกัดการเข้าถึงเพลงของผู้อื่นโดยพื้นฐานแล้ว ทำไมสิ่งนี้ถึงเกิดขึ้นเลย? เมื่อเจาะลึกลงไปก็พบว่าปัญหาหลักคือเรื่องลิขสิทธิ์ โซลูชันปัจจุบันในรูปแบบของการสมัครสมาชิกเหมาะสมกับผู้แต่งเพลงเชิงพาณิชย์จำนวนมากและบริษัทเดียวกันเหล่านี้ ในขณะเดียวกัน เพลงที่ไม่ใช่เชิงพาณิชย์และกึ่งเชิงพาณิชย์ก็รวมอยู่ในรายการทั่วไปด้วย คุณอาจจ่ายทุกอย่างหรือไม่ฟังอะไรเลย

และฉันก็เริ่มคิดว่าจะทำอย่างไรกับเรื่องทั้งหมดนี้ เราจะจัดระเบียบการจำหน่ายเพลงฟรีได้อย่างไร? ฉันจะทำอย่างไรถ้าฉันสร้างเพลงด้วยตัวเองและต้องการสร้างรายได้จากมัน? ฉันจะชอบไหมถ้าเพลงของฉันถูกละเมิดลิขสิทธิ์? มีทางเลือกอื่นในการแก้ปัญหาอย่างไร?

เป็นผลให้มีปัญหาหลักสองประการที่ต้องแก้ไข:

  • จัดระเบียบการเผยแพร่เพลงฟรีโดยใช้วิธีการที่สะดวกสำหรับคนส่วนใหญ่ รวมถึงซอฟต์แวร์
  • เสนอทางเลือกสำหรับผู้สร้างเพลงในการสร้างรายได้

พื้นที่จัดเก็บเพลงแบบกระจายอำนาจทั่วโลก

ในตอนแรก ฉันพยายามค้นหาวิธีแก้ปัญหาที่มีอยู่และสร้างทุกอย่างตามสิ่งนี้ หลังจากค้นหามาสักพัก สิ่งแรกที่ฉันชอบคือ ไอพีเอส. ฉันเริ่มนำแนวคิดของฉันไปใช้ แต่หลังจากนั้นไม่นาน ฉันพบปัญหาสำคัญหลายประการในโซลูชันนี้:

  • Ipfs - พื้นที่เก็บข้อมูลสำหรับทุกสิ่งและทุกคน มีภาพและเพลงและวิดีโอและทุกสิ่งที่คุณต้องการ โดยทั่วไปแล้ว "ถังขยะ" ของดาวเคราะห์ขนาดใหญ่เช่นนี้ ดังนั้นเมื่อคุณเปิดโหนด คุณจะได้รับภาระงานจำนวนมากทันที รถก็บิดงอด้วยความเจ็บปวด
  • กลไกการเก็บ "ขยะ" ที่ยังไม่เสร็จบางประเภท ฉันไม่รู้ว่าตอนนี้เป็นอย่างไรบ้าง แต่ในขณะนั้น ถ้าคุณเขียนในการกำหนดค่าว่าคุณต้องการจำกัดพื้นที่เก็บข้อมูลไว้ที่ข้อมูลสิบกิกะไบต์ มันก็ไม่ได้มีความหมายอะไรเลย พื้นที่เก็บข้อมูลเพิ่มขึ้น โดยไม่สนใจพารามิเตอร์การกำหนดค่ามากมาย เป็นผลให้จำเป็นต้องมีฮาร์ดดิสก์สำรองจำนวนมากจนกว่า ipfs จะทราบวิธีรีเซ็ตสิ่งที่ไม่จำเป็น
  • ในขณะที่ใช้ไลบรารี (ฉันไม่รู้ว่าตอนนี้เป็นอย่างไรบ้าง) ลูกค้าไม่ได้ใช้งานการหมดเวลา คุณส่งคำขอเพื่อรับไฟล์ และหากไม่มีอยู่ คุณก็แค่หยุดทำงาน แน่นอนว่าผู้คนมีวิธีแก้ไขปัญหาทุกประเภทที่สามารถแก้ไขปัญหาได้บางส่วน แต่สิ่งเหล่านี้กลับกลายเป็นไม้ค้ำยัน สิ่งเหล่านี้ควรออกมาจากกล่อง

ยังคงมีปัญหาเล็กๆ น้อยๆ มากมาย และความประทับใจที่ฉันได้รับในตอนนั้นก็ชัดเจน: สิ่งนี้ใช้กับโครงการนี้ไม่ได้ ฉันค้นหาสถานที่จัดเก็บต่อไป สำรวจตัวเลือกต่างๆ แต่ก็ไม่พบสิ่งที่เหมาะสมเลย

ในท้ายที่สุด ฉันตัดสินใจว่าการพยายามเขียนพื้นที่เก็บข้อมูลแบบกระจายอำนาจด้วยตัวเองนั้นคุ้มค่า แม้ว่ามันจะไม่ได้เสแสร้งว่าเป็นดาวเคราะห์ แต่มันก็สามารถแก้ปัญหาเฉพาะได้

และมันก็ปรากฏออกมา แพร่กระจายได้, ที่เก็บ, การแพร่กระจาย, พิพิธภัณฑ์, Museria-ทั่วโลก.

แพร่กระจายได้ - นี่คือเลเยอร์หลักที่ต่ำที่สุดที่ให้คุณรวมโหนดเข้ากับเครือข่าย มันมีอัลกอริธึมซึ่งฉันได้นำมาใช้บางส่วนโดยอิงจากเซิร์ฟเวอร์ประมาณ 10000 เครื่อง อัลกอริธึมเวอร์ชันเต็มนั้นยากกว่ามากในการนำไปใช้และต้องใช้เวลาเพิ่มอีกหลายเดือน (อาจจะมากกว่านั้น)

ฉันจะไม่อธิบายรายละเอียดการแพร่กระจายในบทความนี้ ดีกว่าถ้าเขียนแยกกันสักวันหนึ่ง ที่นี่ฉันจะสังเกตคุณสมบัติบางอย่าง:

  • ทำงานผ่าน http/https
  • คุณสามารถสร้างเครือข่ายแยกต่างหากสำหรับงานเฉพาะ ซึ่งจะช่วยลดภาระในแต่ละโครงการได้อย่างมาก เมื่อเทียบกับงานทั้งหมดที่อยู่ในเครือข่ายเดียวกัน
  • ในตอนแรกมีการพิจารณากลไกที่มีการหมดเวลาและสิ่งเล็กน้อยอื่น ๆ และใช้ได้กับทุกวิธีทั้งในไคลเอนต์และในโหนด คุณสามารถจัดการการตั้งค่าได้อย่างยืดหยุ่นจากภายในแอปพลิเคชันของคุณ
  • ไลบรารี่เขียนด้วย nodejs ปัญหาด้านประสิทธิภาพของสแต็กถูกชดเชยโดยลักษณะการกระจายอำนาจ โหลดสามารถ "กระจาย" ได้โดยการเพิ่มจำนวนโหนด ในทางกลับกัน มีข้อดีหลายประการ: ชุมชนขนาดใหญ่ ความเรียบง่ายและใช้งานง่าย ไคลเอนต์ isomorphic ไม่มีการพึ่งพาภายนอก ฯลฯ

ที่เก็บ เป็นเลเยอร์ที่สืบทอดมาจากสเปรดเอเบิลที่ให้คุณจัดเก็บไฟล์บนเครือข่าย แต่ละไฟล์มีแฮชเนื้อหาของตัวเอง ซึ่งสามารถใช้เพื่อเรียกคืนได้ในภายหลัง ไฟล์ไม่ได้แบ่งออกเป็นบล็อก แต่จะถูกเก็บไว้ทั้งหมด

การแพร่กระจาย - เลเยอร์ที่สืบทอดมาจากสเปรดได้ ซึ่งช่วยให้คุณจัดเก็บข้อมูลบนเครือข่าย แต่ไม่ใช่ไฟล์ อินเทอร์เฟซคล้ายกับฐานข้อมูล Nosql ตัวอย่างเช่น คุณสามารถเพิ่มไฟล์ลงใน storacle รับแฮชของไฟล์ และเขียนลงใน metastocle พร้อมลิงก์ไปยังบางสิ่ง

พิพิธภัณฑ์ - สืบทอดมาจาก storacle และ metastocle เลเยอร์นี้มีหน้าที่โดยตรงในการจัดเก็บเพลง พื้นที่เก็บข้อมูลใช้งานได้กับไฟล์ MP3 และแท็ก id3 เท่านั้น

เนื่องจากเป็น "กุญแจ" ของเพลง จึงมีการใช้ชื่อเต็มของเพลงในรูปแบบนี้ ศิลปิน (TPE1) - ชื่อ (TIT2). ตัวอย่างเช่น

  • Brimstone - ภาระ
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

คุณสามารถดูรายละเอียดวิธีการสร้างชื่อเพลงได้มากที่สุดเท่าที่จะเป็นไปได้ ที่นี่. คุณต้องดูที่ฟังก์ชั่น utils.beautifySongTitle().

เปอร์เซ็นต์ของการจับคู่ที่กำหนดในการตั้งค่าโหนดจะถือเป็นการจับคู่ ตัวอย่างเช่น ค่า 0.85 หมายความว่าหากฟังก์ชันการเปรียบเทียบคีย์ (ชื่อเพลง) พบความคล้ายคลึงกันมากกว่า 85% แสดงว่าเป็นเพลงเดียวกัน

อัลกอริธึมสำหรับการพิจารณาความคล้ายคลึงกันมีอยู่ในฟังก์ชันนี้ utils.getSongSimilarity().

สามารถแนบเพลงคัฟเวอร์เพื่อรับในภายหลังผ่านแท็กได้ (APIC). ยูทิลิตี้มีวิธีการที่จำเป็นทั้งหมดในการรับและประมวลผลแท็ก

คุณสามารถดูตัวอย่างการทำงานกับที่เก็บข้อมูลผ่านไคลเอนต์ได้ README.

เลเยอร์ด้านบนทั้งหมดมีอยู่ในตัวเองและสามารถใช้แยกกันเป็นชั้นล่างสำหรับโปรเจ็กต์อื่นได้ ตัวอย่างเช่นมีแนวคิดที่จะสร้างชั้นสำหรับจัดเก็บหนังสืออยู่แล้ว

Museria-ทั่วโลก เป็นพื้นที่เก็บข้อมูล git ที่กำหนดค่าไว้แล้วสำหรับการเปิดตัวโหนดของคุณเองในเครือข่ายเพลงระดับโลก การโคลนนิ่ง npm ฉัน && 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

ผู้ติดต่อของฉัน:

ที่มา: will.com

เพิ่มความคิดเห็น