本文由 dbaplus 社群授权转载。
随着互联网的发展,从 PC 互联网,到移动互联网,再到物联网,不同的业务模式也会有不同的网络形态。从最初的门户网站,只需简单文本信息和图片数据的传输,提供一些信息服务,到搜索服务,诞生了像 Google、百度这样的科技巨头,再到即时通讯、社交网络、电商等。
随着应用的交互频次增加,互联网业务规模数据量也越来越大,业务功能也越来越复杂,因此互联网的后台承载都离不开服务,不同服务之间布局也从单一机房扩展到分布式机房,甚至跨越大范围地理位置,通过广域网相连工作。
现阶段网络设计
现有的公司服务网络,通常采用树状拓扑结构,网络中的服务部署在规划好的网络区域,通过防火墙代理等实现对外提供服务。
网络后端服务从单点到多服务、多数据库,其中也不乏一些技巧的处理技术,例如缓存、消息队列、负载均衡、反向代理等,但是无论如何,网络主体结构功能还是对外提供服务,内部服务都不会直接对外进行暴露。内部服务之间通过设计定义好的通信协议进行通信,调用关系经过严格的结构设计,进行垂直或者水平拆分。
但是不同的业务会促使不同的网络形态的应用,传统的组网和网络服务构建方式不能很好的让所有服务节点进行对等访问,大规模后端服务组件之间根据不同的业务功能并没有通用化去处理。所以与此不同,P2P 网络很好的实现了对等访问,并且能够将业务分摊到对等节点。
P2P 网络
随着业务形态演进发展,对等式网络(peer to peer, 简称 P2P), 又称点对点技术在不同领域得到了应用,例如迅雷、电炉等下载软件。P2P 网络是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,网络的参与者共享他们所拥有的一部分硬件资源,这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体,减低以往网路传输中的节点,以降低资料遗失的风险。
与有中心服务器的中央网络系统不同,对等网络中的每个用户端既是资源(服务和内容)提供者(Server),又是资源获取者(Client),任何一个节点无法直接找到其他节点,必须依靠其用户群进行信息交流。
区块链技术底层网络便是一种 P2P 网络技术。基于现阶段的网络部署方式,所有 P2P 网络节点服务都需要处于同一层级的网络当中,以达到互相访问的目的。
P2P 网络中有四种模型,集中式、纯分布式随机网络,混合式和结构化 P2P 网络。其中纯分布式是我们所说的理想状态下的 P2P 网络,所有节点对等,既可以作为服务,也可以作为客户端,节点之间随机建立连接形成一个随机拓扑结构。纯分布式结构不存在集中式结构的单点性能瓶颈问题和单点故障问题,具有较好的可扩展性;混合式是将部分节点用集中式拓扑进行连接,每个集中式节点的中心节点进行纯分布式网络连接,实际应用中,混合式结构是相对灵活并且比较有效的组网架构,实现难度也相对较小。
局域网 P2P 网络
理想的 P2P 网络节点可以部署在任何地方,但是拘束于现实的网络规划,实际的网络中还包含各种局域网,再从局域网连接到公网,服务中实体所处的位置往往跨越多层网络,使得理想中的纯分布式 P2P 网络实现起来较为困难,尤其是在平台化、智能化管理网络中,结合公司安全,不容易实现自动化管理。
对于确定用途的 P2P 网络,网络服务部署机房通常为规划好的局域网,网络中的系统服务之间能够互相访问,例如公司服务器实体往往处于统一局域网当中,符合部署 P2P 网络时需要系统之间网络能够对等连通状态的要求,比较容易实现网络服务的部署。
通常现有的 P2P 网络服务本身可以采用 Docker 容器化部署方案,局域网集群采用 Kubernetes 集群方案来管理局域网集群资源,结合 Kubernetes Flannel 网络方案实现,集群中容器服务可以处于有 Flannel 规划的同一局域网当中,实现纯分布式组网。
云计算同样原理,可以在同一云资源中规划集群,进行 P2P 网络部署。但是对于跨云或者在由多个局域网形成的更大的网络中,不同的区域集群中节点往往不能直接相互通信,由此给理想的纯分布式 P2P 网络部署带来了挑战。
多云协同计算
在如今的云计算时代,P2P 网络部署在单个云集群中,采用集群内部通信,可以实现理想的纯 P2P 网络。但是对于多种云混合协同工作时,不同的云提供方往往属于不同的客户,在云计算安全策略上拥有不同的权限,例如防火墙权限和策略,不同公司的管理策略不同,这让实现理想的 P2P 网络步骤较为复杂,在不同部门协同工作时,处理流程长、周期慢,对客户而言,这里是亟需优化的地方。
多云 P2P 网络
将 P2P 网络部署到不同云上,让不同客户加入到 P2P 网络,是这里的核心能力。但是局限于上面所说的多云协同计算中的问题,需要在不同云安全部门,或者安全策略中进行配置,需要多方协作;同时要保证云计算中的节点网络能够互相访问,多云计算中不同云之间通常采用公网进行连接通信,但是同一云计算主机之间通常采用局域网通信而禁止公网流量的发生,这导致多云 P2P 网络节点中存在两种不同的网络形式,公网 IP 和内网 IP,而让节点服务能够智能的区分何时使用公网 IP 通信,何时使用内网 IP 通信是一个困难的问题。
现在的做法有,P2P 网络中各服务采用域名的方式进行表示访问,通过系统 host 文件进行域名配置解析,每一个服务所在系统均需配置网络中其他节点域名解析对应的 IP,这里可以控制是内网 IP 还是公网 IP,从而实现以多个云计算为服务资源的理想的纯分布式 P2P 网络。
对于 P2P 网络服务本身架构也可以进行相应的设计,例如:让 P2P 服务本身按照混合式 P2P 网络组网方式进行工作。单个云中不同主机之间采用集中式网络模型,该网络的集中心服务与其他云的中心服务构成纯分布式 P2P 网络。在这样的网络构建方法当中,所有的云中都只需有一个服务与其他云进行通信即可。这里就需要对 P2P 服务本身的网络机制、服务发现重新进行规则设计,对于不同的业务场景也会诞生不同的 P2P 网络规则。
平台化管理
在平台化管理工具流行的今天,对于 P2P 网络管理,我们也可以建立一套管理平台,进行 P2P 网络的创建、监控、管理,对于这样一套系统首先要解决的便是对于不同云平台环境的适配、权限获取问题。对于 P2P 网络,拥有去中心化属性,平台化管理首先平台方需要获取各方资源权限(通常由各方授权),获取各方资源后,根据各方网络特点进行 P2P 网络节点部署,进行代理部署操作。网络上走原有的网络通道,P2P 网络与多云计算机中的 P2P 网络设计一致,每个云平台与 P2P 网络管理平台形成一个集中式的星型网络结构。
对于平台化管理 P2P 网络中的网络规划难题,通常简单粗暴的方式是让每一个节点都知道其他节点的地址,这里从系统层面来说,可以通过系统配置 DNS 服务来解析对应节点域名 IP 来解决。但是对于通过内网 IP 通信的节点来说,就需要通过搭建局部网络 DNS 进行解析,公网 IP 可以通过外部 DNS 进行解析,这样一来,就需要内外部 DNS 协同工作来对不同节点解析其他节点的 IP 地址。这里的内部 DNS 也可以通过修改本地 hosts 文件直接进行配置,但是这样的方法使得平台的工作量变得巨大,对 P2P 网络的动态扩展能力也形成拦路虎。
根据 Kubernetes 的网络方案,我们其实可以想象在多云的网络中是否可以存在像 Flannel 这样的网络插件让多个不同云计算的复杂网络抽象成一个 overlay 的局域网,在未来不管有多复杂的云计算资源加入,都可以很轻松的实现理想 P2P 服务部署。期待这样的一个开源方案诞生。
总结
现阶段,通过多云协作的方式来统一部署 P2P 网络形成平台化管理还有很多问题需要解决,例如 P2P 网络对比传统中心化系统的性能问题,但是 P2P 网络也有自身的优点,例如天然的高可用等。相信随着技术的发展,P2P 网络会被更广泛的应用,平台化、智能化管理是很好的发展方式,期待越来越多朋友关注到这一块。
作者介绍:
汪昌帅,甜橙金融技术创新中心资深经理,对大数据、分布式计算领域技术有研究,目前关注区块链、容器化、云计算等领域技术结合应用。
原文链接:
评论