Traffic 双路由 #
使用说明 #
Traffic 双路由功能需要使用混合部署架构,同时部署 DBPlusEngine-Driver 和 DBPlusEngine-Proxy,并通过注册中心统一管理分片、加解密或读写分离等功能配置。
由于 Traffic 双路由功能必须要配置 DBPlusEngine-Proxy 使用,因此只允许在 DBPlusEngine-Proxy 接入端通过 YAML 配置或者 DistSQL 来添加 Traffic Rule。此外,为了配合 Traffic 功能,DBPlusEngine-Proxy 接入端需要配置 labels 标签,用于 Traffic 转发的配置。
配置项说明 #
rules:
- !TRAFFIC
trafficStrategies:
sql_match_traffic:
labels:
- OLTP
algorithmName: sql_match_algorithm
loadBalancerName: random_load_balancer
sql_regex_traffic:
labels:
- OLTP
algorithmName: sql_regex_algorithm
loadBalancerName: random_load_balancer
sql_hint_traffic:
labels:
- OLAP
algorithmName: sql_hint_algorithm
loadBalancerName: round_robin_load_balancer
transaction_traffic:
# 可选配置,算法为 JDBC 和 FIRST_SQL 无需配置
labels:
- OLAP
- OLTP
algorithmName: transaction_algorithm
# 可选配置,算法为 JDBC 和 FIRST_SQL 无需配置
loadBalancerName: round_robin_load_balancer
trafficAlgorithms:
sql_match_algorithm:
type: SQL_MATCH
props:
sql: SELECT * FROM t_order WHERE content IN (?, ?); UPDATE t_order SET creation_date = NOW() WHERE user_id = 1;
sql_regex_algorithm:
type: SQL_REGEX
props:
regex: (?i)^(UPDATE|SELECT).*WHERE user_id.*
sql_hint_algorithm:
type: SQL_HINT
transaction_algorithm:
# 支持 FIRST_SQL、JDBC、PROXY 三种类型
# FIRST_SQL 会根据第一条 SQL 转发的结果来决定事务单元的转发结果
# JDBC 会将事务单元不进行转发,在 JDBC 上进行执行
# PROXY 会将事务单元转发到 Proxy 实例执行,为了保证数据的一致性,事务单元会在同一个实例上执行
type: PROXY
loadBalancers:
random_load_balancer:
type: RANDOM
round_robin_load_balancer:
type: ROUND_ROBIN
labels:
- OLTP
YamlTrafficRuleConfiguration 配置项说明:
名称 | 数据类型 | 说明 |
---|---|---|
trafficStrategies | Map<String, YamlTrafficStrategyConfiguration> | 转发策略,必填。默认按照配置策略的顺序依次匹配,首个匹配的策略即为目标策略。如果用户配置了事务转发策略,则优先匹配事务转发策略。 |
trafficAlgorithms | Map<String, YamlShardingSphereAlgorithmConfiguration> | 转发匹配算法,必填。 |
loadBalancers | Map<String, YamlShardingSphereAlgorithmConfiguration> | 转发负载均衡策略,必填。 |
YamlTrafficStrategyConfiguration 配置项说明:
名称 | 数据类型 | 说明 |
---|---|---|
name | String | 转发策略名称,必填。 |
labels | Collection | 转发 Proxy 实例标签,当 algorithmName 配置为 JDBC 或 FIRST_SQL 时,无需配置,其他算法必填。 |
algorithmName | String | 转发匹配算法,必填。 |
loadBalancerName | String | 转发负载均衡算法,当 algorithmName 配置为 JDBC 或 FIRST_SQL 时,无需配置,其他算法必填。 |
内置转发匹配算法 #
基于 Hint 转发匹配算法 #
基于 SQL Hint 转发匹配算法 #
类型:SQL_HINT 可配置属性:
SQL Hint 功能需要用户提前开启解析注释的配置,设置 sqlCommentParseEnabled
为 true
,注释格式暂时只支持 /* */
,内容需要以 ShardingSphere hint:
开始,用户通过设置 useTraffic=true
或 useTraffic=false
属性来开启和关闭 SQL Hint 转发匹配算法。
基于 Segment 转发匹配算法(SegmentTrafficAlgorithm) #
基于 SQL 字符串转发匹配算法 #
基于 SQL 字符串转发匹配算法 类型:SQL_MATCH 可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
sql | String | 用于配置 SQL 字符串,多条时使用分号分隔,SQL 字符串匹配算法忽略大小写、空白符。 |
基于 SQL 字符串正则转发匹配算法 #
类型:SQL_REGEX 可配置属性:
属性名称 | 数据类型 | 说明 |
---|---|---|
regex | String | 用于配置正则表达式。 |
TransactionTrafficAlgorithm #
基于第一条 SQL 转发匹配算法 #
类型:FIRST_SQL
可配置属性:无
统一转发 JDBC 转发匹配算法 #
类型:JDBC
可配置属性:无
统一转发 Proxy 转发匹配算法 #
类型:PROXY
可配置属性:无
内置转发负载均衡算法 #
TrafficLoadBalanceAlgorithm #
随机 Proxy 实例负载均衡算法 #
类型:RANDOM
可配置属性:无
轮询 Proxy 实例负载均衡算法 #
类型:ROUND_ROBIN
可配置属性:无