Slide 1

Slide 1 text

KKBOX 後端工程師 Hash@MOPCON 單體式系統邁向微服務

Slide 2

Slide 2 text

單體式系統 邁向微服務 單體式系統 Monolithic 02 01 03 04 微服務系統 Microservices 部署 Deployment 案例分享 Case Study

Slide 3

Slide 3 text

小故事

Slide 4

Slide 4 text

KKBOX 誒誒,可以幫我升級一下 kkbox-search 套件 嗎? Channels Direct Message 主管 + + 好啊~ 感謝幫忙 hash rainycheng hash Monday, September 23th rainycheng 9+ 1

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

KKBOX Channels Direct Message 主管 + + 誒誒,這個套件是不是要安裝 opencc 在主機上面? rainycheng Friday, September 27nd rainycheng 9+ 9+ ... 你又沒有說... 系統噴 Error 才發現 rainycheng 對啊,機器沒有裝唷? hash 喔喔拍謝忘了說,麻煩你請處理一下 hash … rainycheng

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

KKBOX Channels Direct Message 主管 大人 + + Friday, October 3nd 主管 Q 9+ 9+ 安安,我想要升級 CMS 主機 PHP 版本到 7.2 hash 好的,知道了 hash Hmm… 這個主機上面有不少服務運作,需要跟其他 Project owner 確認完才可以動手唷 主管 Q 天真可愛 / CQD / wesleyliao

Slide 9

Slide 9 text

KKBOX Channels Direct Message 主管 + + Friday, October 3nd rainycheng 9+ 9+ 這很麻煩耶,需要花不少時間,你很急嗎? rainycheng 不好意思想問一下 xxx 專案是否可以升級上 PHP 7.2 呢? hash 是不會但是希望可以盡快升級(汗... hash 我抽空處理,不保證什麼時候可以完成唷 rainycheng

Slide 10

Slide 10 text

有沒有很眼熟呢?

Slide 11

Slide 11 text

單體式系統 (Monolithic) 01

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

單體式系統缺點 異動套件 / 設定檔 不得隨意異動系統伺服器 上的套件或是設定檔 注意相依性 任何套件的升級,都需要 特別注意這個套件所帶來 的相依性 建置成本高 須顧及應用程式所有 相依性進行建置

Slide 16

Slide 16 text

微服務 02

Slide 17

Slide 17 text

去耦合 將服務切分成獨立的 個體,服務獨立運作 微服務 將單體式系統拆成多個小服務 這些服務都會透過定義好的介面 進行溝通 介面 服務與服務間僅有 介面相依 降低發佈風險 一次發佈一個服務

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

舒服 乾淨 清楚 明瞭

Slide 20

Slide 20 text

微服務真美好

Slide 21

Slide 21 text

注意 Latency 上升

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

注意 Latency 上升 Debug 困難

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

注意 Latency 上升 傳輸不可靠 Debug 困難 主機數成長

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

■ 重複的程式碼 ■ 相依性過高 ■ 效能瓶頸 界定服務邊界

Slide 28

Slide 28 text

部署 03

Slide 29

Slide 29 text

Gitlab Open Source CI Third Party Github * V Gitlab V V V BitBucket V V

Slide 30

Slide 30 text

1. 自動化檢查 2. 透過 Docker 進行不同版本的測試 3. 確保每次的 Merge 都是綠燈 Gitlab CI Installation Check Testing Deploy CI / CD

Slide 31

Slide 31 text

.gitlab-ci.yml Gitlab CI

Slide 32

Slide 32 text

Sending Merge Request Develop Continuous Integration Review & Merge Request Continuous Deployment Run CI Pipeline 1. Install Project 2. Unit Test Build Docker Image Docker Hub / Private Docker Registry

Slide 33

Slide 33 text

Live Demo

Slide 34

Slide 34 text

案例分析 04

Slide 35

Slide 35 text

去耦合

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

Project 1 kkbox-search v1.x v1.x Project 2 kkbox-search v1.x Project 3 kkbox-search v1.x

Slide 38

Slide 38 text

Project 1 kkbox-search v1.x Project 2 kkbox-search v1.x Project 3 kkbox-search v1.x v1.x v2.x

Slide 39

Slide 39 text

Project 1 kkbox-search v2.x Project 2 kkbox-search v2.x Project 3 kkbox-search v2.x v1.x v2.x

Slide 40

Slide 40 text

Project 1 Project 2 Project 3 API Search kkbox-search v1.x v1.x v2.x

Slide 41

Slide 41 text

Project 1 Project 2 Project 3 API Search kkbox-search v2.x v1.x v2.x

Slide 42

Slide 42 text

Docker 與微服務帶來的方便

Slide 43

Slide 43 text

Server A Ubuntu 16.04 + PHP 5.6 Project A Project A Project A Project A Project A Project A Server B Ubuntu 16.04 + PHP 5.6 Server C Ubuntu 16.04 + PHP 5.6 Server D Ubuntu 16.04 + PHP 7.2 Server E Ubuntu 16.04 + PHP 7.2 Server F Ubuntu 16.04 + PHP 7.2 Project B Project B Project B

Slide 44

Slide 44 text

HA Proxy Ubuntu 16.04 + PHP 5.6 Project A Cloud Ubuntu 16.04 + PHP 5.6 Project A Ubuntu 16.04 + PHP 5.6 Project A Ubuntu 16.04 + PHP 5.6 Project B Ubuntu 16.04 + PHP 5.6 Project B Ubuntu 16.04 + PHP 5.6 Project B

Slide 45

Slide 45 text

HA Proxy Ubuntu 16.04 + PHP 7.2 Project A Cloud Ubuntu 16.04 + PHP 7.2 Project A Ubuntu 16.04 + PHP 7.2 Project A Ubuntu 16.04 + PHP 5.6 Project B Ubuntu 16.04 + PHP 5.6 Project B Ubuntu 16.04 + PHP 5.6 Project B

Slide 46

Slide 46 text

單體式系統 邁向微服務 單體式系統 Monolithic 02 01 03 04 微服務系統 Microservices 部署 Deployment 案例分享 Case Study

Slide 47

Slide 47 text

你們也有這些問題嗎?

Slide 48

Slide 48 text

Does anyone have any questions? [email protected] Thank you!