主要实现一个校园点餐系统的下订单,网关部分功能。
作为微服务练手项目,不会追求业务的完全,可能只会完成部分功能,然后继续深入扩展,而不是横向扩展业务。
单机跑微服务,没弄什么集群,TPS测试什么的看看就行。
- Spring Boot
- MyBatis
- Spring Cloud Alibaba
- Nacos
- Spring Cloud
- OpenFeign
- Gateway
- Sleuth
- MySql
- Redis
- RabbitMQ
- Docker
- Zipkin
测试用工具:
- Postman
- JMeter
2021/10/11
- 创建项目
2021/10/13
- 商品服务:普通crud, 减库存
- 订单服务:下订单
2021/10/14
- 整合了nacos作为配置中心
2021/10/15
- 数据源的动态刷新
2021/10/16
- 加入rabbitmq,商品服务扣减库存后,通过mq通知订单服务的消息队列
2021/10/17
- 加入Spring Cloud Gateway, 可以根据配置中心的配置动态更新自定义路由信息
2021/10/18
- 创建用户服务,实现用户登录功能
- Spring Cloud Gateway 鉴权,创建订单只能由买家请求,设置订单完成状态只能由卖家请求
- 加入 zipkin sleuth 进行服务跟踪
2021/10/20
- 对项目的性能进行测试,参照谷粒商城的jemeter压测。
2021/10/23
- 加入根据根据食堂和层数查询窗口菜品的功能,并使用redis缓存查询数据。
2021/10/26
- 使用redis优化下订单,查询商品时,先查询redis,并重置过期时间,没有的再查数据库,从数据库中查到之后存到redis中,并且指定过期时间。
2021/10/28
- 加入线程池,异步编排下订单的流程。
- 使用Redisson实现分布式锁,避免同一服务的多台服务器,同时查询数据库,以获得相同数据。
2021/10/31
- 测试redis减库存的性能,找到合适的写法,最后用redis的自减和自增两个原子操作,用类似乐观锁的形式实现redis减库存,同时异步更新数据库的库存,不再用redisson。
2021/11/5
- 使用rabbitmq延时队列,解决超时未支付问题;修改了下订单部分流程,不再异步插入订单项和订单,而是先插入订单项再插入订单。
2022/07/27
- 某些Redis操作改为使用pipeline 和 mget
- 减库存修改为Lua脚本实现
- 使用Redis + Token实现维持用户登录状态
- 使用Redis + Token + 拦截器 + 注解实现接口幂等性
- 使用Gateway实现IP限流
- 优化OpenFeign提升下订单TPS