Preface前言

OpenDaylight(简称ODL)项目是Linux基金会旗下的一个开源合作项目,致力于推进软件定义网络(SDN)和网络功能虚拟化(NFV)的发展,目的是寻求以一种更透明的方式促进该领域的创新。该组织由行业领先者建立,旨在制定一个统一、开放的平台,驾驭合作开发的力量,以驱动产业和生态圈的创新。ODL是针对企业、服务提供商、数据中心、WAN的模块化的开放的SDN平台,其基于OSGi的微服务架构让用户能够按需部署网络服务、应用、协议和插件。ODL平台基本每半年发布一次大版本,从2013年开始,项目经历了多个版本的迭代已趋于成熟和稳定,几乎成为网络创新应用场景的默认选择。

ODL把被控制的网络看作是一个消息驱动的巨大状态机,因此该平台核心架构即其模型驱动的状态保存机制与消息转发机制,称为模型驱动的业务抽象层(MD-SAL)。该架构的魅力源于其架构的前瞻性、可塑性和长期演进能力。

ODL在架构设计上的先进性和灵活性,使其成为SDN领域最有影响力的开源平台。灵活的插件机制与在规模上的弹性可扩展,使ODL可应用于智慧城市和其他IoT应用等涉及多种设备类型以及多种网络技术的场景,包括光交换、IP/MPLS、LTE或5G无线网络。ODL对这些技术的可编程性可以做到设备无关。如今,ODL在各场景的网络创新中的应用越来越广泛,利用和贡献ODL项目的中国公司数量也在不断增长,包括华为、联想、瑞斯康达、腾讯、Zenlayer、中兴、阿里巴巴和百度等。2017年3月,中兴通讯成为国内首家ODL白金会员。

为什么写这本书

ODL不仅仅是一个SDN控制器平台,它还是一个优秀的模型驱动架构实现,以及一个典型的分布式系统设计范例。通过ODL,我们能学习的不仅仅是SDN,也能学到其通用的编程技术及软件架构设计,其分布式系统设计实现也非常值得我们借鉴。

但是,ODL作为一个开源项目,也有令人诟病的地方,主要有两点:一是虽然ODL架构设计比较先进,代码实现也比较优秀,但ODL缺乏较为系统性的文档,而且仅有的一些文档更新也较为滞后,内容陈旧,容易误导新手;再加上语言和文化背景的差异,足以让大量国内ODL初级玩家望而却步。二是ODL的架构演进非常快,核心模块和接口变动频繁,再加上ODL子项目众多,导致ODL功能和接口碎片化严重,开发者一开始面对几百万行代码,确实有点“老虎吃天,无从下口”的感觉。

我作为一个一直从事软件研发工作的工程师,深知学习与应用ODL的不易,所以我想是不是可以把我之前学习ODL的笔记——对ODL源码的分析和对ODL架构设计的理解整理成书,进而帮助大家深入理解ODL设计原理和思想,把握其核心源码实现,以不变应万变。这对大家基于ODL平台进行业务研发及应用都能有所裨益。

本书的读者对象

本书适合所有有志于解决现有网络问题并促进网络变革的通信、网络及计算机行业相关从业者,特别是希望掌握软件定义网络热门技术的开发人员,还适合具有一定工作经验、关注网络热门技术并希望查漏补缺继续成长的程序员,以及具备一定软件开发能力的网络技术领域从业者。

具备一定的Java语言开发基础,了解网络基础知识及分布式系统基础知识将有助于读者更好地理解本书中的内容。

本书的主要内容

对于广大有志于投身网络变革大潮的从业者而言,ODL依然具有很高的门槛——100多个子项目,几百万行源代码,OSGi、Maven、Akka、YANG等背景知识,都成了相关从业者应用ODL平台的“拦路虎”。面对这些障碍,我们需要抓住ODL平台框架的本质与核心——MD-SAL,只有真正理解ODL的这个核心框架设计,理解MD-SAL的核心源码实现及其设计思想,才能基于ODL进行高效的SDN开发实战,就如同习武练功,招式是外壳,内功心法是核心,二者要相辅相成。本书结合作者15年的通信软件研发从业经验,从ODL核心框架MD-SAL的实现源码入手进行解构,剖析代码中的设计模式,总结ODL中的软件架构设计思想。本书可谓一本重在讲授内功心法,并指导内功和招式结合的“武功秘籍”。

本书能帮助入门级程序员深入、直观地理解ODL技术原理,构建精准的知识框架;帮助有一定工作经验的程序员填补知识漏洞,打通知识体系;帮助正在应用ODL构建商用产品和应用的同仁们客观认识并分析ODL中现存的问题。本书还分享了作者在基于ODL进行商用开发时总结的若干实战经验。

勘误与支持

本书主要内容来源于本人研究学习ODL源码的笔记和在应用ODL开发项目过程中的实践经验。我们知道ODL社区非常活跃,版本发布频繁,架构调整及源码变动也比较大,这不可避免地会导致书中引用的源代码与ODL社区最新源代码有一定出入,请读者在阅读过程中务必注意。同时,由于作者写作和认知水平有限,问题在所难免,欢迎读者朋友们通过电子邮箱yfc@hzbook.com进行指正。

致谢

ODL官方社区的源代码是创作本书的原始素材,因此我首先感谢ODL官方社区。

其次,我要感谢未来网络学院给予我与大家分享ODL技术的平台,以及在开源项目Jaguar的成立、运作管理和基础设施资源上的支持。

最后,感谢中兴通讯IT学院的闫林老师的鼓励和巨大帮助。

耿兴元

2019年