首先第一步,你得让海量请求进来,第二步才是对进来的请求排队处理。第二步只是时间问题,要么像kafka那样,要么像redis那样。第一步单机一定会遇到瓶颈,无论集群还是分布式,跨机器的处理都会多出io时间,vertx是怎么 让多服务器同时处理还省去io时间的?这不科学吧?就算vertx单台服务器可以处理很高很高的并发,也不可避免要用集群,因为要保障的事高可用,而不只是高并发,跨服务器数据处理不可避免。
你的spring MVC是处理请求的,截取到request以后,先解析,然后生成message。接下来你需要一个q,你有两个选择,spring integration去连普通的queue,比如开源的activeMQ,或者用spring amqp,像这个官网例子Spring AMQP,从q里面取,当然是反向的,你选好了怎么放,就对应的怎么取。这是简单层面的,商用化的话,你还要考虑一致性,错误处理等,我感觉你是在练习,这些先别增加复杂度了。这个message加入队列,着一个架构动作,和数据持久层并没有关系。数据持久层应该是在两部做动作,1,是加入q处理之前,你可能想永久化一下,2,是处理成message了,后台进行业务处理,那么业务动作结果肯定要存在持久层里面。
秒杀这个功能,往简单的说就是一个资源争夺的典型例子。一些书里经常会用多终端共享打印机来说明这种独占资源共享的场景。解决资源抢占冲突的手段往往就两个,减少冲突方或增加资源。
秒杀需要占用的最重要资源是库存计数,其次是执行时间。抓住这个关键点就好办了,用什么框架什么技术,无非也就是保证这个计数不