SlideShare a Scribd company logo
探索 .NET 新世界
.NET Conf
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
https://ruddyblog.wordpress.com/2017/10/27/看見全貌/
https://medium.com/how-gipi-learn/1111-system-reliability-559364b5591d
91APP 在 DevOps 面臨的挑戰
台灣最大&成長最快
品牌新零售解決方案公司
- 2013年成立,前Yahoo!、興奇科技經營團隊創辦
- 總部在台北,馬來西亞/香港分公司
- 員工人數超過400人
- 連續四年榮獲「創新商務獎/最佳商業模式」
- 獲選「勤業眾信亞太區高科技高成長前500強」
(Ranked 152th,Deloitte Technology Fast 500 Asia Pacific)
虛實融合OMO最佳夥伴
協助品牌打造線上電商與門市OMO循環
提供一致化購物體驗,打通全通路會員經營,有效掌握全景數據,提升OMO營運效能。
官網 APP 門市
客人
線上購物門市取貨
APP推播
線上廣告投放
線上發送門市優惠券
門市購物線上購物
LBS推播
門市發送線上折價券
店員
客人
OMO
循環
店員透過「門市小幫手」
引導客人成為OMO會員
APP就是會員卡
品牌客戶超過10,000家
獲國內外大型實體零售品牌肯定,91APP協助多家企業成功推動OMO變革轉型。
AWS: 200+ EC2, 3 regions…
GCP: …
AZURE: …
Local: Mac x N …
TAIWAN MALYSIA HONG KONG …
Market: 4+
光是對內 & 對外的 DNS Records 就有 60+ …
除了環境設定複雜之外,測試人員要測試也很辛苦…
End Points (domain): 60+
PRODUCTION
STAGING
QA
DEV
Environment: 10+
PRODUCTION
STAGING
QA
DEV
Deployment: Market x Environment x Instances ( x Shop … )
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
問題在於微服務的複雜度
x x x
https://www.nginx.com/blog/nginmesh-nginx-as-a-proxy-in-an-istio-service-mesh/
https://www.12factor.net
https://kknews.cc/zh-tw/tech/22k6ke.html
artifact manager
service discovery
config management
artifact management
service discovery
service discovery
https://paulhammant.com/2014/08/27/provisioning-deployment-and-app-config-cycles/
https://rickhw.github.io/2019/03/28/DevOps/DevOpsTaiwan-Meetup-Beginning-in-Artifacts-Management/
(Source) Code  Binary / Package
(Artifacts)
(Source) Config  (Compiled) Config
(Config Management)
(Source) Scripts  Environment
(Infra)
Everything as Code  Process
(Git repo + CI / CD Build Process)
Integration
all of them
(執行團隊) (版本控制) (自動化建置) (建置結果管理)
在地維運團隊
服務開發團隊
基礎建設團隊
結束了? 挑戰現在才開始…
挑戰 #1
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
End Points (domain): 60+
PUSH SERVICE #1
SERVICE #2
SERVICE #3
CI / CD 一次到位, 需要協調 infra 上線流程:
Build / Provision / Deploy / Online
部署架構複雜,效率不佳。
自動化程序難以開發維護
Load
Balancer
Ctrl
PUSH SERVICE #1
SERVICE #2
SERVICE #3
CI / CD 分階段進行, 隔離 Build / Deploy 階段:
Build | Provision (with Pull Artifacts) | Online (Auto Register)
部署架構簡單,效率好 (並行)。
Load
Balancer
Service
Registry
PULL
挑戰 #2
Static: Key-Value Configuration
Dynamic: Service Discovery
How To:
1. Optimize for Maintains Effort
2. Optimize for Development Effort
3. Optimize for Runtime Performance
Config
Config
SERVICE
SERVICE
SERVICE
CI
1. 服務建立後
自動由 AM 部署服務。
2. 服務啟動後
自動由 CM 取得所有設定 Repo
Global Region Market Shop
Global Settings
Schema
Comments
Regional Default
(Global)
ap-northeast-1
ap-southeast-1
tw
xxx (market02)
xxx (market03)
9527
9528
組態 (configuration) 的原始檔目錄結構,以方便管理為設計目標,團隊分工優化
為第一優先。目錄階層直接對應 Global / Region / Market / Shop 四層繼承階層。
One Git Repo
Global Region Market Shop
Global Settings
Schema
Comments
Regional Default
(Global)
ap-northeast-1
ap-southeast-1
tw
hk
my
9527
9528
組態 (configuration) 編譯後的結構,以方部署與執行效率最佳化為設計目標。目錄階層
直接攤平,以 Region 為主體, 每個 Market / Shop 都有所有的組態設定,Client 一次 GET
就能完成讀取設定值的動作。
One Deployment
One Deployment
One Deployment
版本控制 生產環境
JSON
(階層)
驗證&測
試 (開發
環境)
Config
Repo
Build
+
Test
自動化
Runtime
Config
Package
(Optimize
d)
Consul
(KV-Store)
S3
(config)
(map)
(document)
需要專屬 Load Balancer,
也需要人工維護內部 DNS records
所有程序都整併在 Service 啟動
時期自動完成。維運負擔降到最低
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
挑戰 #3
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
ENV:
CONFIG_SOURCE = …
MARKET = …
…
Tags:
- CONFIG_SOURCE
- MARKET
- ENVIRONMENT: PROD | STAGING
- USAGE_HINTS
- PUBLIC_KEY
由 infra team 負責指派
由 provision script 轉移至 OS 的環境變數
APPLICATION (CODE)
Core SDK
SERVICE
BFF
Service
Registry
按照規範開發的服務,可以大幅降低維運的成本,提升維運的效率。
大部分的維運作業,只需要透過開關機就該(能)完成。
Design For Operation, 是開發團隊降低 (自己) 維運負擔的最佳手段。
CI
(AM / CM)
Core SDK
Core SDK
挑戰 #4
ENV (from EC2 Tags)
APPLICATION (CODE)
ENV (from K8S config map)
APPLICATION (CODE)
Core SDK
(.net standard)
Virtual Machine (Windows / Linux)
Container (Windows / Linux)
Core SDK
(.net standard)
APPLICATION (WEB)
HTTP Request:
- X-Request-ID
- JWT
{
shop: 123,
user: 456,
…
}
APPLICATION (WORKER)
Message:
- X-Request-ID
- JWT
{
shop: 123,
user: 456,
…
}
Core SDK (.NET Standard)
Core SDK (.NET Standard)
ENV
ENV
SN RID SID SHOP USER …
1 … … 123 456 …
2 … … 123 456 …
一致的 LOGS 前置欄位定義:
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
大規模微服務導入 - #1, 從零開始的系統架構設計概觀
特別感謝

More Related Content

PPTX
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
PPTX
大型 Web Application 轉移到 微服務的經驗分享
PPTX
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
PPTX
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
PDF
91APP API Gateway 導入之旅
PPTX
微服務基礎建設 - Message Queue
PDF
微服務架構|01|入門微服務|到底什麼是微服務?
PDF
30分でわかるマイクロサービスアーキテクチャ 第2版
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大型 Web Application 轉移到 微服務的經驗分享
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
91APP API Gateway 導入之旅
微服務基礎建設 - Message Queue
微服務架構|01|入門微服務|到底什麼是微服務?
30分でわかるマイクロサービスアーキテクチャ 第2版

What's hot (20)

PPTX
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
PDF
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
PDF
コンテナにおけるパフォーマンス調査でハマった話
PDF
91APP: 從 "零" 開始的 DevOps
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
微服務對IT人員的衝擊
PPTX
微服務的基礎建設 - Service Discovery, Andrew Wu
PDF
從零開始做架構圖
PPTX
Dockerからcontainerdへの移行
PPTX
Metaspace
PDF
Node RED で実現する製造業の DX
PPTX
JAZUG12周年 俺の Azure Cosmos DB
PDF
我的 DevOps 故事
PDF
Linux女子部 systemd徹底入門
PDF
twMVC#44 讓我們用 k6 來進行壓測吧
PDF
Linux KVM環境におけるGPGPU活用最新動向
PDF
Zabbixのパフォーマンスチューニング & インストール時の注意点
PDF
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
コンテナにおけるパフォーマンス調査でハマった話
91APP: 從 "零" 開始的 DevOps
マルチテナント化で知っておきたいデータベースのこと
微服務對IT人員的衝擊
微服務的基礎建設 - Service Discovery, Andrew Wu
從零開始做架構圖
Dockerからcontainerdへの移行
Metaspace
Node RED で実現する製造業の DX
JAZUG12周年 俺の Azure Cosmos DB
我的 DevOps 故事
Linux女子部 systemd徹底入門
twMVC#44 讓我們用 k6 來進行壓測吧
Linux KVM環境におけるGPGPU活用最新動向
Zabbixのパフォーマンスチューニング & インストール時の注意点
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
なかったらINSERTしたいし、あるならロック取りたいやん?
ヤフー社内でやってるMySQLチューニングセミナー大公開
Ad

Similar to 大規模微服務導入 - #1, 從零開始的系統架構設計概觀 (20)

PDF
企業導入微服務實戰 - updated
PDF
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線
PDF
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
PDF
深入研究雲端應用程式平台-AppFabric
PDF
電商微服務架構設計與執行
PDF
Week 08 Cloud_Eric Shangkuan
PPTX
搶購系統設計與思考
PDF
DevOps Tool Chain - Image Registry Troubleshooting and Best practices
PDF
大電商SOA架構選型與思考
PDF
企業郵件系統的私有雲架構教戰守則
PDF
2020 new retail strategey
PPTX
Automatically Managing Internet Operations In The Cloud - 云计算平台的自动化运维
PPT
Cloud services empower you a better customer management and knowledge management
PDF
企業導入微服務實戰 - updated
PDF
廣宣學堂: 企業導入微服務實戰
PPTX
中大型规模的网站架构运维 Saac
PDF
SRE Study Notes - CH2,3,4
PPTX
2024 Hello World Dev Conference 從觀察到實踐 打造符合公司需求的GitLab DevOps流水線
PPT
Challenges and opportunities computing Kuo-Yi Chen
PDF
开源+自主开发 - 淘宝软件基础设施构建实践
企業導入微服務實戰 - updated
[2019 臺灣雲端大會]使用雲端技術打造快速的 AI 服務上線
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
深入研究雲端應用程式平台-AppFabric
電商微服務架構設計與執行
Week 08 Cloud_Eric Shangkuan
搶購系統設計與思考
DevOps Tool Chain - Image Registry Troubleshooting and Best practices
大電商SOA架構選型與思考
企業郵件系統的私有雲架構教戰守則
2020 new retail strategey
Automatically Managing Internet Operations In The Cloud - 云计算平台的自动化运维
Cloud services empower you a better customer management and knowledge management
企業導入微服務實戰 - updated
廣宣學堂: 企業導入微服務實戰
中大型规模的网站架构运维 Saac
SRE Study Notes - CH2,3,4
2024 Hello World Dev Conference 從觀察到實踐 打造符合公司需求的GitLab DevOps流水線
Challenges and opportunities computing Kuo-Yi Chen
开源+自主开发 - 淘宝软件基础设施构建实践
Ad

大規模微服務導入 - #1, 從零開始的系統架構設計概觀

Editor's Notes

  • #8: 91APP創辦人、董事長何英圻先生 與共同創辦人、總經理楊明芳先生 笑稱自己是「骨灰級」電商人
  • #9: 協助客戶(零售業) 做好: 線上 (官網 + APP) 的銷售,電商 線下 (APP + 門市小幫手), 讓消費者在門市有最好的體驗。APP 就是會員卡;利用數位工具,讓"店員"成為推動OMO循環的助力 OSM 做好全通路 (上+下) 的商店管理 CRM 做好會員的管理,掌握你的客戶數據 運用數據的力量,用線上的技術掌握現下的客戶,促進客戶做進一步的線上 + 線下消費 OMO 循環: 線下推播發送折價券,線上廣告投放,消費者線上購物,門市取貨,完整的循環創造優良的消費體驗。 THINK: 修改一個功能到底需要 deploy 多少東西? APP x 2, N x Web Site, N x API, 後台, ERP …
  • #10: 有這麼多客戶 (不同的使用情境,不同的功能客製化,會踩到不同的漏洞…) 每次的部屬都是個挑戰…
  • #11: 全國有 X 千萬個會員帳號 …
  • #13: 複雜的例行維運… 複雜的組態…
  • #17: 需求提出到交付的整個流水線,我們在(工程面)開發與部署階段面臨很大的挑戰(效率)。這是我們目前階段的主要瓶頸。 關鍵在於要DevOps的系統複雜度很高。
  • #19: 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 -- --
  • #22: 第一步,要先做到 single code, multiple deploy, 才能降低開發與測試時間。Code (source) 必須經過測試與建置,到 AM (binary) 為止 第二步,讓同一個 binary 部署到每個環境,運作起來有所不同的主因是 configuration, 因此 config (source) 也必須經過測試與建置,到 CM (service) 為止 第三步,每個環境實際的承載平台是 infra,為了自動化必須落實 infra as code, 同樣需要 script (source) 經過測試與建置,最終部署島 infra (environment) 為止 但是,文章內缺了最後一個環節: integration (app code),才能把這一切串起來
  • #25: CI / CD 流程圖 (新): 隔離三大元素的互相交互複雜度; 開發時就應該做好準備,CODE / CONFIG 分開管理。 ENVIRONMENT 才將正確的 CODE / CONFIG 組合再一起,便能順利運行 1. CODE / CONFIG / ENV(INFRA) as CODE 2. 關鍵: 做好整合 3. 實際案例
  • #28: 透過 artifacts management 隔離 (1) 跟 (2) 的關聯。 每個服務個別獨立建置 => AM 部署時按照組態與相依性,決定該到 AM 取出甚麼樣的組合
  • #31: 複雜的例行維運… 複雜的組態…
  • #32: 過去太強調 “自動化”,因此部署 script 一次到位。 CI server 負責: BUILD | DEPLOY | SWITCH ONLINE 現在優化流程,分工處理。 CI server 只負責: BUILD (將結果推送到 Artifacts Management) Instance Provision 時用 PULL 方式 DEPLOY Instance Start 時透過 Service Discovery 自動註冊與健康偵測的機制上線
  • #33: 過去太強調 “自動化”,因此部署 script 一次到位。 CI server 負責: BUILD | DEPLOY | SWITCH ONLINE 現在優化流程,分工處理。 CI server 只負責: BUILD (將結果推送到 Artifacts Management) Instance Provision 時用 PULL 方式 DEPLOY Instance Start 時透過 Service Discovery 自動註冊與健康偵測的機制上線
  • #37: 修改設定十,目錄結構以團隊分工優化為第一優先。因此目錄階層為 /{module}/{region} 為主
  • #38: 編譯後的目錄結構,已執行效能為第一優先。因此按照 region 預先將 config 的繼承關係展開,搭配 index 維護 config 清單,讓 client 能在一次 round trip 就完成 config 的解析。 BUILD TOOL 要提供: 展開繼承關係 格式轉換 Schema 檢查 移除 comments 按照 region 打包
  • #40: Client Side Disco