分布式抽奖秒杀系统,DDD架构设计和实现分享
作者:小傅哥
博客:https://bugstack.cn
沉淀、分享、成长,让自己和他人都能有所收获!
一、用大项目,贯穿知识体系
写CRUD、堆API、改屎山⛰,熬多少个996也只是成为重复的螺丝钉。如果你希望捅破现有工作的瓶颈,拉高一下对技术的认知,那么就非常需要一个大项目来贯穿常用技术栈的知识体系。碎片化断层的背八股文,是解决不了这个事情
那怎么办?当然是要肝项目了,肝一个有互联网技术体系
、有分布式架构运用
、有DDD思想和设计模式实践
的真实场景项目,才能让一个尚未接触此类项目或是长期陷入CURD的熟练工,打开视野,快速成长起来。
整整半年,小傅哥都在做这件事情,直到今天才完成整个系统的第一期设计实现和落地。在这个《分布式抽奖系统》项目中,我会带着大家以DDD架构和设计模式落地实战的方式,进行代码开发
、视频介绍
、文档说明
的方式讲解和实现分布式抽奖系统,那么这里会涉及到很多DDD的设计思路和设计模式应用,以及互联网大厂开发中所应用到的技术,包括:SpringBoot、Mybatis、Dubbo、MQ、Redis、Mysql、ELK、分库分表、Otter 等。
二、四层架构,领域驱动设计
Lottery 抽奖系统
项目是一款互联网面向C端人群营销活动类的抽奖系统,可以提供抽奖活动玩法策略的创建、参与、记账、发奖等逻辑功能。在使用的过程中运营人员通过创建概率类奖品的抽奖玩法,对用户进行拉新、促活、留存,通常这样的系统会用在电商、外卖、出行、公众号运营等各类场景中。
1. DDD 四层架构
- 此系统架构为 DDD 领域驱动设计的四层架构实现方式,以重视代码实现落地的方式向读者介绍和展示如何开发这样的代码。
- 在 Domain 领域层逐步通过拆解系统流程设计,按照职责边界的领域模块进行设计和开发,最终在应用层进行逻辑功能编排。
- 这个系统中会体现出很多的设计模式思想和最终的实现,只有把 DDD 和设计模式结合起来,才能开发出更加易于扩展和维护的代码结构。
2. 分布式工程设计
整体系统架构设计包含了6个工程:
- Lottery:分布式部署的抽奖服务系统,提供抽奖业务领域功能,以分布式部署的方式提供 RPC 服务。
- Lottery-API:网关API服务,提供;H5 页面抽奖、公众号开发回复消息抽奖。
- Lottery-Front:C端用户系统,vue H5 lucky-canvas 大转盘抽奖界面,讲解 vue 工程创建、引入模块、开发接口、跨域访问和功能实现
- Lottery-ERP:B端运营系统,满足运营人员对于活动的查询、配置、修改、审核等操作。
- DB-Router:分库分表路由组件,开发一个基于 HashMap 核心设计原理,使用哈希散列+扰动函数的方式,把数据散列到多个库表中的组件,并验证使用。
- Lottery-Test:测试验证系统,用于测试验证RPC服务、系统功能调用的测试系统。
3. 凝练流程领域
- 拆解功能流程,提炼领域服务,一步步教会你把一个业务功能流程如何拆解为各个职责边界下的领域模块,在通过把开发好的领域服务在应用层进行串联,提供整个服务链路。
- 通过这样的设计和落地思想,以及在把流程化的功能按照面向对象的思路使用设计模式进行设计,让每一步代码都变得清晰易懂,这样实现出来的代码也就更加易于维护和扩展了。
- 所以,你在这个过程中学会的不只是代码开发,还有更多的落地思想实践在这里面体现出来。也能为你以后开发这样的一个项目或者在面试过程中,一些实际复杂场景问题的设计思路,打下不错的基础。
三、学习介绍,教你怎么上车
包括:文档
、视频
、代码
、作业
,四方面结合的方式进行学习,所以也能让即使缺少编码经验的在校学生、应届生或者是CRUD熟练工,都能快速加入项目进行学习。
- 课程分为:
大厂规范
、领域开发
、运营后台
、应用场景
、系统运维
,共5章34节来讲解DDD分布式系统的架构设计和实践落地。 - 只要你能认真跟着敲下来,22年的 Offer 不会便宜!真的是研发能力有差异吗,其实不是,你差的只是一个有人带着你肝的大型系统而已!
1. 学习目录
第 1 部分 大厂规范
- 第01节:大厂码农开发基础
- 第02节:需求怎么来的
- 第03节:系统架构设计
- 第04节:进入开发阶段
- 第05节:系统上线维护
第 2 部分 领域开发
- 第01节:环境、配置、规范
- 第02节:搭建(DDD + RPC)架构
- 第03节:跑通广播模式RPC过程调用
- 第04节:抽奖活动策略库表设计
- 第05节:抽奖策略领域模块开发
- 第06节:模板模式处理抽奖流程
- 第07节:简单工厂搭建发奖领域
- 第08节:活动领域的配置与状态
- 第09节:ID生成策略领域开发
- 第10节:实现和使用分库分表
- 第11节:声明事务领取活动领域开发
- 第12节:在应用层编排抽奖过程
- 第13节:规则引擎量化人群参与活动
- 第14节:门面接口封装和对象转换
- 第15节:搭建MQ消息组件Kafka服务环境
- 第16节:使用MQ解耦抽奖发货流程
- 第17节:引入xxl-job处理活动状态扫描
- 第18节:扫描库表补偿发货单MQ消息
- 第19节:设计滑动库存分布式锁处理活动秒杀
第 3 部分 运营后台
- 第01节:UI工程搭建
- 第02节:活动列表数据展示
第 4 部分 应用场景
- 第01节:搭建微信公众号网关服务
- 第02节:【作业】vue H5 大转盘抽奖
第 5 部分 系统运维
- 第01节:在云服务器部署 Docker
- 第02节:部署环境 Redis
- 第03节:部署环境 Kafka
- 第04节:部署环境 Mysql
- 第05节:部署环境 xxl-job
- 第06节:部署环境 nacos
2. 你会学到什么
- 分布式系统架构如何开发(
RPC
、MQ
、分布式任务
、分库分表
) - DDD 四层架构设计与设计模式的结合落地
- 互联网大厂的代码开发规范、需求评审、运维监控
- Docker 运维实践,环境、部署、配置、监控、日志等
3. 适宜人群
- 具备 Java 编程基础的研发人员,想提升自己的技术能力
- 希望提升编码思维,剔除到代码中的坏味道
- 有意愿成为架构师,但还处在一定瓶颈期
- 想加入大厂做码农,但总感觉找不到门路
4. 加入学习
5. 课代表作业
讲真,我遇到了一个懂我的人!
在实战项目学习中,有一个课代表,每一次分享作业都可以用精致来形容,她的学习速度超级快,也可以非常清晰的分析出每一块的流程并配上流程图,如下:
- 我也希望有更多的优秀的你,与我一起学习、成长、赚钱,22年,我们加油!
分布式抽奖秒杀系统,DDD架构设计和实现分享的更多相关文章
- Java生鲜电商平台-积分,优惠券,会员折扣,签到、预售、拼团、砍价、秒杀及抽奖等促销模块架构设计
Java生鲜电商平台-积分,优惠券,会员折扣,签到.预售.拼团.砍价.秒杀及抽奖等促销模块架构设计 说明:本标题列举了所有目前社会上常见的促销方案,目前贴出实际的业务运营手段以及架构设计,包括业务说明 ...
- 分布式发布订阅消息系统 Kafka 架构设计[转]
分布式发布订阅消息系统 Kafka 架构设计 转自:http://www.oschina.net/translate/kafka-design 我们为什么要搭建该系统 Kafka是一个消息系统,原本开 ...
- Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享
Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...
- Java生鲜电商平台-优惠券系统的架构设计与源码解析
Java生鲜电商平台-优惠券系统的架构设计与源码解析 电商后台:实例解读促销系统 电商后台系统包括商品管理系统.采购系统.仓储系统.订单系统.促销系统.维权系统.财务系统.会员系统.权限系统等,各系统 ...
- Java生鲜电商平台-电商会员体系系统的架构设计与源码解析
Java生鲜电商平台-电商会员体系系统的架构设计与源码解析 说明:Java生鲜电商平台中会员体系作为电商平台的基础设施,重要性不容忽视.我去年整理过生鲜电商中的会员系统,但是比较粗,现在做一个最好的整 ...
- Java生鲜电商平台-促销系统的架构设计与源码解析
Java生鲜电商平台-促销系统的架构设计与源码解析 说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大,也是比较复杂的系 ...
- 2017(5)软件架构设计,web系统的架构设计,数据库系统,分布式数据库
试题五(共 25 分) 阅读以下关于 Web 系统架构设计的叙述,在答题纸上回答问题1 至问题 3. [说明] 某公司开发的 B2C 商务平台因业务扩展,导致系统访问量不断增大,现有系统访问速度缓慢, ...
- Java进阶专题(十八) 系统缓存架构设计 (下)
前言 上章节介绍了Redis相关知识,了解了Redis的高可用,高性能的原因.很多人认为提到缓存,就局限于Redis,其实缓存的应用不仅仅在于Redis的使用,比如还有Nginx缓存,缓存队列等等.这 ...
- 宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程
一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背 ...
随机推荐
- Rust 总章
1.1 Rust安装 3.5 Rust Generic Types, Traits, and Lifetimes 3.6 String 与 切片&str的区别 https://openslr. ...
- Linux学习 - 文件特殊权限
一.SUID权限(只针对文件) 只有可执行的二进制程序才能设定SUID权限 命令执行者要对该程序拥有x(执行)权限 1 拥有SUID的文件 /usr/bin/passwd 2 功能: 命令执行者(其他 ...
- 【Spring Framework】Spring入门教程(五)AOP思想和动态代理
本文主要讲解内容如下: Spring的核心之一 - AOP思想 (1) 代理模式- 动态代理 ① JDK的动态代理 (Java官方) ② CGLIB 第三方代理 AOP概述 什么是AOP(面向切面编程 ...
- Mysql报错合集
目录 一.链接报错 客户端连接mysql出错 链接客户端出错 交互登陆mysql出现warning警告Using a password 导入数据到数据库报错ERROR 1050 登陆数据库提示-bas ...
- shell脚本 用户登录服务器发送钉钉提醒
一.企业微信配置 1.获取AgentId(AppID).Secret .CropID.部门ID 创建一个企业微信应用获取到AgentId(AppID).Secret 2.获取CropID,点击 &qu ...
- 20个ios登陆界面
原文:http://favbulous.com/post/1001/24-unique-ios-login-screen-showcase Eeve Evernote Food Recood Hips ...
- PMP变更流程
变更流程:
- SpringMVC 入门、请求、响应
目录 SpringMVC 概述 SSM 简介 MVC 简介 SpringMVC 简介 入门案例 Spring 技术架构 SpringMVC 基础配置 常规配置 Controller 加载控制 静态资源 ...
- SQL 注入基础
SQL注入 SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为. 本质:把用户输入的数据当作代码执行.任何和数据库产生交互的地方便有可能存在注入. SQL ...
- C++ happens-before 关系是不可传递的
P0668R4 对此进行了解释 The definition of plain happens-before became unpleasantly complicated with the intr ...