Giter VIP home page Giter VIP logo

go-miaosha's Introduction

go实现的秒杀系统

功能

  • 用户注册、登录,商品展示,商品秒杀,下单
  • 后台商品管理、订单管理

数据库设计

技术栈

  • RESTful API

  • Gin

  • Gorm

  • Swagger

  • Jwt-go

  • MySQL

  • Redis

  • RabbitMQ

  • Vue + ElementUI (后台管理)

  • Flutter ?vue ?(前端App or Web待定)

数据来源

爬取小米秒杀界面数据 https://m.mi.com/seckill

项目架构设计

设计秒杀系统的注意点

来源:https://reading.developerlearning.cn/interview/interview-design/

前端秒杀页面

页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态 元素。通过CDN来抗峰值。 禁止重复提交:用户提交之后按钮置灰,禁止重复提交。 用户限流:在某一时间段内只允许用户提交一次请求,比如可以采取IP限流。

服务端控制器(网关)

限制uid访问频率:我们上面拦截了浏览器访问的请求,但针对某些恶意攻击或其它插件,在服务端控制层需要针对同一个访问uid,限制访问频率。

服务层

采用消息队列缓存请求:既然服务层知道库存只有100台手机,那完全没有必要把100W个请求都传递到数据库啊,那么可以先把这些请求都写到消息队列缓存一下,数据库层订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。 利用缓存应对读请求:对类似于12306等购票业务,是典型的读多写少业务,大部分请求是查询请求,所以可以利用缓存分担数据库压力。 利用缓存应对写请求:缓存也是可以应对写请求的,比如我们就可以把数据库中的库存数据转移到Redis缓存中,所有减库存操作都在Redis中进行,然后再通过后台进程把Redis中的用户秒杀请求同步到数据库中。

数据库层

数据库层是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截掉,数据库层只承担“能力范围内”的访问请求。所以,上面通过在服务层引入队列和缓存,让最底层的数据库高枕无忧。

go-miaosha's People

Contributors

togettoyou avatar

Watchers

 avatar

Forkers

shishengsen

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.