首页>参考读物>计算机科学与技术>计算机网络

ODL技术内幕:架构设计与实现原理
作者 : 耿兴元 著
出版日期 : 2019-08-26
ISBN : 978-7-111-63509-3
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 256
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一本从源代码层面深入剖析ODL的著作,旨在帮助读者在透彻理解ODL的先进架构、设计思想和实现原理后,能更有高效地进行SDN开发。
作者是资深的ODL专家,是SDN领域的布道者,有在通讯类软件研发和系统设计领域有超过15年的经验对ODL及其源码有深入的研究和理解。ODL架构演进极快,核心模块和接口变动频繁,ODL子项目众多,功能和接口碎片化严重,学习门槛很高,面对数百万行的源代码更是无从下手。
作者根据自己的经验,对ODL的核心功能及其源代码(氟版本和氖版本)进行反复提炼、抽丝剥茧,不仅让读者理解ODL的系统架构、设计思想、实现原理,而其能让读者领略ODL实现源码中的优秀代码和设计模式,最终实现让读者更高效地使用SDN的目的,掌握SDL的精髓。
全书13章,分为三个部分:
第一部分 基础环境篇(第1-2章)
主要介绍了ODL的核心概念、架构、设计目标、编译构建环境的搭建、源码阅读的方法,以及ODL社区对众多子项目的管理实践。
第二部分 核心架构篇(第3-10章)
从源代码的角度详细分析了ODL的基本对象、数据树、MD-SAL DataStore、MD-SAL RPC、MD-SAL Notification、MD-SAL Mount、MD-SAL Cluster Service的工作机制与实现原理;
第三部分 公共组件篇(第11-13章)
从源代码角度详细分析了ODL的AAA、RESTCONF、Blueprint等公共组件的设计、实现与扩展。

图书特色

中兴通讯拥有15年以上通信类软件研发及系统设计经验的专家级工程师撰写SDNLAB强烈推荐
深入分析ODL源码,洞悉ODL先进架构、设计思想和实现原理,实现高效SDN开发

图书前言

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年

上架指导

计算机\程序设计

封底文字

跟随SDN的浪潮,ODL也经历了发展、扩大、成熟,商用等几个阶段,目前ODL项目已经在国内外得到了广泛的应用, 但是国内这方面的资料却非常少。本书是国内从源代码角度讲解ODL架构设计与实现原理的先锋著作,内容涵盖了ODL的各个方面,是希望掌握软件定义网络的技术人员不可缺少的参考书籍。
——George Zhao
Futurewei Technology, Inc

知识结构全面、论述准确、逻辑严密是本书的写作特点,是一本各层次开发人员都可以从中受益的书:对于ODL的初、中级开发人员,本书可以帮助你获得ODL全方位的知识,全面系统地帮你梳理关于ODL的知识结构;对于ODL的高级开发人员,本书既可以有效弥补你ODL相关知识结构中的盲点,又可以领略来自作者的关于自己熟悉的知识点的看法和理解。
——史伟强 
中兴通讯有线研究院院长

耿兴元在SDNLAB上推出了ODL应用开发相关系列课程,帮助大家培养ODL开发实践能力。本书对ODL开源代码背后的设计原理和实现脉络有深刻的阐述。如果你想对ODL知其然并知其所以然,本书无疑是最好的选择!
——魏亮 
江苏省未来网络创新研究院团队总监/SDNLAB联合创始人

作者简介

耿兴元 著:作者简介
耿兴元
资深ODL技术专家,目前就职于中兴通讯,是操作系统及支撑平台的软件专家级工程师,在通讯类软件研发及系统设计领域已有超过15年的工作经验。2015~2017年期间,负责基于ODL的商用SDN控制器平台的设计和研发管理工作。
在ODL领域有多年的研究和实践经验,曾与SDNLAB一起创建了开源项目Jaguar(基于ODL的Kubernetes网络解决方案),是该开源项目的主要管理者与贡献者。在SDNLAB上录制了ODL的系列课程,深受读者欢迎。

图书目录

前言
第一部分 基础环境篇
第1章 阅读源代码前的准备 2
1.1 ODL项目介绍 2
1.1.1 ODL框架之争 3
1.1.2 SAL的演进 3
1.1.3 ODL的子项目及分类 4
1.1.4 ODL项目的管理 6
1.2 搭建ODL编译构建环境 6
1.2.1 安装JDK 6
1.2.2 安装及配置Maven 8
1.3 阅读和调试ODL源代码 9
1.3.1 ODL项目源码下载 9
1.3.2 IntelliJ IDEA安装 10
1.3.3 IntelliJ IDEA调试ODL的项目源码 11
1.4 ODL设计目标 12
1.5 ODL总体架构 13
1.6 本章小结 15
第2章 ODL项目管理设计详解 16
2.1 问题的提出 16
2.2 解决思路 17
2.3 实现详解 20
2.3.1 基础parent设计 20
2.3.2 模块构建 23
2.3.3 feature组织 24
2.3.4 版本打包 25
2.4 项目模板 26
2.4.1 项目目录布局设计 26
2.4.2 ODL模板项目 27
2.5 本章小结 28
第二部分 核心原理篇
第3章 ODL基本对象的设计与实现 30
3.1 QName 30
3.1.1 QName定义 30
3.1.2 QName对象比较 36
3.1.3 QName对象创建 37
3.2 YangInstanceIdentifier 38
3.2.1 Path接口定义 38
3.2.2 YangInstanceIdentifier的类定义 39
3.2.3 YangInstanceIdentifier的比较42
3.2.4 InstanceIdentifier类 44
3.3 NomalizedNode 44
3.3.1 NormalizedNode类的定义 45
3.3.2 NormalizedNode实例的创建48
3.4 本章小结 49
第4章 数据树的设计与实现 50
4.1 基本概念 50
4.1.1 配置树与状态树 51
4.1.2 标识与定位 51
4.1.3 快照与MVCC 52
4.2 数据树的设计与实现 52
4.2.1 Tree结构的设计 52
4.2.2 DataTree相关接口定义 55
4.2.3 DataTree的创建 57
4.3 数据树的读写过程 59
4.3.1 快照实现原理 61
4.3.2 数据校验的实现 61
4.4 MVCC机制与实现 63
4.4.1 版本号变更规则 63
4.4.2 并发控制 65
4.5 本章小结 67
第5章 MD-SAL DataStore接口设计 68
5.1 基本概念 69
5.1.1 事务和事务链 70
5.1.2 数据分片 70
5.1.3 三阶段提交 71
5.2 DataStore SPI设计 72
5.2.1 DOMStore 73
5.2.2 DOMStoreThreePhase-CommitCohort 75
5.2.3 DOMStoreTreePublisher 76
5.3 DataStore DOM API设计 77
5.3.1 DOMDataBroker 77
5.3.2 DOMDataTreeSharding-Service 78
5.3.3 DOMDataTreeChange-Service 80
5.4 DataStore Binding API设计 82
5.4.1 Binding基本对象接口 82
5.4.2 DataBroker 84
5.4.3 DataTreeChangeService 87
5.5 本章小结 87
第6章 MD-SAL DataStore的实现原理 88
6.1 概述 89
6.1.1 背景知识 89
6.1.2 实现原理 91
6.2 Raft算法及其实现 92
6.2.1 Raft算法介绍 93
6.2.2 RaftActor设计与实现 98
6.3 DataStore后端实现详解 106
6.3.1 Shard的实现 106
6.3.2 ShardManager 110
6.3.3 ShardStrategy及实现 112
6.4 DataStore前端实现详解 113
6.4.1 DOMStore的实现 113
6.4.2 DOMDataBroker的实现 121
6.4.3 事务链实现 124
6.5 Binding DataBroker的实现 125
6.5.1 Adapter设计 125
6.5.2 BindingDOMDataBroker-Adapter的初始化 126
6.6 本章小结 130
第7章 MD-SAL RPC的设计与实现 131
7.1 一个实例 131
7.1.1 RPC的YANG模型定义 131
7.1.2 RPC的生成接口 133
7.1.3 RPC的实现与调用 135
7.2 RPC机制的总体设计 136
7.2.1 Binding接口设计 136
7.2.2 DOM接口设计 137
7.2.3 总体实现流程 139
7.3 RPC机制实现详解 141
7.3.1 DOMBroker实现详解 141
7.3.2 BindingBroker实现详解 144
7.4 Remote RPC实现详解 149
7.4.1 Gossip协议的实现 150
7.4.2 远程RPC注册及调用 152
7.4.3 Actor设计实现总结 154
7.5 本章小结 155
第8章 MD-SAL Notification的设计与实现 156
8.1 一个实例 156
8.1.1 YANG模型定义 156
8.1.2 生成的接口 157
8.1.3 消息发布 157
8.1.4 消息订阅 158
8.2 MD-SAL Notification接口设计 158
8.2.1 DOM接口 159
8.2.2 Binding接口 160
8.3 MD-SAL Notification实现剖析 161
8.3.1 DOM层实现详解 161
8.3.2 Binding适配实现 169
8.4 本章小结 171
第9章 MD-SAL Mount机制与NETCONF 172
9.1 Mount服务接口设计 172
9.1.1 DOM接口 173
9.1.2 Binding接口 174
9.2 Mount机制的实现 175
9.2.1 DOM接口实现 176
9.2.2 NETCONF南向插件的实现 178
9.3 本章小结 186
第10章 MD-SAL Cluster Service 187
10.1 EntityOwnershipService 187
10.1.1 基本概念 187
10.1.2 接口设计 188
10.1.3 实现说明 192
10.2 ClusterSingletonService 195
10.2.1 接口设计 195
10.2.2 实现说明 196
10.3 本章小结 198
第三部分 公共组件篇
第11章 AAA 200
11.1 Shiro框架介绍 201
11.1.1 Shiro是什么 201
11.1.2 Shiro的架构 202
11.1.3 Shiro核心处理流程 204
11.2 AAA实现原理 210
11.2.1 Shiro配置优化 210
11.2.2 Realm的8个实现 212
11.2.3 Filter的实现 214
11.2.4 加解密服务 216
11.2.5 数字证书管理 218
11.3 本章小结 219
第12章 RESTCONF 220
12.1 RFC 8040解读 220
12.1.1 操作 221
12.1.2 消息 222
12.1.3 资源 223
12.2 RESTCONF的实现 226
12.2.1 Jersey框架简介 226
12.2.2 RESTCONF资源接口定义 228
12.2.3 Wrapper设计模式 231
12.2.4 初始化过程 233
12.2.5 客户端访问 235
12.3 本章小结 236
第13章 Blueprint及其扩展 237
13.1 Blueprint 238
13.1.1 基础知识 238
13.1.2 运行原理 240
13.1.3 命名空间扩展 241
13.2 Blueprint的使用 244
13.3 本章小结 247

教学资源推荐
作者: (美)W.Richard Stevens
作者: (美)Ed Tittel
作者: 陈庆章 王子仁 主编 王英姿 宦若虹 毛科技 参编
作者: 吴英 杨凯 刘博 编著
参考读物推荐
作者: 何洁 等编著
作者: 朱荣鑫 张天 黄迪璇 编著
作者: 山金孝 潘晓华 刘世民 著