0%

ShardingSphere-Proxy简介

透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和 PostgreSQL 版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client,MySQL Workbench,Navicat 等)操作数据,对 DBA 更加友好。

  • 对应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用
  • 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端

与Sharding-JDBC不同的是,Sharding-Proxy是一个独立的应用,相当于是将Sharding-JDBC中的配置抽离到Sharding-Proxy进行配置

在conf/server.yaml配置文件中配置数据库的认证信息(用户名,密码)以及数据库的共用属性

在conf/config-sharding.yaml配置文件中配置分库分表的配置,与sharding-jdbc配置相似

在conf/config-master_slave.yaml配置文件中配置读写分离配置

Mycat配置水平垂直拆分

垂直拆分分库

配置schema.xml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

<!-- 逻辑库 -->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
<!-- order表在dn2上 -->
<table name="order" dataNode="dn2"/>
</schema>

<!-- 数据节点,真实的数据库 -->
<dataNode name="dn1" dataHost="host1" database="mybatis" />
<dataNode name="dn2" dataHost="host2" database="mybatis" />

<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳检测 -->
<heartbeat>select user()</heartbeat>
<!-- 写主机 -->
<writeHost host="hostM1" url="localhost:3306" user="root"
password="123456">
</writeHost>
</dataHost>

<dataHost name="host2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳检测 -->
<heartbeat>select user()</heartbeat>
<!-- 写主机 -->
<writeHost host="hostM2" url="localhost:3307" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
阅读全文 »

Zuul 过滤器:请求生命周期的全方位管控

Zuul 的核心能力源于其灵活的过滤器机制,通过在请求处理的不同阶段插入自定义逻辑,实现对请求的路由、校验、监控等全方位管控。Zuul 将过滤器分为四类,分别对应请求生命周期的不同阶段,共同构成了网关的核心扩展点。

Zuul 过滤器的四种类型

Zuul 过滤器按执行时机可分为pre、route、post、error四类,覆盖了请求从进入网关到返回响应的全流程:

过滤器类型 执行阶段 典型应用场景
pre 请求被路由到微服务之前执行 身份认证(如 Token 校验)、参数校验、限流、请求转发、设置上下文变量等。
route 请求被路由到微服务过程中执行 处理请求转发逻辑(如选择具体服务实例、修改请求参数 / 头信息、适配不同协议)。
post 请求被微服务处理之后执行 统一添加响应头、收集监控指标(如响应时间)、日志记录、结果二次处理等。
error 上述任一阶段发生异常时执行 统一错误处理(如转换异常为标准响应格式)、记录错误日志、触发降级等。

过滤器的执行流程

Zuul 过滤器的执行顺序由filterOrder()(数值越小越先执行)和类型共同决定,核心流程如下:

阅读全文 »

Mycat配置读写分离

配置schema.xml配置文件,schema.xml管理着mycat的逻辑库、表、分片规则、DataNode以及DataSource

  • schema标签用于定义mycat实例中的逻辑库
  • table标签定义mycat中的逻辑表
  • dataNode标签定义mycat中的数据节点
  • dataHost标签定义具体的数据库实例、读写分离配置和心跳检测
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

<!-- 逻辑库 可以配置多个逻辑库 -->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">

</schema>

<!-- 数据节点,真实的数据库 -->
<dataNode name="dn1" dataHost="host1" database="mybatis" />

<!-- 数据主机配置
balance是用来配置读写分离的
0:不开启读写分离,所有的读请求都发送到当前可用的writeHost写主机上
1:全部的readHost与writeHost(备主写)参与select语句的负载均衡,双主双从,且双主互为主备
2:所有的读操作随机在writeHost和readHost上分发
3:所有的读请求随机分发到readHost,writeHost不负担读压力

writeType 多主配置使用
0:所有写操作都发送到第一个writeHost,第一个挂了切换到第二个writeHost
1:所有写操作都随机发送到配置的writeHost,1.5后废弃不推荐使用

switchType 写主机切换方式
1:默认值,自动切换
-1:不自动切换
2:基于Mysql主从同步的状态决定是否切换
-->
<dataHost name="host1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳检测 -->
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<!-- 写主机 -->
<writeHost host="hostM1" url="localhost:3306" user="root"
password="123456">
</writeHost>

<!-- 读主机 -->
<readHost host="hostS1" url="localhost:3307" user="root"
password="123456"></readHost>
</dataHost>
</mycat:schema>

Spring Boot 核心注解详解:从原理到实战应用

Spring Boot 的核心设计理念是 “约定大于配置”,而实现这一理念的核心载体就是注解。它通过注解替代了传统 Spring 中繁琐的 XML 配置,简化了 Bean 注册、自动配置、条件判断等核心流程。从 “注解作用→底层原理→使用场景→实战示例” 四个维度,系统讲解 Spring Boot 中最关键的注解,帮你理解注解背后的逻辑,灵活应对各类开发场景。

@SpringBootApplication:Spring Boot 应用的 “入口注解”

@SpringBootApplication 是 Spring Boot 项目的 “门面注解”,标注在主程序类上,表明该类是 Spring Boot 应用的入口,同时整合了三个核心注解的功能,是 “一站式开启 Spring Boot 功能” 的关键。

1. 注解本质:三个核心注解的组合

从源码可知,@SpringBootApplication复合注解,本质是 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 的组合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
// 1. 声明 Spring Boot 配置类
@SpringBootConfiguration
// 2. 开启自动配置(核心)
@EnableAutoConfiguration
// 3. 开启组件扫描
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)
})
public @interface SpringBootApplication {
// 核心属性:排除指定的自动配置类
Class<?>[] exclude() default {};
String[] excludeName() default {};
}

2. 子注解的核心作用

(1)@SpringBootConfiguration:Spring Boot 配置类标识
  • 本质:对 Spring 原生@Configuration注解的 “语义化封装”,源码如下:

阅读全文 »