段路由的 YANG 数据模型

简介: 本文档是 Internet 工程任务组 (IETF) 的产品。它代表了 IETF 社区的共识。它已接受公众审查,并已获互联网工程指导小组 (IESG) 批准出版。有关 Internet 标准的更多信息,请参见 RFC 7841 的第 2 节。

640.gif


RFC9020:YANG Data Model for Segment Routing,May 2021


梗概


本文档定义了三个 YANG 数据模型。第一个是用于段路由 (Segment Routing,SR) 配置和操作,将通过不同的段路由数据平面进行扩充。接下来是一个 YANG 数据模型,它为 SR 定义了泛型类型和分组的集合。第三个模块定义段路由 MPLS 数据平面的配置和操作状态。


本备忘录的状态


这是一份 Internet 标准跟踪文档。


本文档是 Internet 工程任务组 (IETF) 的产品。它代表了 IETF 社区的共识。它已接受公众审查,并已获互联网工程指导小组 (IESG) 批准出版。有关 Internet 标准的更多信息,请参见 RFC 7841 的第 2 节。


有关本文档当前状态、任何勘误表以及如何提供反馈的信息,请访问 https://www.rfc-editor.org/info/rfc9020


版权声明


版权所有 (c) 2021 IETF Trust 和文件作者。版权所有。


本文件受 BCP 78 和 IETF 信托关于 IETF 文件的法律规定 (https://trustee.ietf.org/license-info) 的约束,该条款在本文件发布之日生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从本文档中提取的代码组件必须包含 Trust Legal Provisions 第 4.e 节中所述的简化 BSD 许可文本,并且按照简化 BSD 许可中的说明在不保证的情况下提供。


1、 简介


本文档定义了三个 YANG 数据模型 [RFC7950]。第一个用于段路由 (SR) [RFC8402] 配置和操作。本文档没有定义支持 SR 的 IGP 扩展,但第二个模块定义了由 IGP 扩展模块重用的通用分组。这种设计选择的原因是不需要实现来支持所有 IGP 扩展。例如,一个实现可能支持 IS-IS 扩展,但不支持 OSPF 扩展。第三个 YANG 数据模型定义了一个模块,该模块旨在用于网络元素以配置或操作 SR MPLS 数据平面 [RFC8660]。


本文档中的 YANG 模块符合网络管理数据存储体系结构 (Network Management Datastore Architecture,NMDA) [RFC8342]。


2、 术语和符号


关键词“必须”、“不得”、“要求”、“应”、“不得”、“应该”、“不应”、“推荐”、“不推荐”、“可以”和“可选”当且仅当它们以全部大写字母出现时,本文档中的 " 将按照 BCP 14 [RFC2119] [RFC8174] 中的描述进行解释,如此处所示。


2.1、 树形图


本文档中使用的树形图遵循 [RFC8340] 中定义的符号。


2.2、 数据节点名称中的前缀


在本文档中,数据节点、动作和其他数据模型对象的名称通常不带前缀使用,只要从定义 YANG 模块的上下文中清楚即可。否则,名称将使用与相应 YANG 模块关联的标准前缀作为前缀,如表 1 所示。


640.png

表 1:前缀和对应的 YANG 模块


3、 数据模型的设计


ietf-segment-routing YANG 模块扩充了 ietf-routing 模型 [RFC8349] 中的路由容器,并定义了通用 SR 配置和操作状态。 该模块由支持不同数据平面的模块增强。


模块 ietf-segment-routing-mpls 增强了 ietf-segment-routing 并支持 SR-MPLS 数据平面配置和操作状态。


模块 ietf-segment-routing-common 定义了应该被 IGP 扩展模块重用的通用类型和分组。


module: ietf-segment-routing
augment /rt:routing:
+--rw segment-routing
module: ietf-segment-routing-mpls
augment /rt:routing/sr:segment-routing:
+--rw sr-mpls
+--rw bindings
|  +--rw mapping-server {mapping-server}?
|  |  +--rw policy* [name]
|  |     +--rw name       string
|  |     +--rw entries
|  |        +--rw mapping-entry* [prefix algorithm]
|  |           +--rw prefix        inet:ip-prefix
|  |           +--rw value-type?   enumeration
|  |           +--rw start-sid     uint32
|  |           +--rw range?        uint32
|  |           +--rw algorithm     identityref
|  +--rw connected-prefix-sid-map
|  |  +--rw connected-prefix-sid* [prefix algorithm]
|  |     +--rw prefix               inet:ip-prefix
|  |     +--rw value-type?          enumeration
|  |     +--rw start-sid            uint32
|  |     +--rw range?               uint32
|  |     +--rw algorithm            identityref
|  |     +--rw last-hop-behavior?   enumeration
|  +--rw local-prefix-sid
|     +--rw local-prefix-sid* [prefix algorithm]
|        +--rw prefix        inet:ip-prefix
|        +--rw value-type?   enumeration
|        +--rw start-sid     uint32
|        +--rw range?        uint32
|        +--rw algorithm     identityref
+--rw srgb
|  +--rw srgb* [lower-bound upper-bound]
|     +--rw lower-bound    uint32
|     +--rw upper-bound    uint32
+--rw srlb
|  +--rw srlb* [lower-bound upper-bound]
|     +--rw lower-bound    uint32
|     +--rw upper-bound    uint32
+--ro label-blocks* []
|  +--ro lower-bound?   uint32
|  +--ro upper-bound?   uint32
|  +--ro size?          uint32
|  +--ro free?          uint32
|  +--ro used?          uint32
|  +--ro scope?         enumeration
+--ro sid-db
+--ro sid* [target sid source source-protocol binding-type]
+--ro target             string
+--ro sid                uint32
+--ro algorithm?         uint8
+--ro source             inet:ip-address
+--ro used?              boolean
+--ro source-protocol    -> /rt:routing
/control-plane-protocols
/control-plane-protocol/name
+--ro binding-type       enumeration
+--ro scope?             enumeration
notifications:
+---n segment-routing-srgb-collision


|  +--ro srgb-collisions* []
|     +--ro lower-bound?          uint32
|     +--ro upper-bound?          uint32
|     +--ro routing-protocol?     -> /rt:routing
|                                    /control-plane-protocols
|                                    /control-plane-protocol/name
|     +--ro originating-rtr-id?   router-or-system-id
+---n segment-routing-global-sid-collision


|  +--ro received-target?       string
|  +--ro new-sid-rtr-id?        router-or-system-id
|  +--ro original-target?       string
|  +--ro original-sid-rtr-id?   router-or-system-id
|  +--ro index?                 uint32
|  +--ro routing-protocol?      -> /rt:routing
|                                  /control-plane-protocols
|                                  /control-plane-protocol/name
+---n segment-routing-index-out-of-range


+--ro received-target?    string
+--ro received-index?     uint32
+--ro routing-protocol?   -> /rt:routing
/control-plane-protocols
/control-plane-protocol/name


4、 配置


模块 ietf-segment-routing-mpls 使用 sr-mpls 容器扩充了“/rt:routing/sr:segment-routing:”。该容器定义了与 SR MPLS 数据平面相关的所有配置参数。


sr-mpls 配置分为全局配置和接口配置。


全局配置包括:


绑定:定义前缀到段标识符 (Prefix-SID) 映射。运营商可以独立控制 IPv4 和 IPv6 的 Prefix-SID 通告。有两种类型的映射可用:


映射服务器:映射不是 SID 本地的前缀。绑定的配置不会自动允许这些绑定的通告。通告必须由每个路由协议实例控制(见第 5 节)。可以定义多个映射策略。


连接前缀:将连接前缀映射到 SID。当为 SR 启用时,映射的通告将由 IGP 完成(参见第 5 节)。 SID 值可以表示为索引(默认)或绝对值。 “last-hop-behavior”配置规定了 MPLS Penultimate Hop Popping (PHP) 行为:“explicit-null”、“php”或“non-php”。


Segment Routing Global Block (SRGB):定义由一对下界/上界标签表示的标签块列表。 SRGB 也与所使用的控制平面无关。因此,所有本地路由协议实例都必须通告相同的 SRGB。


Segment Routing Local Block (SRLB):定义标签块列表,由为本地 SID 保留的一对下界/上界标签表示。


5、 IGP 控制平面配置


对特定 IGP 控制平面的 SR 扩展的支持是通过使用 SR 扩展增加路由协议配置来实现的。这种增强应该是路由协议 YANG 模块的一部分,因为它不会为实现创建任何依赖项以支持所有路由协议的 SR 扩展。


该模块定义了 IGP SR 模块应该使用的分组。


“sr-control-plane”分组定义了 IGP 的通用全局配置。


“启用”叶为路由协议实例启用 SR 扩展。


“绑定”容器控制路由协议实例对本地绑定的通告和接收到的绑定的处理。


5.1、 IGP 接口配置


接口配置是“igp-interface”分组的一部分,包括邻接 SID (Adj-SID) 属性。


5.1.1、 邻接 SID (Adj-SID) 属性


5.1.1.1、 捆绑


在路由器之间的并行 IP 链路的情况下,可以通告一个附加的 Adj-SID [RFC8402],代表一个以上的邻接(即,一组邻接)。 “advertise-adj-group-sid”配置控制为哪些组通告额外的 Adj-SID。


“advertise-adj-group-sid”是组 ID 的列表。 每个组 ID 将标识捆绑在一起的接口。


640.png


上图中,R1 和 R2 通过四个链路相互连接。在每条链路上建立路由协议邻接关系。运营商希望创建代表链路束的 Adj-SID。我们可以想象两个不同的捆绑包:L1/L2 和 L3/L4。为了实现这一行为,运营商将为接口 L1 和 L2 配置“group-id”X,为接口 L3 和 L4 配置“group-id”Y。这将导致 R1 为每个邻接通告一个额外的 Adj-SID。例如,一个值为 400 的 Adj-SID 将被添加到 L1 和 L2,一个值为 500 的 Adj-SID 将被添加到 L3 和 L4。由于 L1/L2 和 L3/L4 不共享相同的“group-id”,因此将分配不同的 SID 值。


5.1.1.2、 保护


“advertise-protection”定义了如何通告接口的保护。它不控制保护的激活或停用。如果使用“single”选项,将为接口通告单个 Adj-SID。如果接口受到保护,则将设置 Adj-SID 通告的 B-Flag。如果使用“dual”选项并且接口受到保护,则将为接口邻接通告两个 Adj-SID。一个 Adj-SID 将始终设置 B-Flag,而另一个将清除 B-Flag。此选项旨在用于路径必须使用受保护段或不受保护段的流量工程的情况。


6、 状态数据


操作状态包含反映分配的 SRGB 标签使用情况的信息。


它还包括所有全局 SID 的列表、它们的关联绑定和其他信息,例如关联的源协议和算法。


7、 通知


该模型为 SR 定义了以下通知。


segment-routing-srgb-collision:当控制平面通告的 SRGB 块有冲突时引发


segment-routing-global-sid-collision:当控制平面通告的索引已经与另一个目标关联时引发(在此版本中,唯一定义的目标是 IPv4 和 IPv6 前缀)


segment-routing-index-out-of-range:当控制平面通告的索引超出为网络设备配置的 SRGB 范围时引发


8、 YANG 模块


本文档包含三个 YANG 模块。


以下 RFC 未在文档文本中引用,但在 ietf-segment-routing.yang、ietf-segment-routing-common.yang 和/或 ietf-segment-routing-mpls.yang 模块中引用:[RFC6991] 、[RFC8294]、[RFC8661]、[RFC8665]、[RFC8667]、[RFC8669] 和 [RFC8814]。


8.1、 用于段路由的 YANG 模块


ietf-segment-routing.yang:该模块定义了段路由 (SR) 的通用框架,并将通过不同 SR 数据平面的模型对其进行扩充。


<CODE BEGINS> file "ietf-segment-routing@2021-05-26.yang"
module ietf-segment-routing {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing";
prefix sr;
import ietf-routing {
prefix rt;
reference "RFC 8349: A YANG Data Model for Routing Management (NMDA Version)";
}
organization
"IETF SPRING - SPRING Working Group";
contact
"WG Web:   <https://datatracker.ietf.org/wg/spring/>
WG List:  <mailto:spring@ietf.org>
Author:    Stephane Litkowski<mailto:slitkows.ietf@gmail.com>
Author:    Yingzhen Qu<mailto:yingzhen.qu@futurewei.com>
Author:    Acee Lindem<mailto:acee@cisco.com>
Author:    Pushpasis Sarkar<mailto:pushpasis.ietf@gmail.com>
Author:    Jeff Tantsura<jefftant.ietf@gmail.com>
";
description
"此 YANG 模块定义了段路由 (SR) 的通用框架。它将通过用于不同 SR 数据平面的模型来增强。
此 YANG 模块符合 RFC 8242 中所述的网络管理数据存储体系结构 (NMDA)。
关键词“必须”、“不得”、“要求”、“应”、“不得”、“应该”、“不应”、“推荐”、“不推荐”、“可以”和“可选”当且仅当它们以全部大写字母出现时,本文档中的 ' 将按照 BCP 14 (RFC 2119) (RFC 8174) 中的描述进行解释,如此处所示。
版权所有 (c) 2021 IETF Trust 和确定为代码作者的人员。版权所有。
根据 IETF 信托关于 IETF 文件的法律规定第 4.c 节中规定的简化 BSD 许可证中包含的许可条款,允许以源代码和二进制形式重新分发和使用,无论是否经过修改( https://trustee.ietf.org/license-info)。
这个 YANG 模块的这个版本是 RFC 9020 的一部分;
有关完整的法律声明,请参阅 RFC 本身。";
reference
"RFC 9020: YANG Data Model for Segment Routing.";
revision 2021-05-26 {
description
"Initial version";
reference
"RFC 9020: YANG Data Model for Segment Routing.";
}
augment "/rt:routing" {
description
"此模块使用段路由 (SR) 扩充路由数据模型 (RFC 8349)。";
container segment-routing {
description
"段路由配置。该容器将通过用于不同 SR 数据平面的模型进行扩充。";
reference
"RFC 8402: Segment Routing Architecture.";
}
}
}
<CODE ENDS>


8.2、 段路由常用类型的 YANG 模块


ietf-segment-routing-common.yang:该模块为 SR 定义了一组通用类型和分组,如 [RFC8402] 中所定义。


<CODE BEGINS> file "ietf-segment-routing-common@2021-05-26.yang"
module ietf-segment-routing-common {
yang-version 1.1;
namespace
"urn:ietf:params:xml:ns:yang:ietf-segment-routing-common";
prefix sr-cmn;
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types";
}
organization
"IETF SPRING - SPRING Working Group";
contact
"WG Web:   <https://datatracker.ietf.org/wg/spring/>
WG List:  <mailto:spring@ietf.org>
Author:    Stephane Litkowski<mailto:slitkows.ietf@gmail.com>
Author:    Yingzhen Qu<mailto:yingzhen.qu@futurewei.com>
Author:    Acee Lindem<mailto:acee@cisco.com>
Author:    Pushpasis Sarkar<mailto:pushpasis.ietf@gmail.com>
Author:    Jeff Tantsura<jefftant.ietf@gmail.com>
";
description
"如 RFC 8402 中所述,此 YANG 模块定义了用于段路由 (SR) 的通用类型和分组的集合。
此 YANG 模块符合 RFC 8242 中所述的网络管理数据存储体系结构 (NMDA)。
关键词“必须”、“不得”、“要求”、“应”、“不得”、“应该”、“不应”、“推荐”、“不推荐”、“可以”和“可选”当且仅当它们以全部大写字母出现时,本文档中的 ' 将按照 BCP 14 (RFC 2119) (RFC 8174) 中的描述进行解释,如此处所示。
版权所有 (c) 2021 IETF Trust 和确定为代码作者的人员。版权所有。
根据 IETF 信托关于 IETF 文件的法律规定第 4.c 节中规定的简化 BSD 许可证中包含的许可条款,允许以源代码和二进制形式重新分发和使用,无论是否经过修改( https://trustee.ietf.org/license-info)。
这个 YANG 模块的这个版本是 RFC 9020 的一部分;
有关完整的法律声明,请参阅 RFC 本身。";
reference
"RFC 9020: YANG Data Model for Segment Routing";
revision 2021-05-26 {
description
"Initial version";
reference
"RFC 9020: YANG Data Model for Segment Routing";
}
feature sid-last-hop-behavior {
description
"可配置的最后一跳行为。";
reference
"RFC 8660: Segment Routing with the MPLS Data Plane";
}
identity prefix-sid-algorithm {
description
" prefix-sid 算法的基本身份。";
reference
"RFC 8402: Segment Routing Architecture";
}
identity prefix-sid-algorithm-shortest-path {
base prefix-sid-algorithm;
description
"最短路径优先 (SPF) 前缀 SID 算法。这是默认算法。";
}
identity prefix-sid-algorithm-strict-spf {
base prefix-sid-algorithm;
description
"该算法要求根据 ECMP 感知 SPF 算法转发数据包。";
}
grouping srlr {
description
" SR 标签范围配置的分组。";
leaf lower-bound {
type uint32;
description
"标签范围内的较低值。";
}
leaf upper-bound {
type uint32;
must '../lower-bound < ../upper-bound' {
error-message
"上限必须大于下限。";
description
"该值必须大于下限。";
}
description
"标签范围内的上限值。";
}
}
grouping srgb {
description
" SR 全局标签范围的分组。";
list srgb {
key "lower-bound upper-bound";
ordered-by user;
description
"要通告的全局块列表。";
uses srlr;
}
}
grouping srlb {
description
" SR 本地块范围的分组。";
list srlb {
key "lower-bound upper-bound";
ordered-by user;
description
"List of SRLBs.";
uses srlr;
}
}
grouping sid-value-type {
description
"定义 SID 值的表达方式。";
leaf value-type {
type enumeration {
enum index {
description
"该值将被解释为索引。";
}
enum absolute {
description
"该值将被解释为绝对值。";
}
}
default "index";
description
"此叶子定义了必须如何解释该值。";
}
}
grouping prefix-sid {
description
"该分组定义了 Prefix-SID 的配置。";
leaf prefix {
type inet:ip-prefix;
description
"Connected Prefix-SID.";
}
uses prefix-sid-attributes;
}
grouping ipv4-sid {
description
" IPv4 Prefix-SID 的分组。";
leaf prefix {
type inet:ipv4-prefix;
description
"Connected IPv4 Prefix-SID.";
}
uses prefix-sid-attributes;
}
grouping ipv6-sid {
description
" IPv6 Prefix-SID 的分组。";
leaf prefix {
type inet:ipv6-prefix;
description
"Connected IPv6 Prefix-SID.";
}
uses prefix-sid-attributes;
}
grouping last-hop-behavior {
description
"定义最后一跳行为。";
leaf last-hop-behavior {
if-feature "sid-last-hop-behavior";
type enumeration {
enum explicit-null {
description
"对 SID 使用显式空值。";
}
enum no-php {
description
"不要对 SID 使用 MPLS Penultimate Hop Popping (PHP)。";
}
enum php {
description
"Use MPLS PHP for the SID.";
}
}
description
"配置最后一跳行为。";
}
}
grouping prefix-sid-attributes {
description
"段路由 (SR) 前缀属性的分组。";
uses sid-value-type;
leaf start-sid {
type uint32;
mandatory true;
description
"与前缀关联的值。该值必须在 sid-value-type 的上下文中进行解释。";
}
leaf range {
type uint32;
description
"指示可以分配多少个 SID。";
}
leaf algorithm {
type identityref {
base prefix-sid-algorithm;
}
description
"Prefix-SID algorithm.";
}
}
}
<CODE ENDS>


8.3、 用于段路由 MPLS 的 YANG 模块

ietf-segment-routing-mpls.yang:该模块定义了 Segment Routing MPLS 数据平面的配置和操作状态。


<CODE BEGINS> file "ietf-segment-routing-mpls@2021-05-26.yang"
module ietf-segment-routing-mpls {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls";
prefix sr-mpls;
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-routing {
prefix rt;
reference
"RFC 8349: A YANG Data Model for Routing Management (NMDA Version)";
}
import ietf-routing-types {
prefix rt-types;
reference
"RFC 8294: Common YANG Data Types for the Routing Area";
}
import ietf-segment-routing {
prefix sr;
reference
"RFC 9020: YANG Data Model for Segment Routing";
}
import ietf-segment-routing-common {
prefix sr-cmn;
reference
"RFC 9020: YANG Data Model for Segment Routing";
}
organization
"IETF SPRING - SPRING Working Group";
contact
"WG Web:   <https://datatracker.ietf.org/wg/spring/>
WG List:  <mailto:spring@ietf.org>
Author:    Stephane Litkowski<mailto:slitkows.ietf@gmail.com>
Author:    Yingzhen Qu<mailto:yingzhen.qu@futurewei.com>
Author:    Acee Lindem<mailto:acee@cisco.com>
Author:    Pushpasis Sarkar<mailto:pushpasis.ietf@gmail.com>
Author:    Jeff Tantsura<jefftant.ietf@gmail.com>
";
description
"这个 YANG 模块定义了 Segment Routing MPLS 数据平面的通用配置模型。
此 YANG 模块符合 RFC 8242 中所述的网络管理数据存储体系结构 (NMDA)。
关键词“必须”、“不得”、“要求”、“应”、“不得”、“应该”、“不应”、“推荐”、“不推荐”、“可以”和“可选”当且仅当它们以全部大写字母出现时,本文档中的 ' 将按照 BCP 14 (RFC 2119) (RFC 8174) 中的描述进行解释,如此处所示。
版权所有 (c) 2021 IETF Trust 和确定为代码作者的人员。版权所有。
根据 IETF 信托关于 IETF 文件的法律规定第 4.c 节中规定的简化 BSD 许可证中包含的许可条款,允许以源代码和二进制形式重新分发和使用,无论是否经过修改( https://trustee.ietf.org/license-info)。
这个 YANG 模块的这个版本是 RFC 9020 的一部分;
有关完整的法律声明,请参阅 RFC 本身。";
reference
"RFC 9020: YANG Data Model for Segment Routing";
revision 2021-05-26 {
description
"Initial version";
reference
"RFC 9020: YANG Data Model for Segment Routing";
}
feature mapping-server {
description
"Support for Segment Routing Mapping Server (SRMS).";
reference
"RFC 8661: Segment Routing MPLS Interworking with LDP";
}
feature protocol-srgb {
description
"Support for per-protocol Segment Routing Global Block (SRGB) configuration.";
reference
"RFC 8660: Segment Routing with the MPLS Data Plane";
}
typedef system-id {
type string {
pattern '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}';
}
description
"This type defines an IS-IS system-id using a pattern. An example system-id is 0143.0438.AEF0.";
}
typedef router-or-system-id {
type union {
type rt-types:router-id;
type system-id;
}
description
"OSPF/BGP router-id or IS-IS system ID.";
}
grouping sr-control-plane {
description
"Defines protocol configuration.";
container segment-routing {
description
"Segment Routing global configuration.";
leaf enabled {
type boolean;
default "false";
description
"Enables Segment Routing control-plane protocol extensions.";
}
container bindings {
if-feature "mapping-server";
description
"Control of binding advertisement and reception.";
container advertise {
description
"Control advertisement of local mappings in binding TLVs.";
leaf-list policies {
type leafref {
path "/rt:routing/sr:segment-routing/sr-mpls:sr-mpls"
+ "/sr-mpls:bindings/sr-mpls:mapping-server"
+ "/sr-mpls:policy/sr-mpls:name";
}
description
"List of binding advertisement policies.";
}
}
leaf receive {
type boolean;
default "true";
description
"Allow the reception and usage of binding TLVs.";
}
}
}
}
grouping igp-interface {
description
"Grouping for IGP interface configuration.";
container segment-routing {
description
"Container for SR interface configuration.";
container adjacency-sid {
description
"Adjacency SID (Adj-SID) configuration.";
reference
"RFC 8660: Segment Routing with the MPLS Data Plane";
list adj-sids {
key "value";
uses sr-cmn:sid-value-type;
leaf value {
type uint32;
description
"Value of the Adj-SID.";
}
leaf protected {
type boolean;
default "false";
description
"It is used to protect the Adj-SID, e.g., using IP Fast Reroute (IPFRR) or MPLS-FRR.";
}
leaf weight {
type uint8;
description
"The load-balancing factor over parallel adjacencies.";
reference
"RFC 8402: Segment Routing Architecture
RFC 8665: OSPF Extensions for Segment Routing
RFC 8667: IS-IS Extensions for Segment Routing";
}
description
"List of Adj-SIDs and their configuration.";
}
list advertise-adj-group-sid {
key "group-id";
description
"Control advertisement of S-flag or G-flag. Enable advertisement of a common Adj-SID for parallel links.";
reference
"RFC 8665: OSPF Extensions for Segment Routing, Section 6.1
RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2.1";
leaf group-id {
type uint32;
description
"该值是用于标识组 ID 的内部值。 具有相同组 ID 的接口将捆绑在一起。";
}
}
leaf advertise-protection {
type enumeration {
enum single {
description
"单个 Adj-SID 与邻接相关联并反映保护配置。";
}
enum dual {
description
"如果接口受到保护,则两个 Adj-SID 将与邻接相关联。 在这种情况下,一个 Adj-SID 将在备份标志设置的情况下进行通告,而另一个 Adj-SID 将在备份标志清除的情况下进行通告。 在未配置保护的情况下,将通告单个 Adj-SID,并清除备份标志。";
}
}
description
"If set, the Adj-SID refers to a protected adjacency.";
reference
"RFC 8665: OSPF Extensions for Segment Routing, Section 6.1
RFC 8667: IS-IS Extensions for Segment Routing, Section 2.2.1";
}
}
}
}
augment "/rt:routing/sr:segment-routing" {
description
"这通过使用 MPLS 数据平面的段路由 (SR) 来扩充路由数据模型 (RFC 8349)。";
container sr-mpls {
description
" Segment Routing 全局配置和运行状态。";
container bindings {
description
"List of bindings.";
container mapping-server {
if-feature "mapping-server";
description
"Configuration of mapping-server local entries.";
list policy {
key "name";
description
"List mapping-server policies.";
leaf name {
type string;
description
"Name of the mapping policy.";
}
container entries {
description
"IPv4/IPv6 mapping entries.";
list mapping-entry {
key "prefix algorithm";
description
"Mapping entries.";
uses sr-cmn:prefix-sid;
}
}
}
}
container connected-prefix-sid-map {
description
"Prefix-SID configuration.";
list connected-prefix-sid {
key "prefix algorithm";
description
" Prefix-SID 到 IPv4/IPv6 本地前缀的映射列表。";
uses sr-cmn:prefix-sid;
uses sr-cmn:last-hop-behavior;
}
}
container local-prefix-sid {
description
"Local SID configuration.";
list local-prefix-sid {
key "prefix algorithm";
description
"List of local IPv4/IPv6 Prefix-SIDs.";
uses sr-cmn:prefix-sid;
}
}
}
container srgb {
description
"全局 SRGB 配置。";
uses sr-cmn:srgb;
}
container srlb {
description
"段路由本地块 (SRLB) 配置。";
uses sr-cmn:srlb;
}
list label-blocks {
config false;
description
"当前使用的标签块列表。";
leaf lower-bound {
type uint32;
description
"标签块的下限。";
}
leaf upper-bound {
type uint32;
description
"标签块的上限。";
}
leaf size {
type uint32;
description
"块中的索引数。";
}
leaf free {
type uint32;
description
"块中的空闲索引数。";
}
leaf used {
type uint32;
description
"块中使用的索引数。";
}
leaf scope {
type enumeration {
enum global {
description
"Global SID.";
}
enum local {
description
"Local SID.";
}
}
description
"此标签块的范围。";
}
}
container sid-db {
config false;
description
"List of prefix and SID associations.";
list sid {
key "target sid source source-protocol binding-type";
ordered-by system;
description
"SID binding.";
leaf target {
type string;
description
"定义绑定的目标。 它可以是前缀或其他东西。";
}
leaf sid {
type uint32;
description
"与前缀关联的索引。";
}
leaf algorithm {
type uint8;
description
"用于前缀 SID 的算法。";
reference
"RFC 8665: OSPF Extensions for Segment Routing
RFC 8667: IS-IS Extensions for Segment Routing
RFC 8669: Segment Routing Prefix Segment Identifier Extensions to BGP";
}
leaf source {
type inet:ip-address;
description
"拥有绑定的路由器的 IP 地址。";
}
leaf used {
type boolean;
description
"指示绑定是否安装在转发平面中。";
}
leaf source-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"拥有绑定的路由协议。";
}
leaf binding-type {
type enumeration {
enum prefix-sid {
description
"绑定是从 Prefix-SID 学习的。";
}
enum binding-tlv {
description
"绑定是从绑定 TLV 中学习的。";
}
}
description
"Type of binding.";
}
leaf scope {
type enumeration {
enum global {
description
"Global SID.";
}
enum local {
description
"Local SID.";
}
}
description
"SID scoping.";
}
}
}
}
}
notification segment-routing-srgb-collision {
description
"当从不同路由器接收到的 SRGB 块发生冲突时,会发送此通知。";
list srgb-collisions {
description
"碰撞的 SRGB 块列表。";
leaf lower-bound {
type uint32;
description
"块中的较低值。";
}
leaf upper-bound {
type uint32;
description
"块中的上限值。";
}
leaf routing-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
" SRGB 冲突的路由协议参考。";
}
leaf originating-rtr-id {
type router-or-system-id;
description
"此 SRGB 块的原始路由器 ID。";
}
}
}
notification segment-routing-global-sid-collision {
description
"当学习到包含已使用 SID 的映射的新映射时,将发送此通知。 通知生成必须受到限制,通知之间至少有 5 秒的间隔。";
leaf received-target {
type string;
description
"在导致 SID 冲突的路由器通告中收到的目标。";
}
leaf new-sid-rtr-id {
type router-or-system-id;
description
"通告冲突 SID 的路由器 ID。";
}
leaf original-target {
type string;
description
"目标已在数据库中可用,与接收到的目标具有相同的 SID。";
}
leaf original-sid-rtr-id {
type router-or-system-id;
description
"最初通告冲突 SID 的路由器的路由器 ID,即数据库中的实例。";
}
leaf index {
type uint32;
description
"两个不同前缀使用的索引值。";
}
leaf routing-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"冲突 SID 的路由协议参考。";
}
}
notification segment-routing-index-out-of-range {
description
"当收到包含超出本地配置范围的段索引的绑定时发送此通知。 通知生成必须受到限制,通知之间至少有 5 秒的间隔。";
leaf received-target {
type string;
description
"一个人类可读的字符串,表示在与超出范围索引相对应的协议特定通告中接收到的目标。";
}
leaf received-index {
type uint32;
description
"收到的索引值。";
}
leaf routing-protocol {
type leafref {
path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/rt:name";
}
description
"超出范围索引的路由协议参考。";
}
}
}
<CODE ENDS>


9、 安全考虑


本文档中指定的 YANG 模块为数据定义了一个模式,该模式旨在通过网络管理协议访问,例如 NETCONF [RFC6241] 或 RESTCONF [RFC8040]。最低的 NETCONF 层是安全传输层,强制实现的安全传输是 Secure Shell (SSH) [RFC6242]。最低的 RESTCONF 层是 HTTPS,强制实现的安全传输是 TLS [RFC8446]。


网络配置访问控制模型 (Network Configuration Access Control Model,NACM) [RFC8341] 提供了限制特定 NETCONF 或 RESTCONF 用户访问所有可用 NETCONF 或 RESTCONF 协议操作和内容的预配置子集的方法。


在模块中定义了许多可写/可创建/可删除的数据节点(即 config true,这是默认值)。在某些网络环境中,这些数据节点可能被认为是敏感的或易受攻击的。在没有适当保护的情况下对这些数据节点进行写入操作(例如,编辑配置)会对网络操作产生负面影响。这些是子树和数据节点及其敏感性/漏洞:


* /segment-routing


* /segment-routing/mpls


* /segment-routing/mpls/bindings -- 修改本地绑定可能会导致拒绝服务 (Denial-of-Service,DoS) 攻击。 攻击者还

可能尝试创建段冲突(将相同的段标识符用于不同目的)以重定向受信任域内的流量。 但是,流量将保留在受信任的域内。 重定向可用于将流量路由到受信任域内的受损节点或避免某些安全功能(例如防火墙)。 有关 SR-MPLS 可信域的讨论,请参阅 [RFC8402] 的第 8.1 节。


* /segment-routing/mpls/srgb -- 段路由全局块 (Segment Routing Global Block,SRGB) 的修改可用于发起 DoS 攻击。 例如,如果将 SRGB 大小减小到非常小的值,则无法再安装许多现有的段,从而导致流量中断。


* /segment-routing/mpls/srlb -- 段路由本地块 (Segment Routing Local Block,SRLB) 的修改可用于发起类似于适用于 SRGB 的 DoS 攻击。


这些 YANG 模块中的一些可读数据节点在某些网络环境中可能被认为是敏感的或易受攻击的。 因此,控制对这些数据节点的读取访问(例如,通过 get、get-config 或通知)非常重要。 这些是子树和数据节点及其敏感性/漏洞:


* /segment-routing/mpls/bindings -- 这些数据节点的知识可用于通过拒绝服务 (DoS) 攻击来攻击本地路由器。


* /segment-routing/mpls/sid-db -- 这些数据节点的知识可用于通过拒绝服务 (DoS) 攻击或以这些路由器为目的地的重定向流量来攻击 SR 域中的其他路由器。


10、 IANA 注意事项


本文档在“IETF XML Registry”[RFC3688] 中注册了一个 URI。 按照 [RFC3688] 中的格式,要求进行以下注册:


ID: yang:ietf-segment-routing-common
URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-common
Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace.


ID: yang:ietf-segment-routing
URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing
Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace.


ID: yang:ietf-segment-routing-mpls
URI: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls
Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace.


本文档在“YANG 模块名称”注册表 [RFC6020] 中注册 YANG 模块。


Name: ietf-segment-routing-common
Maintained by IANA: N
Namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-common
Prefix: sr-cmn
Reference: RFC 9020


Name: ietf-segment-routing
Maintained by IANA: N
Namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing
Prefix: sr
Reference: RFC 9020


Name: ietf-segment-routing-mpls
Maintained by IANA: N
Namespace: urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls
Prefix: sr-mpls
Reference: RFC 9020


11、 参考文献

11.1、 规范性参考


[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, January 2004, <https://www.rfc-editor.org/info/rfc3688>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, October 2010, <https://www.rfc-editor.org/info/rfc6020>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., and A. Bierman, Ed., "Network Configuration Protocol (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, <https://www.rfc-editor.org/info/rfc6242>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, DOI 10.17487/RFC6991, July 2013, <https://www.rfc-editor.org/info/rfc6991>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016, <https://www.rfc-editor.org/info/rfc7950>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, <https://www.rfc-editor.org/info/rfc8040>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, "Common YANG Data Types for the Routing Area", RFC 8294, DOI 10.17487/RFC8294, December 2017, <https://www.rfc-editor.org/info/rfc8294>.
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration Access Control Model", STD 91, RFC 8341, DOI 10.17487/RFC8341, March 2018, <https://www.rfc-editor.org/info/rfc8341>.
[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., and R. Wilton, "Network Management Datastore Architecture (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, <https://www.rfc-editor.org/info/rfc8342>.
[RFC8343] Bjorklund, M., "A YANG Data Model for Interface Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, <https://www.rfc-editor.org/info/rfc8343>.
[RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for Routing Management (NMDA Version)", RFC 8349, DOI 10.17487/RFC8349, March 2018, <https://www.rfc-editor.org/info/rfc8349>.
[RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., Decraene, B., Litkowski, S., and R. Shakir, "Segment Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, July 2018, <https://www.rfc-editor.org/info/rfc8402>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, <https://www.rfc-editor.org/info/rfc8446>.
[RFC8660] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S., Decraene, B., Litkowski, S., and R. Shakir, "Segment Routing with the MPLS Data Plane", RFC 8660, DOI 10.17487/RFC8660, December 2019, <https://www.rfc-editor.org/info/rfc8660>.
[RFC8661] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S., Decraene, B., and S. Litkowski, "Segment Routing MPLS Interworking with LDP", RFC 8661, DOI 10.17487/RFC8661, December 2019, <https://www.rfc-editor.org/info/rfc8661>.
[RFC8665] Psenak, P., Ed., Previdi, S., Ed., Filsfils, C., Gredler, H., Shakir, R., Henderickx, W., and J. Tantsura, "OSPF Extensions for Segment Routing", RFC 8665, DOI 10.17487/RFC8665, December 2019, <https://www.rfc-editor.org/info/rfc8665>.
[RFC8667] Previdi, S., Ed., Ginsberg, L., Ed., Filsfils, C., Bashandy, A., Gredler, H., and B. Decraene, "IS-IS Extensions for Segment Routing", RFC 8667, DOI 10.17487/RFC8667, December 2019, <https://www.rfc-editor.org/info/rfc8667>.
[RFC8669] Previdi, S., Filsfils, C., Lindem, A., Ed., Sreekantiah, A., and H. Gredler, "Segment Routing Prefix Segment Identifier Extensions for BGP", RFC 8669, DOI 10.17487/RFC8669, December 2019, <https://www.rfc-editor.org/info/rfc8669>.
[RFC8814] Tantsura, J., Chunduri, U., Talaulikar, K., Mirsky, G., and N. Triantafillis, "Signaling Maximum SID Depth (MSD) Using the Border Gateway Protocol - Link State", RFC 8814, DOI 10.17487/RFC8814, August 2020, <https://www.rfc-editor.org/info/rfc8814>.
[W3C.REC-xml11-20060816]Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., Yergeau, F., and J. Cowan, "Extensible Markup Language (XML) 1.1 (Second Edition)", World Wide Web Consortium Recommendation REC-xml11-20060816, 16 August 2006, <https://www.w3.org/TR/2006/REC-xml11-20060816>.


11.2、 参考资料

[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, <https://www.rfc-editor.org/info/rfc8340>.
[RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, "Handling Long Lines in Content of Internet-Drafts and RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, <https://www.rfc-editor.org/info/rfc8792>.


附录 A、 配置示例


注意:根据 [RFC8792] 的 '\' 换行。


A.1、 基于 IPv4 的 SR-MPLS


以下是使用基于 IPv4 地址的 SR-MPLS YANG 模块的 XML [W3C.REC-xml11-20060816] 示例。


<routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
<segment-routing xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing">
<sr-mpls xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls">
<bindings>
<mapping-server>
<policy>
<name>mapping 1</name>
<entries>
<mapping-entry>
<prefix>198.51.100.0/24</prefix>
<algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang:ietf-segment-routing-common">sr-cmn:prefix-sid-algorithm-shortest-path</algorithm>
<start-sid>200</start-sid>
<range>100</range>
</mapping-entry>
</entries>
</policy>
</mapping-server>
<connected-prefix-sid-map>
<connected-prefix-sid>
<prefix>192.0.2.0/24</prefix>
<algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang: ietf-segment-routing-common">sr-cmn:prefix-sid-algorithm-strict-spf</algorithm>
<start-sid>100</start-sid>
<range>1</range>
<last-hop-behavior>php</last-hop-behavior>
</connected-prefix-sid>
</connected-prefix-sid-map>
</bindings>
<srgb>
<srgb>
<lower-bound>45000</lower-bound>
<upper-bound>55000</upper-bound>
</srgb>
</srgb>
</sr-mpls>
</segment-routing>
</routing>


以下是使用 JSON 格式的相同示例。

{
"ietf-routing:routing": {
"ietf-segment-routing:segment-routing": {
"ietf-segment-routing-mpls:sr-mpls": {
"bindings": {
"mapping-server": {
"policy": [
{
"name": "mapping 1",
"entries": {
"mapping-entry": [
{
"prefix": "198.51.100.0/24",
"algorithm": "ietf-segment-routing-common: prefix-sid-algorithm-shortest-path",
"start-sid": 200,
"range": 100
}
]
}
}
]
},
"connected-prefix-sid-map": {
"connected-prefix-sid": [
{
"prefix": "192.0.2.0/24",
"algorithm": "ietf-segment-routing-common:prefix-sid-algorithm-strict-spf",
"start-sid": 100,
"range": 1,
"last-hop-behavior": "php"
}
]
}
},
"srgb": {
"srgb": [
{
"lower-bound": 45000,
"upper-bound": 55000
}
]
}
}
}
}
}


A.2、 基于 IPv6 的 SR-MPLS


以下是使用基于 IPv6 地址的 SR-MPLS YANG 模块的 XML [W3C.REC-xml11-20060816] 示例。


<routing xmlns="urn:ietf:params:xml:ns:yang:ietf-routing">
<segment-routing xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing">
<sr-mpls xmlns="urn:ietf:params:xml:ns:yang:ietf-segment-routing-mpls">
<bindings>
<mapping-server>
<policy>
<name>mapping 1</name>
<entries>
<mapping-entry>
<prefix>2001:db8:aaaa:bbbb::/64</prefix>
<algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang:ietf-segment-routing-common">sr-cmn:prefix-sid-algorithm-shortest-path</algorithm>
<start-sid>200</start-sid>
<range>100</range>
</mapping-entry>
</entries>
</policy>
</mapping-server>
<connected-prefix-sid-map>
<connected-prefix-sid>
<prefix>2001:db8:aaaa:cccc::/64</prefix>
<algorithm xmlns:sr-cmn="urn:ietf:params:xml:ns:yang: ietf-segment-routing-common">sr-cmn:prefix-sid-algorithm-strict-spf</algorithm>
<start-sid>100</start-sid>
<range>1</range>
<last-hop-behavior>php</last-hop-behavior>
</connected-prefix-sid>
</connected-prefix-sid-map>
</bindings>
<srgb>
<srgb>
<lower-bound>45000</lower-bound>
<upper-bound>55000</upper-bound>
</srgb>
</srgb>
</sr-mpls>
</segment-routing>
</routing>


以下是使用 JSON 格式的相同示例。


{
"ietf-routing:routing": {
"ietf-segment-routing:segment-routing": {
"ietf-segment-routing-mpls:sr-mpls": {
"bindings": {
"mapping-server": {
"policy": [
{
"name": "mapping 1",
"entries": {
"mapping-entry": [
{
"prefix": "2001:db8:aaaa:bbbb::/64",
"algorithm": "ietf-segment-routing-common:\
prefix-sid-algorithm-shortest-path",
"start-sid": 200,
"range": 100
}
]
}
}
]
},
"connected-prefix-sid-map": {
"connected-prefix-sid": [
{
"prefix": "2001:db8:aaaa:cccc::/64",
"algorithm": "ietf-segment-routing-common:\
prefix-sid-algorithm-strict-spf",
"start-sid": 100,
"range": 1,
"last-hop-behavior": "php"
}
]
}
},
"srgb": {
"srgb": [
{
"lower-bound": 45000,
"upper-bound": 55000
}
]
}
}
}
}
}


致谢


作者要感谢 Derek Yeung、Greg Hankins、Hannes Gredler、Uma Chunduri、Jeffrey Zhang、Shradda Hedge 和 Les Ginsberg 的贡献。


感谢 Ladislav Lhotka 和 Tom Petch 的详尽评论和有用的评论。


作者要感谢 Benjamin Kaduk、Alvaro Retana 和 Roman Danyliw 对 IESG 的审查和评论。

相关文章
|
消息中间件 存储 Kafka
深入解析Kafka中的动态更新模式
深入解析Kafka中的动态更新模式
385 0
|
缓存 安全 开发工具
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
1676 0
|
数据可视化 搜索推荐 前端开发
数据可视化工具的比较与选择
【8月更文挑战第23天】不同的数据可视化工具各有其特点和优势。企业应根据自身情况选择最适合自己的工具,以提升数据分析的效率和效果。
|
传感器 人工智能 Java
通义灵码 2.5 MCP功能优化上手体验
最近体验了通义灵码的新功能,尤其是新增的智能体模式,它能根据需求自动规划任务流程,例如创建Spring Boot项目、生成代码文件等,极大提升效率。同时,MCP工具支持2400多个服务,助力快速定位配置文件。Qwen3模型的加入增强了复杂逻辑处理能力,而记忆功能让助手更懂用户需求。上下文支持多文件选择和工程目录操作,进一步优化重构效率。这些新特性对个人开发者和团队协作都是强大助力,值得尝试!
|
存储 关系型数据库 MySQL
Flink基于Paimon的实时湖仓解决方案的演进
本文整理自阿里云智能集团苏轩楠老师在Flink Forward Asia 2024论坛的分享,涵盖流式湖仓架构的背景介绍、技术演进和未来发展规划。背景部分介绍了ODS、DWD、DWS三层数据架构及关键组件Flink与Paimon的作用;技术演进讨论了全量与增量数据处理优化、宽表构建及Compaction操作的改进;发展规划则展望了Range Partition、Materialized Table等新功能的应用前景。通过这些优化,系统不仅简化了复杂度,还提升了实时与离线处理的灵活性和效率。
1252 3
Flink基于Paimon的实时湖仓解决方案的演进
|
Kubernetes Python 容器
[python]使用diagrams绘制架构图
[python]使用diagrams绘制架构图
882 3
|
开发框架 JavaScript 前端开发
分享7个.NET开源、功能强大的快速开发框架
分享7个.NET开源、功能强大的快速开发框架
1207 1
|
开发工具 Windows
搭建 Qt 开发环境
搭建 Qt 开发环境
|
Go 数据库 Python
Bingo(Cytoscape插件)GO功能富集分析
转录组分析中基因的GO富集分析这步有很多软件可以选择,这次我们来介绍下如何利用Cytoscape软件中的一个简单又好用的Bingo小插件完成富集的工作,Cytoscape其实是一个做网络图的软件,所以使用Bingo的这种方法特别之处就在于富集的结果是可以直接以网络图的形式呈现,类似于下图这种效果,区别于其他的软件大多只生成表的形式。
1371 0

热门文章

最新文章