SlideShare a Scribd company logo
1 of 62
探索 .NET 新世界
.NET Conf
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
核心架構設計
決定: 維運方式 決定: 開發方式
系統運作規範
服務部署 /
維運管理
開發框架 /
服務開發
既有系統 (階段性轉移)
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
https://zh.wikipedia.org/wiki/依赖反转原则
RabbitMQ Implementations NATS Implementations NATS Streaming Implementations
https://github.com/91app
(Singleton, 來自 Host, 識別實體環境)
(Scoped, 來自 Request, 識別個人化 & 多租戶的環境)
Host Info
(InfraContext)
Runtime Info
(TrackContext)
Config Data
(IConfigManager)
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 做好抽象化的隔離了。
為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 四層繼承階層。
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
需要專屬 Load Balancer,
也需要人工維護內部 DNS records
所有程序都整併在 Service 啟動
時期自動完成。維運負擔降到最低
VIP
VIP
NORMAL
VIP
NORMAL
NORMAL
NORMAL
QA-TEST
NORMAL
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
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: ………..………..
https://docs.microsoft.com/zh-tw/dotnet/standard/net-standard
特別感謝

More Related Content

What's hot

3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService PrincipalToru Makabe
 
Azure Arc Enabled Serverの活用
Azure Arc Enabled Serverの活用Azure Arc Enabled Serverの活用
Azure Arc Enabled Serverの活用Tomoya Katayama
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)Trainocate Japan, Ltd.
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅Rick Hwang
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますester41
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖Philip Zheng
 
NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定Kan Itani
 
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)オラクルエンジニア通信
 
.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 RPCAndrew Wu
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container ServiceAWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container ServiceAmazon Web Services Japan
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門Yoichi Kawasaki
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7twMVC
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Red Hat OpenShift Container Storage
Red Hat OpenShift Container StorageRed Hat OpenShift Container Storage
Red Hat OpenShift Container StorageTakuya Utsunomiya
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 

What's hot (20)

3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
Azure Arc Enabled Serverの活用
Azure Arc Enabled Serverの活用Azure Arc Enabled Serverの活用
Azure Arc Enabled Serverの活用
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定NetApp XCP データ移行ツールインストールと設定
NetApp XCP データ移行ツールインストールと設定
 
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
 
.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
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container ServiceAWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Red Hat OpenShift Container Storage
Red Hat OpenShift Container StorageRed Hat OpenShift Container Storage
Red Hat OpenShift Container Storage
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 

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

OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
 
twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)twMVC
 
价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流hizhubo
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境drewz lin
 
51 cto linuxops_issue2
51 cto linuxops_issue251 cto linuxops_issue2
51 cto linuxops_issue2Yiwei Ma
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)vanadies10
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维guiyingshenxia
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维colderboy17
 
Teched 2013 监和控
Teched 2013  监和控Teched 2013  监和控
Teched 2013 监和控Cheng Zhang
 
(宇宏)生產履歷 建議方案 20100901 v2
(宇宏)生產履歷 建議方案 20100901 v2(宇宏)生產履歷 建議方案 20100901 v2
(宇宏)生產履歷 建議方案 20100901 v2Sonny Chen
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03Erhwen Kuo
 
海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)Zhaoyang Wang
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程cleverpig
 

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

OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#24 | 開發團隊的敏捷之路(未完成)
 
Mocha Bsm
Mocha BsmMocha Bsm
Mocha Bsm
 
价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
 
51 cto linuxops_issue2
51 cto linuxops_issue251 cto linuxops_issue2
51 cto linuxops_issue2
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维
 
Teched 2013 监和控
Teched 2013  监和控Teched 2013  监和控
Teched 2013 监和控
 
(宇宏)生產履歷 建議方案 20100901 v2
(宇宏)生產履歷 建議方案 20100901 v2(宇宏)生產履歷 建議方案 20100901 v2
(宇宏)生產履歷 建議方案 20100901 v2
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03Cncf k8s Ingress Example-03
Cncf k8s Ingress Example-03
 
海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
Open party(2010 05-15)-蒋鑫-开源软件定制开发中的软件工程
 

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

Editor's Notes

  1. https://www.hbrtaiwan.com/article_content_AR0006633.html?utm_source=facebook&utm_medium=social&utm_campaign=201802fb
  2. 系統運作規範: 系統如何部署? 系統如何互相溝通? 系統如何監控與追蹤? 系統如何維運? (改變組態、改變規模) 如何設計,就決定如何維運與開發。DevOps 是一體化的,你想要怎麼維運,在設計時就要思考。 Design (developer) for operation Operation support developer
  3. 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 -- --
  4. Currently: Node.JS + Containers (via docker registry) Future: .NET tools (via NuGet)
  5. 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.
  6. 修改設定十,目錄結構以團隊分工優化為第一優先。因此目錄階層為 /{module}/{region} 為主
  7. Client Side Disco