Upgrade to Pro — share decks privately, control downloads, hide ads and more …

單體式服務邁向微服務 @ MOPCON 2019

Hash Lin
October 19, 2019

單體式服務邁向微服務 @ MOPCON 2019

微服務的興起,透過微服務可以改善現有系統架構上的問題,是什麼原因讓 KKBOX 開始使用微服務?又是如何透過容器達到快速部屬與管理的,讓我們一探究竟。

Hash Lin

October 19, 2019
Tweet

More Decks by Hash Lin

Other Decks in Technology

Transcript

  1. KKBOX 後端工程師 [email protected]
    單體式系統邁向微服務

    View Slide

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

    View Slide

  3. 小故事

    View Slide

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

    View Slide

  5. View Slide

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

    rainycheng

    View Slide

  7. View Slide

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

    View Slide

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

    View Slide

  10. 有沒有很眼熟呢?

    View Slide

  11. 單體式系統 (Monolithic)
    01

    View Slide

  12. View Slide

  13. View Slide

  14. View Slide

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

    View Slide

  16. 微服務
    02

    View Slide

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

    View Slide

  18. View Slide

  19. 舒服
    乾淨 清楚 明瞭

    View Slide

  20. 微服務真美好

    View Slide

  21. 注意
    Latency 上升

    View Slide

  22. View Slide

  23. 注意
    Latency 上升
    Debug 困難

    View Slide

  24. View Slide

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

    View Slide

  26. View Slide

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

    View Slide

  28. 部署
    03

    View Slide

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

    View Slide

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

    View Slide

  31. .gitlab-ci.yml
    Gitlab CI

    View Slide

  32. 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

    View Slide

  33. Live Demo

    View Slide

  34. 案例分析
    04

    View Slide

  35. 去耦合

    View Slide

  36. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  42. Docker 與微服務帶來的方便

    View Slide

  43. 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

    View Slide

  44. 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

    View Slide

  45. 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

    View Slide

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

    View Slide

  47. 你們也有這些問題嗎?

    View Slide

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

    View Slide