Museria - 去中心化音乐存储

Museria - 去中心化音乐存储

有一天,我决定编写一个应用程序来为自己选择音乐,并在家/在街上/锻炼时等听。 因此,所有这一切都在一个流程中进行,而我的参与最少。 我想出了一个架构,勾勒出了一个原型,最终遇到了一个“小问题”。

目前还不清楚从哪里获取歌曲文件本身。 此时,VKontakte 已经关闭了 api,大型音乐门户网站上也全部静音,就连歌曲也被分成了几段,以免被解析。 剩下的只是一些单独的不可靠的网站,其中有大量广告和各种垃圾,各种可疑的抓取程序和其他“肮脏”选项。 一般来说,没有一个真正好的解决方案。 当然,您可以订阅一些 Yandex 音乐等。 但同样,任何地方都没有开放的公共 API,您无法以编程方式访问音乐。 几家大公司基本上限制了其他人获取音乐。 为什么会发生这种事? 深入挖掘后,我们发现主要问题是版权。 当前订阅形式的解决方案适合许多商业音乐作者和这些公司。 同时,非商业和半商业音乐也属于一般列表。 你要么支付所有费用,要么什么都不听。

我开始思考如何处理这一切。 我们如何组织音乐的免费分发? 如果我自己创作音乐并想从中赚钱我该怎么办? 如果我的歌曲被盗版,我会喜欢吗? 无论如何,还有什么替代解决方案吗?

因此,有两个主要问题需要解决:

  • 使用对大多数人来说方便的方法(包括软件)组织免费分发音乐。
  • 为音乐创作者提供赚钱的替代方案

全球去中心化音乐存储

最初,我试图找到现有的解决方案并在此基础上创建一切。 经过一段时间的搜索,我第一个喜欢的是 IPF问题。 我开始实施我的想法,但过了一段时间我发现这个解决方案存在几个关键问题:

  • 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/status или http://node-address/status?pretty

我的联系方式:

来源: habr.com

添加评论