SlideShare a Scribd company logo
探索 .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

我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離
Edward Kuo
 
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
Andrew Wu
 
DevOps核心理念和實踐
DevOps核心理念和實踐DevOps核心理念和實踐
DevOps核心理念和實踐
Martin Liu
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
 
微服務對IT人員的衝擊
微服務對IT人員的衝擊微服務對IT人員的衝擊
微服務對IT人員的衝擊
Philip Zheng
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則
Philip Zheng
 
.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
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
Philip Zheng
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
Poy Chang
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
Will Huang
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
Edward Kuo
 
使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務
升煌 黃
 
網站自動化測試
網站自動化測試網站自動化測試
網站自動化測試
Bruce Chen
 
Azure DevOps CICD Azure SQL / Data Factory
Azure DevOps CICD Azure SQL / Data FactoryAzure DevOps CICD Azure SQL / Data Factory
Azure DevOps CICD Azure SQL / Data Factory
Ryoma Nagata
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅
Rick Hwang
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
Hitachi, Ltd. OSS Solution Center.
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
Kazushi Kamegawa
 
[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步
[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步
[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步
Edward Kuo
 
Data platformdesign
Data platformdesignData platformdesign
Data platformdesign
Ryoma Nagata
 
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tkKubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
whywaita
 

What's hot (20)

我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離
 
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
 
DevOps核心理念和實踐
DevOps核心理念和實踐DevOps核心理念和實踐
DevOps核心理念和實踐
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
 
微服務對IT人員的衝擊
微服務對IT人員的衝擊微服務對IT人員的衝擊
微服務對IT人員的衝擊
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則
 
.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
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
 
從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點從實戰經驗看到的 K8S 導入痛點
從實戰經驗看到的 K8S 導入痛點
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務
 
網站自動化測試
網站自動化測試網站自動化測試
網站自動化測試
 
Azure DevOps CICD Azure SQL / Data Factory
Azure DevOps CICD Azure SQL / Data FactoryAzure DevOps CICD Azure SQL / Data Factory
Azure DevOps CICD Azure SQL / Data Factory
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
 
[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步
[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步
[2022 DevOpsDays Taipei] 走過 DevOps 風雨的下一步
 
Data platformdesign
Data platformdesignData platformdesign
Data platformdesign
 
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tkKubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
 

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
 
Mocha Bsm
Mocha BsmMocha Bsm
Mocha Bsm
王 莆中
 
价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流
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 server
Michael 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-03
Erhwen Kuo
 
海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)
Zhaoyang Wang
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
vanadies10
 
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