Frenetic: a network programming language

Frenetic: a network programming language
复制标题

DOI:
10.1145/2034773.2034812
复制
发表时间:
2011-09
期刊:
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
影响因子:
--
通讯作者:
Nate Foster;R. Harrison;M. Freedman;Christopher Monsanto;J. Rexford;A. Story;D. Walker
Nate Foster;R. Harrison;M. Freedman;Christopher Monsanto;J. Rexford;A. Story;D. Walker
中科院分区:
其他
文献类型:
--
作者:
Nate Foster;R. Harrison;M. Freedman;Christopher Monsanto;J. Rexford;A. Story;D. Walker

文献摘要

被引文献

相似文献

现代网络提供各种相互关联的服务,包括路由、流量监控、负载平衡和访问控制。不幸的是,用于编程当今网络的语言缺乏现代特性——它们通常是在底层硬件提供的低级抽象上定义的,它们甚至不能为模块化编程提供基本的支持。因此,网络程序往往很复杂,容易出错,而且难以维护。本文介绍了一种用于网络交换机分布式集合编程的高级语言freatic。freatic提供了一种声明性查询语言,用于对网络流量进行分类和聚合,还提供了一个功能响应式组合器库,用于描述高级包转发策略。与该领域之前的工作不同,这些构造——通过设计——是完全组合的,这有利于模块化推理并支持代码重用。这个重要的属性是由freenic的新颖运行时系统启用的,该系统管理与物理交换机上的安装、卸载和查询低级数据包处理规则相关的所有细节。总的来说,本文有三个主要贡献:(1)我们分析了编程网络语言的现状,并确定了关键的限制;(2)我们提出了一种解决这些限制的语言设计,使用一系列示例来激励和验证我们的选择;(3)我们描述了该语言的实现,并在几个基准上评估其性能。
Modern networks provide a variety of interrelated services including routing, traffic monitoring, load balancing, and access control. Unfortunately, the languages used to program today's networks lack modern features - they are usually defined at the low level of abstraction supplied by the underlying hardware and they fail to provide even rudimentary support for modular programming. As a result, network programs tend to be complicated, error-prone, and difficult to maintain. This paper presents Frenetic, a high-level language for programming distributed collections of network switches. Frenetic provides a declarative query language for classifying and aggregating network traffic as well as a functional reactive combinator library for describing high-level packet-forwarding policies. Unlike prior work in this domain, these constructs are - by design - fully compositional, which facilitates modular reasoning and enables code reuse. This important property is enabled by Frenetic's novel run-time system which manages all of the details related to installing, uninstalling, and querying low-level packet-processing rules on physical switches. Overall, this paper makes three main contributions: (1) We analyze the state-of-the art in languages for programming networks and identify the key limitations; (2) We present a language design that addresses these limitations, using a series of examples to motivate and validate our choices; (3) We describe an implementation of the language and evaluate its performance on several benchmarks.