基于Go实现的秒杀系统

这是基于Go语言的一个秒杀系统,这个系统分三层,接入层、逻辑层、管理层。项目源码:https://github.com/BlueSimle/SecKill

系统架构图

秒杀接入层
  1. 从Etcd中加载秒杀活动数据到内存当中。
  2. 监听Etcd中的数据变化,实时加载数据到内存中。
  3. 从Redis中加载黑名单数据到内存当中。
  4. 设置白名单。
  5. 对用户请求进行黑名单限制。
  6. 对用户请求进行流量限制、秒级限制、分级限制。
  7. 将用户数据进行签名校验、检验参数的合法性。
  8. 接收逻辑层的结果实时返回给用户。
秒杀逻辑层
  1. 从Etcd中加载秒杀活动数据到内存当中。
  2. 监听Etcd中的数据变化,实时加载数据到内存中。
  3. 处理Redis队列中的请求。
  4. 限制用户对商品的购买次数。
  5. 对商品的抢购频次进行限制。
  6. 对商品的抢购概率进行限制。
  7. 对合法的请求给予生成抢购资格Token令牌。
秒杀管理层
  1. 添加商品数据。
  2. 添加抢购活动数据。
  3. 将数据同步到Etcd。
  4. 将数据同步到数据库。
目录结构
├─sk_admin
│  ├─config
│  ├─controller
│  │  ├─activity
│  │  └─product
│  ├─model
│  ├─service
│  └─setup
├─sk_layer
│  ├─config
│  ├─logic
│  ├─service
│  │  ├─srv_err
│  │  ├─srv_limit
│  │  ├─srv_product
│  │  ├─srv_redis
│  │  └─srv_user
│  └─setup
├─sk_proxy
│  ├─config
│  ├─controller
│  ├─service
│  │  ├─srv_err
│  │  ├─srv_limit
│  │  ├─srv_redis
│  │  └─srv_sec
│  └─setup
└─vendor
    └─github.com
        ├─coreos
        │  └─etcd
        │      └─clientv3
        ├─gin-gonic
        │  └─gin
        ├─go-sql-driver
        │  └─mysql
        ├─gohouse
        │  └─gorose
        ├─spf13
        │  ├─cobra
        │  └─viper
        └─Unknwon
            └─com

原文地址:https://www.cnblogs.com/yxhblogs/p/9277454.html

时间: 2024-11-10 12:48:18

基于Go实现的秒杀系统的相关文章

电商抢购秒杀系统的设计_1_应用场景分析

电商抢购秒杀系统的设计_1_应用场景分析 概述 所谓知已知彼,百战不殆,在开始详细介绍实战中的抢购秒杀系统时,我们了解一些抢购秒杀系统系统面临的尴尬与难点.另外需要说明一点,下面的内容都是在工作中慢慢总结得来,我们团队也是慢慢摸着石头过河,甚至最初的的架构设计并非是抢购秒杀系统. 评估系统处理能力 理论基础:LNMP的并发考虑与资源分配 虽然有基础去评估我们应用系统的处理能力,但是电商购买的业务流程挺复杂,从登录,商品详情,购物车,填写收货地址,选择支付方式,创建订单,完成支付,以及隐含的定时服

redis优化秒杀系统

用redis提高基于mss的秒杀系统 使用背景: 普通的基于mss框架的系统在并发量不是很高的情况下,对redis的需求不是很高.redis在系统中的角色相当于一个对象缓存器,在高并发的系统中(比如秒杀系统),在某一刻对数据库中的一条数据可能是成千上万的用户同时去访问,系统的用户体验度直接受到数据库的性能的影响.为了保证数据的完整性,用户只能串行访问数据库中的某一条记录.redis则是把记录对应的对象序列化存储在自身的容器中,减少数据库的压力.废话不多说,接下来简单介绍redis的使用. red

2017-5-26/描述一个高性能高可靠的网站架构——如何设计一个秒杀系统

一.秒杀的应用场景 电商网站的抢购活动.12306网站的抢票.抢红包. 二.秒杀的特点 1.秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增. 2.数据库的并发读写冲突以及资源的锁请求冲突非常严重. 3.秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功. 三.秒杀架构的原则 1.将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,请求都压倒了后端数据层,但实际秒杀成功的请求数量却很少.所以如果不在前端拦截很可能造成数据库读写锁冲突严重,并发高响应慢,甚至导

Redis分布式锁----乐观锁的实现,以秒杀系统为例

本文使用redis来实现乐观锁,并以秒杀系统为实例来讲解整个过程. 乐观锁      大多数是基于数据版本(version)的记录机制实现的.即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个"version"字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1.此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据.redis中可以使用watch命令

从构建分布式秒杀系统聊聊限流的多种实现

前言 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的.两周前秒杀案例初步成型,分享到了中国最大的同×××友网站-码云.同时也收到了不少小伙伴的建议和投诉.我从不认为分布式.集群.秒杀这些就应该是大厂的专利,在互联网的今天无论什么时候都要时刻武装自己,只有这样,也许你的春天就在明天. 在开发秒杀系统案例的过程中,前面主要分享了队列.缓存.锁和分布式锁以及静态化等等.缓存的目的是为了提升系统访问速度和增强系统的处理能力:分布式锁解决了集群下数据的安全一致性问题:静态化无疑

从构建分布式秒杀系统聊聊限流特技

前言 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的.两周前秒杀案例初步成型,分享到了中国最大的同性交友网站-码云.同时也收到了不少小伙伴的建议和投诉.我从不认为分布式.集群.秒杀这些就应该是大厂的专利,在互联网的今天无论什么时候都要时刻武装自己,只有这样,也许你的春天就在明天. 在开发秒杀系统案例的过程中,前面主要分享了队列.缓存.锁和分布式锁以及静态化等等.缓存的目的是为了提升系统访问速度和增强系统的处理能力:分布式锁解决了集群下数据的安全一致性问题:静态化无疑是

高并发之商品秒杀系统

基于redis 利用redis的乐观锁,实现秒杀系统的数据同步(基于watch实现) 用户一: import redis conn = redis.Redis(host='127.0.0.1',port=6379) # conn.set('count',1000) with conn.pipeline() as pipe: # 先监视,自己的值没有被修改过 conn.watch('count') # 事务开始 pipe.multi() old_count = conn.get('count')

全流程开发 GO实战电商网站高并发秒杀系统

获取资源点击这里:全流程开发 GO实战电商网站高并发秒杀系统 第1章 课程介绍[学前须知] 本章对这门课程进行说明,包括:秒杀系统涉及模块的介绍,秒杀核心的知识点的介绍,课程的学习规划等. 1-1 课程介绍试看 第2章 需求整理&系统设计 [明确需求] 本章对秒杀系统整体需求进行梳理,明确系统具体需求,讲解系统原型设计工具的使用,并结合秒杀系统进行整体架构设计. 2-1 需求分析 2-2 系统架构设计 2-3 [总结&扩展]需求整理&系统设计 2-4 [勤于思考,夯实学习成果]阶段

Java秒杀系统实战系列~整合Shiro实现用户登录认证

摘要: 本篇博文是"Java秒杀系统实战系列文章"的第五篇,在本篇博文中,我们将整合权限认证-授权框架Shiro,实现用户的登陆认证功能,主要用于:要求用户在抢购商品或者秒杀商品时,限制用户进行登陆!并对于特定的url(比如抢购请求对应的url)进行过滤(即当用户访问指定的url时,需要要求用户进行登陆). 内容: 对于Shiro,相信各位小伙伴应该听说过,甚至应该也使用过!简单而言,它是一个很好用的用户身份认证.权限授权框架,可以实现用户登录认证,权限.资源授权.会话管理等功能,在本