1. 以前做过什么项目?
答:商城项目、商城秒杀系统,整个商城项目中秒杀是其中最关键的一个营销活动,所以独立出来成为一个系统。秒杀系统就是我主做的。
2. 项目上线了吗?外网能否访问?
答:已经上线了,但是我们是外包公司,项目开发完之后布署到哪里不太清楚,所以不知道如何访问。
3. 项目收益是多少?
答:由于是开发人员,收益这一块都是产品那边在管,所以对于开发人员来说这个不太清楚
4. 项目团队中有多少人?怎样分工?
答:团队中有10个人,1个设计师,6个java开发,1个前端,2个测试。我在6人的开发团队中负责整体架构及部分代码,一般都是设计师写好概要设计,其中包含需求调研说明,项目背景,操作流程,使用技术架构,架构图。我们开发再完善详细设计,其中包含表结构,每个微服务能处理的业务,甚至还会写一些伪代码。前端负责页面开发,我们开发出来的版本交给测试人员进行测试,最终交付。
5. 项目中遇到了什么样的问题?是怎么解决的?
答:
1、技术架构方面:刚开始的时候本来使用的是数据库来控制超买超卖,但是效率上有很大的问题,因为我们在压力测试的时候,数据库会造成很多死锁,前端页面就会没有响应。后来我们采用了redis缓存技术来解决超买超卖的问题,将秒杀的商品及库存全部存到redis里,然后秒杀一个减一个,都在缓存里处理,这样就有效的解决了效率问题。
2、开发方面:我在开发库存那一块代码的时候,库存总是减不成功,于是我先查看控制台日志,看是否有报错,然后分析,最后打断点,一行一行跟踪代码找到问题。
3、与前端的交互方面:我们提供的接口,前端那边接收到的数据解析不出来,这就需要我们输出一下我们提供接口返回的数据,看是否是有乱码,或者格式不对,字段不对等问题,也需要和前端一起联调。
4、测试方面:测试人员在提供测试报告之后,有一些问题很难重现,首先需要用他们的数据进行模拟,看是否是数据问题,其次是用他们的环境进行跟踪代码,看能否找到问题。
6. 分布式事务是如何处理的?
答:分布式事务是通过 TCC 模式进行处理,比如订单和库存服务,订单服务和库存服务在开启事务之后先是执行 try 的逻辑,大家都没问题了,订单服务执行业务代码,然后执行confirm的逻辑,库存也执行业务代码,然后执行comfirm的逻辑,大家一起提交。如果库存服务 try 的逻辑执行失败时,会通知订单服务执行 cancel 的逻辑。
在大家都没问题的情况下,try要进行一次交互,然后 confirm 再进行一次交互,所以协调完两个服务会有成本。量小的时候没问题,但是量一旦很大的时候,这样就会造成排队现象。
所以我们没有使用分布式事务处理多个微服务之间的事务问题,我们先是通过redis来处理前端的请求,然后把业务进行拆分,拆分的业务使用消息队列中间件来解决,每个服务都开启自己的事务处理业务,这样可以更加高效的解决并发。
7. 项目开发用了多久?
答:前期的调研加概要设计大概用了10天,我们补充详细设计大概是5天,开发用时在20天左右的时间,加上测试,联调,解决bug,复测,上线应该在1个半月左右。
8. 项目中用到了哪些技术?
答:用的是SpringCloud微服务架构,主要解决后台服务压力过大的问题,所以根据不同模块进行拆分,每个开发小组负责一个微服务,缓存用的redis中间件,处理业务拆分用到的是RabbitMQ。
9. 项目中的数据都是通过SQL查询的吗?
答:不完全是,比如商品取到的秒杀政策就是在redis里取的,不是通过SQL查询,而商品列表和商品详情都是通过SQL查询的。还有控制秒杀的数量都是在redis里进行控制的,而不是实时用SQL查询库存。
10. 项目中你觉得哪个模块最难?
答:处理业务模块上我觉得库存模块最难,由于库存是敏感数据,操作都要非常谨慎,一旦库存出错,会给商家带来具大的损失。
如何处理大并发量是这个项目的难点,我们是通过redis控制超买超卖,通过消息队列RabbitMQ来对业务进行拆分。