1 高性能
提升系统处理效率,降低延迟(响应时间≤200ms),提高吞吐量(QPS/TPS)。
可以从以下几个方面考虑:
① JVM调优与垃圾回收机制优化,降低内存占用和GC频率,目标就是减少STW
② 池化技术(线程池、连接池)减少资源创建销毁开销,提升响应速度
③ 无锁编程,通过原子操作和内存屏障实现线程同步的技术,旨在消除传统锁机制的性能瓶颈和死锁风险
④ 高性能IO
零拷贝技术:通过sendfile、mmap等减少CPU数据拷贝次数,提升文件传输效
分布式存储:Ceph、MinIO等实现数据分片存储与并行读写,突破单机IO瓶颈
Reactor多线程:主线程处理连接,子线程池处理IO读写,支撑千万级QPS(如Netty)
IO多路复用:select/poll:单线程监控多个文件描述符,存在FD数量限制和性能瓶颈;epoll:事件驱动模式,支持百万级并发连接,通过红黑树存储FD提升查询效率;io_uring:Linux新型异步IO框架,采用环形缓冲区和零拷贝技术,系统调用开销降低50%以上
异步IO(AIO):内核完成数据准备和拷贝后通知应用层,适用于数据库、分布式存储等高吞吐场景
2 高可用
保障系统7×24小时稳定运行,全年可用性达4个9(99.99%)以上(年停机时间≤52分钟),中小型公司也至少要达到3个9(99.9%)原则。
从以下几点思考:
① 多副本部署:关键组件(如数据库、服务节点)部署多个副本,通过主从复制、集群化消除单点故障
② 流量自动切换:使用负载均衡器(如Nginx、LVS)动态分配请求,故障节点流量自动转移至健康节点
③ 健康检查:通过心跳检测、探针监控节点状态,异常时触发熔断或剔除故障节点
④ 服务降级:在系统压力过大时,暂时关闭非核心功能(如评论、推荐),优先保障核心链路可用性
⑤ 限流与熔断:通过令牌桶、滑动窗口算法限制突发流量,防止雪崩效应;异常服务调用触发熔断,快速失败
⑥ 数据库主从复制:MySQL主从同步结合半同步复制,保障数据一致性;故障时通过VIP或DNS切换主库
⑦ 分布式缓存:Redis Cluster支持分片存储与自动故障转移,结合持久化策略防止数据丢失
3 高并发
应对海量用户同时请求,确保系统稳定承载流量压力,避免响应延迟或服务崩溃。
可以从以下几个方面考虑:
① 异步化处理(削峰):使用消息队列(Kafka/RabbitMQ)解耦同步操作,减少阻塞
② 缓存优化:多级缓存策略(本地缓存+Redis),降低数据库负载
③ 水平扩展:通过弹性扩缩容(Kubernetes)动态调整资源,应对流量波动
④ 数据库优化-分库分表:按业务维度拆分(如用户ID哈希),避免单表数据过大
⑤ 数据库优化-读写分离:主库处理写操作,从库集群承载读请求,提升并发能力
⑥ 高并发下数据一致性
并发写冲突:多个请求同时修改同一数据,导致最终状态不符合预期
缓存与数据库不一致:缓存更新延迟或失败,引发脏读或旧数据覆盖新数据(如Redis缓存未同步MySQL更新)【双删延迟策略:更新数据库后删除缓存两次(间隔业务处理时间),降低脏数据概率】
分布式事务复杂性:跨服务或跨数据库操作难以保证原子性,部分成功可能破坏一致性(如支付扣款成功但订单未更新)【分布式事务机制:TCC模式(Try-Confirm/Cancel 三阶段补偿机制,适用于需高一致性的支付、订单场景)、Saga模式(事件驱动的长事务拆分与补偿回滚,适用于异步业务流程)、本地消息表(结合消息队列与本地事务表,保证最终一致性,电商异步扣库存)】