食恪生鲜 24 小时体验店是金恪集团旗下新零售事业部的第二家线下门店,用传统连锁+互联网的模式,通过
POP+B2C+O2O+M2M 多模式平台整合:线下体验店、食恪官网、APP、微商城、移动售卖机等线上线下联动,
打造全渠道运营体系。食恪生鲜 24 小时体验店,以门店为中心,辐射周围几公里内的用户群体,推出了配送
服务、代加工服务等,提升运营水平与用户体验,建立实体网络价值,提升零售端品牌价值和经营水平,为用
户提供次日消费、极速消费、到店消费等不同消费场景。该项目整体采用 SpringBoot+SpringCloud 微服务架
构,同时,食恪打通资金账户,支持食恪生鲜店会员卡、食恪网线上账户同时满足线上和线下支付需求。
项目职责
在该项目担任开发组长职位,带领团队负责该项目的技术支撑及研发、维护等工作。
项目包含线下收银系统、会员卡系统、门禁闸机、ERP 系统、线上微店小程序、外卖接单系统、自动售货机、
社区团购、供应链等系统。
技术挑战
1.mq 消息大量积压,导致系统性能越来越差。
2.缓存雪崩穿透导致数据库宕机;
3.缓存+数据库双写不一致;
技术架构:
1.高并发架构
异步队列串行化的数据库+缓存双写一致性保障方案,解决高并发场景下,数据库与缓存双写的时候数据不一
致问题。
基于 zookeeper 分布式锁的缓存并发重建冲突解决方案,解决高并发场景下,缓存重建时的分布式并发重建
的冲突问题。
对 MySQL 采用主从复制架构实现数据库读写分离。
采用 Nginx+lua 脚本基于随机过期时间来解决,高并发场景下因 Nginx 缓存失效导致 Redis 压力倍增问题。
采用 Redis 主从架构+Redis 读写分离架构实现 10W+QPS 高并发架构。
采用往 Redis 和 Ehcache、Nginx 等缓存中写入空数据解决缓存穿透问题。
定期删除+惰性删除 + 内存淘汰机制(LRU) 制定 Redis 多重过期策略。
2.高可用架构
采用 Redis 主从架构+读写分离+哨兵集群保证系统的高可用
使用 RDB+AOF+云存储方式解决 Redis 宕机数据恢复
采用 Ehcache 本地缓存 + Redis(主从架构+主从复制+哨兵集群)+Redis 数据备份快速缓存预热等多级缓存
解决缓存雪崩问题
使用 RabbitMQ 镜像集群模式进行限流削峰,减少对服务器的压力,比如抢购是只允许少数人或者指定的人可
以抢购成功,减少后台流入量
采用双写迁移方案不停机完成分库分表数据迁移
RabbitMQ 持久化+生产者 Confirm 机制+消费者手动 ACK 机制解决消息丢失问题
将 RabbitMQ 拆分为多个 Queue,一个 Queue 对应一个消费者来解决消息的顺序性问题
3.分布式架构
Spring session + redis 解决分布式 session 问题
对用户购买采用 TCC 事务来保证强一致性
使用 RabbitMQ 对系统进行异步化、削峰、解耦
4.微服务架构
使用 SpringBoot 和 SpringCloud 将系统拆分为多个独立模块分别部署,比如:会员卡服务、外卖接单服务、
支付服务、消息服务等。
技术效果:
最终我们系统形成了一套自己的高并发系统架构,经过压测,系统可以承载最高 2000/s 的并发量,目前系统
支撑 10W 用户同时使用。