P2P项目专题
● 具体的你在P2P项目中都干什么了,你负责哪一块,每一块实现的时候用到了哪些技术?
● 你们项目的并发量设计了多少?
● P2P项目上线了吗?
● 你项目中的事务是怎么处理的?
● 在秒杀项目中使用消息队列ActiveMQ进行流量削峰,如果ActiveMQ接收消息失败了,怎么办?
消息在接收后会被服务器删除,为了避免接收消息失败而消息又被服务器删除,此时我们可以关闭自动确认机制AUTO_ACKNOWLEDGE,采用手动消息确认机制,由程序进行消息的确认,接收消息发生异常,则不确认消息,以便于下次可以再次接收。
● 在秒杀项目中使用消息队列ActiveMQ进行流量削峰,如果ActiveMQ挂掉怎么办?
第一点,首先消息需要使用持久化消息,服务挂掉,重启服务后消息依然可以消费,不会丢失;
第二点,ActiveMQ采用主从模式搭建集群,比如搭建3台主从模式的ActiveMQ集群,提高服务的可用性;
● 在交易中,如何控制超卖问题(卖出去的商品大于数据库实际商品库存)?
解决超卖问题,一个是借助于锁机制实现,这里面有线程锁、数据库锁、分布式锁等,另一个是借助于某些中间件产品实现,比如Redis;
如果我们的服务只是部署了一台服务器,我们通过线程锁即可控制并发问题,控制了并发问题,也就不会产生减库存的冲突,即不会产生超卖问题,这种实现,效率不高,而且只能是单机部署,实际项目不会采用;
如果我们的服务是集群部署,线程锁就不行了,此时可以使用数据库锁或分布式锁控制并发问题,从而控制减库存的冲突,避免超卖问题,数据库锁可以采用乐观锁、悲观锁,其中乐观锁比悲观锁效率稍高,在实际项目中使用多一些,悲观锁使用较少,但由于数据库本身的性能和并发处理能力并不理想,在高并发项目中,使用数据库锁也是不合适的;在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
使用分布式锁解决超卖问题,在实际项目中有相关真实的案例,主要采用zookeeper实现分布式锁,分布式锁是将我们的线程锁扩展为多个jvm的锁&#x