怎么恢复网站数据库文件位置一件代发50个货源网站
一、微服务架构
-  
服务治理
-  
Nacos 注册中心(AP模式)
- CAP选择:Nacos 默认采用 AP 模式(可用性 + 分区容忍性),通过心跳检测实现服务健康管理。
 - 服务发现:客户端定时拉取服务列表,支持权重路由和元数据过滤。
 - 配置管理:通过 
dataId和group动态推送配置,支持灰度发布。 
 -  
Sentinel 熔断规则持久化
- 规则存储:将流控、熔断规则持久化到 Nacos/ZooKeeper,避免重启丢失。
 - 动态更新:通过 
DataSource接口监听配置中心变化,实时生效。 
// 示例:Sentinel 规则持久化到 Nacos ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new NacosDataSource<>( nacosServerAddr, groupId, dataId, source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}) ); FlowRuleManager.register2Property(flowRuleDataSource.getProperty()); 
 -  
 -  
分布式事务
-  
Seata AT模式
- 两阶段流程: 
- 一阶段:执行业务 SQL,生成 UNDO_LOG(数据快照)。
 - 二阶段:提交时删除 UNDO_LOG;回滚时通过 UNDO_LOG 恢复数据。
 
 - 全局锁:TC(事务协调器)通过全局锁避免脏写。
 
 - 两阶段流程: 
 -  
最大努力通知型事务
- 适用场景:跨系统最终一致性(如支付成功后通知商户)。
 - 实现步骤: 
- 本地事务提交后,异步发送通知消息。
 - 消息队列保证至少一次投递,接收方需幂等处理。
 
 
 
 -  
 -  
网关设计
-  
Spring Cloud Gateway 过滤器链
- 核心过滤器: 
GlobalFilter:全局过滤(如鉴权、日志)。GatewayFilter:路由级过滤(如添加请求头)。
 - 自定义过滤器: 
@Component public class AuthFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { if (!checkAuth(exchange.getRequest())) { return exchange.getResponse().setComplete(); // 拦截 } return chain.filter(exchange); } } 
 - 核心过滤器: 
 -  
动态路由配置
- 基于Nacos:监听 Nacos 配置变化,刷新路由表。
 - API 动态更新:通过 
RouteDefinitionRepository接口实现。 
 
 -  
 
二、中间件核心
-  
Redis
-  
集群模式
- Cluster分片: 
- 16384个哈希槽,每个节点负责部分槽位。
 - 客户端路由:通过 
CRC16(key) % 16384计算槽位。 
 - Codis方案: 
- 代理层(Codis-Proxy)负责分片,依赖 ZooKeeper 维护元数据。
 
 
 - Cluster分片: 
 -  
持久化策略
- RDB:定时快照,恢复快但可能丢失数据。
 - AOF:追加日志,数据安全但文件较大。
 - 混合模式:RDB 全量 + AOF 增量(Redis 4.0+)。
 
 -  
缓存问题解决方案
- 穿透:布隆过滤器(
RedissonBloomFilter)拦截无效请求。 - 击穿:互斥锁(
SET key value NX PX 3000)防止并发重建。 - 雪崩:随机过期时间(基础过期时间 + 随机偏移量)。
 
 - 穿透:布隆过滤器(
 
 -  
 -  
Kafka
-  
ISR机制
- In-Sync Replicas:与 Leader 保持同步的副本集合。
 - Leader选举:当 Leader 失效时,从 ISR 中选择新 Leader。
 
 -  
零拷贝技术
- sendfile系统调用:数据直接从磁盘文件传输到网卡,绕过用户态。
 
 -  
Exactly-Once语义
- 幂等生产者:通过 PID + Sequence Number 去重。
 - 事务消息:跨分区原子性写入(需配合事务协调器)。
 
 
 -  
 -  
RocketMQ
-  
事务消息流程
- 发送半消息(对消费者不可见)。
 - 执行本地事务,提交或回滚。
 - Broker 根据事务状态提交或丢弃消息。
 
 -  
顺序消息实现
- MessageQueueSelector:通过相同选择策略(如订单ID哈希)将消息发送到同一队列。
 - 消费者单线程顺序消费。
 
 
 -  
 
三、高可用设计
-  
限流降级
-  
滑动窗口算法
- 实现:将时间划分为多个小窗口,统计窗口内请求量。
 - 优势:比固定窗口更平滑,避免临界突发流量。
 
 -  
令牌桶实现(Resilience4j)
// 配置每秒10个令牌 RateLimiterConfig config = RateLimiterConfig.custom() .limitRefreshPeriod(Duration.ofSeconds(1)) .limitForPeriod(10) .build(); RateLimiter limiter = RateLimiter.of("apiLimiter", config); 
 -  
 -  
容灾方案
-  
同城双活
- 数据同步:基于数据库主从复制或 DRBD 块级同步。
 - 流量切换:DNS 或负载均衡器(如 Nginx)切换流量。
 
 -  
异地多活
- 单元化路由:按用户 ID 哈希路由到指定机房(如用户A固定访问北京机房)。
 - 数据最终一致:通过消息队列异步同步数据。
 
 
 -  
 -  
压测实战
-  
JMeter全链路压测
- 脚本录制:使用 JMeter 代理服务器录制用户操作。
 - 参数化:CSV 文件驱动多用户登录(不同账号)。
 - 分布式压测:控制机(Master)调度多台压力机(Slave)。
 - 监控指标:TPS、响应时间、错误率、资源利用率(CPU/内存)。
 
 -  
结果分析
- 瓶颈定位:数据库慢 SQL、线程池满、缓存命中率低。
 - 优化建议:增加索引、调整线程池参数、预热缓存。
 
 
 -  
 
四、总结与实战案例
案例:电商大促系统设计
- 挑战:秒杀场景下的高并发(10万QPS)、数据一致性。
 - 解决方案: 
- 流量削峰:MQ 队列缓冲请求,异步处理订单。
 - 库存扣减:Redis Lua 脚本保证原子性,异步同步到数据库。
 - 降级策略:核心功能(下单)优先,非核心功能(推荐)降级。
 
 
通过深入理解上述技术点,并结合实际场景灵活运用,能够设计出高可用、可扩展的分布式系统。
