8

分布式抽奖秒杀系统,DDD架构设计和实现分享

 2 years ago
source link: https://segmentfault.com/a/1190000041225635
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

作者:小傅哥
博客: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个工程:

  1. Lottery:分布式部署的抽奖服务系统,提供抽奖业务领域功能,以分布式部署的方式提供 RPC 服务。
  2. Lottery-API:网关API服务,提供;H5 页面抽奖、公众号开发回复消息抽奖。
  3. Lottery-Front:C端用户系统,vue H5 lucky-canvas 大转盘抽奖界面,讲解 vue 工程创建、引入模块、开发接口、跨域访问和功能实现
  4. Lottery-ERP:B端运营系统,满足运营人员对于活动的查询、配置、修改、审核等操作。
  5. DB-Router:分库分表路由组件,开发一个基于 HashMap 核心设计原理,使用哈希散列+扰动函数的方式,把数据散列到多个库表中的组件,并验证使用。
  6. 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. 你会学到什么

  • 分布式系统架构如何开发(RPCMQ分布式任务分库分表)
  • DDD 四层架构设计与设计模式的结合落地
  • 互联网大厂的代码开发规范、需求评审、运维监控
  • Docker 运维实践,环境、部署、配置、监控、日志等

3. 适宜人群

  • 具备 Java 编程基础的研发人员,想提升自己的技术能力
  • 希望提升编码思维,剔除到代码中的坏味道
  • 有意愿成为架构师,但还处在一定瓶颈期
  • 想加入大厂做码农,但总感觉找不到门路

4. 加入学习

5. 课代表作业

讲真,我遇到了一个懂我的人!

在实战项目学习中,有一个课代表,每一次分享作业都可以用精致来形容,她的学习速度超级快,也可以非常清晰的分析出每一块的流程并配上流程图,如下:

  • 我也希望有更多的优秀的你,与我一起学习、成长、赚钱,22年,我们加油!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK