论文阅读:Stateless Network Functions: Breaking the Tight Coupling of State and Processing
摘要:
无状态网络功能是一个新的网络功能虚拟化架构,解耦了现有的网络功能设计到无状态处理组件以及数据存储层,在打破紧密耦合的同时,实现了更具可伸缩性和可恢复性的网络功能基础设施。无状态NF处理实例是围绕高效管道构建的,利用DPDK实现高性能网络I/O,打包为Docker容器以便于部署,以及基于预期请求模式优化的数据存储接口,以高效访问基于Ramcloud的数据存储。网络范围的编排器监视实例的负载和故障,管理实例以扩展和提供弹性,并利用基于OpenFlow的网络将流量定向到实例。
我们实现了三个示例网络功能(网络地址转换器、防火墙和负载均衡器)。
我们的评估显示:
我们能够达到10Gbit/s的吞吐量,附加的延迟开销在100微秒到500微秒之间。
我们能够进行不会中断正在进行的通信的故障转移。
当向外扩展和向内扩展时,我们能够匹配理想的性能。
背景/问题:
中间盒是当今网络基础设施中的一个重要组成部分,为网络运营商提供了将新的网络功能作为附加组件部署的能力,这些附加组件可以直接检查、修改和阻止或重新定向网络流量,有助于提高网络的安全性和性能。虽然传统上部署为物理设备,但通过网络功能虚拟化(NFV),网络功能(如防火墙、入侵检测系统、网络地址转换器和负载平衡器)不再需要在专有硬件上运行,而是可以在虚拟化环境中的软件、商品服务器上运行,并且具有高吞吐量,能够根据需要弹性地扩展网络功能并从故障中快速恢复。
然而要实现这些特性并不是那么简单,中心问题围绕锁定到网络功能中的状态-状态,如有状态防火墙中的连接信息、入侵检测系统中的子字符串匹配、网络地址转换器中的地址映射或有状态负载平衡器中的服务器映射。将该状态锁定到单个实例中会限制灵活性、弹性和处理其他挑战(如非对称/多路径路由和软件更新)的能力。
为了克服这一点,有两条研究路线:
对于可恢复性,最近的工作提出了(1)定期检查网络功能状态,以便在出现错误时可以重建网络功能(2)记录所有输入(即包)并使用确定性重放,以便在失败时重建状态。这些解决方案提供了一定的弹性,但代价是每包延迟大幅增加(大约10毫秒),或者在故障转移时恢复时间较长(例如,重放自上一个检查点以来接收的所有数据包),两者都无法解决可恢复性问题。
对于弹性,最近的工作建议修改网络功能软件,以便能够通过API将状态从一个实例迁移到另一个实例。然而,状态迁移需要时间,本质上并不能解决计划外故障的问题,而且作为一个中心属性,它依赖于流到实例的关联性——每一个状态迁移都会使状态迁移成为一个有用的原语,在实践中受到限制。
解决办法:
我们提出无状态网络功能(或无状态NF),这是一种新的体系结构,它从网络功能需要执行的处理中打破了网络功能需要维护的状态之间的紧密耦合。
可恢复性:使用无状态nf,我们可以在失败时立即生成一个新实例,因为新实例可以访问所需的所有状态。它可以立即处理流量,并且不会中断网络。更重要的是,由于故障转移没有惩罚,因此我们可以更快地进行故障转移-实际上,我们不需要确定某个网络功能已发生故障,而只需猜测它已发生故障,然后检测到我们错了,或纠正问题(例如,重新启动)
可伸缩性:当扩展时,使用无状态nf,可以启动一个新的网络功能实例,并立即将流量定向到它。网络功能实例将可以通过数据存储访问所需的状态(例如,作为已建立连接的一部分的数据包,该连接指向传统虚拟防火墙中的新实例,将被丢弃,因为查找将失败,但对于无状态nf,查找将提供有关已建立连接)。同样,扩展只需要将任何通信量重新定向到要关闭的实例之外
非对称/多路径路由:在无状态NF中,每个实例将共享所有状态,因此正确的操作不依赖于与实例的流量关联。事实上,在我们的模型中,我们假设任何单独的包都可以由任何实例处理,从而抽象出一个可伸缩的、有弹性的网络功能。因此,通过不同路径的包不会导致问题。
我们描述了如何以无状态的方式重新设计四种常见的网络功能:一个有状态防火墙、一个入侵防御系统、一个网络地址转换器和一个负载均衡器的实现。
工作表明,我们所研究的功能是有价值的,即使使用我们目前的原型,我们也能够将其他系统的处理速度与类似的目标相匹配,同时提供可伸缩性和可恢复性。
实现细节:
本文的核心思想是在网络函数中将处理与状态分离——将状态放入数据存储中。我们称之为无状态网络功能(或无状态NF),因为网络功能本身变成无状态,应用程序(例如,有状态防火墙)的状态通过将状态存储在单独的数据存储中来维护。
表1显示了要分离的网络状态,并将其存储在远程存储器中,以实现四种网络功能:
我们演示了如何使用多个网络函数算法的伪代码访问解耦状态,并总结了表1中数据存储所需的读写操作。在所有算法中,我们将更新或写入状态显示为WriteRC,将读取状态显示为ReadRC(其中RC与我们选择的数据存储RAMcloud相关)。
下面我们描述算法1(负载均衡器)和2(IP):
整体无状态NF架构:
在高层次上,无状态NF由一个网络范围的体系结构组成。
如上图所示,无状态NF体系结构由三个主要组件组成:数据存储、承载网络功能实例的主机和处理网络功能基础设施动态的编排组件。网络功能主机只是商品服务器
弹性低延迟数据存储:无状态nf以及远程数据存储的其他用途的中心思想是关注点分离的概念。也就是说,在分离状态和处理的过程中,每个组件都可以专注于更具体的功能。在无状态NF中,网络功能只需要处理网络流量,不需要担心状态复制等问题。数据存储提供了状态的弹性。由于这种分离,并且由于它位于包处理的关键路径上,数据存储还必须提供低延迟访问。出于我们的目的,我们假设一个数据存储不需要对事务的支持,但是我们期望在将来的工作中探索可能需要事务的网络功能的影响。
在本文中,我们选择RAMcloud作为我们的数据存储。RAMcloud是一个分布式的密钥价值存储系统,它提供对数据的低延迟访问,并支持高度的可伸缩性。
网络功能编排:编排的基本需求包括监视网络功能实例的负载和故障,并相应地调整实例的数量。
无状态NF编排控制器是用JAVA实现的,它有一个管理API,实现弹性策略的实现,以确定何时创建或销毁网络功能。
无状态NF实例体系结构:尽管无状态nf总体架构提供了管理实例集合的能力,提供了无状态NF的弹性和弹性优势,但无状态NF实例的架构是为了实现所需的可部署性和性能。
如下图所示,无状态NF实例体系结构由三个主要组件组成:
- 可以按需部署的数据包处理管道
- 高性能网络I/O
- 到数据存储的有效接口
讨论与优化:
减少与远程数据存储的交互:从根本上说,如果我们能够进一步减少与远程数据存储的交互,我们就可以提高性能。
数据存储可伸缩性:本文描述的方法,最终仍将受到数据存储可伸缩性的限制,但通常将数据存储视为可伸缩的、活跃的研究领域。
论文阅读:Stateless Network Functions: Breaking the Tight Coupling of State and Processing的更多相关文章
- 论文阅读 Dynamic Network Embedding by Modeling Triadic Closure Process
3 Dynamic Network Embedding by Modeling Triadic Closure Process link:https://scholar.google.com.sg/s ...
- 【CV论文阅读】Network in Network
目的: 通过用Mlpconv层来替代传统的conv层,可以学习到更加抽象的特征.传统卷积层通过将前一层进行了线性组合,然后经过非线性激活得到(GLM),作者认为传统卷积层的假设是基于特征的线性可分.而 ...
- 论文阅读(Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)
白翔的CRNN论文阅读 1. 论文题目 Xiang Bai--[PAMI2017]An End-to-End Trainable Neural Network for Image-based Seq ...
- 【医学图像】3D Deep Leaky Noisy-or Network 论文阅读(转)
文章来源:https://blog.csdn.net/u013058162/article/details/80470426 3D Deep Leaky Noisy-or Network 论文阅读 原 ...
- 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification
Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...
- [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximati
[论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximation 本文结构 解决问题 主要贡献 主要 ...
- [论文阅读笔记] Community aware random walk for network embedding
[论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...
- [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding
[论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...
- [论文阅读笔记] Structural Deep Network Embedding
[论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...
随机推荐
- 使用graphics.h来绘制图形
| 版权声明:本文为博主原创文章,未经博主允许不得转载. graphics.h是TC里面的图形库,如果要用的话应该用TC来编译.分为:像素函数.直线和线型函数.多边形函数.填充函数等.然而在我们使 ...
- Linux下路由配置梳理(转)
转自:https://www.cnblogs.com/kevingrace/p/6490627.html 在日常运维作业中,经常会碰到路由表的操作.下面就linux运维中的路由操作做一梳理:----- ...
- 详解Vue 如何监听Array的变化
详解Vue 如何监听Array的变化:https://www.jb51.net/article/162584.htm
- php常用header状态
<?php //200 正常状态 header('HTTP/1.1 200 OK'); // 301 永久重定向,记得在后面要加重定向地址 Location:$url header('HTTP/ ...
- go相关资料
1.go的调度2.go struct能不能比较 因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型 3.go defer(for defe ...
- ds replicas是什么
以上是我百度的答案.很显然,这个对于初学者很不友好,中文的每一个靠谱的,英文的都TM是how 和 why .But 我要 what! 所以只能自己搞,自己琢磨,搞完分享出来,助力后来者不掉坑,有所查. ...
- 如何获取设置display:none元素及子元素的宽高
由于元素设置了display:none时,页面便不会对其渲染,导致无法获取其元素的宽高.目前一般的做法都是先对其设置display:block,拿到数据再设置其为display:none.如此便可以了 ...
- const关键字 C与C++分析
1 C与C++的区别 1.1.C允许定义两个变量名相同的变量,而C++不允许. 在C语言中是允许定义两个名字相同的全局变量. 在C++中是不允许定义两个名字相同的全局变量. 测试代码: /* 编译环 ...
- PHP之常用第三方库
汇总常用的第三方库,方便快速进行开发,避免重复造轮子 1. 时间相关 nesbot/carbon(在编写 PHP 应用时经常需要处理日期和时间,使用Carbon 会很方便– 继承自 PHPDateTi ...
- Java中的==和equals( )方法
在Java中,equals和==都是用于检测两个字符串是否相等,返回类型也都是boolean值,但是二者内部处理却不一样. ==与equals( ) ==在Java中是一个二元操作符,用于比较原生类型 ...