PPIO 是为开发者打造的去中心化存储与分发平台,让数据更便宜、更高速、更隐私。

我前面做过PPIO的商业化架构的介绍。PPIO 的商业服务层包括:IaaS 层,基础设施服务层;PaaS 层,平台服务层;Application Services:即应用服务层。详细可见文章《 PPIO 商业化架构解析 》,文中提到了 PPIO 的全架构图如下:

其中,PPIO 在 PaaS 层主要有3个模块。分别是 POSS,PCDN 和 PRoute,他们的定位分别是:

  • POSS 是 P2P Object Storage Service,对标 AWS 的S3存储。
  • PCDN 是 P2P Content Delivery Network,对标传统的 CDN,就像 AWS 的CloudFront。
  • PRoute,是基于 P2P 的自适应网络智能路由,做到两个节点之间,以最合理路径到达,从而速度最快,延迟最低 。这是协议层的实现,在 AWS 中没有对标的产品。

对比这三个模块不同的特点:

这三个模块分别用于什么样的场景?通过一张图即可看懂。

如图,PRoute 主要应用是实时通讯和冷数据的传输,实时通讯包括电话会议,语音会议,VPN 等业务。

之前,我已经写了不少文章描述了 POSS 和 PCDN 两个模块,这次重点描述 PRoute 模块。

什么是 PRoute?

PRoute 就是应用层的智能路由,用 P2P 技术来实现。简单地说,网络上原本应该 A 节点直接连接B节点,但是却发现,如果 A节点先连接 C 节点,再经过 C 节点连接 B 节点,这样不仅仅速度更快,而且延迟更低。PRoute 解决的问题就是,如何让 A节点更好地联通 B 节点。

PPIO 为什么要做 PRoute 模块?

下面我详细讲解一下,为什么 PPIO 要设计 PRoute 模块1# TCP/IP 网络的路由是不智能的这是今天全球互联网的基础,TCP/IP OSI 的五层网络架构图。

整个互联网由主要由各种大大小小的路由器组建而成,其中每个路由器都是以自己的视野来维护2 张表格,分别是静态路由表和动态路由表。静态路由表就是人为配置的表格,也就是当需要连接一些特定的 IP,就强制走什么样的路由。而动态路由表,是实际经过一些简单的算法来计算和分配 IP 和路由的关系,其中比较常用的算法有 LS 路由算法,Dijkstra 路由算法,以及 Bellman-Ford 路由算法(距离向量路由算法)等。例如,这是距离向量路由算法示意图。

其中,今天的世界网络格局,大的 ISP 是以静态路由表为主,小的网络以及局域网是以动态路由表为主。就这样,聚小成大,成就了今天整个互联网的拓扑图。那么网络层的路由有什么缺点呢?

  1. 每个路由器都以自己为中心,没有看到全局,能参考的数据很有限。
  2. 每个路由器的硬件性能有限,所以只能采用比较简单的路由算法,很难运行逻辑复杂的算法。
  3. 互联网早期已经确定了规则,后面改变的兼容成本很高,网络层路由算法已经多年没有发展。

正是因为如此,才有了应用层智能路由的机会。PPIO 的 PRoute 实现的正是应用层智能路由,而且有 P2P Overlay 网络为基础。后续我会专门写文章来讲解 PRoute 的路由算法的设计。

2# 部分场景,人为控制网络路由如上面所述,静态路由表在大的 ISP,大的机构应用更多。原因是大的 ISP,大的机构出于自身商业利益的考虑,会指定路由。因为指定路由,就确定了网络数据传输的方向。对 ISP 而言,由于 ISP 之间的通信是会产生结算费用,ISP 可能不会选择最快的方案,而是选择成本最低的方案。这样的结果就是,当互联网的大量局部都是这样考虑的时候,整体的互联网也就不是最优化的方案。而且这样所带来的网络异构性是非常多样的。不同的国情,不同的商业竞争环境,所产生的网络环境不同,对应用层智能路由算法的要求也就会更高。怎样才能通过算法来适应各种情况的网络拓扑,将是实现智能路由的关键所在。

3# TCP 协议的拥塞控制算法是在互联网的早期设计的,已不适用于今天的互联网。TCP 是今天互联网上使用量的最大的传输协议,它是可靠传输协议,它设计于互联网的早期,那个时候还不是宽带宽时代,互联网的速度普遍很慢。所以,TCP协议使用了比较保守的滑动窗口和拥塞控制算法。

随着互联网的带宽逐步提高,以及视频在互联网上越来越多,也有不少公司提出了更适合的拥塞控制算法,例如 Akamai 的 FastTcp,Google 的 BBR。甚至越来越多的场景不再选择使用 TCP 协议,而是用 UDP 来自行实现可靠传输协议,如 KCP 等。但是大部分计算机设备的网络层,依然使用的是古老的 TCP 拥塞控制算法。我在设计 PPIO 的 PRoute 的时候,也按照特定场景,设计了自己的可靠传输协议和拥塞控制算法,特别提升了在弱网下的点对点连接质量,并大大增强了弱网下的抢带宽能力。例如国际线路很多时候都是弱网连接。

P2P 智能路由的成功案例--Skype

Skype 是一家全球性互联网电话公司。它通过采用 P2P 技术与其他用户连,在全世界范围内,向客户提供免费的高质量通话服务。当连接双方网络顺畅时,Skype 的用户可以进行高质量语音聊天,音质可能超过普通电话。Skype 正在逐渐改变电信业。

Skype 软件会在计算机上打开一个网络连接端口来监听其他 Skype 用户的连接调用。当其他计算机能顺利连接到这部计算机,Skype 称呼该用户为“Super node”(超级节点)。Super Node 在该 P2P 环境中的角色,即为提供其他无法连接的用户之间的中继站,借用诸多 Super Nodes 的些许网络带宽,协助其他的 Skype 用户之间能够顺利的互相联系。这种行为,在 P2P 环境中,是相当常见的手法。Skype 是第一个将此种做法运用到网络语音通话与即时消息应用层面上的成功案例。

Skype 发表了一篇经典的论文来详细讲述 P2P 中继的原理,《An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol》。PRoute 实现的关键为了解决以上提到的问题,PPIO在设计的时候,要突破的关键:1# 找到合适的中继节点PRoute 在技术上实现的关键是,要找到好的中继节点,并使用这些中继来桥接,使得具有更快的传输速度,更低的延迟。所以 PRoute 在选择节点上和 PCDN 有很大的差别,这些差别体现于:

  1. PRoute 主要需要找到的是上行和下行都优质的节点,而 PCDN 只要有好的上行就行。
  2. PRoute 更多需要激励的是靠近骨干网节点。因为越靠近骨干网的节点,其作为中继节点的效果越好,特别是在跨国网络的传输下。而 PCDN 相对而言,则鼓励更多的是边缘节点和城域网节点,因为成本更低,距离用户更近。
  3. PRoute 的节点更需要被激励。因为 PRoute 的中继节点在 P2P 网络中起到了更加关键的作为,那么一旦 PRoute 中继节点掉线,对 P2P 所产生的影响则是巨大的,而且 P2P 网络切换到备用节点的成本相对较高。而 PCDN 业务,本来都是多点同时传输,节点掉线的影响相对更少。所以 PRoute 的中继节点更需要被激励。

PPIO 会优先选择更适合的节点来做 PRoute 模块的中继节点,并且给予更高的激励。

2# 寻找动态智能路由

如何在复杂的 P2P 网络中,找到合适的中继节点,通过应用层的智能路由更好地进行网络传输,就是 PRoute 非常关键的技术。为了解决好传输的问题,更合适的智能路由路线可能需要多个中继节点,PRoute 的算法就是要尽快地找到这些中继节点。另外,网络的环境是不停变化的,PPIO 会自动适应这些变化,随时选择不同的候选中继节点。当网络变化的时候,会自动将智能路由切换到更好的中继节点上,从而保持网络的动态稳定。

3# 实现更利于弱网的可靠传输协议由前面描述,网络结构存在非常多不确定的异构性,而不同国家的网络拓扑也存在很大的差异,存在大量的弱网链接。而 PPIO 在智能路由选择的基础上,再实现一套能自适应复杂网络环境的可靠传输协议,这样做是为了保持网络传输更加稳定。当网络不好的时候,传输协议自动切换为更积极的策略,从而增加了抢占带宽的能力。当传输重要数据时,也会自动启用 FEC 前向纠错机制,从而减少丢包的影响。作为 PPIO 的模块,PRoute 不仅有自己的商业应用场景,还能作为 POSS 和 PCDN 的补充。因为 POSS 和 PCDN 也可能遇见冷门资源和弱网问题。某些情形下,因为文件用的人少,所以很少有人存有该资源,而且不幸的是传输又刚好处于弱网环境下,那么通过 PRoute 中继和更好的拥塞控制算法就可以解决或者缓和这个问题。所以对 PPIO 的架构来说,PRoute 也是 POSS 模块和 PCDN 模块的补充。

PPIO 一直以来都是以商业落地,用户需求为出发点,来思考技术与商业的创新与整合,希望用技术创造商业价值,从而实现社会价值。今天我们从概念和逻辑上,讲解了 PPIO 为何设计 PRoute 模块,以及 PRoute 模块实现 PPIO 平台商业服务落地的关键。后续我还会专门写文章来讲解 PPIO 在 PRoute 模块路由算法的设计。如果您对 PPIO 的技术商业化落地感兴趣,希望持续收到我们的干货文章,可以关注 PPIO 公众号,精彩未完待续。