Museria - 去中心化音樂存儲

Museria - 去中心化音樂存儲

有一天,我決定編寫一個應用程式來為自己選擇音樂,並在家/在街上/運動時等著聽。 因此,所有這一切都在一個流程中進行,而我的參與最少。 我想出了一個架構,勾勒出了一個原型,最後遇到了一個「小問題」。

目前還不清楚從哪裡獲取歌曲檔案本身。 此時,VKontakte 已經關閉了 api,大型音樂入口網站上也全部靜音,甚至連歌曲也被分成幾段發出,以免被解析。 剩下的只是一些單獨的不可靠的網站,其中有大量廣告和各種垃圾,各種可疑的抓取程式和其他「骯髒」選項。 一般來說,沒有一個真正好的解決方案。 當然,您可以訂閱一些 Yandex 音樂等。 但同樣,任何地方都沒有開放的公共 API,您無法以程式設計方式存取音樂。 幾家大公司基本上限制了其他人獲取音樂。 為什麼會發生這種事? 深入挖掘後,我們發現主要問題是版權。 目前訂閱形式的解決方案適合許多商業音樂作者和這些公司。 同時,非商業和半商業音樂也屬於一般清單。 你要么支付所有費用,要么什麼也不聽。

我開始思考如何處理這一切。 我們如何舉辦音樂的免費分發? 如果我自己創作音樂並想從中賺錢該怎麼辦? 如果我的歌曲被盜版,我會喜歡嗎? 無論如何,還有什麼替代解決方案嗎?

因此,有兩個主要問題需要解決:

  • 使用對大多數人來說方便的方法(包括軟體)組織免費分發音樂。
  • 為音樂創作者提供賺錢的替代方案

全球去中心化音樂存儲

最初,我試圖找到現有的解決方案並在此基礎上創建一切。 經過一段時間的搜索,我第一個喜歡的是 ipfs。 我開始實施我的想法,但過了一段時間我發現這個解決方案有幾個關鍵問題:

  • Ipfs - 為所有人和一切提供儲存。 這裡有圖像、音樂、影片以及你想要的一切。 一般來說,這麼大的行星「垃圾箱」。 因此,當您啟動節點時,您會立即收到巨大的負載。 車子只是痛苦地翻滾著。
  • 某種未完成的「垃圾」收集機制。 我不知道現在怎麼樣,但那時,如果你在配置中寫下你想將存儲限制為十GB數據,那麼它沒有任何意義。 儲存成長,忽略了許多配置參數。 因此,需要有大量的硬碟儲備,直到 ipfs 弄清楚如何重置不必要的硬碟。
  • 在使用該庫時(我不知道現在怎麼樣),客戶端沒有實現超時。 您發送一個接收文件的請求,如果它不存在,那麼您就掛起。 當然,人們想出了各種解決方法,部分解決了問題,但這些都是拐杖。 這些東西應該要開箱即用。

還有很多小問題,而且印像很明顯:這不能用於該專案。 我繼續尋找儲存設施,探索不同的選擇,但從未找到合適的。

最後,我決定自己嘗試編寫一個去中心化儲存是值得的。 即使它不假裝是星際的,它也會解決一個特定的問題。

事實證明 可塗抹的, 儲藏室, 繼發性, 穆塞里亞, 全球穆塞里亞.

可塗抹的 - 這是主要的最低層,可讓您將節點組合到網路中。 它包含一個演算法,到目前為止我已經部分基於大約 10000 台伺服器實作了該演算法。 該演算法的完整版本實現起來要困難得多,並且需要額外幾個月(可能更多)。

我不會在這篇文章中詳細描述 spreadable;最好有一天單獨寫一篇。 這裡我只記錄一些特點:

  • 透過 http/https 工作。
  • 您可以為特定任務建立單獨的網絡,與所有項目都位於同一網絡上相比,這將顯著減少每個單獨項目的負載。
  • 最初考慮了一種帶有超時和其他小東西的機制。 這適用於客戶端和節點中的所有方法。 您可以在應用程式內靈活管理設定。
  • 該函式庫是用nodejs寫的。 此堆疊的效能問題被其去中心化性質所抵消。 可以透過增加節點數量來「分散」負載。 反過來,有許多優點:龐大的社群、簡單易用、同構客戶端、無外部依賴等。

儲藏室 是從 spreadable 繼承的層,允許您在網路上儲存檔案。 每個檔案都有自己的內容雜湊值,可用於稍後檢索。 文件不分為區塊,而是完整儲存。

繼發性 - 從spreadable繼承的層,它允許您在網路上儲存數據,但不能儲存檔案。 此介面類似於Nosql資料庫。 例如,您可以將一個檔案新增至soracle,取得其雜湊值並將其寫入metastocle並帶有指向某些內容的連結。

穆塞里亞 - 繼承自儲藏室及後儲藏室。 這層直接負責儲存音樂。 此儲存空間僅適用於 mp3 檔案和 id3 標籤。

作為歌曲的“鑰匙”,其全名採用以下形式 藝術家 (TPE1) - 頭銜 (TIT2)。 例如:

  • 硫磺 - 負擔
  • Hi-rez - Lost My Way(壯舉。Emilio Rojas、Dani Devinci)

您可以盡可能詳細地了解歌曲標題的形成方式。 這裡。 你需要看看函數 utils.beautifySongTitle().

節點設定中定義的匹配百分比被視為匹配。 例如,值為 0.85 表示如果關鍵比較函數(歌曲名稱)發現相似度超過 85%,則為同一首歌曲。

確定相似度的演算法存在於函數中 utils.getSongSimilarity().

歌曲的封面,供日後接收,也可以透過標籤附加(APIC)。 公用事業公司擁有接收和處理標籤的所有必要方法。

透過客戶端使用儲存的範例可以在 自述.

上述所有層都是獨立的,可以單獨用作其他項目的較低層。 例如,已經有一個想法是製作一個用於儲存書籍的層。

全球穆塞里亞 是一個已配置的 git 儲存庫,用於在全球音樂網路中啟動您自己的節點。 複製 npm 我 && npm 開始,基本上就是這樣。 您可以更詳細地配置它,在 Docker 中運行它等。 詳細資訊請參見 知乎.

當儲存庫更新時,您需要更新您的節點。 如果主版本號或次版本號發生變化,則此操作是強制性的,否則舊節點將被網路忽略。

您可以手動和編程方式處理歌曲。 每個節點運行一個伺服器來執行不同的任務。 其中,當您存取預設端點時,您將收到一個用於處理音樂的介面。 例如,您可以訪問 根節點 (後面的連結可能不相關了,輸入節點也可以在 電報,或在 Github 上尋找更新)。

這樣您就可以搜尋歌曲並將其上傳到儲存中。 上傳歌曲可以採用兩種模式:正常模式和審核模式。 第二種模式是指工作由人來完成,而不是由程式來完成。 如果新增時勾選此框,則需要解決驗證碼。 可新增優先權為 -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/statushttp://node-address/status?pretty

我的聯繫方式:

來源: www.habr.com

添加評論