继承光纤通道(Fibre Channel)的架构,SAN 亦具备三种 拓扑:专属点对点连接,提供保证带宽;仲裁回路,提供连接两台以上装置共享带宽;Switched Fabric则提供同时多重连接的性能。
专属点对点连接(Dedicated Point-to-Point Connection) 点对点连接是最基本、最简单的架构,两个N_Ports直接对接,一个N_Port的传送端(Tx)接到另一个N_Port的接收端(Rx),反之,其接收端则连接到他方之传送端。这种架构,基本上只能建立只有两个装置的系统,当然,这两个装置也拥有全部的带宽(100MB/s,或200MB/s双向传输的话)。注:N_Port:每一个光纤通道的装置都称为Node,每一个Node都具备一个(或以上)的连接埠(Port(s)),Node中的每个连接埠就称为N_Port,也就是Node Port。 就实际的应用上来说,系统能够做全双工(Full Duplex)传输的机会不是很大。例如,服务器在同一时间上,不是从储存系统读取数据,就是把数据写入储存系统中;能够一边读同时又一边写的机会,实在太少了。而且就目前最标准的33MHz、32-bit PCI架构的服务器而言,其PCI Bus的带宽也不过132MB/s,要消化200MB/s的数据传输率,实在不太实际。所以,点对点的连接架构,虽然也算是SAN的一种,但是充其量只是直接连接储存系统(Direct-Attached Storage)的一种而已,只不过把SCSI或IDE换成Fibre Channel而已。 由于Arbitrated Loop 以及 Switch Fabric的技术日益精进,其产品价位也越来越经济,因此SAN系统基本上是由Arbitrated Loop 架构,升级扩充至Switched Fabric架构。点对点连接的架构,仅适合在储存系统建置初期,在容量需求还不是很大的时候,做一个保守的投资,但是又保留将来系统的扩充能力(Scalability)。但是在选择主机适配卡(HBA:Host Bus Adapter)以及周边的时候,就必须特别注意其规格,确定其所提供之驱动程序以及固件(Firmware,Microcode)能够支持未来扩充至Arbitrated Loop以及Switched Fabric 的能力,以免造成投资的浪费,甚至储存系统必须整个重新设置的痛苦。仲裁回路(Arbitrated Loop)架构 仲裁回路(Arbitrated Loop)架构,比点对点连接架构具备更多弹性,一个回路可以连接达127个装置;同时其单位成本又较Switched Fabric 来得低,因此Loop 架构是目前最被广泛应用的架构。 Arbitrated Loop 实体架构就像既有的FDDI(光纤分布式数据接口)及Token Ring(令牌环网)一样,第一个NL_Port的传送端连接到第二个NL_Port的接收端;第二个NL_Port 的传送端在连接到下一个NL_Port 的接收端;以此类推,一直到最后一个NL_Port的传送端连接道地一个NL_Port 的接收端。如此,便形成一个封闭的回路。注二:NL_Port:一个N_Port如果是连接到Arbitrated Loop,就被称为NL_Port,也就是Node Loop Port的意思。
在一个Arbitrated Loop 中的所有装置,都共同分享整体带宽(100MB/s)。因此回路架构越大(即装置总数越多),每个装置分享到的带宽也就相对越小。当然,在同一时间点上,并不是回路上的每一个装置都需要传输数据,因此,真正活跃节点(Active Nodes)的数目,决定了整个回路的平均带宽。例如,以两部服务器共同连接40部JBOD磁盘驱动器(Just a Bunch of Disks,一堆独立磁盘驱动器,并未建构成RAID)的系统来说,如果每个服务器的HBA都可以执行8个Concurrent Threads(并发线程),则总共可能同时有16个活跃节点,所以每个节点可以分享的带宽就是约6.6MB/s,对于现在的Fibre Channel磁盘驱动器具备超过30MB/s的性能来说,算是相当委屈的。
为了有效提升Fabric Switch的性能,Fibre Channel Switch 一般都是应用Cut-Through交换机制。Cut-Through的技术,是在信息桢(Frame)送进Switch的时候,先判别其目的地地址,便立刻将之传送到目的地,而不是等到整个信息桢都接收完,再行判别(Store-and-Forward)。如此,可在最短的延迟时间内,将Frame转送出去。
Fabric和Arbitrated Loop的区别,除了Loop将带宽分享;Fabric是带宽加总之外,另外一个显著的差别,就是可寻址的数目。在Arbitrated Loop中,最多只能有127个装置,但是在Fabric中,每个N_Port都被指定一个24-bit的地址,因此理论上,一个Fabric可支持多达一千六百万个N_Ports。由于FC-SW标准的寻址模式,把24-bit的地址分为3个部份:最高的8-bit做为Domain Address之用;中间的8-bit做为Area Address之用;最低8-bit做为Port Address之用。由于Domain Address中有许多是保留,实际可用的数目为236个,因此一个Fabric中最多可以有236个Switches连接在一起;而Area 适用来区别群组的F_Ports(Fabric Ports),或是个别连接回路的FL_Port(Fabric Loop Port);Port Address则是指派到最终的N_Ports或NL_Ports。Area Address以及Port Address都各有256个,因此整个Fabric 可以连接236 X 256 X256 = 15,466,496个Ports。
上述的寻址模式,最重要的目的,是在多重Switches的Fabric系统中,让路由机制只需判断1个Byte的Domain Address,便可以知道该把Frame往哪个Switch 送,而不必判别完整的3个Bytes Address,如此大大提升路由效率。 在多重Switches、复杂度高的Fabric系统中,重要的课题是如何达到Inter-Switch Link 的容错功能。解决的方法,一般是采用交错连接,也就是每个Switch用2 个Ports 分别和两个不同的Switches连接,Fabric中所有的Switches都互相交错连接。如此,任何一条Switch-Switch的联机断掉了,都有另外一个替代路径可用。但是这种方式也造成另外一个问题,即连续性的Frames,可能经由不同的路径传送,在送达目的端后,发生脱序的情况。这时,既有的802.1 Spanning Tree 就派上用场了,利用Spanning Tree技术,所有的Frame都会经由最佳路径传送,除非最佳路径中断,才会改载备用路径。 Fabric的Switch,除具备基本的新增、移除、动态寻址等功能之外,为了有效率支持大型储存系统网络,还必须支持许多更进一步的功能,例如Simple Name Server、State Change Notification、Fabric Zoning等。这些功能的细节,希望以后有机会再向各位报告。