【Community open camp 2016】.NET + Windows Container, 微服務架構設計 - Andrew Wu

Channel 9

.NET + Windows Container, 微服務架構設計

主講:吳剛志

微服務架構

  • 能獨立自主運作(獨立部署,升級,維護,改寫)
  • 包含程式(code)的執行,與狀態(state)
  • 為服務之間,必須透過定義好的介面溝通(API)
  • 單一服務發生故障,系統仍能保持一致性與可用性(故障隔離)

為什麼要採用微服務

  • 確保系統架構的擴充性,不會成會將來營運的瓶頸
  • 提升資源的使用率,降低營運成本
  • 故障隔離,單一服務失敗,不會讓整個系統掛掉
  • 讓數個小團隊,個別負責服務的開發與維運
  • 持續創新,每個服務可以允許使用不同的開發技術與框架

stackoverflow 也是採用微服務

如何將系統改為微服務架構的步驟?

檢視現有系統,定義服務的邊界,分割成數個獨立的服務

系統擴充的三個面相(依需求切割服務)

  • 複製同樣的服務
  • 垂直分割:功能導向,將不同功能進行切割
  • 水平分割:將使用者導向不同的分流,例如不同區域,切不同的partition

透過基礎服務自動化工具,來管理及部署服務:Container

  • Infrastructure as code:開發團隊越來越掌握主權
  • 採用不可變的 server(immutable server 拋棄式 )來部署服務:base image 鏡像
  • 採用 container 來管理服務

使用容器技術(Container)

  • Dock is a shipping container system for code
  • 用統一規格封裝為服務,統一部署與管理(Infrastructure as code)
  • Container image 被產生,統一放到儲存褲
  • 部屬時可以直接使用
  • 將 app 封裝成 Container image
  • Container 被產生之後就不允許再修改,以部屬的服務若要異動,唯一的方式是重新 BUILD / SHIP / RUN

實際案例分享:如何『微服務化』人才發展管理系統?

先找出適合抽出來做微服務的部分

實作上的困難

  • 維護困難:大型單體式 (Monolithic Apps) 開發、維護、更新、測試都很困難。
  • 擴充困難:由於服務無法分割,只能整體進行擴充,複雜度高。
  • 雲端化困難:難以朝向雲端化發展 (我們想將部分服務切割出來,改由原廠直接從雲端提供服務)。
  • 佈署困難:Container 技術能解決佈署問題,但是 Docker 必須架構在 Linux 上,.NET Developer 難以直接使用。

改版開發步驟

  • 切割:找出系統的邊界,挑出適合切割出獨立的微服務區塊
  • 介面:定義 API , PROTOCOL, 對應的 SDK, 版本相容性與安全性原則
  • 架構安全:服務之間的安全機制,採用授權 TOKEN, JSON + 數位簽章(AES)•
  • 框架:決定服務要採用的開發技術、框架、執行環境
  • 重構:用重構 + 單元測試,逐步改善原本的系統架構,切割出獨立服務
  • 測試:佈署容易,可局部更新,可隨時使用真實的環境測試
  • 追蹤:規劃統一的 LOG 機制,按操作序號追蹤,解決跨服務問題排除
  • 監控:服務運作狀況,服務效能表現,服務失敗後的處理原則
  • 壓測:了解單一服務效能瓶頸,與運作規模的上限

Windows Container

  • 支援所有 Windows Application
  • 安全相容 Docker API 的 Windows 版本 Container Engine
  • 支援進階的 Hyper-V Container,可以做出更高階的隔離等級

參考資料

Session 錄影:Channel 9

Demo Projects, Power Point Files Downloads

安德魯的部落格(Facebook粉絲團

安德魯的部落格(文章)

Building Microservices 歐禮萊