架构师面试微服务相关

0 阅读5分钟

一、微服务架构核心内容

1. 注册中心对比分析

Eureka(AP模型)

  • 核心特性
    • 节点平等设计,部分节点宕机不影响整体服务,客户端自动切换节点
    • 支持自我保护机制:若15分钟内85%节点无心跳,触发以下策略:
      • 不剔除过期服务实例
      • 维持当前节点注册和查询功能(不同步至其他节点)
      • 网络恢复后自动同步新注册信息
    • 客户端缓存机制:即使集群全宕机,消费者仍可通过本地缓存获取服务列表

ZooKeeper(CP模型)

  • 局限性
    • Leader选举耗时30~120秒,选举期间集群不可用
    • 强一致性导致网络分区时无法提供服务,不适合高可用性要求的服务发现场景

2. Spring Cloud核心组件

组件名称功能描述
Eureka服务注册与发现中心,实现服务实例的动态管理
Ribbon客户端负载均衡器,支持多种负载策略(如轮询、随机)
Feign声明式HTTP客户端,集成Ribbon和Eureka实现负载均衡的服务调用
Hystrix断路器组件,防止服务雪崩,提供降级机制
Config分布式配置中心,支持配置的集中管理和动态刷新
Zuul服务网关,实现请求路由、负载均衡、权限校验等功能
Bus消息总线,用于配置变更或事件通知的分布式传播

3. 分布式中间件应用

信息共享方案

  1. 信息分级:按业务重要性划分数据层级,优化存储和访问策略
  2. 公共数据库/备份:通过主从复制、读写分离提升数据可靠性
  3. 消息队列(MQ):实现异步通信和解耦,常用组件如Kafka、RabbitMQ
  4. 信息寻址:通过服务注册中心(如Eureka)实现动态服务发现

数据同步组件

  • 事务性发件箱(Transactional Outbox):通过数据库事务保证消息一致性
  • 变更数据捕获(CDC)
    • Canal(阿里开源):基于MySQL binlog实现数据增量订阅
    • Debezium(Redhat开源):支持多数据库的CDC解决方案

4. 部署与集成

  • 工具链:Jenkins + Docker + Kubernetes(K8s)实现持续集成与容器化部署
  • Dubbo框架
    • 基于RPC的高性能服务框架,支持长连接和NIO异步通信
    • 服务治理特性:通过ZooKeeper实现注册中心,支持负载均衡和容错机制

二、Redis核心技术解析

1. 缓存穿透解决方案

  • 问题描述:恶意请求不存在的Key,导致流量直达数据库
  • 解决方案
    1. 空值缓存:将不存在的Key对应的空值(如空字符串)缓存一段时间
    2. 布隆过滤器:提前过滤无效Key,避免无效请求到达数据库

2. 数据持久化与恢复

  • RDB(快照存储)
    • 周期性生成全量数据快照,适合大规模数据恢复
    • 优点:文件体积小,恢复速度快;缺点:可能丢失未持久化数据
  • AOF(日志存储)
    • 记录每条写命令,实现数据实时持久化
    • 优点:数据安全性高;缺点:文件体积大,恢复速度较慢

3. 数据类型与应用场景

数据类型特点描述典型应用场景
String单值单键,支持数值操作(INCR/DECR)计数器、分布式锁、缓存基本数据
List有序链表,支持头部/尾部操作消息队列、时间线列表
Set无序唯一集合,支持交集/并集/差集运算标签管理、去重统计
ZSet有序集合,每个元素关联分数(Score)排行榜、地理位置查询
Hash字段-值对存储,类似数据库表结构存储对象数据(如用户信息)

4. 缓存雪崩应对策略

  • 问题描述:大量Key同时过期,导致请求集中击穿缓存
  • 解决方案
    1. 热点Key永不过期:对高频访问数据设置固定有效期或不失效
    2. 随机过期时间:为Key设置不同过期时间(如基础时间±随机值)
    3. 多级缓存架构:结合Redis和Memcached,降低单一缓存压力

三、Java基础与高并发实践

1. 高并发系统设计

服务器层

  • 负载均衡集群:通过Nginx、LVS等实现流量分发,避免单点压力

数据库层

  • 分库分表:垂直拆分(按业务)+ 水平拆分(按数据范围)
  • 读写分离:主库写、从库读,提升查询性能
  • 缓存预热:提前加载热点数据到Redis,减少数据库压力

程序层

  • 同步机制:使用synchronized、ReentrantLock等保证线程安全
  • 事务与锁:通过数据库事务(@Transactional)和乐观锁(版本号控制)防止数据竞争
  • 异步处理:利用MQ将非核心流程异步化,提升系统吞吐量

2. 设计模式应用

  • 单例模式:确保全局唯一实例(如Spring容器中的单例Bean)
  • 工厂模式:结合反射实现对象的动态创建(如MyBatis的SqlSessionFactory)
  • 代理模式:AOP实现日志记录、权限校验等切面功能
  • 模板方法:封装公共逻辑(如JdbcTemplate的查询模板)

四、总结

本次面试围绕微服务架构、Redis缓存、高并发编程等核心领域,结合Spring Cloud生态和实际项目场景,详细解析了注册中心选型、分布式组件应用、缓存优化策略及Java设计模式实践。这些知识不仅是架构师面试的高频考点,也是构建高性能分布式系统的关键技术基础。