热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开源一套高并发多方案秒杀架构源码

源码地址:https:github.comThoughtsBetaflash-sale高并发多方案秒杀架构本源码原是小册的配套源码,旨在帮助小册读者从源码解构高并发设计的核心要义,

源码地址:https://github.com/ThoughtsBeta/flash-sale

二、源码结构

  • docker-compose.yml:【完整版】中间件部署脚本。相关中间件的安装脚本,你可以通过执行docker-compose -f docker-compose.yml up命令安装所依赖的全部中间件;
  • docker-compose-light.yml:【轻量版】中间件部署脚本(本地开发推荐),移除了非必要的中间件服务。相关中间件的安装脚本,你可以通过执行docker-compose -f docker-compose-light.yml up命令安装所依赖的全部中间件;
  • docker-cluster-middlewares.yml:【集群化】的中间件部署方案,适用于Swarm网络下的集群部署,具体部署方式可以参考第15章节;
  • docker-cluster-apps.yml:【集群化】的应用部署方案,适用于Swarm网络下的集群部署,具体部署方式可以参考第15章节;
  • config:相关中间件的配置文件所在位置,包括Prometheus和MYSQL等配置;
  • grafana-storage: grafana存储的配置数据。之所以要把这个文件也提供出来,主要是因为Grafana的数据源和报表配置相对比较麻烦,自行配置可能需要倒腾好一阵子,我们提供出来便可以直接加载使用;
  • data:部分中间件的数据存储位置,包括MYSQL等。这个目录的数据是由中间件系统运行时产生,数据多且杂乱,我们并没有把它放在git中,因此你下载源码后不会看到它,但是运行时就会出现。那为什么要把它放在这个位置,而不是计算机系统的其他位置?这个主要是为了方便数据查看和管理,你可以随时清除所有数据重新来过,当然也可以把它放在任何地方。

第一步:启动中间件

  1. 下载源码后进入environment目录,执行docker-compose -f docker-compose-light.yml up 启动中间件;
  2. 如果你对Docker命令不熟悉,建议安装Docker Desktop简化容器管理,可以直观看到容器的启动状态和日志输出;
  3. 需要停止所有容器时,请执行docker-compose -f docker-compose-light.yml down
  4. 需要重新创建所有容器时,请执行docker-compose -f docker-compose-light.yml up --force-recreate.

关于数据库中库表的初始化

对于FlashSale所使用的业务表,我们已经将初始化脚本放在enviroment/config/mysql 中,docker-compose在安装完MYSQL之后,便会执行数据表初始化动作,实现数据库的开箱即用

.
├── config
│   └── mysql
│   	   └── init
│   	      ├── flash_sale_init.sql // 默认主库初始化语句
│   	      ├── flash_sale_init_sharding_0.sql // #0号数据库初始化语句
│   	      ├── flash_sale_init_sharding_1.sql // #1号数据库初始化语句
│   	      └── nacos_init.sql //Nacos持久化语句
├── docker-cluster-apps.yml
├── docker-cluster-middlewares.yml
├── docker-compose-light.yml
└── docker-compose.yml

需要稍微注意的时,我们为MYSQL提供了两份初始化脚本:flash_sale_init.sqlnacos_init.yml,前者是业务表初始化脚本,后者是Nacos的初始化脚本,因为FlashSale需要借助Nacos所提供的动态配置功能,但是Nacos默认是内存存储,所以我们为它实现了基于MYSQL的持久化存储方案。

第二步:通过IDE启动应用运行

在启用应用前,请务必确保已成功执行第一步,并且各中间件容器启动成功。

  1. 下载源码后执行./mvnw clean install完成系统依赖包的安装;
  2. 选择start模块中的com.actionworks.flashsale.FlashSaleApplication作为程序入口运行。

特别提醒
本地启动时请在IDE中指定properties为local.

在调试阶段,推荐使用这种方式。FlashSale启动时,将会连接到前面所安装的中间件。

可选:通过Docker启动运行

除了在IDE启动FlashSale之外,通过Docker启动也是一种非常便捷的方案。

  1. 通过下面的命令构建FlashSale本地镜像:
docker build -t flash-sale-app . 

构建完成后,通过docker images查看镜像是否已经存在。

  1. 将下面的配置添加到前面所说的docker-compose.yml中,在运行中间的时候,也将同时启动系统。当然,我们也可以通过独立的文件运行。需要注意的是,在通过docker运行时,FlashSale将和中间件共处同一个网络中,我们为此创建了独立的配置文件,在运行时需要指定docker 配置。
services:
  flash-sale-app:
    image: flash-sale-app
    container_name: flash-sale-app
    environment:
      - SPRING_PROFILES_ACTIVE=docker
    ports:
      - 8090:8090
    networks:
      - thoughts-beta-cluster-apps
    restart: on-failure
  flash-sale-gateway:
    image: flash-sale-gateway
    container_name: flash-sale-gateway
    environment:
      - SPRING_PROFILES_ACTIVE=docker
    ports:
      - 8080:8080
    networks:
      - thoughts-beta-cluster-apps
    restart: on-failure

五、 如何测试接口

在完成中间件的安装和初始化,并启动应用后,接下来我们可以试着测试接口,来判断中间件和应用是否已经就绪并工作正常。

同样的,我们不会让读者自己创建脚本和准备测试数据,毕竟这不符合我们读者至上开箱即用的原则。为此,在项目的根目录下,你会看到我们提供的postman目录,它是Postman的测试脚本,包含了接口定义和测试数据,你可以直接选择某个接口点击测试即可。

Postman的脚本位置如下所示:

├── environment
│   ├── config
│   ├── data
│   ├── docker-compose.yml
│   └── grafana-storage
└── postman
    └── flash-sale-postman.json # 测试脚本

image-20211011232435923

关于作者

image-20211111232745734

  • 《王者并发课》专栏
  • 订阅号:MetaThoughts

推荐阅读
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 1.官网下载了mysql-5.7.17-win64.zip包,配置遇到很多麻烦,记录一下;2.解压后放到指定的文件夹,修改mysql-5.7.17的配置文件my-default.i ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了自动化测试专家Elfriede Dustin在2008年的文章中讨论了自动化测试项目失败的原因。同时,引用了IDT在2007年进行的一次软件自动化测试的研究调查结果,调查显示很多公司认为自动化测试很有用,但很少有公司成功实施。调查结果表明,缺乏资源是导致自动化测试失败的主要原因,其中37%的人认为缺乏时间。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 近期,某用户在重启RAC一个节点的数据库实例时,发现启动速度非常慢。同时业务部门反馈连接RAC存活节点的业务也受影响。通过对日志的分析, ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • 浅析Mysql数据回滚错误的解决方法_PHP教程:MYSQL的事务处理主要有两种方法。1、用begin,rollback,commit来实现begin开始一个事务rollback事 ... [详细]
author-avatar
拍友2602932873
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有