分散式抽獎秒殺系統,DDD架構設計和實現分享

小傅哥發表於2022-01-05

作者:小傅哥
部落格: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年,我們加油!

相關文章