SlideShare a Scribd company logo
探索 .NET 新世界
.NET Conf
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
https://ruddyblog.wordpress.com/2017/10/27/看見全貌/
https://medium.com/how-gipi-learn/1111-system-reliability-559364b5591d
http://martinfowler.com/bliki/images/microservice-verdict/productivity.png
進行重構的最佳時機
關鍵: 如何加速團隊順利的轉移?
整合
取代
系統設計規範
挑戰 #3
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
核心架構設計
決定: 維運方式 決定: 開發方式
系統運作規範
服務部署 /
維運管理
開發框架 /
服務開發
既有系統 (階段性轉移)
https://www.12factor.net
https://kknews.cc/zh-tw/tech/22k6ke.html
artifact manager
service catalog
service discovery
config management
artifact manager
service discovery
service registry service discovery
configuration management
service discovery
integration
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
https://zh.wikipedia.org/wiki/依赖反转原则
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
RabbitMQ Implementations NATS Implementations NATS Streaming Implementations
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
https://github.com/91app
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
(Singleton, 來自 Host, 識別實體環境)
(Scoped, 來自 Request, 識別個人化 & 多租戶的環境)
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
Host Info
(InfraContext)
Runtime Info
(TrackContext)
Config Data
(IConfigManager)
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
Host Info
(InfraContext)
Runti
(Track
HostBuilder.UseNineYiInfra();
把自己也注入正確的 scope
Host 本身應該適時的切換對應的 Scope。
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-3.0#webroot
InfraContext
(你在哪個環境上?)
TrackContext
(你是誰?)
Config Source
(整個環境的設定值)
開發商業邏輯時,可以直接取用上述的資訊。
環境(市場)、識別資訊(客戶、使用者)、個人化的組態設定,都已經被
DI 與 SDK 做好抽象化的隔離了。
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
為91APP量身訂做: 階層式 configuration
Global Region Market Shop
Global Settings
Schema
Comments
Regional Default
(Global)
ap-northeast-1
ap-southeast-1
TW
xxx (market02)
HK (market03)
9527
9528
組態 (configuration) 的原始檔目錄結構,以方便管理為設計目標,團隊分工優化為
第一優先。目錄階層直接對應 Global / Region / Market / Shop 四層繼承階層。
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
https://docs.microsoft.com/zh-tw/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.0
Middleware in ASP .NET Core
https://wakeupandcode.com/middleware-in-asp-net-core/
透過 Middleware, 從
HTTP headers 將正確的
TrackContext 注入 scope.
架構規範:
authorization: bearer xxxxxxxxxxxxx
x-request-id: xxxxxxxxxx
透過 Middleware, 從
TrackContext 建立正確的
CultureInfo
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
需要專屬 Load Balancer,
也需要人工維護內部 DNS records
所有程序都整併在 Service 啟動
時期自動完成。維運負擔降到最低
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
VIP
VIP
NORMAL
VIP
NORMAL
NORMAL
NORMAL
QA-TEST
NORMAL
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
ENV:
CONFIG_SOURCE = …
MARKET = …
…
Tags:
- CONFIG_SOURCE
- MARKET
- ENVIRONMENT: PROD | STAGING
- USAGE_HINTS
- PUBLIC_KEY
由 infra team 負責指派
(透過 Azure / AWS VM 提供的 metadata service)
由 provision script 轉移至 OS 的環境變數
APPLICATION (CODE)
Core SDK
SERVICE
BFF
Service
Registry
按照規範開發的服務,可以大幅降低維運的成本,提升維運的效率。
大部分的維運作業,只需要透過開關機就該(能)完成。
Design For Operation, 是開發團隊降低 (自己) 維運負擔的最佳手段。
CI
(AM / CM)
Core SDK
Core SDK
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
Service A Service B
InfraContext
TrackContext
HttpClient*
架構規範:
authorization: bearer xxxxxxxxxxxxxxx
x-request-id: ………..………..
InfraContext
<Middleware>
TrackContext
架構規範:
authorization: bearer xxxxxxxxxxxxxxx
x-request-id: ………..………..
Service A Service B
InfraContext
TrackContext
MessageClient*
InfraContext
MessageWorker
TrackContext
架構規範:
authorization: bearer xxxxxxxxxxxxxxx
x-request-id: ………..………..
架構規範:
authorization: bearer xxxxxxxxxxxxxxx
x-request-id: ………..………..
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
https://docs.microsoft.com/zh-tw/dotnet/standard/net-standard
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
特別感謝

More Related Content

What's hot (20)

91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps
Andrew Wu
 
API Token 入門
API Token 入門API Token 入門
API Token 入門
Andrew Wu
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
Toru Makabe
 
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
Alan Tsai
 
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
Shuntaro Saiba
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
Philip Zheng
 
微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue
Andrew Wu
 
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルエンジニア通信
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
태준 문
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
Yuji Kubota
 
.NET Conf 2018 - Message Queue Based RPC
.NET Conf 2018 - Message Queue Based RPC.NET Conf 2018 - Message Queue Based RPC
.NET Conf 2018 - Message Queue Based RPC
Andrew Wu
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
國昭 張
 
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu
Andrew Wu
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
 
91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps
Andrew Wu
 
API Token 入門
API Token 入門API Token 入門
API Token 入門
Andrew Wu
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
Toru Makabe
 
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
Alan Tsai
 
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
Shuntaro Saiba
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
Philip Zheng
 
微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue
Andrew Wu
 
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルエンジニア通信
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
태준 문
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
Yuji Kubota
 
.NET Conf 2018 - Message Queue Based RPC
.NET Conf 2018 - Message Queue Based RPC.NET Conf 2018 - Message Queue Based RPC
.NET Conf 2018 - Message Queue Based RPC
Andrew Wu
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
國昭 張
 
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu
Andrew Wu
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
 

Similar to 大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計 (11)

深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabric深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabric
John Chang
 
智慧系統服務研究 永鑫 V2
智慧系統服務研究 永鑫 V2智慧系統服務研究 永鑫 V2
智慧系統服務研究 永鑫 V2
Lawrence Huang
 
IBM开放云架构
IBM开放云架构IBM开放云架构
IBM开放云架构
Li Yi
 
IBM PureFlex (Traditional Chinese)
IBM PureFlex (Traditional Chinese)IBM PureFlex (Traditional Chinese)
IBM PureFlex (Traditional Chinese)
Jerry Huang
 
Big Data Technology - Cloud Computing
Big Data Technology - Cloud ComputingBig Data Technology - Cloud Computing
Big Data Technology - Cloud Computing
Ren-Hao (PAN) Pan
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
Paul Chao
 
Windows Azure Developer Day - WAMS
Windows Azure Developer Day - WAMSWindows Azure Developer Day - WAMS
Windows Azure Developer Day - WAMS
Jeffray Huang
 
了解集群
了解集群了解集群
了解集群
Feng Yu
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework
國昭 張
 
面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立
Dahui Feng
 
20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)
20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)
20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)
Chris Huang
 
深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabric深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabric
John Chang
 
智慧系統服務研究 永鑫 V2
智慧系統服務研究 永鑫 V2智慧系統服務研究 永鑫 V2
智慧系統服務研究 永鑫 V2
Lawrence Huang
 
IBM开放云架构
IBM开放云架构IBM开放云架构
IBM开放云架构
Li Yi
 
IBM PureFlex (Traditional Chinese)
IBM PureFlex (Traditional Chinese)IBM PureFlex (Traditional Chinese)
IBM PureFlex (Traditional Chinese)
Jerry Huang
 
Big Data Technology - Cloud Computing
Big Data Technology - Cloud ComputingBig Data Technology - Cloud Computing
Big Data Technology - Cloud Computing
Ren-Hao (PAN) Pan
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
Paul Chao
 
Windows Azure Developer Day - WAMS
Windows Azure Developer Day - WAMSWindows Azure Developer Day - WAMS
Windows Azure Developer Day - WAMS
Jeffray Huang
 
了解集群
了解集群了解集群
了解集群
Feng Yu
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework
國昭 張
 
面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立
Dahui Feng
 
20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)
20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)
20090605 行動雲端運算創新應用趨勢探索 大廠觀察(上)
Chris Huang
 
Ad

大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計

Editor's Notes

  • #6: https://www.hbrtaiwan.com/article_content_AR0006633.html?utm_source=facebook&utm_medium=social&utm_campaign=201802fb
  • #10: 系統運作規範: 系統如何部署? 系統如何互相溝通? 系統如何監控與追蹤? 系統如何維運? (改變組態、改變規模) 如何設計,就決定如何維運與開發。DevOps 是一體化的,你想要怎麼維運,在設計時就要思考。 Design (developer) for operation Operation support developer
  • #11: Build Once, Binary To AM, Deploy from AM ( x N ) EX: Docker-Compose.YML Store config in “ENVIRONMENT” -- CI / CD / CD -- Dynamic IP / PORT with Service Discovery, Use RP / APIGW to publish -- Self Management, Just Start / Stop VM or Containers Infra As Code -- --
  • #27: Currently: Node.JS + Containers (via docker registry) Future: .NET tools (via NuGet)
  • #32: What's a host? A host is an object that encapsulates an app's resources, such as: Dependency injection (DI) Logging Configuration IHostedService implementations When a host starts, it calls IHostedService.StartAsync on each implementation of IHostedService that it finds in the DI container. In a web app, one of the IHostedService implementations is a web service that starts an HTTP server implementation. The main reason for including all of the app's interdependent resources in one object is lifetime management: control over app startup and graceful shutdown. In versions of ASP.NET Core earlier than 3.0, the Web Host is used for HTTP workloads. The Web Host is no longer recommended for web apps and remains available only for backward compatibility.
  • #35: 修改設定十,目錄結構以團隊分工優化為第一優先。因此目錄階層為 /{module}/{region} 為主
  • #44: Client Side Disco