开源十年后 Cap’n Proto 1.0 终发布,比 Protocol Buffers 快太多

CapnProto1.0作为长期支持版本发布,该项目由ProtocolBuffersv2开发者创建,提供了性能优化和改进,包括RPC性能调整、取消RPC选项变化及C++API升级计划。2.0版本将关注C++20支持和用户体验改进。
摘要由CSDN通过智能技术生成
导读Cap'n Proto 是一种速度极快的数据交换格式和 capability-based RPC 系统,于 2013 年 4 月开源发布。时至今日,Cap'n Proto 1.0 终于发布,这是一个长期支持版本。

Cap'n Proto 是一种速度极快的数据交换格式和 capability-based RPC 系统,于 2013 年 4 月开源发布。时至今日,Cap'n Proto 1.0 终于发布,这是一个长期支持版本。

Cap'n Proto 项目作者是 Kenton Varda —— Protocol Buffers version 2 的主要开发者。他表示,Cap'n Proto 是其多年来开发 Protobufs、听取用户反馈并汲取经验思考反思后的成果结晶。

目前他已离开谷歌,因此 “Cap'n Proto 不隶属于谷歌,也从未隶属于谷歌”。基准测试结果表明,Cap'n Proto 比 Protocol Buffers 快无限倍。

开源十年后 Cap’n Proto 1.0 终发布,比 Protocol Buffers 快太多开源十年后 Cap’n Proto 1.0 终发布,比 Protocol Buffers 快太多

自上一个版本 v0.10 以来,新版本的一些亮点内容包括:

  • 针对 Cap'n Proto RPC 性能的一系列优化。其中包括减少 RPC 实现和 KJ I/O 框架的内存分配量,增加从 RPC 协议中省略某些信息以减少流量的功能,以及更好地缓冲一起发送和接收的小信息以减少系统调用。
  • Breaking change: 在此之前,服务器可在调用完成后调用 context.allowCancellation (),选择允许取消 RPC。在 1.0 版中,选择取消 RPC 可通过模式注解(c++.capnp 中定义的 allowCancellation 注解)来实现;模式级注解可以一次对整个文件进行设置。此外,动态选择加入需要大量的簿记工作,在实际使用中会对性能产生明显影响;而改用注释则能提高性能。对于从未使用 context.allowCancellation () 的用户来说,升级到 1.0 版时无需做任何更改,默认情况下仍不允许取消。(如果受到影响,你将看到编译错误。如果没有编译错误,则无需担心)。
  • KJ 现在在有 kqueue () 的系统(MacOS 和 BSD 衍生版本)上使用它来处理异步 I/O。在 Linux 上,KJ 一直使用 epoll,但在其他类 Unix 平台上,KJ 一直使用较慢的 poll ()-based 方法。
  • KJ 的 HTTP 客户端和服务器实现现在支持 CONNECT 方法。
  • 引入了一个新类 capnp::RevocableServer,以帮助在生命周期不受包装器控制的对象周围导出 RPC 包装器。
  • 以及一些更小的 bug 修复和改进。详情可参阅 PR 历史记录。

在 1.0 版本发布后,2.0 版本的工作也开始提上日程。根据规划,v2.0 旨在对 Cap'n Proto 的 C++ API 及其配套的 KJ C++ 工具包库做出一些改变;以及做一些全面的向后兼容改动以修复一些问题,并改善团队中开发人员的体验。目前的一些想法包括:

  • 需要一个支持 C++20 甚至 C++23 的编译器。Cap'n Proto 1.0 仅需要 C++14。
  • 需要一个支持 C++20 协程的编译器。
  • Cap'n Proto 的 RPC 应用程序接口、KJ 的 HTTP 应用程序接口和其他程序接口很可能会进行修改,使其更加的 coroutine-friendly。
  • kj::Maybe 将变得更符合人体工学。它将不再重载 nullptr 来表示值的缺失,将引入 kj::none 来代替。KJ_IF_MAYBE 将不再生成指针,而是一个引用(这是利用 C++17 特性实现的一种技巧)。
  • 将放弃对禁用异常情况下的编译的支持。
  • 将放弃对 no-RTTI 模式和其他会造成维护负担的特殊模式的支持。
  • 可能会修改 KJ 的引用计数方法,因为目前的设计已被证明对许多用户来说并不直观。
  • 将修复 kj::AsyncOutputStream 中一个长期存在的设计缺陷,目前 EOF 信号是通过销毁流来发出的。取而代之的是将添加一个返回 Promise 的显式 end () 方法。在不调用 end () 的情况下销毁数据流将发出错误的断开信号。(还想对 KJ 流 API 进行其他一些美观改进)。
  • 重新设计几个核心 I/O API,以便更好地适应 Linux 新的 io_uring 事件通知范式。
  • RPC 实现可能会改为默认允许取消。

值得注意的是,目前还没有计划对序列化格式或 RPC 协议进行任何向后不兼容的更改。所讨论的更改仅影响 C++ API。用其他语言编写的应用程序完全不受这一切的影响。

正式的 2.0 版本短时间内不会推出发布,或许也要等上几年。

更多详情可查看官方公告。

本文地址:https://www.linuxprobe.com/?p=279229

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sandstorm 是国外一款开源的项目,是由我们熟知的开发Protocol Buffers的前谷歌工程师 Kenton Varda 创立的,旨在基本改变现有的网络应用方式,目前已被数百个技术公司使用。后续又发展了Cap'n Proto。什么是 sandstorm.io?Sandstorm 将会使你用个人服务像用手机一样的简单。使用者可以使用一个简单的APP 商店安装一些像邮箱、文件编辑、博客软件等等。没有配置文件,没有命令行;所有的东西都是通过你的浏览器完成的。换句话说,Sandstorm 不仅向使用者提供一些服务器,还会让使用者选择他所使用的软件。也就是说:使用者所有的数据都储存在一个地方,而不是零散的分落在网上 如果开发者停止运行它们,APP也不会消失APP 的开发者不会暗中侦查使用者、拿使用者做实验或者用使用者的数据进行广告宣传在此之前,只有具有高级系统管理知识的人才能使用它们的服务器,现在Sandstorm 却能使每个人都可以使用它。不仅使用简单而且很创新。我们直接在APP平台里建立了通用的功能和强有力的工具:每一个APP里都有一个安全沙盒,这样就能保证恶意APP不会损害你的服务器 Sandstorm 提供了一个统一的登录系统,因此你没必要分别进入不同的APPAPP可以很简单的整合不统一的分享模型而不是独自的运行。事实上,Sandstorm 的沙盒模型使安全分享任意APP案例成为了可能,即使APP本身并不能实现分享。APP提供了一些基础设施以供联合,这样它们就可在你的允许下安全有效的通过网络接口去发现,去互相讨论,去连接其他的服务器。作为一个私有云平台,创建 Sandstorm 的真正动力在于帮助开源组织和独立开发者打造属于他们自己的Web应用。在今天较为流行的SaaS模型中,独立开发者不借助外力是不可能取得成功的。尽管这些百折不挠的人们还是在继续开发,但是有一个问题就是:他们开发 出来的软件根本不可能到达广大用户的手中。为了使低预算的软件能够成功,也为了推进开源运动的发展,用户需要在不依赖开发者的前提下运行软件,这在桌面端 和智能手机上很容易实现。但是对服务端的应用来说,这很难实现,因为不是所有人都有自己的服务器。如今的社会状况就是,只有那些有时间、金钱和相关技术的人才能拥有自己的个人主机。甚至许多技术人员都没有,因为从创建主机到管理主机是一件痛苦的事。Sandstorm 的出现正是为了解决这个问题——人人都能轻松拥有自己的个人主机。“唯一的解决之道在于人人都能拥有自己的服务器,在服务器上可以安装任何自己喜欢的应用。”目前 Sandstorm 有什么目前Sandstorm 已经在使用。它在 Github上提供公开并且可利用的资源。使用者可以自行配置或者在Sandstorm 网站上向其的服务器寻求一些帮助。处于安全原因,Sandstorm开始在APP怎么与外部世界相互作用上进行了大规模的整合并且也逐步授权一些功能,目前已经向Sandstorm提供了一些公开资源的APP。目标Sandstorm 的目标是建立一个独立的APP市场;网络电源管理系统;GPG登录系统;文档加密系统和端对端的加密系统。Sandstorm 支持联合创新,认为通过对网络APP的创新可以使每一个人更好的也更便捷的使用由他们自己控制的网络服务器。Sandstorm.io 的下一个目标就是使人们在运行个人Web App上变得更加简单。它允许用户有自己的服务器,通过一个类似App Store的界面进入,用户可以安装自己的App,就像在你的手机上安装App一样。安全问题对于传统的服务器,安装一个APP就有可能存在一个漏洞,从而就有可能遭到黑客的攻击。针对这一系列的安全问题Sandstorm开发了安全沙盒, 这一安全沙盒可以让你的信息与其他的系统进行隔离,当你需要使用其中的信息时它会向Sandstorm发出信号申请使用,从而保证使用者的信息安全。Sandstorm 是怎样工作的?Sandstorm 拥有一些和 Linux基本相似的功能板块,便于使用者更熟悉的使用。Sandstorm 希望开发的APP都有自己独立的沙盒,每一个文件都存储在一个独立的沙盒里,当一个服务器在运行的时候其他的服务器就被关闭。风险与挑战具有吸引力的开发项目都是很难的。风险之一是开发者不愿意去触碰Sandstorm,所以Sandstorm就需要有自己的开发和维持团队;其二是 Sandstorm将花费更长的时间去完成而不是去预测,所以Sandstorm就需要不仅完成现有的APP,更需要去预测更多的未来部分,如APP商店,网络电源盒子等。转载自 FreeBuf.COM 标签:Sandstorm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值