ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Perkeep 项目状态全景:Blob 服务器、索引搜索与工具链的成熟度解析

Perkeep 项目状态全景:Blob 服务器、索引搜索与工具链的成熟度解析 后端数据存储【免费下载链接】perkeepPerkeep (née Camlistore) is your personal storage system for life: a way of storing, syncing, sharing, modelling and backing up content.项目地址https://gitcode.com/gh_mirrors/pe/perkeep点击查看免费下载本文以 Perkeep原 Camlistore官方状态文档 doc/status.md 为骨架逐项解读其规格层Blob Server、Sharing、Search API、服务器层perkeepd、索引器、测试套件与工具链层pk put、pk-get、pk-mount、Android 上传器、Clip It Good的完成度与真实实现并结合当前仓库源码与命令文档还原每个组件的实际能力边界。读完本文你可以快速判断 Perkeep 各模块能做什么、不能做什么并掌握 pk put / pk-get / pk-mount 等核心工具的具体用法。一、status.md 是什么一份持续多年的成熟度快照Perkeep 是一个终身个人存储系统包含 架构上的多个部件 与 大量潜在用例。doc/status.md 的作用正是以表格形式逐项列出这些部件与用例当前所处的位置——完成百分比、可用状态与注意事项。需要特别说明的是该文档的Last updated时间为2013-02-02且文档本身注明更新频率很低请以邮件列表或 git 提交日志为准。因此它是一份历史成熟度快照而非对当前代码库的最新宣称。本文在解读每个条目时会同时给出当前仓库中的源码与命令文档作为印证帮助读者区分当年规划与现在代码里实际有什么。二、规格层Specification协议与能力的完成度状态文档的第一张表直接给出三个核心规格的完成度ItemStatusNotesBlob Server95%见 doc/protocol/Sharing50%见邮件列表 Example of sharing 线程Search API0%仅有初步构想2.1 Blob Server约 95% 完成Blob Serverblobserver是 Perkeep 最基础、最成熟的部件。其协议文档收敛在 doc/protocol/包含五份具体协议说明Discovery服务发现Blob 操作Enumerate、Get、Stat、Upload、Upload Resume分别见 blob-enumerate.md、blob-get.md、blob-stat.md、blob-upload.md、blob-upload-resume.mdJSON 签名与校验从仓库代码结构看95%的说法是可信的pkg/blobserver/目录下实现了极其丰富的存储后端与组合型存储包括本地磁盘localdisk、diskpacked、blobpacked、files、云存储s3、azure、google、mongo、以及可叠加的抽象层shard分片、replica副本、remote远程、cond条件、encrypt加密、union并集、namespace命名空间、overlay覆盖层、proxycache代理缓存等并通过 interface.go 定义统一的 Blob 存取接口。这正是 doc/overview.md 所描述的存储层任意可组合设计。2.2 Sharing约 50% 完成状态文档对 Sharing 的评价是完成了约一半。仓库中的 doc/sharing.md 给出了当年已跑通的完整共享流程示例邮件线程复现你在私有 blobserver 上拥有一个文件例如Hi.txt其数据 blob 与元数据 blob 即使被人知道名字也无法访问私有服务器会返回 401。私服对不存在的 blob 的响应至少延迟 200ms以掩盖时序攻击、防止探测 blob 是否存在。服务器配置中必须开启shareHandler: true见 server-config.md才能提供共享处理。执行pk put share --transitive blobref创建共享 blob他人可通过/share/blobref前缀无认证访问authType为haveref即拥有链接即可访问。从 cmd/pk-put/doc.go 看share模式至今仍是 pk-put 的一等公民子命令负责通过创建 share blob 授予对某资源的访问权服务器端则对应pkg/server/share.go的共享处理器。因此50%反映的是当年生态尚未铺开而非协议缺失——核心链路在仓库中均有实现。2.3 Search API从0%到独立的 search 包这是三张状态表中唯一标注为 0% 的条目注释是仅有初步构想initial hand waving only。然而从当前仓库看搜索能力已远不止此pkg/search/是一个完整独立的 Go 包其包文档search.go明确写道Package search describes and answers Perkeep search queries.并提供QueryDescriber接口Query与Describe两个方法以及配套的 handler.go、query.go、predicate.go、lexer.go、websocket.go 等实现文件。可以说状态文档中的0%是 2013 年初的瞬间快照仓库现在的搜索模块含查询语言、谓词、词法解析与 WebSocket 实时搜索已经是一套可用的框架。三、服务器层Serversperkeepd 与索引器的真实形态状态文档的第二张表描述了服务器侧三个部件ItemStatusNotesServer95%Go 编写运行于 Linux、OS X、Windows偶有回退与 App Engine承担 blobserver、UI、search、sharing 等Search / indexer server95%框架良好且可用可运行于 memory、SQLite、MySQL、Postgres、MongoDB 或 App Engine是上述 server 使用的库Blob Server test suite80%见server/tester/bs-test.pl已停止维护主要改用 Go 单元测试3.1 Serverperkeepd集大成的单体状态文档中的 Server 即当前仓库的server/perkeepd。其入口 perkeepd.go 直接声明The perkeepd binary is the Perkeep server.main()中输出版本与 Go 运行时信息后启动整个服务。它把 blobserver、Web UI、搜索、共享等功能聚合在一个进程内是95%这一评级的主体承载者。项目根目录 README.md 也提示可通过go run make.go编译整个项目。3.2 Search / indexer server一套可插拔的 KV 抽象状态文档强调索引器是 server 使用的一个库并且底层存储可任意切换。这一点在代码中体现得极为彻底pkg/index/提供索引语义corpus、keys、receive、sniff 等并通过pkg/sorted/这一 KV 抽象层落地到具体存储pkg/sorted/kv.go 中的NewKeyValue(cfg)根据 JSON 配置创建对应实现KeyValue接口要求能按排序序扫描NewKeyValueMaybeWipe还会在返回NeedWipeError时自动清库重建具体实现覆盖 memorypkg/sorted/mem.go、SQLitepkg/sorted/sqlite/、LevelDBpkg/sorted/leveldb/、MySQLpkg/sorted/mysql/、Postgrespkg/sorted/postgres/、MongoDBpkg/sorted/mongo/、以及通用 SQL KVpkg/sorted/sqlkv/测试侧可见 leveldb_test.go 直接用leveldb.NewStorage建临时目录验证索引index_test.go 还特别提到 SQLite 是唯一自成包、需单独校验的存储。这与状态文档列出的memory、SQLite、MySQL、Postgres、MongoDB 或 App Engine完全对应App Engine 与 LevelDB 为后续演进。索引可从存储侧随时重建的特性doc/overview.md 所述索引损坏就删掉重放即可也由此抽象天然成立。3.3 Blob Server 测试套件从 Perl 脚本转向 Go 单测状态文档标注bs-test.pl原server/tester/未维护主要改用 Go 单元测试。当前仓库确实已找不到该脚本而pkg/blobserver/下大量*_test.go如 blobhub_test.go、sync_test.go、receive_test.go、各存储后端的测试承担了对 Blob Server 的验证职责印证了这一转变。四、工具链层Tools五个命令与客户端状态文档的第三张表是工具清单ItemStatusNotespk put99%向 blobserver 注入内容的厨房水槽工具Android 客户端也以子进程方式使用它pk-get10%从 blobserver 取回内容pk-mountread-onlyFUSE 挂载支持 Linux 与 OS XAndroid Uploader90%可备份 SD 卡照片等到 blob 服务器支持Share with Perkeep模式Clip It Good80%Chrome 扩展右键图片保存到 blobserver4.1 pk put现 cmd/pk-put99% 的厨房水槽状态文档称 pk put相当好用了。其命令文档 cmd/pk-put/doc.go 给出了完整的用法骨架pk-put [globalopts] mode [commandopts] [commandargs]模式一览即厨房水槽的含义——一个二进制覆盖几乎所有写入操作模式作用delete创建并上传一条 delete claimattr添加、设置或删除 permanode 的某个属性file上传文件init初始化 pk-put 配置文件无参数时尝试使用默认身份 secret ring 中的 GPG 密钥permanode创建并上传一个 permanoderawobj上传自定义 JSON schema blob调试用share通过创建 share blob 授予资源访问权blob上传原始 blob典型示例原文完整保留pk-put file [opts] file(s)/director(ies) pk-put file --permanode --titleHomedir backup --tagbackup,homedir $HOME pk-put file --filenodes /mnt/camera/DCIM pk-put blob files (raw, without any metadata) pk-put blob --permanode --titleMy Blob --tagbackup,my_blob pk-put blob - (read from stdin) pk-put permanode (create a new permanode) pk-put permanode --titleSome Name --tagfoo,bar (with attributes added) pk-put init pk-put init --gpgkeyXXXXX pk-put share [opts] blobref to share via haveref pk-put rawobj (debug command) pk-put attr permanode name value Set attribute pk-put attr --add permanode name value Adds attribute (e.g. tag) pk-put attr --del permanode name [value] Deletes named attribute [value]全局选项原文完整保留并加注-secret-keyring~/.gnupg/secring.gpgGnuPG 私钥环文件路径-serverPerkeep 服务器前缀留空则使用~/.camlistore/config中server字段的默认值。可接受形式https://you.example.com、example.com:1345隐式 https或http://you.example.com/alt-root-verbosefalse额外调试日志-verbose_httpfalse显示 HTTP 请求摘要-versionfalse显示版本从源码结构看99%名副其实cmd/pk-put/下有 put.go、files.go、blobs.go、permanode.go、attr.go、share.go、delete.go、rawobj.go、uploader.go 等与命令文档的每个模式一一对应。值得注意的是文档作者在文件头注明此文档与 pk-put 的 help 输出尚未完全同步因此个别细节以pk-put mode -help为准。4.2 pk-get现 cmd/pk-get10% 的取回工具状态文档给 pk-get 打了 10%其命令文档 cmd/pk-get/doc.go 也坦承Camget 还不是特别完善并建议取回文件一般用 pk-mount 挂载树更简单。其基本用法如下pk-get blobref // dump raw blob默认写 stdout pk-get -contents file-blobref // dump file contents pk-get -o dir blobref // 类似 curl 的 -o若 dir 已存在且为目录blobref 必须是目录 pk-get -o filename file-blobref // 输出到文件用 -f 覆盖已有文件从代码看cmd/pk-get/除 get.go 外还有 graph.go用于拉取 blob 图谱说明基本取回链路已具备只是功能面仍较窄。4.3 pk-mount现 cmd/pk-mountread-only 的 FUSE 挂载状态文档标注为只读、支持 Linux 与 OS X。命令文档 cmd/pk-mount/doc.go 提供了完整的使用手册其能力远超10%级别的工具基本挂载mkdir ~/Perkeep pk-mount ~/Perkeep cd ~/Perkeep ls -C1挂载根目录下会呈现一组虚拟目录WELCOME.txt at date recent roots sha1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx sha224-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx tag创建根节点文件与目录锚定在根节点上可在roots目录下直接创建例如mkdir roots/Photos后cp -R ~/Photos/* .。访问近期内容recent目录列出最近访问/放入的项目如照片IMG_20171104_193001.jpg及其缩略图。访问历史时刻at目录内含 README.txt说明如何回到某个时间点查看内容状态。直接按 blobref 访问cd sha224-xxxxxx 为完整 56 字符标识符即可直达指定节点。FUSE 视图下的 schema 约定原文完整保留目录是带camliRoot值为目录名的 permanode或是camliNodeType为directory、title为目录名的 permanode文件是带camliContent值为文件 schema 的 blobRef即 fileRef的 permanode目录的子节点依旧是目录或文件表示 bar 目录的 permanode Y 上若属性camliPath:foo的值是 permanode X 的 blobRef则 X 是 Y 的子节点。完整命令行用法pk-mount [opts] [mountpoint [root-blobref|share URL|root-name]] -debug 打印调试信息 -help 打印用法 -legal 显示许可证 -open 打开 GUI 窗口 -secret-keyring string GnuPG 私钥环文件 -server string Perkeep 服务器前缀留空则用默认配置的 server 字段 可接受 https://you.example.com、example.com:1345隐式 https、 http://you.example.com/alt-root -term 打开终端窗口退出时不关闭多用于演示 -verbose 额外调试日志 -version 显示版本 -xterm 在挂载目录中运行 xtermxterm 结束即退出根 blobref 既可显式给出也可通过 share blob URL 给出缺省时自动创建根。4.4 Android Uploader90%与 Clip It Good80%Android Uploader对应clients/android/Gradle 工程含app/src的 Java 源码与 AIDL 接口状态文档描述其UI 有些地方较丑但可用能按需备份 SD 卡照片等到 blob 服务器内部以子进程方式调用 pk put也支持Share with Perkeep模式一次分享一个资源。Clip It Good对应clients/chrome/clip-it-good/是一个 Chrome 扩展允许对图片右键直接保存到 blobservermanifest.json、background.html、options.html 与配套 JS/CSS 均在目录内。状态文档注明其目前仍是 fork 版本。五、高层用例High-Level Use Cases路线图与现状状态文档最后一部分以 TODO 占位把用例细节留给 doc/uses.md。该文档更新于 2013-06-12列出了六大高层目标及其实施阶段可作为状态文档的补充文件系统备份最易上手的用例。通过 pk-put 把 文件与目录 schema 存入 Perkeep 即可做备份增量备份几乎是免费的。高效远程文件系统做一个激进缓存的远程 FUSE 文件系统只读简单读写也不会太难且每次修改都会被隐式快照版本控制成为默认行为。去中心化共享系统默认可私有、可对任何人/所有人分享参见 sharing。博客 / 相册托管 / 文档管理 CMS作者计划用 Perkeep 托管个人博客与带权限的相册并替换其 scanningcabinet 文档管理软件仓库中恰好保留着app/scanningcabinet/这一扫描柜应用。去中心化社交网络长期目标——用 claim 为他人图片附加评论/标签等元数据签名保证身份共享/同步语义让你轻松保存好友照片的副本。托管服务导入/导出适配器把社交网络等线上数据镜像回私有存储仓库pkg/importer/下的 feed、flickr、gphotos、twitter、instagram 等导入器正是这一用例的后续落地。六、如何正确阅读这份状态表结合源码回看 doc/status.md有几点值得注意百分比是当年的瞬间评价不是实时数据。文档自身的 Last updated 停留在 2013 年且明确提示以邮件列表与 git 日志为准。例如 Search API 标注 0%但当前pkg/search/已是一套可用的查询框架pk-get 标注 10%其基本取回与图谱功能在 cmd/pk-get 中确实存在。标注95%的部分Blob Server、Server、索引器在代码中最为扎实pkg/blobserver/的存储后端矩阵、pkg/sorted/的 KV 抽象与pkg/index/、pkg/search/的库化设计均可与文档一一印证。工具与客户端的完成度分层明显写入链路pk put最成熟读取与挂载链路次之GUI 客户端Android、Chrome 扩展属可用但粗糙。如果你想深入验证某个条目的当前状态最可靠的方式是直接阅读对应源码目录Blob 服务器看pkg/blobserver/索引看pkg/index/与pkg/sorted/搜索看pkg/search/服务器看server/perkeepd/工具看cmd/下对应子目录及其doc.go命令文档——它们共同构成了这份状态表背后的真实代码证据。赞分享后端数据存储【免费下载链接】perkeepPerkeep (née Camlistore) is your personal storage system for life: a way of storing, syncing, sharing, modelling and backing up content.项目地址https://gitcode.com/gh_mirrors/pe/perkeep点击查看免费下载相关推荐FullStackHero搜索引擎全文搜索服务集成FullStackHero搜索引擎全文搜索服务集成 痛点传统搜索功能的局限与挑战 在现代企业级应用中搜索功能往往是用户体验的关键环节。传统的数据库查询方式后端前端示例工程认证鉴权distroless搜索引擎Elasticsearch等搜索服务的容器化distroless搜索引擎Elasticsearch等搜索服务的容器化 引言为什么搜索服务需要distroless容器化 在现代微服务架构中搜索引擎如云原生Sphinx搜索服务器高性能全文搜索引擎的终极指南Sphinx搜索服务器高性能全文搜索引擎的终极指南 Sphinx搜索服务器是一个开源的高性能全文搜索引擎专为快速搜索大量文本数据而设计。无论您是需要为网站添上一篇明日方舟MAA自动化助手终极指南从零构建智能游戏辅助系统下一篇Windows Cleaner彻底解决C盘爆红问题的终极免费工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表