一、微服务架构核心内容
1. 注册中心对比分析
Eureka(AP模型)
- 核心特性:
- 节点平等设计,部分节点宕机不影响整体服务,客户端自动切换节点
- 支持自我保护机制:若15分钟内85%节点无心跳,触发以下策略:
- 不剔除过期服务实例
- 维持当前节点注册和查询功能(不同步至其他节点)
- 网络恢复后自动同步新注册信息
- 客户端缓存机制:即使集群全宕机,消费者仍可通过本地缓存获取服务列表
ZooKeeper(CP模型)
- 局限性:
- Leader选举耗时30~120秒,选举期间集群不可用
- 强一致性导致网络分区时无法提供服务,不适合高可用性要求的服务发现场景
2. Spring Cloud核心组件
| 组件名称 | 功能描述 |
|---|
| Eureka | 服务注册与发现中心,实现服务实例的动态管理 |
| Ribbon | 客户端负载均衡器,支持多种负载策略(如轮询、随机) |
| Feign | 声明式HTTP客户端,集成Ribbon和Eureka实现负载均衡的服务调用 |
| Hystrix | 断路器组件,防止服务雪崩,提供降级机制 |
| Config | 分布式配置中心,支持配置的集中管理和动态刷新 |
| Zuul | 服务网关,实现请求路由、负载均衡、权限校验等功能 |
| Bus | 消息总线,用于配置变更或事件通知的分布式传播 |
3. 分布式中间件应用
信息共享方案
- 信息分级:按业务重要性划分数据层级,优化存储和访问策略
- 公共数据库/备份:通过主从复制、读写分离提升数据可靠性
- 消息队列(MQ):实现异步通信和解耦,常用组件如Kafka、RabbitMQ
- 信息寻址:通过服务注册中心(如Eureka)实现动态服务发现
数据同步组件
- 事务性发件箱(Transactional Outbox):通过数据库事务保证消息一致性
- 变更数据捕获(CDC):
- Canal(阿里开源):基于MySQL binlog实现数据增量订阅
- Debezium(Redhat开源):支持多数据库的CDC解决方案
4. 部署与集成
- 工具链:Jenkins + Docker + Kubernetes(K8s)实现持续集成与容器化部署
- Dubbo框架:
- 基于RPC的高性能服务框架,支持长连接和NIO异步通信
- 服务治理特性:通过ZooKeeper实现注册中心,支持负载均衡和容错机制
二、Redis核心技术解析
1. 缓存穿透解决方案
- 问题描述:恶意请求不存在的Key,导致流量直达数据库
- 解决方案:
- 空值缓存:将不存在的Key对应的空值(如空字符串)缓存一段时间
- 布隆过滤器:提前过滤无效Key,避免无效请求到达数据库
2. 数据持久化与恢复
- RDB(快照存储):
- 周期性生成全量数据快照,适合大规模数据恢复
- 优点:文件体积小,恢复速度快;缺点:可能丢失未持久化数据
- AOF(日志存储):
- 记录每条写命令,实现数据实时持久化
- 优点:数据安全性高;缺点:文件体积大,恢复速度较慢
3. 数据类型与应用场景
| 数据类型 | 特点描述 | 典型应用场景 |
|---|
| String | 单值单键,支持数值操作(INCR/DECR) | 计数器、分布式锁、缓存基本数据 |
| List | 有序链表,支持头部/尾部操作 | 消息队列、时间线列表 |
| Set | 无序唯一集合,支持交集/并集/差集运算 | 标签管理、去重统计 |
| ZSet | 有序集合,每个元素关联分数(Score) | 排行榜、地理位置查询 |
| Hash | 字段-值对存储,类似数据库表结构 | 存储对象数据(如用户信息) |
4. 缓存雪崩应对策略
- 问题描述:大量Key同时过期,导致请求集中击穿缓存
- 解决方案:
- 热点Key永不过期:对高频访问数据设置固定有效期或不失效
- 随机过期时间:为Key设置不同过期时间(如基础时间±随机值)
- 多级缓存架构:结合Redis和Memcached,降低单一缓存压力
三、Java基础与高并发实践
1. 高并发系统设计
服务器层
- 负载均衡集群:通过Nginx、LVS等实现流量分发,避免单点压力
数据库层
- 分库分表:垂直拆分(按业务)+ 水平拆分(按数据范围)
- 读写分离:主库写、从库读,提升查询性能
- 缓存预热:提前加载热点数据到Redis,减少数据库压力
程序层
- 同步机制:使用synchronized、ReentrantLock等保证线程安全
- 事务与锁:通过数据库事务(@Transactional)和乐观锁(版本号控制)防止数据竞争
- 异步处理:利用MQ将非核心流程异步化,提升系统吞吐量
2. 设计模式应用
- 单例模式:确保全局唯一实例(如Spring容器中的单例Bean)
- 工厂模式:结合反射实现对象的动态创建(如MyBatis的SqlSessionFactory)
- 代理模式:AOP实现日志记录、权限校验等切面功能
- 模板方法:封装公共逻辑(如JdbcTemplate的查询模板)
四、总结
本次面试围绕微服务架构、Redis缓存、高并发编程等核心领域,结合Spring Cloud生态和实际项目场景,详细解析了注册中心选型、分布式组件应用、缓存优化策略及Java设计模式实践。这些知识不仅是架构师面试的高频考点,也是构建高性能分布式系统的关键技术基础。