產品微服務技術討論

架構需求

Deploy需求

  1. 依現有方式deploy
  2. sit、stage、prod
  3. jenkins
  4. DB migration在app端控制不需dba

產品微服務資料結構說明

評估方式

  • 資料特性
  • Transaction
  • 維護成本
  • 資料量
  • 開發成本
  • 學習曲線
  • 使用比較

資料特性

  • 資料欄位多且包含多語系增加資料維度
  • 過半數欄位幾乎為非必填欄位,且會增加
  • 多對多的狀況多

SQL

  • 資料欄位多需拆分多個子表儲存資料
  • 欄位建立可能不一定會用到造成空間浪費或疑惑
  • 如果將欄位記錄在資料內擇會有較多關聯成本

NoSQL

  • 如果選擇寬欄式或文件式NoSQL,欄位較有彈性
  • 因為沒有關聯性所以需要依賴app層控制關聯
  • 取依賴app層控制schema完整性及差異管理

Transation

  • 產品資料非交易計錄所以要transation狀況少
  • 更新上大多以文字為主
  • 未來可能需要做位控

SQL

  • support Transation

NoSQL

  • Transation support 差

維護成本

  • Shard
  • Replica
  • Performance Tuning

SQL

  • support sharding
  • support replica
  • 需維護Index、Migration及Profile監控Query品質,資料關聯維度多時就較花時間

NoSQL

  • support sharding
  • support replica
  • 只需建立Index,最差的情況就是Table scan,所以少量資料多關聯時較有利

資料量

  • 有效產品數3,000
  • 總產品數約20,000
  • 總套餐數約77,000
  • 未來成長幅度以五倍來看及套餐靈活度來看產品數可能到100,000,套餐數約略400,000
  • 假設每個套餐下的選填資料10個語系,即為4,000,000筆
  • 假設每個產品下的描述為20個,即為8,000,000筆
  • 例:以目前的product_photo來看已有800,000筆,未來要將圖片分語系來看會以倍數成長,product_pkg_lang也是500,000筆,

SQL

  • 資料量越多關聯的速度越慢filter要index的數量會越多
  • 相關資料關聯起來單一商品可能會有二三倍以上的rows才可以取的所有資料

No SQL

  • 資料量越多只要需要filter的欄位有index查找速度會有一定水準
  • 直接查詢document本體不需要關聯直接取得大多數資料

開發成本

  • Laravel support
  • 工程師學習成本
  • 技術債

SQL

  • Laravel 內建支援ORM
  • ORM使用方式不需學習
  • 可直接下語法
  • 無技術債

NoSQL

  • Laravel視狀況需安裝套件才可ORM有些可能沒有
  • 一樣是ORM但用法有些許差異需看一下文件
  • 可直接下語法
  • 技術債為底層資料存取應用情境判斷好,反而可以享受到好處減少開發成本

學習曲線

  • 工程師需是否難以學習?
  • 工程師是否使用困難?
  • 文件完整性

SQL

  • 工程師內建SQL知識,下的好壞依工程師個人水平而定
  • 工程師透過ORM或直接寫Query都很簡單
  • 網路上都有完整的社群及文件

NoSQL

  • 需學習新的概念
  • 透過ORM使用方式與SQL類似,但進階Query時就需要學習新的Query語法
  • 網路上都有完整的社群及文件,只要是普及率高的NoSQL

使用面比較

情境一 商品語系處理

  • 一個商品可以有多個描述
  • 一個描述可以有N個語系
  • 一個描述可以被重覆使用在多個商品及套餐

查詢維度:商品 x N個描述 X N個語系(有可能變多)

資料量成長維度:N x N x N
目前處理這方面的Table有:
product_detail、product_detail_lang、product_photo、product_photo_lang、

情境二 套餐價格表

  • 一個套餐可以有N個幣別售價
  • 每天每個幣別可能會有不同的售價
  • 每天會有不同的匯率去更新所有套餐價格

更新維度:N個套餐 x N個幣別匯率 

資料量維度:N x N x 天數

情境三 商品購買規格

  • 一個套餐有N個語系
  • 每個購買規格欄位也可以有N個語系
  • 每個套餐可以自由的加入商品規格
  • 每個商品規格有分不同的型態

維度:1套餐 x N個語系 x N個購買規格 x N個規格語系 

資料量維度:N x N x N x N

情境四 位控

  • 一個套餐會對應到每天會有不同的"可販售量"
  • 每次成立訂單會扣除相對應的數量
  • 需驗證購買量 > 可販售量 訂單方可成立

討論時間

產品微服務技術架討論

By Seta Chuang

產品微服務技術架討論

  • 531