介绍_介绍 json - CSDN
精华内容
参与话题
  • Jenkins介绍-自动部署

    2017-02-27 09:05:09
    介绍常用的.NET开发工具的一些使用技巧,引导.NET从业人员熟悉相关工具的使用,从而提升开发技能 https://github.com/zouyujie/mianshi
  • .NET框架简介

    万次阅读 多人点赞 2018-04-20 10:44:24
    初学.NET肯定会有一系列的疑问,比如(以下为自己的疑问): 1) 何为.... 2) 程序集是什么,它是如何在CLR(通用语言运行时)中运行的? 3) C#与VB.NET同属于.NET平台,它们之间的根本联系和区别,为何他们之间的程序...

    初学.NET肯定会有一系列的疑问,比如(以下为自己的疑问):

      1) 何为. NET框架,它都包含哪些东西?

      2)  程序集是什么,它是如何在CLR(通用语言运行时)中运行的?

      3)  C#与VB.NET同属于.NET平台,它们之间的根本联系和区别,为何他们之间的程序集能互相调用(如果创建一种新型的面向. NET的语言,要遵循什么)?

      想要明白如上问题,就需要弄清楚CIL(通用中间语言)、CLR(通用语言运行时)、CTS(通用类型系统)、CLS(通用语言规范)等等的概念,下面是自己看了一些他人的文章后进行的简单总结。


    首先通俗地理解一下.NET平台、.NET框架(Framework)的概念


      “平台”(这里指软件技术平台,下面都指的是这个)就是能够独立运行并自主存在,为其所支撑的上层系统和应用提供运行所依赖的环境。提取一下就是,平台是一个环境。只要符合平台规范的应用都能扔到上面来运行。

      我的通俗理解.NET平台是.NET应用与操作系统之间的一个中介,首先它为.NET应用运行提供了环境,其次它为.NET应用与操作系统之间起到了“解耦”的作用,使得平台上层的应用不依赖与操作系统(的机器指令集)。至于如何解耦,要看它的编译过程,下面会进行解释。


      


      框架就好似某种应用的半成品,是前人根据经验开发的可复用的一组组件,供你选用,然后添血加肉完成你自己的系统。其思想与设计模式有些相似,框架是代码复用,设计模式是设计复用。框架又好似提供的一组规范,它规范应用系统的开发与部署,众所周知的J2EE框架就是定义了13个规范。相类似,NET Framework也提供了很多规范,下面会进行介绍。


      


      粗略地说,一个.NET应用是一个运行于.NET Framework之上的应用程序。或者,一个.NET应用是一个使用.NET Framework类库来编写,并运行于公共语言运行时CLR(通用语言运行时)之上的应用程序。下面开始解决上面提出的问题:


    程序集及其运行


      首先引出两个概念CIL——通用中间语言、CLR——通用语言运行时两个概念(具体概念看百度百科)。

      我们知道,普通的无平台应用(例如:VB应用程序)经过预编译、编译、汇编、链接几个步骤后,最终生成的可执行文件中就已经包含了本地处理器的代码,支持它运行的是操作系统和本地的机器指令集。

      在.NET框架下,高级语言(例C#)经过编译后生成的结果文件被称做程序集,其后缀名是.dll(类库)或.exe(可执行程序,控制台应用程序编译结果)。而程序集并不是二进制机器码,是不能直接运行的,需要经过CLR(通用语言运行时)的即时编译才能生成被操作系统所识别的机器码。

      下面我们用C#和VB.NET分别写两个相同控制台应用程序,都定义一个字符串“hello world”,然后输出:

      C#:


      


      VB.NET:


      


      然后经过编译,分别生成相应的程序集.exe文件,下面我们用vs自带的反编译工具-IL DASM(目录:开始-- >vs2010-- >Windows SDK Tools -- >IL 反汇编程序)分别打开上面生成的程序集。

      C#程序集:


      


      VB.NET程序集:


      


      对比两个程序集文件,可以发现两者的代码几乎完全一致。

      上面用IL DASM打开的文件中的类似汇编的代码即为CIL-通用中间语言。可以看到VB.NET与C#,编译后生成的程序集的格式是相同的;当程序所实现的功能相同时,程序集所包含的CIL代码也是类似的。由此可得下图:


      


      上面提到了程序集(CIL)并不是CPU可以直接执行的本地机器语言。这种语言还需要.NET运行时(CLR)环境的支持,在执行之前,进行一个被称为即时编译的二次编译过程,才能转变成计算机可以识别的指令。


      


      CIL也是一种程序语言,它是比C#低级,比机器码高级的一种中间码语言,类似Java中的.Class文件。从前面截图可知CIL是一种基于堆栈的语言,同时,它提供了class、interface、继承、多态等诸多面向对象的语言特性,因此它又是完全面向对象的语言。如果愿意,甚至可以直接编写CIL代码,并且使用CIL的编译工具IL ASM(IL Assembler,IL汇编程序)来对它进行编译。只不过,和大多数低级语言一样,这种方式会使开发效率会变得很低。

      C#源程序在被编译为程序集以后,就独立于C#,因此程序集可以由其他种类的语言所调用;同时,因为程序集并没有包含本地机器的指令,所以它与具体的机器类型也分隔开了,可以被装有.NET框架的任何机器运行。


    C#与VB.NET的根本联系与区别


      (下文大部分引用一些书籍或博文)

      这里要引入CTS——公共类型系统、CLS——公共语言规范两个概念。

      设想我们如何开发一套类似C#或VB.NET的新的语言(编译后生成CIL代码,可以在.NET环境下运行)?

      要开发的新语言相当于CIL的高级语言版本,所以实际上要做什么并不是由新语言决定的,而是由CIL来决定的。因此,需要一套CIL的定义、规则或标准。这套规则定义了我们的语言可以做什么,不可以做什么,具有哪些特性。这套规则就称作CTS(Common Type System,公共类型系统)。任何满足了这套规则的高级语言就可以称为面向.NET框架的语言。C#和VB.NET不过是微软自己开发的一套符合了CTS的语言,实际上还有很多的组织或团体,也开发出了这样的语言,比如Delphi.Net、FORTRAN等。

      CTS规定了可以在语言中定义的数据类型、访问级别比如Private、Public、Family(C#中为Protected)、Assembly(C#中为internal)、Family and assembly(C#中没有提供实现)、Family or assembly(C#中为protected internal)。

      CTS还定义了一些约束,例如,所有类型都隐式地继承自System.Object类型,所有类型都只能继承自一个基类。从CTS的名称和公共类型系统可以看出,不仅C#语言要满足这些约束,所有面向.NET的语言都需要满足这些约束

      上面提到了,C#并没有提供Family and assembly的实现,C#中也没有全局方法(Global Method)。换言之,C#只实现了CTS 的一部分功能。也就是说,CTS规范了语言能够实现的所有能力,但是符合CTS规范的具体语言实现不一定要实现CTS规范所定义的全部功能。

      显然,由于CIL是.NET运行时所能理解的语言,因此它实现了CTS的全部功能。虽然它是一种低级语言,但是实际上,它所具有的功能更加完整。C#语言和CIL的关系,可以用如下表示:

      


      

      既然已经理解了CTS是一套语言的规则定义,就可以开发一套语言来符合CTS了。假设这个语言叫做B#,它所实现的CTS非常有限,仅实现了其中很少的一部分功能,它与CTS和C#语言的关系可能如下:


      


      那么现在就有一个问题:由C#编写的程序集,能够引用由B#编写的程序集吗?答案显然是不能。虽然C#和B#同属于CTS旗下,但是它们并没有共通之处。因此,虽然单独的B#或C#程序可以完美地在.NET框架下运行,但是它们之间却无法相互引用。

      如果B#项目期望其他语言类型的项目能够对它进行引用,就需要B#中公开的类型和功能满足C#语言的特性,即它们需要有共通之处。B#中不公开的部分(private、internal、protected)是不受影响的,可以使用独有的语言特性,因为这些不公开的部分本来就不允许外部进行访问。因此,如果B#想要被C#所理解和引用,它公开的部分就要满足C#的一些规范,此时,它与CTS和C#语言的关系就会变成如下:


      


      如果世界上仅有C#和N#两种语言就好办了,把它们共同的语言特性提取出来,然后要求所有公开的类型都满足这些语言特性,这样C#和N#程序集就可以相互引用了。可问题是:语言类型有上百种之多,并且.NET的设计目标是实现一个开放的平台,不仅现有的语言经过简单修改就可以运行在.NET框架上,后续开发的新语言也可以,而新语言此时并不存在,如何提取出它的语言特性?因此又需要一套规范和标准来定义一些常见的、大多数语言都共有的语言特性。

      对于未来的新语言,只要它公开的部分能够满足这些规范,就能够被其他语言的程序集所使用。这个规范就叫做CLS (Common Language Specification,公共语言规范)。很明显,CLS是CTS的一个子集。那么VB.NET、C#、B#的关系就可表达为:


      


      如果利用C#开发的一个程序集的公开部分仅采用了CLS中的特性,那么这个程序集就叫做CLS兼容程序集(CLScompliant assembly)。显然,对于上面提到的FCL框架类库,其中的类型都符合CLS,仅有极个别类型的成员不符合CLS,这就保证了所有面向.NET的语言都可以使用框架类库中的类型。

      满足CLS就是要求语言特性要一致,那么什么叫做语言特性?这里给出几个具体的语言特性:是否区分大小写,标识符的命名规则如何,可以使用的基本类型有哪些,构造函数的调用方式(是否会调用基类构造函数),支持的访问修饰符等。

      那么我们如何检验程序集是否符合CLS呢?.NET为我们提供了一个特性CLSCompliant,便于在编译时检查程序集是否符合CLS。我们来看下面一个例子:


      


      可以注意到,在CLSTest类的前面为程序集加上了一个CLSCompliant特性,表明这个程序集是CLS兼容的。但是,有三处并不满足这个要求,因此编译器给出了警告信息。这三处是:

      •不能以大小写来区分成员,因此字段name和方法Name()不符合CLS。

      •方法的返回类型和参数类型必须是CLS兼容的,uint和sbyte类型并非CLS兼容,因此GetValue()和SetValue()方法不符合CLS。

      •标识符的命名不能以下划线“_”开头,因此属性_MyProperty不符合CLS。

      还会注意到,编译器给出的只是警告信息,而非错误信息,因此可以无视编译器的警告,不过这个程序集只能由其他C#语言编写的程序集所使用。


    总结


             我们对.NET框架的第一感觉就是,.NET框架所提供的庞大类库及编写代码所采用的C#语言等,实际上远不止这些。还包含许多的内容,例如CLI、CIL、CTS、CLS、CLR、JIT、BCL、FCL等,这些内容在《.NET之美》这本书中都进行了深入浅出的讲解,对初学者很实用。如果想真正的理解.NET,仅仅会编码是远远不够得,上面这些东西才是根本

    展开全文
  • MODIS数据介绍

    万次阅读 2018-07-21 15:16:11
    转自:... 一、Modis数据资源总体介绍  1999年2月18日,美国成功地发射了地球观测系统(EOS)的第一颗先进的极地轨道环境遥感卫星Terra。它的主要目标是实现...

    转自:http://blog.sina.com.cn/s/blog_53e9bb570101jv55.html

    一、Modis数据资源总体介绍

     1999218日,美国成功地发射了地球观测系统(EOS)的第一颗先进的极地轨道环境遥感卫星Terra。它的主要目标是实现从单系列极轨空间平台上对太阳辐射、大气、海洋和陆地进行综合观测,获取有关海洋、陆地、冰雪圈和太阳动力系统等信息,进行土地利用和土地覆盖研究、气候季节和年际变化研究、自然灾害监测和分析研究、长期气候变率的变化以及大气臭氧变化研究等,进而实现对大气和地球环境变化的长期观测和研究的总体(战略)目标。200254日成功发射Aqua星后,每天可以接收两颗星的资料。 
        搭载在TerraAqua两颗卫星上的中分辨率成像光谱仪(MODIS)是美国地球观测系统(EOS)计划中用于观测全球生物和物理过程的重要仪器。它具有36个中等分辨率水平 (0.25um~1um)的光谱波段,每1-2天对地球表面观测一次。获取陆地和海洋温度、初级生产率、陆地表面覆盖、云、汽溶胶、水汽和火情等目标的图像。 
        本网站提供的MODIS陆地标准产品来自NASA的陆地过程分布式数据档案中心(The Land Processes Distributed Active Archive Center,LP DAAC/NASA)。包括:基于Terra星和Aqua星数据的地表反射率(250m,daily;500m,daily;250m,8days;500m,8day)、地表温度(1000m,daily;1000m,8days;5600m,daily)、地表覆盖(500m,96days;1000m,yearly)、植被指数NDVI&EVI250m,16daily;500m,16days;1000m,16days;1000m,monthly;、温度异常/火产品(1000m,daily;1000m,8days)、叶面积指数LAI/光合有效辐射分量FPAR1000m,8days)、总初级生产力GPP1000m,8days)。 
        本网站提供的所有MODIS陆地标准产品的格式为HDF-EOS,数据组织方式为10°经度*10°纬度的分片(TILE)方式。

    二、MODIS数据特点及技术指标

    1.概况

    MODIS全称Moderate-Resolution Imaging Spectroradiometer,即中分辨率成像光谱仪。1998MODIS机载模型器安装到EOS-AM(上午轨道)和PM(下午轨道)系列卫星上,从199912月正式向地面发送数据。MODISNASA地球行星使命计划中总数为15颗。

    2. MODIS数据的特点

    MODIS数据主要有四个特点: 
        1)全球免费:NASAMODIS数据实行全球免费接收的政策(TERRA卫星除MODIS外的其他传感器获取的数据均采取公开有偿接收和有偿使用的政策),这样的数据接收和使用政策对于目前我国大多数科学家来说是不可多得的、廉价并且实用的数据资源; 
        2)光谱范围广:MODIS数据涉及波段范围广(共有36个波段,光谱范围从0.4um-14.4um),数据分辨率比NOAA-AVHRR有较大的进展(辐射分辨率达12bits,其中两个通道的空间分辨率达250m5个通道为500m,另29个通道为1000m)。这些数据均对地球科学的综合研究和对陆地、大气和海洋进行分门别类的研究有较高的实用价值; 
        3)数据接收简单:MODIS接收相对简单,它利用X波段向地面发送,并在数据发送上增加了大量的纠错能力,以保证用户用较小的天线(仅3m)就可以得到优质信号; 
        4)更新频率高:TERRAAQUA卫星都是太阳同步极轨卫星,TERRA在地方时上午过境,AQUA在地方时下午过境。TERRAAQUA上的MODIS数据在时间更新频率上相配合,加上晚间过境数据,对于接收MODIS数据来说可以得到每天最少2次白天和2次黑夜更新数据。这样的数据更新频率,对实时地球观测和应急处理(例如森林和草原火灾监测和救灾)有较大的实用价值。

    3.MODIS数据的技术指标

    项目

    指标

    轨道

    705km,降轨上午10: 30过境,升轨下午1: 30过境,太阳同步,近极地圆轨道

    扫描频率

    每分钟20.3转,与轨道垂直

    测绘宽带

    2330km x 10km

    望远镜

    直径17.78cm

    体积

    1.0m X 1.6m X 1.0m

    重量

    250g

    功耗

    225w

    数据率

    11Mbit/s

    量化

    12bit

    星下点空间分辨率

    250m,500m,1000m

    设计寿命

    5年

     

    4.MODIS数据的波段分布特征

    波段

    波谱范围(nm)

    信噪比

    主要用途

    分辨率(m)

    1

    620-670

    128

    陆地/云边界

    250

    2

    841-876

    201

    3

    459-479

    243

    陆地/云特性

    500

    4

    545-565

    228

    5

    1230-1250

    74

    6

    1628-1652

    275

    7

    2105-2155

    110

    8

    405-420

    880

    海洋颜色/浮游 
    植物/生物化学

    1000

    9

    43848

    838

    10

    483-493

    802

    11

    526-536

    754

    12

    546-556

    750

    13

    662-672

    910

    14

    673-683

    1087

    15

    743-753

    586

    16

    862-877

    516

    17

    890-920

    167

    大气水蒸气

    18

    931-941

    57

    19

    915-965

    250

    20

    3.660-3.840

    0.05

    地表/云温度

    21

    3.929-3.989

    2.00

    22

    3.929-3.989

    0.07

    23

    4.020-4.080

    0.07

    24

    4.433-4.498

    0.25

    大气温度

    25

    4.482549

    0.25

    26

    1360-1390

    150

    卷云

    27

    6.535-6.895

    0.25

    水蒸气

    28

    7.175-7.475

    0.25

    29

    8.400-8,700

    0.25

    30

    9.580-9.880

    0.25

    臭氧

    31

    10.780-11.280

    0.05

    地表/云温度

    32

    11.770-12.270

    0.05

    33

    13.185-13.485

    0.25

    云顶高度

    34

    13.485-13.785

    0.25

    35

    13.785-14.085

    0.25

    36

    14.085-14.385

    0.35

    3.MODIS数据产品分级

    按数据产品特征划分:主要产品包括校正数据产品、陆地数据产品、海洋数据产品和大气数据产品;若按处理级别划分,又可以分为以下6种: 
        0级产品:也称原始数据; 
        1级产品:指L1A数据,已经被赋予定标参数; 
        2级产品:指L1B级数据,经过定标定位后数据,本系统产品是国际标准 的EOS-HDF格式。包含所有波段数据,可能是应用比较广泛的一类数据。; 
        3级产品:在1B数据的基础上,对由遥感器成像过程产生的边缘畸变(Bowtie效应)进行校正,产生L3级产品; 
        4级产品:由参数文件提供的参数,对图像进行几何纠正,辐射校正,使图像的每一点都有精确的地理编码、反射率和辐射率。L4级产品的MODIS图像进行不同时相的匹配时,误差小于1个像元。该级产品是应用级产品不可缺少的基础; 
        5级及以上产品:根据各种应用模型开发L5级产品。  

    MODIS数据介绍

    MODIS数据介绍

    MODIS数据介绍

    MODIS数据介绍

    三.MODIS Tile产品数据组织方式

     本网站提供的MODIS陆地标准产品数据都采用TILE类型进行组织即以地球为参照系, 采用了SINISIN,正弦曲线投影) 地球投影系统,将全球按照10°经度*10°纬度(1200KM*1200KM)的方式分片(如下图),全球陆地被分割为600多个Tile,并对每一个Tile赋予了水平编号和垂直编号。左上角的编号为(00)右下角的编号为(3517)。


    MODIS数据介绍

    四.MODIS 命名规则

     MODIS文件名的命名遵循一定的规则,通过文件名,可以获得很多关于此文件的详细信息,比如:文件名    MOD09A1.A2006001.h08v05.005.2006012234657.hdf     MOD09A1 –产品缩写     .A2006001 – 数据获得时间(A-YYYYDDD)     .h08v05 – 分片标示(水平XX,垂直YY)     .005 – 数据集版本号     .2006012234567 – 产品生产时间(YYYYDDDHHMMSS)     .hdf – 数据格式(HDF-EOS)

     

    五.MODIS 时间分辨率

     根据实际情况不同,本网站提供的MODIS陆地标准数据产品具有不同的时间分辨率,主要包括: 

        每日产品(daily 
        8天合成产品(8-Day 
        16天合成产品(16-Day 
        月合成产品(Monthly 
        季度产品(Quarterly 
        年产品(Yearly

    六.MODIS 空间分辨率

    MODIS仪器获得的数据有3个空间分辨率: 
        Bands 1–2 – 250 
        Bands 3–7 – 500 
        Bands 8–36 – 1000 
        本网站提供的MODIS陆地标准数据产品分为4种不同的空间分辨率,分别如下: 
        250 
        500 
        1000 
        5600 (0.05).

    七.MODIS产品处理级别

    本网站提供的MODIS陆地标准数据产品都为L2或者更高级别: 
        Level-2: derived geophysical variables at the same resolution and location as level-1 source data (swath products) 
        Level-2G: level-2 data mapped on a uniform space-time grid scale (Sinusoidal) 
        Level-3: gridded variables in derived spatial and/or temporal resolutions 
        Level-4: model output or results from analyses of lower-level data

    展开全文
  • NFV基本概述

    万次阅读 2020-03-18 11:47:43
    NFV介绍 定义: NFV,即网络功能虚拟化,Network Function Virtualization。通过使用x86等通用性硬件以及虚拟化技术,来承载很多功能的软件处理。从而降低网络昂贵的设备成本。可以通过软硬件解耦及功能抽象,使...

    NFV介绍

    定义:

    NFV,即网络功能虚拟化,Network Function Virtualization。通过使用x86等通用性硬件以及虚拟化技术,来承载很多功能的软件处理。从而降低网络昂贵的设备成本。可以通过软硬件解耦及功能抽象,使网络设备功能不再依赖于专用硬件,资源可以充分灵活共享,实现新业务的快速开发和部署,并基于实际业务需求进行自动部署、弹性伸缩、故障隔离和自愈等。

    目标:

    NFV的目标是取代通信网络中私有、专用和封闭的网元,实现统一通用硬件平台+业务逻辑软件的开放架构。

    NFV与SDN结合使用将对未来通信网络的发展带来重大的影响,同时也带来新的问题和挑战。

    NFV发展缘由:

    • 网络运营商的网络通常是由大规模并且迅速增长的多种多样的硬件设备组成。开发一个新的网络业务经常需要新类型的设备,而为这些盒子需找空间、提供电源变得越来越困难;同时还伴随着能源成本的增加、投资额的挑战,基于硬件设备的复杂度提升,也增加了对设计、集成、运营所需要的各种稀有技能的要求。
    • 更严重的问题是,基于硬件的设备很快就到了生命周期,这需要更多的“设计-集成-部署”循环,但收益甚少。糟糕的是,硬件生命周期变得越来越短而业务创新则在不断加速,所以这抑制了新增值业务的部署,并且限制了不断增长的网络为中心领域的创新。
    • 网络虚拟化通过借用IT的虚拟化技术,许多类型的网络设备类型可以合并入工业界标准中,如servers、switches和storage,可以部署在数据中心、网络节点或是用户家里。网络虚拟化适用于固定、移动网络中任何数据面的分组处理和控制面功能。

    NFV基本概念

    来自企业、运营商、家庭用户的需求:

    这里写图片描述

    • 随着云服务的不断发展和需求的不断增加,运营商只需要为企业私有云和公有云提供管道传输,因此运营商有被管道化的风险。
    • 家庭用户在体验上不支持多屏应用、室外应用,业务开通周期长,费用昂贵。
    • 企业用户需要高IT投入购买大量通信设备(路由器、交换机、服务器、存储设备)。
    • 系统扩容需要更新设备,重复投资。
    • CPE(customer premises equipment)多为企业网的网关,对接运营商的PE设备。

    什么是NFV:

    NFV即网络功能虚拟化(Network Functions Virtualization),将许多类型的网络设备(如servers,switches和storage等)构建为一个Data Center Network,通过借用IT的虚拟化技术虚拟化形成VM(虚拟机,Virtual Machine),然后将传统的CT业务部署到VM上。

    在NFV出现之前设备的专业化很突出,具体设备都有其专门的功能实现,而之后设备的控制平面与具体设备进行分离,不同设备的控制平面基于虚拟机,虚拟机基于云操作系统,这样当企业需要部署新业务时只需要在开放的虚拟机平台上创建相应的虚机,然后在虚拟机上安装相应功能的软件包即可。这种方式我们就叫做网络功能虚拟化。

    网络功能虚拟化的优点和面临的挑战:

    网络功能虚拟化的优点:

    1. 通过设备合并、借用IT的规模化经济,减少设备成本、能源开销。
    2. 缩短网络运营的而业务创新周期,提升投放市场的速度,是运营商极大的减少网络成熟周期。
    3. 网络设备可以多版本、多租户共存,且单一平台为不同的应用、用户、租户提供服务,允许运营商跨服务和跨不同客户群共享资源。
    4. 基于地理位置、用户群引入精准服务,同时可以根据需要对服务进行快速扩张/收缩。
    5. 更广泛、多样的生态系统使能,促进开放,将开放虚拟装置给纯软件开发者、小商户、学术界,鼓励更多的创新,引入新业务,更低的风险带来新的收入增长。

    NFV同样面临着很多技术挑战:

    1. 虚拟网络装置运行在不同的硬件厂商、不同的Hypervisor上,如何获取更高的性能。
    2. 基于网络平台的硬件同时允许迁移到虚拟化的网络平台中,两者并能共存,重用运营商当前的OSS/BSS。
    3. 管理和组织诸多虚拟网络装置(尤其是管理系统),同时避免安全攻击和错误配置。
    4. 保证一定级别的硬件、软件可靠性。
    5. 不同运营商的虚拟装置(VA)集成。网络运营商需要能“混合和匹配”不同厂家的硬件、不同厂家的Hypervisors、不同厂家的虚拟装置(VA),而没有巨大的集成成本、避免与厂家绑定。

    NFV架构

    NFV本质:重新定义网络设备架构:

    这里写图片描述

    图:NFV重新定义网络设备架构

    Huawei CloudEdge方案包括四个层面以及对应的亮点如下:

    • 软件应用层:华为提供丰富完善的电信业务应用,并且向第三方开放,加快业务创新和部署。
    • 虚拟层面Cloud OS:实现设备资源的高效利用和业务的快速部署。
    • 自动维护管理层MANO (Management And Network Orchestration):自动的网络伸缩,简化管理。
    • 硬件设备层:高可靠、高性能、多规格的COTS Server,充分满足电信级部署的需求,并支持多厂家的COTS Server部署。

    在NFV架构中,底层为具体物理设备,如服务器,存储设备,网络设备。

    计算虚拟化即虚拟机,在一台服务器上创建多个虚拟系统。

    存储虚拟化,即多个存储设备虚拟化为一台逻辑上的存储设备。

    网络虚拟化,即网络设备的控制平面与底层硬件分离,将设备的控制平面安装在服务器虚拟机上。

    在虚拟化的设备层面上可以安装各种服务软件。

    NFV开放接口:

    这里写图片描述

    图:NFV开放的接口
    • NFVI:提供VNF的运行环境,包括所需的硬件及软件。硬件包括计算、网络、存储资源;软件主要包括Hypervisor、网络控制器、存储管理器等工具,NFVI将物理资源虚拟化为虚拟资源,供VNF使用。

    • VNF:包括VNF和EMS,VNF网络功能,EMS为单元管理系统,对VNF的功能进行配置和管理。一般情况下,EMS和VNF是一一对应的。

    • VIM:NFVI管理模块,通常运行于对应的基础设施站点中,主要功能包括:资源的发现、虚拟资源的管理分配、故障处理等,为VNF运行提供资源支持。

    • VNFM:VNF管理模块,主要对VNF的生命周期(实例化、配置、关闭等)进行控制,一般情况下与VNF一一对应。

    • NFVO:NS生命周期的管理模块,同时负责协调NS、组成NS的VNFs以及承载各VNF的虚拟资源的控制和管理。

    • OSS/BSS:服务提供商的管理功能,不属于NFV框架内的功能组件,但NFVO需要提供对OSS/BSS的接口。

    NFV简化网络运营:

    这里写图片描述

    图:NFV简化网络运营
    • OPEX(Operating Expense)即运营成本,计算公式为:OPEX=维护费用+营销费用+人工成本+折旧)。
    • CAPEX(Capital Expenditure)即资本性支出,计算公式为:CAPEX=战略性投资+滚动性投资。资本性投资支出指用于基础建设、扩大再生产等方面的需要在多个会计年度分期摊销的资本性支出。
    • STB(Set Top Box):机顶盒STB是指用来增强或扩展电视机功能的一种信息设备,由于人们通常将它放在电视机的上面,所以又被称为机顶盒或顶置盒,可接收通过卫星广播和电缆传递过来的节目,并可提供附加服务,如在Internet上选择想看的电影,享受卫星的VOD(按需点播)服务,还能进行家庭银行等电子商务交易。
    • RGW(Residential Gateway):住宅网关一种接入网关设备。直接连到用户已有设备CPE(POTS,ISDN电话装置、PC电话)上,它允许直接在数据网络上传输来自个别住宅用户的语音呼叫。

    NFV企业网解决方案:

    这里写图片描述

    SME:(Small and medium enterprises)中小型企业。

    Advanced AR,当前网络中:SME直接向第三方购买业务,绕过运营商。

    • 对于运营商来说,不产生收入。
    • 对于SME来说,业务和设备运维复杂,成本高。

    Very Simple AR引入vAR后:运营商从云端提供企业业务。

    • 对于运营商来说,带来了大量的潜在收入
    • 对于SME,简化了运维管理。

    在vAR的场景里,将AR路由器的高级功能,比如防火墙,VOIP,NAT等虚拟化到server上,server的物理位置可以在运营商的机房。

    vAR解决方案的目的就是简化CPE的功能特性,集中管理高级特性等。在实际项目场景中,一个运营商的一个VIP的客户的网络可能CPE设备就有上千台,分散在不同的branches,虚拟化后的便捷性显而易见。

    SDN与NFV的关系

    SDN与NFV的关系:

    这里写图片描述

    图:SDN与NFV的关系
    1. NFV不依赖与SDN,但是SDN中控制和数据转发的分离可以改善NFV网络性能。
    2. SDN也可以通过使用通用硬件作为SDN的控制器和服务交换机以虚拟化形式实现。
    3. 结论:以移动网络,NFV是网络演进的主要架构。在一些特定场景,将引入SDN。

    SDN与NFV对比:

    类型 SDN NFV
    主要主张 转发与控制分离,控制面集中,网络可编程化 将网络功能从原来专用的设备移到通用设备上。
    校园网,数据中心、云。 运营商网络
    商用服务器和交换机 专用服务器和交换机
    云资源调度和网络 路由器、防火墙、网关、CND、广域网加速器、SLA保证等
    通用协议 OpenFlow 尚没有
    ONF(Open Networking Forun)组织 ETSI NFV工作组
    • NFV是具体设备的虚拟化,将设备控制平面运行在服务器上,这样设备是开放的兼容的。
    • SDN是一种全新的网络架构,SDN的思想是取消设备控制平面,由控制器统一计算,下发流表,SDN是全新的网络架构。
    • NFV和SDN是高度互补关系,但并不互相依赖。网络功能可以在没有SDN的情况下进行虚拟化和部署,然而这两个理念和方案结合可以产生潜在的、更大的价值。
    • 网络功能虚拟化(NFV)的目标是可以不用SDN机制,仅通过当前的数据中心技术去实现。但从方法上有赖于SDN提议的控制和数据转发平面的分离,可以增强性能、简化与已存在设备的兼容性、基础操作和维护流程。
    • NFV可以通过提供给SDN软件运行的基础设施的方式来支持SDN。而且,NFV和SDN在都利用用基础的服务器、交换机去达成目标,这一点上是很接近的。

    基于SDN的NFV解决方案:

    这里写图片描述

    图:基于SDN的NFV解决方案

    SDN控制器北向对接云平台接收配置信息,根据云平台需求计算流表,南向下发流表至CE设备。

    SDN控制器通过NFV实现,底层为E9000/RH2288服务器,平台为SUSE Linux系统,上层为VRP通用路由平台,VRP负责计算转发表。


    参考资料:华为HedEx文档


    展开全文
  • VGGNet介绍

    万次阅读 多人点赞 2018-07-09 17:13:26
    VGGNet介绍1 简要概括 VGGNet由牛津大学计算机视觉组合和Google DeepMind公司研究员一起研发的深度卷积神经网络。它探索了卷积神经网络的深度和其性能之间的关系,通过反复的堆叠3*3的小型卷积核和2*2的最大池化层...

    VGGNet介绍

    1 简要概括

        VGGNet由牛津大学计算机视觉组合和Google DeepMind公司研究员一起研发的深度卷积神经网络。它探索了卷积神经网络的深度和其性能之间的关系,通过反复的堆叠3*3的小型卷积核和2*2的最大池化层,成功的构建了16~19层深的卷积神经网络。VGGNet获得了ILSVRC 2014年比赛的亚军和定位项目的冠军,在top5上的错误率为7.5%。目前为止,VGGNet依然被用来提取图像的特征。

    2 创新点

        VGGNet全部使用3*3的卷积核和2*2的池化核,通过不断加深网络结构来提升性能。网络层数的增长并不会带来参数量上的爆炸,因为参数量主要集中在最后三个全连接层中。同时,两个3*3卷积层的串联相当于1个5*5的卷积层,3个3*3的卷积层串联相当于1个7*7的卷积层,即3个3*3卷积层的感受野大小相当于1个7*7的卷积层。但是3个3*3的卷积层参数量只有7*7的一半左右,同时前者可以有3个非线性操作,而后者只有1个非线性操作,这样使得前者对于特征的学习能力更强。


        使用1*1的卷积层来增加线性变换,输出的通道数量上并没有发生改变。这里提一下1*1卷积层的其他用法,1*1的卷积层常被用来提炼特征,即多通道的特征组合在一起,凝练成较大通道或者较小通道的输出,而每张图片的大小不变。有时1*1的卷积神经网络还可以用来替代全连接层。

        其他小技巧。VGGNet在训练的时候先训级别A的简单网络,再复用A网络的权重来初始化后面的几个复杂模型,这样收敛速度更快。VGGNet作者总结出LRN层作用不大,越深的网络效果越好,1*1的卷积也是很有效的,但是没有3*3的卷积效果好,因为3*3的网络可以学习到更大的空间特征。

    3 网络结构

        VGGNet的网络结构如下图所示。VGGNet包含很多级别的网络,深度从11层到19层不等,比较常用的是VGGNet-16和VGGNet-19。VGGNet把网络分成了5段,每段都把多个3*3的卷积网络串联在一起,每段卷积后面接一个最大池化层,最后面是3个全连接层和一个softmax层。


    4 代码实现

    代码实现参考自tensorflow的开源实现

    #%%
    # Copyright 2016 The TensorFlow Authors. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    # ==============================================================================
    from datetime import datetime
    import math
    import time
    import tensorflow as tf
    
    def conv_op(input_op, name, kh, kw, n_out, dh, dw, p):
        n_in = input_op.get_shape()[-1].value
    
        with tf.name_scope(name) as scope:
            kernel = tf.get_variable(scope+"w",
                                     shape=[kh, kw, n_in, n_out],
                                     dtype=tf.float32, 
                                     initializer=tf.contrib.layers.xavier_initializer_conv2d())
            conv = tf.nn.conv2d(input_op, kernel, (1, dh, dw, 1), padding='SAME')
            bias_init_val = tf.constant(0.0, shape=[n_out], dtype=tf.float32)
            biases = tf.Variable(bias_init_val, trainable=True, name='b')
            z = tf.nn.bias_add(conv, biases)
            activation = tf.nn.relu(z, name=scope)
            p += [kernel, biases]
            return activation
    
    def fc_op(input_op, name, n_out, p):
        n_in = input_op.get_shape()[-1].value
    
        with tf.name_scope(name) as scope:
            kernel = tf.get_variable(scope+"w",
                                     shape=[n_in, n_out],
                                     dtype=tf.float32, 
                                     initializer=tf.contrib.layers.xavier_initializer())
            biases = tf.Variable(tf.constant(0.1, shape=[n_out], dtype=tf.float32), name='b')
            activation = tf.nn.relu_layer(input_op, kernel, biases, name=scope)
            p += [kernel, biases]
            return activation
    
    def mpool_op(input_op, name, kh, kw, dh, dw):
        return tf.nn.max_pool(input_op,
                              ksize=[1, kh, kw, 1],
                              strides=[1, dh, dw, 1],
                              padding='SAME',
                              name=name)
    
    
    def inference_op(input_op, keep_prob):
        p = []
        # assume input_op shape is 224x224x3
    
        # block 1 -- outputs 112x112x64
        conv1_1 = conv_op(input_op, name="conv1_1", kh=3, kw=3, n_out=64, dh=1, dw=1, p=p)
        conv1_2 = conv_op(conv1_1,  name="conv1_2", kh=3, kw=3, n_out=64, dh=1, dw=1, p=p)
        pool1 = mpool_op(conv1_2,   name="pool1",   kh=2, kw=2, dw=2, dh=2)
    
        # block 2 -- outputs 56x56x128
        conv2_1 = conv_op(pool1,    name="conv2_1", kh=3, kw=3, n_out=128, dh=1, dw=1, p=p)
        conv2_2 = conv_op(conv2_1,  name="conv2_2", kh=3, kw=3, n_out=128, dh=1, dw=1, p=p)
        pool2 = mpool_op(conv2_2,   name="pool2",   kh=2, kw=2, dh=2, dw=2)
    
        # # block 3 -- outputs 28x28x256
        conv3_1 = conv_op(pool2,    name="conv3_1", kh=3, kw=3, n_out=256, dh=1, dw=1, p=p)
        conv3_2 = conv_op(conv3_1,  name="conv3_2", kh=3, kw=3, n_out=256, dh=1, dw=1, p=p)
        conv3_3 = conv_op(conv3_2,  name="conv3_3", kh=3, kw=3, n_out=256, dh=1, dw=1, p=p)    
        pool3 = mpool_op(conv3_3,   name="pool3",   kh=2, kw=2, dh=2, dw=2)
    
        # block 4 -- outputs 14x14x512
        conv4_1 = conv_op(pool3,    name="conv4_1", kh=3, kw=3, n_out=512, dh=1, dw=1, p=p)
        conv4_2 = conv_op(conv4_1,  name="conv4_2", kh=3, kw=3, n_out=512, dh=1, dw=1, p=p)
        conv4_3 = conv_op(conv4_2,  name="conv4_3", kh=3, kw=3, n_out=512, dh=1, dw=1, p=p)
        pool4 = mpool_op(conv4_3,   name="pool4",   kh=2, kw=2, dh=2, dw=2)
    
        # block 5 -- outputs 7x7x512
        conv5_1 = conv_op(pool4,    name="conv5_1", kh=3, kw=3, n_out=512, dh=1, dw=1, p=p)
        conv5_2 = conv_op(conv5_1,  name="conv5_2", kh=3, kw=3, n_out=512, dh=1, dw=1, p=p)
        conv5_3 = conv_op(conv5_2,  name="conv5_3", kh=3, kw=3, n_out=512, dh=1, dw=1, p=p)
        pool5 = mpool_op(conv5_3,   name="pool5",   kh=2, kw=2, dw=2, dh=2)
    
        # flatten
        shp = pool5.get_shape()
        flattened_shape = shp[1].value * shp[2].value * shp[3].value
        resh1 = tf.reshape(pool5, [-1, flattened_shape], name="resh1")
    
        # fully connected
        fc6 = fc_op(resh1, name="fc6", n_out=4096, p=p)
        fc6_drop = tf.nn.dropout(fc6, keep_prob, name="fc6_drop")
    
        fc7 = fc_op(fc6_drop, name="fc7", n_out=4096, p=p)
        fc7_drop = tf.nn.dropout(fc7, keep_prob, name="fc7_drop")
    
        fc8 = fc_op(fc7_drop, name="fc8", n_out=1000, p=p)
        softmax = tf.nn.softmax(fc8)
        predictions = tf.argmax(softmax, 1)
        return predictions, softmax, fc8, p
        
        
    
    
    def time_tensorflow_run(session, target, feed, info_string):
        num_steps_burn_in = 10
        total_duration = 0.0
        total_duration_squared = 0.0
        for i in range(num_batches + num_steps_burn_in):
            start_time = time.time()
            _ = session.run(target, feed_dict=feed)
            duration = time.time() - start_time
            if i >= num_steps_burn_in:
                if not i % 10:
                    print ('%s: step %d, duration = %.3f' %
                           (datetime.now(), i - num_steps_burn_in, duration))
                total_duration += duration
                total_duration_squared += duration * duration
        mn = total_duration / num_batches
        vr = total_duration_squared / num_batches - mn * mn
        sd = math.sqrt(vr)
        print ('%s: %s across %d steps, %.3f +/- %.3f sec / batch' %
               (datetime.now(), info_string, num_batches, mn, sd))
    
    
    
    def run_benchmark():
        with tf.Graph().as_default():
            image_size = 224
            images = tf.Variable(tf.random_normal([batch_size,
                                                   image_size,
                                                   image_size, 3],
                                                   dtype=tf.float32,
                                                   stddev=1e-1))
    
            keep_prob = tf.placeholder(tf.float32)
            predictions, softmax, fc8, p = inference_op(images, keep_prob)
    
            init = tf.global_variables_initializer()
    
            config = tf.ConfigProto()
            config.gpu_options.allocator_type = 'BFC'
            sess = tf.Session(config=config)
            sess.run(init)
    
            time_tensorflow_run(sess, predictions, {keep_prob:1.0}, "Forward")
    
            objective = tf.nn.l2_loss(fc8)
            grad = tf.gradients(objective, p)
            time_tensorflow_run(sess, grad, {keep_prob:0.5}, "Forward-backward")
    
    batch_size=32
    num_batches=100
    run_benchmark()
    
          

    5 参考文献

    [1]黄文坚,唐源.TensorFlow实战[M].北京:电子工业出版社,2017.

    [2] https://arxiv.org/abs/1409.1556v6

    [3]https://github.com/machrisaa/tensorflow-vgg


    展开全文
  • IntelliJ IDEA的简介

    万次阅读 2019-01-16 09:57:28
    IntelliJ IDEA的简介
  • ResNet介绍

    万次阅读 多人点赞 2018-07-10 19:37:33
    ResNet介绍1 简要概括 ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,...
  • FastDFS-介绍

    万次阅读 2020-02-23 22:28:30
    1.介绍FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,...
  • java面试时如何做好5分钟自我介绍

    万次阅读 多人点赞 2017-12-10 10:21:34
    有简历,为何还要自我介绍? 一个常规的面试,寒暄之后面试官提出的第一个问题几乎千篇一律:“请您简单地做一下自我介绍”。有些被面试者都会问:简历中情况已经写得很清楚了,这是否多此一举? 要回答这个...
  • RabbitMQ基础概念详细介绍

    万次阅读 多人点赞 2016-12-15 19:28:53
    引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?...本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。 RabbitMQ
  • JAVA面试技巧之自我介绍

    万次阅读 多人点赞 2019-06-24 11:01:27
    【如何进行自我介绍】 自我介绍这个问题,不用多说了,面试必定会问!如果想要在自我介绍的时候就能够打动面试官,吸引面试官对我们的兴趣,那么像我们这种接受过Java培训的程序员的自我介绍当然不能和应届生或者...
  • 精选面试自我介绍

    万次阅读 多人点赞 2018-09-05 12:44:47
    面试自我介绍优秀范文 (一) 各位考官好,今天能够站在这里参加面试,有机会向各位考官请教和学习,我感到非常的荣幸.希望通过这次面试能够把自己展示给大家,希望大家记住我.我叫....,今年..岁.汉族,法 学本科.我平时...
  • 关于程序员的面试于自我介绍模板

    万次阅读 多人点赞 2018-09-11 20:50:55
    一、自我介绍 当面试考官随便地问你:“谈谈你自己的情况如何?”这是面试中的第一个问题。此刻,你应把在此之前所有紧张不安的情绪稳定下来。因为这个问题,应试者已经做了充分的准备,并且有足够的信心和勇气相信...
  • Spring Cloud全家桶主要组件及简要介绍

    万次阅读 多人点赞 2019-06-02 14:40:11
    感觉不学习一下都快跟不上时代的步伐了,下边做一下简单的总结和介绍。何为微服务?简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的...
  • 自我介绍,一个从小学入学到步入职场,人人都经历过不下于10次的事情,可每次经历的时候都还是说不出的滋味 很多人提起自我介绍总是一个头比两个大,我自己也不例外。关键是觉得自己没什么好介绍的,除了一个名字...
  • 今天介绍一下关于Android Studio 的几个好用的插件,都是我在用的,或能提高码代码效率,或者让你心情愉悦。 还是老话,本文原创,转载请注明在CSDN博客上的出处: 以下所有插件都可以在Idea的插件库中找到,如果你...
  • 软件测试面试必考题:自我介绍

    万次阅读 多人点赞 2019-01-14 21:05:05
    请简单的做个自我介绍吧~ 分以下几点说明。   一、个人的基本信息,扬长避短   1、年纪太大与太小,都不需要主动去说明。 比如我年纪只有21岁 例子:面试官您好,我叫***,来自于哪里,从事软件测试工作...
  • 如何在面试中介绍自己的项目经验

    万次阅读 多人点赞 2018-08-31 23:15:01
    在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是,说下你最近的(或最拿得出手的)一个项目。   根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚至有人说出项目经验从...
  • 在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中。...这就是本文中要介绍的Binder进程间通信机制了。
  • 软件测试面试指导-问题一:自我介绍

    万次阅读 多人点赞 2018-03-23 19:03:22
    面试问题参考第一问,95%都会问到请简单的做过自我介绍吧?几点去说明1,个人的基本信息,扬长避短。1,年纪太大与太小,都不需要主动去说明比如我年纪只有21岁例子:面试官您好,我叫***,来自于哪里,一直从事软件...
1 2 3 4 5 ... 20
收藏数 4,625,133
精华内容 1,850,053
关键字:

介绍