
1) 【一句话结论】
针对资本市场学院在线学习平台,核心架构采用微服务+分布式云原生架构,通过服务网格(Istio)管理高并发服务通信,结合数据库分库分表+读写分离支撑数据存储,利用Seata AT模式保障强一致性场景(如支付、注册),Kafka+幂等消费者保障最终一致性(学习进度、讨论),并采用WebSocket实现互动讨论实时推送,在保证数据一致性的前提下优化用户体验。
2) 【原理/概念讲解】
微服务架构:将大系统拆分为独立业务服务(用户、课程、支付、直播),类比“业务模块化的小团队,各管一块业务,协同完成大任务”,适合高并发场景(如用户注册峰值百万级)。
数据库分库分表:用户服务按用户ID分库(如分库1-2,每个库存储部分用户数据),课程服务按课程ID分表(如分表1-10,每个表存储部分课程数据),读写分离:主库负责写,从库负责读,通过中间件(如ShardingSphere)实现读写分离,减少主库压力。
服务网格(Istio):透明管理服务间通信,提供熔断(如设置熔断阈值200ms,当请求失败率超过50%时触发)、限流(如设置限流速率1000req/s,防止服务过载)、可观测性(通过Prometheus监控服务状态,Grafana可视化)。
分布式事务(Seata AT模式):将事务拆分为本地事务(每个服务内的数据库操作)和全局事务(由事务协调器管理),适合强一致性需求(如支付成功后库存扣减),但事务开销大(事务协调器延迟、锁竞争),优化方案:批量事务(将多个小事务合并为一个大事务)、异步事务(将部分非关键操作异步化,如学习进度更新)。
消息队列(Kafka):异步消息传递,用于学习进度更新(如用户观看直播后更新进度)、讨论消息推送,支持高吞吐(每秒百万级消息),分区机制实现并行处理。
消费者幂等性设计:通过消息偏移量+幂等性标识(如消息头添加唯一ID),避免重复消费(如学习进度更新消息被重复处理导致重复扣减进度)。
缓存策略(Redis):用于用户信息、课程信息缓存,减少数据库压力,采用读写分离+缓存预热(如高并发时设置缓存过期时间30秒,避免缓存雪崩),热点数据预热(如热门课程信息提前加载到缓存)。
负载均衡(Nginx):实现加权轮询(根据服务实例负载分配请求),结合K8s自动伸缩(根据CPU使用率自动增加/减少服务实例),应对流量波动。
3) 【对比与适用场景】
| 组件/技术 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 微服务架构 | 系统拆分为独立业务服务 | 模块化、独立部署、扩展性强 | 业务复杂、高并发(用户、课程、支付服务) | 服务间通信复杂,需服务网格管理 |
| 服务网格(Istio) | 透明管理服务间通信 | 负载均衡、熔断、限流、可观测性 | 高并发服务间通信(直播、讨论服务) | 增加网络层开销,需配置管理 |
| 数据库分库分表 | 按业务逻辑拆分数据库 | 分库提升写性能,分表提升读性能 | 用户服务(分库)、课程服务(分表) | 需业务数据模型支持分库分表,避免数据分布不均 |
| 分布式事务(Seata AT模式) | 强一致性保障(本地+全局事务) | 事务协调器管理,ACID兼容 | 支付、注册、订单等关键业务 | 事务开销大,可能导致性能下降 |
| 分布式事务(Seata TCC模式) | 资源预占/确认/补偿 | 业务预占资源,补偿逻辑简单 | 库存扣减、资源预留 | 需业务支持补偿,避免死锁 |
| 消息队列(Kafka) | 异步消息传递 | 高吞吐、持久化、分区 | 学习进度更新、讨论消息推送 | 需设计消费者重试、死信队列(如延迟消息、补偿消费) |
| 缓存(Redis) | 内存数据库 | 低延迟、高并发读写 | 用户信息、课程信息缓存 | 需考虑缓存击穿、雪崩防护 |
| 负载均衡(Nginx) | 分发请求到后端服务 | 加权轮询、会话保持 | 高并发流量分发 | 需结合K8s自动伸缩,避免单点故障 |
4) 【示例】
用户购买课程流程(分布式事务+数据库分库分表+消息队列):
1. 用户发起购买请求 → 用户服务(验证用户信息,分库1)
2. 用户服务调用支付服务(调用支付接口,分库2)
3. 支付服务处理支付 → 返回支付结果
4. 用户服务根据支付结果,调用课程服务(更新订单状态,分表1)
5. 课程服务通过Kafka发送订单更新消息(主题:order-update)
6. 订单服务消费消息,更新数据库(订单表+库存表,分表2)
互动讨论实时推送流程(WebSocket+Kafka):
1. 学员打开讨论区 → 客户端建立WebSocket连接
2. 学员发送消息 → 客户端通过WebSocket发送到服务端
3. 服务端将消息推送到Kafka(主题:discussion)
4. 讨论服务消费Kafka消息,广播给所有在线学员(通过WebSocket)
5) 【面试口播版答案】
面试官您好,针对资本市场学院在线学习平台的需求,我设计的核心架构是微服务+分布式云原生架构。首先拆分业务为用户、课程、支付、直播等微服务,每个服务独立部署,通过服务网格(Istio)管理服务间通信和高并发流量,比如直播服务用K8s集群部署,支持弹性伸缩应对高峰。数据一致性方面,用户注册、课程购买这类强一致性需求用Seata的AT模式,而学习进度、讨论等非实时数据用最终一致性(Kafka+补偿机制)。互动讨论通过WebSocket实现实时推送,确保学员秒级看到消息。这种架构既能应对高并发,又能保证数据一致性和用户体验。
6) 【追问清单】
7) 【常见坑/雷区】