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

秒杀接入层
- 从Etcd中加载秒杀活动数据到内存当中。
- 监听Etcd中的数据变化,实时加载数据到内存中。
- 从Redis中加载黑名单数据到内存当中。
- 设置白名单。
- 对用户请求进行黑名单限制。
- 对用户请求进行流量限制、秒级限制、分级限制。
- 将用户数据进行签名校验、检验参数的合法性。
- 接收逻辑层的结果实时返回给用户。
秒杀逻辑层
- 从Etcd中加载秒杀活动数据到内存当中。
- 监听Etcd中的数据变化,实时加载数据到内存中。
- 处理Redis队列中的请求。
- 限制用户对商品的购买次数。
- 对商品的抢购频次进行限制。
- 对商品的抢购概率进行限制。
- 对合法的请求给予生成抢购资格Token令牌。
秒杀管理层
- 添加商品数据。
- 添加抢购活动数据。
- 将数据同步到Etcd。
- 将数据同步到数据库。
目录结构
├─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
基于Go实现的秒杀系统的更多相关文章
- Java商城秒杀系统的设计与实战视频教程(SpringBoot版)
课程目标掌握如何基于Spring Boot构建秒杀系统或者高并发业务系统,以及构建系统时采用的前后端技术栈适用人群Spring Boot实战者,微服务或分布式系统架构实战者,秒杀系统和高并发实战者,中 ...
- 基于SpringMVC+Spring+MyBatis实现秒杀系统【概况】
前言 本教程使用SpringMVC+Spring+MyBatis+MySQL实现一个秒杀系统.教程素材来自慕课网视频教程[https://www.imooc.com/learn/631].有感兴趣的可 ...
- laravel基于redis实现的一个简单的秒杀系统
说明:网上很多redis秒杀系统的文章,看的都是一头雾水,然后自己来实现一个,也方便以后自己学习 实现的方式是用的redis的list队列,框架为laravel 核心部分为list的pop操作,此操作 ...
- PHP秒杀系统-高并发高性能的极致挑战
慕课网实战教程后端:1.java c++算法与数据结构2.java Spring Boot带前后端 渐进式开发企业级博客系统3.java Spring Boot企业微信点餐系统4.java Sprin ...
- PHP秒杀系统全方位设计(二)
商品页面开发 静态化展示页面[效率要比动态PHP高很多,PHP程序需要解析等步骤,本身就需要很多流程,整个下来PHP的处理花的时间和资源要多] 商品状态的控制 开始前.进行中.库存不足.结束 数据逻辑 ...
- Java高并发秒杀系统【观后总结】
项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并 ...
- SSM实现秒杀系统案例
---------------------------------------------------------------------------------------------[版权申明:本 ...
- SpringBoot开发案例从0到1构建分布式秒杀系统
前言 最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路.俗话说,脱离案例讲架构都是耍流氓,最终使用SpringBoot模拟实现了部分秒杀场 ...
- 从构建分布式秒杀系统聊聊Disruptor高性能队列
前言 秒杀架构持续优化中,基于自身认知不足之处在所难免,也请大家指正,共同进步.文章标题来自码友 简介 LMAX Disruptor是一个高性能的线程间消息库.它源于LMAX对并发性,性能和非阻塞算法 ...
随机推荐
- mysqldump的--master-data参数
mysqldump导出数据时,当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file和posit ...
- Grunt学习笔记【7】---- grunt-contrib-less插件详解
本文主要讲如何使用Grunt实现less文件压缩. 一 说明 less是非常常用的样式框架之一,Grunt也提供了可以编译和打包less样式文件的插件:grunt-contrib-less. 实现原理 ...
- centos7 安装php
http://blog.csdn.net/zhaozuosui/article/details/48394409
- Android进程的生命周期
Android系统想要永久的保留一个应用进程差点儿是不可能的.所以系统就须要不断的释放老的或者不太重要的进程以便腾出足够的内存空间来执行新的或者更重要的进程,那么系统怎样决定哪个进程应该保留哪个应该杀 ...
- (转)ARCGIS中坐标转换及地理坐标、投影坐标的定义
原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...
- selector + shape
selector_shape.xml<?xml version="1.0" encoding="utf-8"?> <selector xmln ...
- ubuntu tomcat 配置及使用细节
1.改端口号(两个) vi server.xml 一个是http协议端口 <Connector port="8091" protocol="HTTP/1.1&qu ...
- JAVA- continue与break与return关键字
continue与break关键字 for(int i=0;i<10;i++){ if(i%2==0){ continue; //跳过当前循环执行下一次循环 } System.out.print ...
- matlab程序计时
t1=datetime(); %程序 t2=datetime() totaltime=t2-t1; disp(t2-t1); 或者: tic %代码块 toc disp(['运行时间: ',num2s ...
- IE不支持HTML5表单属性placeholder的解决办法
1. [代码][JavaScript]代码 (function ($) { $.fn.placeholder = function (options) { var defaults ...