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

微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?Kuo Lung Chu
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事Poy Chang
 
DevOps的神鬼奇航
DevOps的神鬼奇航DevOps的神鬼奇航
DevOps的神鬼奇航Edward Kuo
 
91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOpsAndrew Wu
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖Philip Zheng
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろうakira6592
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅Rick Hwang
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離Edward Kuo
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春VerMasahito Zembutsu
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討Masahito Zembutsu
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模國昭 張
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンKentaro Yoshida
 
萬事萬物皆是 LOG - 系統架構也來點科普
萬事萬物皆是 LOG - 系統架構也來點科普萬事萬物皆是 LOG - 系統架構也來點科普
萬事萬物皆是 LOG - 系統架構也來點科普Poga Po
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
DevOps核心理念和實踐
DevOps核心理念和實踐DevOps核心理念和實踐
DevOps核心理念和實踐Martin Liu
 

What's hot (20)

微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
 
DevOps的神鬼奇航
DevOps的神鬼奇航DevOps的神鬼奇航
DevOps的神鬼奇航
 
91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
 
軟體架構模式
軟體架構模式軟體架構模式
軟體架構模式
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
萬事萬物皆是 LOG - 系統架構也來點科普
萬事萬物皆是 LOG - 系統架構也來點科普萬事萬物皆是 LOG - 系統架構也來點科普
萬事萬物皆是 LOG - 系統架構也來點科普
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
DevOps核心理念和實踐
DevOps核心理念和實踐DevOps核心理念和實踐
DevOps核心理念和實踐
 

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