GitLab CI/CD課程35

What are Microservices?

ZONGRU Li
Aug 21, 2022

這邊大略講述微服務概念,雖然以前就懂了,但是沒整理過

  • Microservices已成為現代話雲端應用的標準
  • 而特別地GitLab CICD有針對Microservices有些特別的規劃

後面幾篇會針對微服務的CICD佈署做介紹

From Monolith to Microservices

Monolith:

  • 在微服務(Microservices)之前的架構標準是單體式(Monolith)
  • 所有的元件都集中在單一個單元上
  • 舉例有個線上購物系統,裡面有以下的程式服務
  • 1.使用者驗證
  • 2.購物車
  • 3.正式的相關LOG
  • 4.購物明細
  • 5.通知
  • 以上這些全部都收歸集中在單一個單元裡
  • 並且使用相同語言開發
  • 所有一切的開發,佈署與擴展都是以這一個單位進行
  • 也就是裡面強制限定只能單一個技術棧
  • 然後每個團隊在裡面負責不同服務(驗證,通知...如上)都必須小心不會影響到其他團隊的Code
  • 即便只是一個團隊修改了其中一個服務程式(假設只是改個通知)
  • 但是整個單元全部都要重新佈署才能生效

Monolith導致的問題:

  • 應用程式大太且太過複雜
  • 服務元件間互相糾結
  • 無法針對特定服務(ex:使用者驗證)做單一擴展,而必須只能整個單元進行擴展
  • i.e.擴展會造成額外不必要的基礎設施花費!
  • 各元件依賴的library可能會有版本互斥的問題,但是無解!只能取其一
  • Release時間拉長,因為改個小地方,其他全部可能都要重測
  • 任何modulebug都可能導致整體應用掛掉

以上問題都能透過改成微服務(Microservices)架構來解決

微服務(Microservices):

  • 也就是把應用程式拆解為比較小且獨立的應用程式
  • 但是延伸許多問題:
  • 1如何拆解原本的應用程式為微服務應用程式?
  • 2.程式碼都該放哪去?
  • 3.多少服務該建立?
  • 4.這些微服務該多大或是多小?
  • 5.甚至這些拆解後的微服務如何互相溝通?

微服務(Microservices)好處:

  • BP上來說依據業務邏輯來做拆分
  • 例如購物系統可能拆解為(User帳號系統,產品系統,購物車系統,明細系統...etc)
  • 盡量讓一個服務只為特定一件工作
  • 並且服務都各自管控,佈署,擴展
  • i.e.完全的低耦合(loosely coupled)
  • 例如只是重新佈署payment服務,就只要佈署好它就好,不用管其他服務
  • 每個服務就能有各自的版本編號,而不用遷就其他服務

微服務(Microservices)間的溝通:

  • 大部分仰賴API的呼叫方式(如payment呼叫user服務等等)
  • 並且各個服務就能有各自的技術棧(服務系統有的可以是Java,有的是GO,有的是py等等)也不會影響其他團隊或其他微服務系統運作

微服務(Microservices)造成的問題:

  • 拆解為微服務系統即變成複雜的分散式系統
  • 要設置服務間的溝通,尤其A服務呼叫B服務,但是B掛掉的時候如何處理
  • 微服務橫跨許多Server的佈署,一大堆instance,難以監控!

但是現在也越來越多工具在解決上述相關的微服務延伸問題!

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet