SaaS 電商設計 (九) 動態化且易擴展的實現購物車底部彈層(附:一套普適的線上功能切量的發布方案)

目錄

  • 一.背景
    • 1.1 業務背景
    • 1.2 技術負債
  • 二.技術目標
  • 三.方案設計
    • 3.1 解決移動端頻繁發版
      • 3.1.1 場景分析
      • 3.1.2 技術方案
    • 3.2 減少后端壞味道代碼&無法靈活擴展問題
      • 3.2.1 通過抽象接口完成各自單獨樓層渲染邏輯
      • 3.2.2 通過配置能力做到部分字段可配
  • 四.升級上線(普適于高并發大流量的業務場景的功能上線更新)

專欄系列

-SaaS 電商設計 (一) 如何設計一套適應多規格的商品服務
-SaaS 電商設計 (二) 私有化部署-緩存中間件適配
-SaaS 電商設計 (三) 電商黃金流程(商詳,購物車,提單)梳理,持續更新(建議收藏)
-SaaS 電商設計 (四) 談一談電商系統高并發多耦合上下游的系統壓測怎么做
-SaaS 電商設計 (五) 私有化部署-實現 binlog 中間件適配(附源碼)
-SaaS 電商設計 (六) 實現 id 生成器本地化生產 (附源碼)
-SaaS 電商設計 (七) 利用 Spring 擴展點 ImportBeanDefinitionRegistrar 實現 toB 系統對接(附源碼)

-SaaS 電商設計 (八) 直接就能用的一套電商商品池完整設計方案(建議收藏)

一.背景

購物車是電商交易流程中的關鍵模塊,承上啟下,作為導購環節的最后一環,為用戶在多個場景下進行購物決策提供便利。除了支持用戶對自己的購物車進行常規的增刪改查操作外,購物車還提供了豐富的功能,如湊單、換購、手動換促銷、自動切換最優促銷、自動領券結算、設置常購商品、篩選搜索等,以提高用戶的操作效率和決策能力。此外,購物車還具備一系列營銷能力,包括砸京蛋、跨店滿減、每日一促、無貨推薦和營銷氛圍增強等,以增加用戶的購買欲望和促進銷售額的增長。

????如上圖是某電商購物車的底部一個彈層功能,提供的是當前勾選商品后具體結算金額的明細.如:優惠券優惠明細,plus95折明細.plus會員購物返利等.是一個用戶結算的工具.

1.1 業務背景

????話不多說,書歸正傳.從開頭圖例來看,在具體研發過程中其實是存在很多種底部彈層的場景.目前是業務場景玩法越來越多的背景下,迭代速度也日漸頻繁.對于后端技術同學不得不在這些業務插入諸多的樓層代碼去補齊業務場景邏輯.而且通過增加字段的方式每次的變更都需要聯合前后端同時的迭代開發,考慮到 app 端開發發版節奏相對低頻且成本較大.存在業務訴求和開發迭代周期之間的 gap .能否存在僅后端發布解決迭代更新的可能?而且盡可能少的改動去完成迭代開發?

底部彈層的業務場景迭代頻率較高

1.2 技術負債

????在這些頻繁的業務場景迭代過程中,研發側不得不更緊湊的迭代周期去完成指定的迭代任務.導致不得不在歷史諸多代碼中龍飛鳳舞,后來者更是不敢錯過一行,小心翼翼找尋代碼,更新改動.長此以往愈演愈烈,這批代碼就成為不可被替代開發者之代碼.不用說開閉原則,優雅維護起來也變得遙不可及.如下是其中一個小類,關注與左下角. 5k+ 行.

????每每服務端更新相應邏輯, app 移動端不得不跟隨改動,發布集成,更新版本.周期較長.

長期的版本更新,代碼維護性較差
不可擴展的更新,導致移動端跟隨發布

二.技術目標

  • 在高頻的業務迭代節奏中盡可能去低改動去完成業務目標
  • 技術實現盡可能可擴展,利于維護(滿足開閉原則)
  • 鑒于移動端發版周期長.盡可能移動端不改動,不迭代.即減少聯調成本也利于快速排查問題.

三.方案設計

3.1 解決移動端頻繁發版

3.1.1 場景分析

鑒于以上的一個公共特征,如上分析我們看起來可以抽象一個類 floor 去完成每一行的渲染,每一行的副標題也是同樣可以繼續復用.以此來解決每次新增場景,同步新增字段來處理的邏輯.這樣的話除了共減場景的渲染其他看起來是一致的.所有的渲染移動端可以通過遍歷 floor 的數組去完成整個彈層的渲染.這樣一來的話,移動端的工作就變得非常簡單,僅僅開發一次看起來就解決了問題.這樣就解決了我們的第三個技術目標.完成移動端免除跟隨發版的困擾.具體如下:

3.1.2 技術方案

其中 sort 字段是為了支持產品的一些排序訴求.這里就比較簡單了.通過實現 Comparable 接口即可.具體渲染后是這樣

{"floorDetails": [{"floorItemCode": "spze","floorItemName": "商品總額","floorItemPrice": "¥20.90","styleExt": ["bold"]},{"floorItemCode": "lj","floorItemName": "立減","floorItemPrice": "-¥5.00"},{"floorItemCode": "coupon","floorItemName": "優惠券","floorItemPrice": "-¥6.00","floorItemSubName": "已領券 -¥6.00"},{"floorItemCode": "plus95","floorItemName": "PLUS專享95折","floorItemPrice": "-¥1.04","floorItemSubName": "本月剩余優惠額度 ¥1,000.00"}]
}

如上的數據結構 app 端就可以通過數組遍歷的形式來獲取指定樓層渲染的邏輯.在后端動態增加item時,也盡可能的做到少改動,甚至不改動即可做到支持.解決我們第一個技術目標:在高頻的業務迭代節奏中盡可能去低改動去完成業務目標

3.2 減少后端壞味道代碼&無法靈活擴展問題

3.2.1 通過抽象接口完成各自單獨樓層渲染邏輯

如上我們抽象一個 FloorBuilder 類接口,通過具體的 FloorItemCode 來進行尋找指定的類進行渲染.這樣一來每個 code 對應的渲染和獲取邏輯都能夠在各自的類中,避免都在同一個類中書寫大量邏輯.對于修改和新增來說,后來的同學去追尋歷史邏輯的成本相對較低.

3.2.2 通過配置能力做到部分字段可配

如上通過結合配置中間件的能力,做到部分字段可配置,下發配置后可以通過遍歷所有的配置.通過配置code來獲取指定的策略類來完成指定樓層渲染.解決我們第二個技術目標:技術實現盡可能可擴展,利于維護(滿足開閉原則)

四.升級上線(普適于高并發大流量的業務場景的功能上線更新)

如上是大概的技術方案,整體的迭代過程中僅僅是完成了功能的改造.能感受到整體的改動還是非常大的.尤其是作為技術側的一個優化.再加上本身是一個黃金流程中非常重要的一環.本身來說穩定性是第一位的.所以這里關于升級發布的流程也做一個大致的介紹.要知道,如此高并發的場景出了一個問題,不用問就是要被拖入**“廣進”**的,小伙子你也不想的吧.

上線第一要義:穩定穩定還是穩定.穩定壓倒一切.到底怎么做.

  • 1.第一要支持灰度
  • 2.最好要有支持版本控制
  • 3.最次最低要支持開關降級,實在不行下線相應功能完成動態完成問題功能下線

總結起來就是首先要小流量試跑,出問題要有后路.給程序留后路也是給目前經濟不景氣的自己留后路哈.兄弟們.話不多說,一圖勝千言.上圖.

在這里插入圖片描述

總體上一個非常普適的高流量高并發通用的線上發布功能流程.略去了一些細節,大體上的思路還是能看的到.具體介紹下.

  • step1:第一個是開發功能(含分支管理的流程)

稍微擴展下.大廠的場景基本上如此.
稍有不同的是,貓廠是各個feature branch 合并動作是自動通過aone來控制的,并且合并master的動作是整體的上線流程完成之后自動通過aone完成.
狗廠的流程目前各個feature branch 手動合并到本次一個vxx branch ,最后通過合并到master來進行線上部署.

ps:貓廠整體流程化還是相對來說要更加自動化一些.

  • step2:完成預發環境的驗證

這里有兩個點.
– 合并后的 vxx branch 功能合集驗證,比如說本次的技術樓層優化.
– 本次功能代碼鏈接線上配置,數據庫,服務等預線上環境驗證.

這里如果還涉及到一些接口的改造,其實還需要有壓力驗證,這里就沒有體現

  • step3:上線流程前的一個review
    對于本次的話,技術優化可能相對來說比較大一個改造.通常盡量是做到組內的一次上線前的review,確定切量范圍,確定版本控制,確定回滾方案,確定降級方案

-step4:上線過程中的流量切換

流量切換前一定要保證流量切掉后,剩余的機房能夠支持現有日常流量這個就要大家各自參考各自系統目前的水位情況以及日常qps了.

  1. 流量切換到001機房,完成002,003機房部署以及部署后的單機驗證.np掛載.掛載后的vip驗證.

  2. 流量切換到002機房,003機房.摘除001機房流量.這樣保持盡量長的時間(12h),利用線上的用戶流量做一次灰度流量驗證.(一般的功能驗證),其實如果是較大的功能且功能較大,可以在整體之前加一個內部pin驗證.對應倒數第二組的圖內容.

  3. 步驟2的過程中沒有任何問題,此時001機房已經摘量,可以繼續完成鏡像部署.還是同樣的流程,完成單機驗證,多集群部署,np掛載,vip驗證.也就是最后一組圖中的內容.

贈人玫瑰 手有余香 我是柏修 一名持續更新的晚熟程序員
期待您的點贊,關注加收藏,加個關注不迷路,感謝
您的鼓勵是我更新的最大動力
↓↓↓↓↓↓

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2314576

? 通用計算機啟動過程 1??一個基礎固件:BIOS 一個基礎固件:BIOS→基本IO系統,它提供以下功能: 上電后自檢功能 Power-On Self-Test,即POST:上電后,識別硬件配置并對其進行自檢&#xff0c…

學習JAVA的第十二天(基礎)

算法 算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統的方法描述 解決問題的策略 機制。 查找算法 基本查找(順序查找) 關鍵: 從0索引開始依次向…

學習:吳恩達:什么是神經元?神經網絡如何工作?

學習-吳恩達《AI for everyone》2019 深度學習非技術解釋 第2部分 可選.zh_嗶哩嗶哩_bilibili 深度學習Deep learning 人工神經網絡Artificial Neural network 什么是神經網絡? 只有一個神經元 4個神經元的神經網絡 神經網路的絕妙之處 神經網路的絕妙之處就在…

ctf_show筆記篇(web入門---信息收集)

目錄 信息收集 1-2:查看源代碼 3:bp抓包 4:robots.txt(這個文件里會寫有網站管理者不想讓爬蟲的頁面或其他) 5:網站源代碼泄露index.phps 6:同樣也是源碼泄露,(拿到…

Java快讀

java的快讀 (1)BufferedReader BufferedReader br new BufferedReader(new InputStreamReader(System.in));//定義對象String[] strings br.readLine().split(" ");//讀取一行字符串,以空格為分隔轉化為字符串數組int n Integer.parseInt(strings[0])…

k8s分布式圖床(k8s,metricsapi,vue3+ts)

image-manage 圖像管理應用 圖像管理應用提供了一個方便管理圖片的平臺,支持單機和Kubernetes集群部署。請確保您至少擁有一個MySQL數據庫和一個Redis數據庫,以及一個至少為Kubernetes 1.29版本的集群(如果選擇集群部署)。 文檔…

PCL1.14.0安裝、使用教程

寫在前面 本文內容 本文是PCL1.14.0在Windows下的安裝、使用教程; PCL、Open3D其他版本的編譯和使用相關教程見 各個版本的Open3D、PCL的編譯、使用教程平臺/環境 windows11(windows10): visual studio 2022;cmake 3.22; VsCode轉載請注明出處&#xff…

http和https的區別是什么?

–前言 傳輸信息安全性不同、連接方式不同、端口不同、證書申請方式不同 一、傳輸信息安全性不同 1、http協議:是超文本傳輸協議,信息是明文傳輸。如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息。 2、h…

關于django makemigrations/migrate在生成數據表上遇到的一些問題

當你刪除了生成的 migration 文件夾,將數據庫從 SQLite 切換到 MySQL,并且在執行 makemigrations 命令時顯示沒有變化,同時 MySQL 中沒有生成表,可能是由于以下原因造成的: Django遷移系統的工作方式:Djang…

排序(3)——直接選擇排序

目錄 直接選擇排序 基本思想 整體思路(升序) 單趟 多趟 代碼實現 特性總結 直接選擇排序 基本思想 每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的…

軟考 系統分析師系列知識點之詳細調查(3)

接前一篇文章:軟考 系統分析師系列知識點之詳細調查(2) 所屬章節: 第10章. 系統分析 第2節. 詳細調查 在系統規劃階段,通過初步調查,系統分析師已經對企業的組織結構、系統功能等有了大致的了解。但是&…

力扣203移除鏈表元素

題目: 203. 移除鏈表元素 給你一個鏈表的頭節點 head 和一個整數 val ,請你刪除鏈表中所有滿足 Node.val val 的節點,并返回 新的頭節點 。 1,設置一個頭節點,統一操作。 2,這里是用p查找,但是…

BUUCTF---數據包中的線索1

1.題目描述 2.下載附件,是一個.pcap文件 3.放在wireshark中,仔細觀察數據流,會發現有個叫fenxi.php的數據流 4.這條數據流是http,且使用GET方式,接下來我們使用http.request,methodGET 命令來過濾數據流 5.在分析欄中我們追蹤htt…

查看端口占用命令

fuser 8080/tcp netstat -tuln | grep 8080 lsof -i:8080 ss -tuln | grep 8080

在Linux上使用通用二進制包安裝MySQL

下載安裝包 MySQL Community Downloads 安裝依賴 mysql 數據目錄初始化及服務啟動階段依賴libaio,檢測是否已安裝libaio dnf install libaio解壓安裝 ## 創建用戶組 groupadd mysql ## 創建用戶 useradd -r -g mysql -s /bin/false mysql ## 解壓安裝包 tar xv…

數據挖掘:航空公司的客戶價值分析

需求分析 理解并掌握聚類分析方法,掌握數據的標準化,掌握尋找最佳聚類數,掌握聚類的繪圖,掌握聚類分析的應用場景。 系統實現 實驗流程分析 借助航空公司數據,對客戶進行分類對不同類別的客戶進行特征分析&#xf…

IEEE754標準的c語言闡述,以及幾個浮點數常量

很多年前,調研過浮點數與整數之間的雙射問題: win7 intel x64 cpu vs2013 c語言浮點數精度失真問題 最近重新學習了一下IEEE754標準,也許實際還有很多深刻問題沒有被揭示。 計算機程序設計藝術,據說這本書中也有討論。 參考&…

電商數據分析13——電商平臺退貨率分析與降低策略

目錄 寫在開頭1. 退貨率分析的重要性1.1 退貨現象的影響1.2 退貨數據的收集與分析 2. 數據分析揭示的主要退貨原因2.1 產品描述不準確2.2 物流配送問題2.3 產品質量問題 3. 基于數據分析的退貨率降低策略3.1 優化產品描述和圖片3.2 改進物流配送服務3.3 加強質量控制和售后服務…

抖音視頻批量采集軟件|視頻評論下載工具

在日常工作中,需要頻繁下載抖音視頻,但逐個復制分享鏈接下載效率太低?別擔心!我們推出了一款專業的抖音視頻批量采集軟件,基于C#開發,滿足您的需求,讓您通過關鍵詞搜索視頻并自動批量抓取&#…

力扣每日一題 受限條件下可到達節點的數目 DFS

Problem: 2368. 受限條件下可到達節點的數目 文章目錄 思路復雜度Code 思路 &#x1f468;?&#x1f3eb; 靈神 復雜度 時間復雜度: O ( n ) O(n) O(n) 空間復雜度: O ( n ) O(n) O(n) Code class Solution {int ans 0;boolean[] set;List<Integer>[] es;publ…