SDN(Software Defined Network)即软件定义网络,是一种网络设计理念,或者一种推倒重来的设计思想。DN的理念是将原来封闭在通用网络硬件的控制平面抽取、独立出来并软件化为SDN控制器,这个控制器如同网络的“大脑”控制网络中的所有设备,而原来的通用网络硬件只需要听从SDN控制器的命令进行“傻瓜式”转发就可以了。其简单模型如图所示:
SDN网络的三大技术特征:
ODL控制器项目架构大致如下:
ODL在设计的时候遵循了六个基本的架构原则(以下来自opendaylight官方文档):
1、运行时模块化和扩展化(Runtime Modularity and Extensibility):支持在控制器运行时进行服务的安装、删除和更新。
2、多协议的南向支持(Multiprotocol Southbound):南向支持多种协议。
3、服务抽象层(Service Abstraction Layer):南向多种协议对上提供统一的北向服务接口。Hydrogen中全线采用AD-SAL,Helium版本AD-SAL和MD-SAL共存,Lithium和Beryllium中已基本使用MD-SAL架构。
4、开放的可扩展北向API(Open Extensible Northbound API):提供可扩展的应用API,通过REST或者函数调用方式。两者提供的功能要一致。
5、支持多租户、切片(Support for Multitenancy/Slicing):允许网络在逻辑上(或物理上)划分成不同的切片或租户。控制器的部分功能和模块可以管理指定切片。控制器根据所管理的分片来呈现不同的控制观测面。
6、一致性聚合(Consistent Clustering):提供细粒度复制的聚合和确保网络一致性的横向扩展(scale-out)。
1、OSGi框架
OSGi(Open Service Gateway Initiative,直译为“开放服务网关”),是一个以Java为技术平台的动态模块化规范。OSGi中规定如何定义一个模块以及模块之间如何交互,Java模块被称为Bundle,OSGi就是为了使Bundle能更好的被复用。基于OSGi的应用是由一个个Bundle组成的,这些Bundle通过OSGi组织在一起,形成了一个系统。
OSGI框架分层:
2、Bundle
OSGi如果说是Java的模块开发体系,Bundle就是模块。OSGi中每个Bundle都有自己的类加载器,支持包级别的类导入和类导出,Bundle通过配置MANIFEST.MF,可以控制从Bundle导出的包,而没有导出的包则在Bundle外部是无法访问的。这样就完成了内部包和外部包的隔离。
3、KARAF是Apache旗下的开源项目,同时也是一个基于OSGI的运行环境,可以用于部署各种组件和应用程序。
4、Maven是现在Java社区中最强大的项目管理和项目构建工具。
5、Netty:java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。OpenDaylight南向使用Netty来管理底层的并发IO。
6、Jersey:开源的RESTful框架,实现了JAX-RS (JSR 311 &JSR 339) 规范。OpenDaylight北向使用Jersey提供REST接口。
还有其他很多用到的技术就不一一介绍了,有兴趣的朋友可以去网上搜索一下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)