iSCSI 的兴起

现代 SCSI,正如 SCSI-3 架构模型(SAM)所定义的那样,真正将连接到存储的电缆和物理互连视为更大层次结构中的一个级别。

Jeffrey S. Goldner,微软公司

当大多数 IT 专业人士想到 SCSI 时,脑海中会浮现出带有许多易碎针脚的粗电缆的图像。当然,这是一种表现形式——最古老的一种。但是现代 SCSI,正如 SCSI-3 架构模型(SAM)所定义的那样,真正将连接到存储的电缆和物理互连视为更大层次结构中的一个级别。通过将发送到设备和从设备发送的指令或命令与物理层及其协议分离,您将获得一种更通用的存储通信方法。

将线路协议与命令协议分离,允许 SCSI 的通用表示独立于实际的物理载体。SCSI-3 协议命令套件中定义的各种命令集都标准化了来自目标的命令和响应的格式。

如今,许多存储设备都使用某种形式的 SCSI 协议,最值得注意的例外是个人计算机中常见的 ATA(也称为 IDE 或 EIDE)设备。企业级机器和许多小型服务器使用一个或多个 SCSI-3 互连。这些互连的示例包括众所周知的 SCSI 并行接口(SPI)、光纤通道协议(FCP)映射以及一种新协议 Internet SCSI(iSCSI),它将 SCSI 存储协议映射到标准 IP 网络上。图 1 显示了完整的 SCSI 标准图表 [http://www.t10.org/scsi-3.htm]。

图 1

这里的重点是介绍新兴的 iSCSI 协议的细节,并展示它如何融入存储协议和网络的合并领域。

SCSI 相对于 ATA 有许多优势,其中最重要的一点是能够与计算机系统本身之外进行通信。其他值得注意的功能包括支持多个主机(启动器)、允许集群或设备共享以及命令队列,这允许发出多个未完成的命令并无序返回。(尽管最新版本的 ATA 协议也定义了队列,但目前其采用率非常低。)

在深入研究 iSCSI 之前,有几个常用术语值得解释。SAM 定义了启动器、目标器和逻辑单元的概念,如下所示

图 2 说明了启动器、目标器和逻辑单元之间的关系。

图 2

存储和服务器的解耦允许企业数据中心的物理资源以更逻辑的方式分布。例如,装满高性能服务器刀片的机架可以通过某种类型的 SCSI-3 互连连接到存储设备。为了实现最高的计算密度,您必须考虑空间、电力和冷却。在当今的现代计算引擎中,磁盘设备是这些项目的重要消耗者。

当您从计算机本身移除所有磁盘设备时,还会发生其他事情。您可以获得灵活性并提高资源容量利用率。许多调查表明,如果系统购买者购买带有计算服务器的存储,他们往往会购买过多的磁盘容量。事实上,未使用的磁盘空间量平均约为 60%。然而,这是一个平均值;有些系统会耗尽存储可用空间,而另一些系统则使用很少的空间。通过池化存储设备和虚拟化这些资源,可以根据需要提供可用磁盘空间。购买者可以根据总容量预测购买存储,并几乎可以随意重新分配可用存储。这已成为存储区域网络 (SAN) 最明显的优势之一。

将存储与服务器分离的第二个明显好处是能够更换服务器(使用更新的硬件或可能更换故障系统),并将存储资源分配给新服务器,而无需备份和恢复数据。其他优点包括能够将存储在相对较远的距离上分离(对于灾难恢复很重要);能够以非常高的速度移动和复制数据;以及能够共享磁盘以外的昂贵设备,例如磁带和介质库。

为您的饮食添加光纤

从 iSCSI 开发之前的几年开始,数据中心中主要的互连技术——以及 SAN 之母——一直是光纤通道(Fibre Channel)(发明者有意拼写错误)。在 20 世纪 80 年代后期,IBM 和其他公司的研究人员正在研究新的网络技术,并提出了 FC 架构,该架构源自当时可用的其他互连。最初的愿景是通用的互连“结构”,可以用于各种目的,其中网络是主要用途。幸运的是,这种新的结构在存储方面也具有一些明显的优势,因为 FC 代表了一种较低级别的协议,能够处理多个上层协议(ULP)。这些包括高速、可靠和按顺序的数据交付;创建大规模且相对高效的网络的能力;以及最重要的是,创建将成为 SAN 的新范例。

像任何新的互连一样,FC 的成功最终取决于来自多个来源的设备之间的互操作性。这就是漫长传奇的开始。FC 不仅是一种新的物理互连——处于技术能力的前沿——它还需要创建映射到不同协议的映射,以使网络和存储能够使用该结构。此外,在交换机得到完善的同时,交换结构的愿景被转移了,并提出了一种不同的拓扑——光纤通道仲裁环路(FC-AL)。尽管它应该更易于实现,使用集线器而不是交换机,但环路有其自身独特的问题(最好留待另一篇文章讨论)。

那么,为什么需要另一种互连呢?首先,FC 的开发和市场接受度受到缺乏互操作性的阻碍,再加上以太网在网络领域的广泛接受。此外,FC 在硬件层面上与以太网不同,这意味着需要经过专门培训的人员,他们精通 FC 架构的细节,才能成功部署结构。在以太网上运行存储的能力变得诱人,因为它承诺更简单的部署和更低的成本。

进入以太网

如果您认为互操作性,更糟糕的是,管理 FC 结构的难度是 FC 广泛采用的两个最大障碍,那么 iSCSI 的优势就会跃然纸上。互操作性在以太网世界中是理所当然的。最便宜的适配器,甚至以太网的芯片组实现(读作:几乎免费)只需即插即用,现在包括集成到芯片组中的千兆网络接口卡(NIC)。

此外,企业环境中充分理解和支持以太网的结构化布线标准。您不必查阅数百页的表格来识别适配器、交换机、固件、电缆、驱动程序和设置的组合,只需将以太网连接在一起即可。出于某种不合逻辑的原因,当您配置基于 FC 的结构时,这就是常态。(嗯,也许这里面有什么道理。它培养了忠诚的客户,因为一旦您投资于一家供应商,更换产品就太困难了。)

当然,适配器之间确实存在差异,以太网交换机具有某些功能,这些功能区分了产品,尤其是在可管理性和性能方面。但总的来说,以太网是一个即插即用环境。

当 iSCSI 首次提出时,完全不清楚将使用哪种协议通过以太网传输 SCSI 数据包。TCP/IP 最终被选中,即使它有一些限制。该决定在很大程度上受到存储流量要求的驱动:可靠且按顺序交付数据包。此外,拥塞控制已经是 TCP 的一部分,因此随着流量的增加,协议栈的较低层可以对其进行排序,并将数据和命令封装留给网络(或存储)栈的较高层。还有一个实际的考虑因素,即拥有一个工作协议和支持它的产品,而不是必须创建一个全新的基础设施——或至少是其中的一部分。

由于 iSCSI 构建在 TCP/IP 之上,因此每个命令、响应和数据包都需要封装在以太网帧中。图 3 显示了这种封装。(为了说明目的,并且因为它是最熟悉的网络介质,所以显示了以太网。事实上,没有任何限制 iSCSI 仅通过以太网传输。ATM、Sonet 甚至,喘息一声,甚至 FC 也可以用于线路协议,只要该协议可以支持 IP 流量。)

图 3

以太网帧、数据报和 TCP 标头的结构最好从任何网络文本中获得。只需说明 TCP 标头有足够的信息来指示 iSCSI 协议数据单元 (PDU) 包含在 TCP 段中,并具有标头和可选数据部分。PDU 是启动器(主机)和目标器(存储设备)之间每次通信的基础。单个 iSCSI PDU 可能需要多个以太网帧。

协议数据单元

每个 TCP 段中都包含一个 PDU,它执行 SCSI 命令、管理功能、命令响应或数据的某些部分。一旦 iSCSI 会话建立,就可以执行标准的 SCSI 命令来读取或写入块。典型的完整操作由启动器和目标器之间必须交换的 PDU 或数据包组成,如图 4 所示。

图 4

由于 iSCSI 通常通过以太网传输,因此以太网可以承载的最大响应大小 (MRU) 或有效负载为 1,500 字节(使用“巨型帧”,尽管并非所有硬件或设备驱动程序都支持,但可以将每个帧的 MRU 增加到 9,180 字节)。这必须包括每个帧上的 TCP、IP 和以太网标头;PDU 第一个帧中的 iSCSI 标头;以及任何可选标头、数据和摘要(稍后解释)。PDU 中传输的数据大小限制为端点之间协商的值 (MaxRecvDataSegmentLength),因此对更多数据的请求将需要多个 PDU。

除了普通命令外,iSCSI 到 SCSI 的映射中还定义了几个任务管理功能(例如 LU 重置),因此这些功能也将使用 PDU 传输。其他 PDU,例如登录请求和响应以及各种消息,也定义为 iSCSI 协议的一部分。

SCSI 领域中的任何对话都通过建立 I-T 关联(从启动器到目标器的逻辑路径)来进行。iSCSI 中的此关联称为会话,必须通过称为登录的过程建立。iSCSI 允许多个连接——即从启动器到目标器建立的物理路径。这称为每个会话多个连接 (MC/S),最好将其视为协议本身内置的多路径。(MC/S 必须在主机操作系统上的 iSCSI 特定驱动程序中进行容纳,因此它实际上不是内置的多路径解决方案。)这不仅允许在路径发生故障时进行冗余,还允许聚合多个物理链路上的带宽。

使用 iSCSI,可以对登录进行身份验证,因此可以建立端点安全性以防止篡改数据。除了建立端点安全性外,登录过程还涉及启动器和目标器之间的参数交换。(参见图 5。)这在很大程度上保证了 iSCSI 的互操作性。

图 5

端点之间的通信需要一种定位目标器的机制。iSCSI 拥有丰富的此类机制,从手动将 IP 地址输入到文件或 BIOS 设置屏幕,到完全自动化的机制

使用 IP 地址不仅枯燥乏味,而且难以管理。iSCSI 有两种命名节点(启动器或目标器)的方案。在这两种情况下,名称对于端节点都是唯一的。

如果这还不够,则每个节点都有一个完全限定的地址,该地址由域名(IP 地址或 DNS 名称)、TCP 端口号(默认值为 3260)以及 iSCSI 名称的形式之一组成。

缓冲区管理和错误处理

为了获得良好的性能,iSCSI 实现分配内存来缓冲多个命令和数据。iSCSI 命令是“主动请求的”——也就是说,目标器不知道它们即将到来。命令 PDU 本身的大小有限,而传输的数据可能非常大。作为登录协商的一部分,目标器和启动器交换有关可用缓冲量的信息。这很重要,因为如果连接的一端必须在另一个帧可以发送到它之前确认每个帧,那么速度就会非常慢。随着物理距离和网络跳数的增加,这一点变得越来越重要。为了实现高效的数据流,发送节点不必等待响应,只要它认为另一端有空闲缓冲区即可。

除了 iSCSI 特定的缓冲区处理外,TCP/IP 还有自己的“窗口”机制和拥塞控制,尽管这些在某种程度上受到中间组件质量的影响。因此,不要期望 200 美元的千兆以太网交换机能够像 4,000 美元/端口的思科交换机那样表现良好,后者包含更多的缓冲和 TCP 管理功能。

数据完整性当然至关重要,iSCSI 具有多种机制来确保发送的数据是接收的数据。iSCSI PDU 标头包含一个或多个摘要,这是安全社区对一种校验和形式的名称,这种校验和形式更常被称为循环冗余校验 (CRC)。摘要可以保护 PDU 的命令部分和数据部分。如果接收器未计算出相同的 CRC 值,则需要重新传输帧或执行其他错误恢复。

有趣的是,摘要在 iSCSI 中是可选的,尽管在大多数情况下,很难理解为什么您不想使用它们。但是,CRC 的缺点是计算成本可能很高,尤其是在未采用硬件来卸载计算的情况下。不使用摘要的一种情况是有道理的:当 IP 安全 (IPsec) 用于加密时,可以在该级别提供完整性,从而避免在 iSCSI 协议级别提供完整性。但是,让我们从 iSCSI 的细节退后一步,看看存储系统市场和驱动因素。

任何价位都可获得性能

iSCSI 最引人注目的方面之一是能够以许多不同的价格点购买存储网络。iSCSI 软件驱动程序(启动器)的使用为任何带有 NIC 的系统增加了此功能,这意味着可以非常便宜或免费地引入存储网络——至少在主机端是这样。这是优于 FC 的一个明显优势,因为 FC 必须具有专用主机总线适配器 (HBA),这归因于互连的独特性质。

尽管通过操作系统的网络堆栈运行可能会出现性能问题,但随着 CPU 速度的快速提高,通常会有周期可以消耗。这还不包括超线程处理器的出现,它实际上以一个 CPU 的价格包含了两个 CPU。将这些多余的时钟周期用于 iSCSI 处理可能最终成为低端要求的良好投资和权衡。

如果纯软件方法无法满足特定应用程序负载(例如重型电子邮件服务器和数据库管理系统)的要求,那么对于那些能够负担得起的人来说,可以使用一系列更高性能的选项。现在我们正危险地接近光纤通道定价。

TCP 卸载引擎 (TOE) 有时被认为是提高 iSCSI 性能以及可能常规网络流量的最佳技术。TOE 芯片正在开发中,用于 NIC 以及 iSCSI HBA。对于某些工作负载,通常是那些涉及较大传输大小(超过 8 KB)的工作负载,使用 TOE 加速的效果可以将 CPU 利用率减半。不幸的是,对于数据库类型应用程序使用的典型数据传输大小,效果不太明显。

基于 RJ-45 连接器的 SAN 的吸引力也可能是其主要弱点之一。在光纤通道世界中,物理安全性一直很容易做好,并且在很大程度上已经足够了。事实上,通过物理访问,拦截数据仍然相当困难,因为需要专门的分析仪来捕获流量。没有像混杂 HBA 这样的东西。但是,对于任何在 TCP/IP 上运行的协议,人们立即会想到黑客,并且需要更积极的机制来保护基于 iSCSI 的 SAN。iSCSI 网络的安全性涉及身份验证、加密以及可能的虚拟 LAN (VLAN) 实现。这些中的每一个都有其复杂性。

iSCSI 空间中的身份验证涉及一种称为质询握手身份验证协议 (Challenge Handshake Authentication Protocol, CHAP) 的算法,或几种可选协议之一,例如安全响应、Kerberos 或简单公钥机制 (Simple Public Key Mechanism, SPKM)。这些中的每一个都是在与 iSCSI 分开的 Internet 请求评论 (RFC) 中定义的通用身份验证协议。将密钥分发到每个端点(目标器或启动器)的要求使 CHAP 实现复杂化;远程身份验证拨入用户服务 (RADIUS) 的使用将在此处有所帮助。请注意,iSCSI 标准不要求使用这些协议中的任何一个,但是,一些供应商计划在其首批产品出货时完全跳过安全性。(根据 IETF 规范,启动器和目标器必须实现 CHAP,但没有人必须使用它。任何不实现 CHAP 的设备都将是不合格的。)请记住,身份验证仅关注谁与谁对话,而与实际对话完全无关。如果网络受到破坏(例如,被嗅探),那么嗅探者是否无法直接与设备对话并不重要——如果数据没有受到其他方式的保护,它仍然可以抓取所有数据以供离线消化。

然后是加密问题。IPsec 在 iSCSI 标准中被采用,但是通过一些奇怪的语言曲折,其实现被声明为“强制性的,但可选的”。换句话说,没有人期望它被使用。这是因为 (a) 它难以管理;(b) 消耗性能;并且 (c) 当存储网络与通用计算机网络物理隔离时,它被认为是不必要的。许多供应商根本不打算支持 IPsec,理由是客户(为产品付费的任何人,不一定是最终用户)没有明确的要求。尽管这将违反规范,但在考虑成本时很难反驳。

最后,是以太网世界中 VLAN 的问题。尽管大多数 VLAN 不能提供最高的安全性,但它们确实提供了一种众所周知的模型,在许多情况下可以提供足够的保护。当然,通过物理隔离将入侵者拒之 SAN 之外仍然是一个好主意。只是要注意可能通过执行路由功能来提供入口的多宿主计算机。

iSCSI 漫游的下一站可能是添加远程直接内存访问 (RDMA)。它正在集群计算机环境和 InfiniBand 中引入,作为一种避免 TCP/IP 堆栈中固有的开销的方法,这需要将数据复制到内核,然后再复制到每个主机上的应用程序空间。RDMA 有望让网络连接两端的应用程序直接在应用程序级缓冲区之间安全地复制数据,而无需让操作系统内核参与每个数据包。这转化为更低的 CPU 利用率和更低的延迟。提案正在转化为标准,但可能还需要几年时间才能推出任何产品。

RDMA 的另一个,也许更大的问题不是技术问题,而是营销问题。供应商一直渴望销售 iSCSI 产品,但由于缺乏批准的标准和操作系统支持而受到阻碍。最近的公告表明,这两个障碍都已清除,因此供应商可以开始交付 iSCSI 产品并收回其研发投资。这可能会让他们不愿意在不久的将来采用像 RDMA 这样的新事物,尤其是在这涉及为专用适配器额外支出的情况下。

iSCSI 的挑战

常见的说法是,以太网设备比光纤通道便宜。比较两者的最低端肯定会证明这一点,但是任何期望在当地计算机商店购买的 79 美元的交换机上运行企业存储基础设施的人都应该重新考虑自己的职业。事实是,企业为以太网和光纤通道都使用高端托管交换机。

这指出了网络领域中另一个常见的谬论:千兆 LAN 在企业数据中心之外并不常用。分析师预计可能在两年内不会有大规模部署。另一方面,千兆 NIC 非常普及,甚至出现在家用电脑上,因为供应商将其集成到计算机的核心芯片组中。

另一个担忧是,一旦将足够数量的 iSCSI 流量投入网络,TCP 拥塞控制的效率如何。没有人可以在不考虑延迟的情况下谈论网络(本质上是数据到达目的地所需的时间)。iSCSI 支持者倾向于谈论低延迟设备和交换机,同时还谈论该技术的长距离应用。几乎没有可用的真实数据来验证任何这些理论,但这将在不久的将来实现。供应商在尝试向企业数据中心销售时必须提供此信息。

回到未来

任何在过去八年左右的时间里关注 SAN 发展的人都可能会发现他们再次产生了似曾相识的感觉。有趣的是,听到 iSCSI 将通过仅仅基于以太网来提供 SAN 的所有承诺的好处的论点。尽管使用现有的网络管理工具可以在某种程度上涵盖“结构”的管理,但这使得整个存储管理世界无法解释。同样,客户可以通过使用昂贵的网桥将旧设备迁移到 iSCSI 来保留其在存储方面的投资的说法有些可笑,但更昂贵的备份设备(库、磁带驱动器)除外。将旧磁盘存储连接到 SAN 意义不大。现代存储设备提供了旧硬件根本不可能实现的新功能。但一个明显的好处是,iSCSI 现在将类似 SAN 的接口和功能带入了传统的网络附加存储 (NAS) 领域。曾经归因于 NAS 的好处——通用网络布线、交换机和接口——现在可以通过块协议存储系统获得。如果有的话,这为更丰富的权衡点打开了市场。

网络的融合理论认为,在未来,所有通信需求都将由单个互连来处理。当然,InfiniBand (IB) 应该成为那种互连,但是在它开发过程中发生了一件有趣的事情:价格非常实惠的千兆速度以太网变得可用,并且很容易教它一些新技巧,并且具有合理的性能和延迟(例如存储和处理器间通信)。然而,IB 必须同时解决新的互连、链路协议、管理(在结构上处理)以及将多个上层协议映射到链路层协议,同时等待操作系统支持。对于以太网,这些问题中的大多数早已得到解决。重新创建整个网络层堆栈也继续困扰着 FC 更快速的扩展。过去几年才刚刚开始看到 FC 中引入路由功能,而这在 IP 社区中已经存在了 20 多年。

无论单 Fabric/单网络是在未来几年内还是十年末出现,光纤通道和以太网至少在未来三到五年内将共存。表 1 比较了它们的特性。光纤通道在许多数据中心根深蒂固,并具有明显的性能优势。最初,光纤通道被设计为 1 吉比特每秒 (Gbps) 的运行速度。早期的倡导者,例如 Sun Microsystems,构建了运行速度为 266 兆比特每秒的“四分之一速”设备,因为吉比特技术在当时仍然非常新颖。今天的光纤通道运行速度为 2 Gbps,并且已经演示了 10 Gbps。目前的计划要求在 4 Gbps 处停留,这有望比 10 Gbps 便宜得多。(所有连接都是全双工的,因此性能实际上可以使单个链路速率翻倍。)

表 1
光纤通道与 iSCSI 特性比较

光纤通道
iSCSI
1 或 2 Gbps 全双工链路速度
高达 1 Gbps 全双工
链路距离最远 10 公里(长波)最远 200 公里 (DWDM) 任意距离
帧大小:高达 2,112 字节
帧大小:使用“巨型帧”时高达 9,108 字节
不可路由,除非通过桥接协议
可路由
名称服务(简单名称服务器)
名称服务 (iSNS)
需要专用硬件(HBA、交换机)
可以通过任何网络接口运行(但在专用硬件/卸载下运行效果最佳)
无线路加密(桥接时除外)
通过 IPsec 提供加密

当然,以太网也在快速发展,并将在未来几年内直接发展到 10 Gbps。这并不意味着所有连接都将突然迁移到 10 吉比特以太网,而是数据中心骨干网将转移到更粗的管道,以便所有流量都可以在同一 Fabric 上运行。此外,物理互连现在使用相同的组件,无论它是光纤通道还是以太网。更进一步,当以数据中心为目标时,iSCSI 和光纤通道之间的比较必须使用加速适配器进行,因此在一段时间内成本将是相似的。

响应 iSCSI,还发生了一些其他有趣的发展。光纤通道供应商越来越关注互操作性,价格也在下降。现在光纤通道技术的开发成本已经摊销,我们完全有理由相信供应商可以对 iSCSI 市场施加巨大的压力。芯片集成方面的进步为我们带来了单芯片 24 端口/2-Gbps 光纤通道交换机,例如,“Fibre Down”——带有集成光纤通道控制器的计算机系统板——现在也已上市。带有集成光纤通道的有趣存储控制器芯片也正在出现,这将导致近期内出现成本更低的存储阵列。

尽管光纤通道仍然存在,但从长远来看,iSCSI 显然是赢家。在某个时候,当更高速的以太网基础设施普及且 RDMA 提升性能时,世界很可能会转向 iSCSI SAN。就目前而言,更多的选择显然有利于想要利用存储区域网络的客户。

• iSCSI 和 iSNS 的草案标准可从 IETF IP 存储工作组获取 (http://www.ietf.org/html.charters/ips-charter.html)。

• 批准的 SCSI 规范可从 Global Engineering Documents 获取 (http://global.ihs.com/)。

• SCSI 活动的草案标准可从 ANSI/INCITS T10 获取 (http://www.t10.org/)。

• 用于 Microsoft Windows 的 iSCSI 发起程序软件于 2003 年 6 月可供下载 (http://www.microsoft.com/)

acmqueue

最初发表于 Queue vol. 1, no. 4
数字图书馆 中评论本文





更多相关文章

Pat Helland - 关注你的状态,为了你的心态
随着应用程序进入分布式和可扩展的世界,它们经历了有趣的演变。同样,存储及其近亲数据库也与应用程序并肩发展。很多时候,存储和应用程序的语义、性能和故障模型会进行微妙的协调,以支持不断变化的业务需求和环境挑战。规模的扩大确实搅动了局面。本文探讨了其中一些问题及其对系统的影响。


Alex Petrov - 现代存储系统背后的算法
本文深入探讨了现代数据库中使用的两种存储系统设计方法(读优化 B 树和写优化 LSM(日志结构合并)树),并描述了它们的使用案例和权衡。


Mihir Nanavati, Malte Schwarzkopf, Jake Wires, Andrew Warfield - 非易失性存储
在大多数执业计算机科学家的整个职业生涯中,一个基本的观察结果始终成立:CPU 的性能明显高于 I/O 设备,而且价格也更昂贵。CPU 能够以极高的速率处理数据,同时为多个 I/O 设备提供服务,这一事实对各种规模系统的硬件和软件设计产生了深远的影响,几乎在我们构建它们的所有时间里都是如此。


Thanumalayan Sankaranarayana Pillai, Vijay Chidambaram, Ramnatthan Alagappan, Samer Al-Kiswany, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau - 崩溃一致性
数据的读取和写入是任何冯·诺依曼计算机最基本的方面之一,但它却出乎意料地微妙且充满细微差别。例如,考虑在具有多个处理器的系统中访问共享内存。虽然称为强一致性的简单直观方法最容易被程序员理解,但许多较弱的模型也被广泛使用(例如,x86 总存储顺序);这些方法提高了系统性能,但代价是使系统行为的推理更加复杂且容易出错。





© 保留所有权利。

© . All rights reserved.