SlideShare ist ein Scribd-Unternehmen logo
1 von 60
轉移到微服務架構必經之路
~ 系統與資料庫重構
Andrew Wu
以下內容牽涉到程式語言、平台、Framework 理論 等…
有可能造成昏睡、甚至睡著
請準備各種提神性飲料,如:咖啡、蠻牛、白馬馬力夯 等…
微服務是什麼?
小型自主
小巧、專注;
自主性;
http://martinfowler.com/bliki/images/microservice-verdict/productivity.png
進行重構的最佳時機
漸進式的轉移: 重構
https://www.nginx.com/blog/refactoring-a-monolith-into-microservices/
1
2
1
2
1
2
3程式碼都重構好了,可是… 資料庫呢?
資料庫的切割,能比照辦理嗎?
資料庫切割的挑戰
表
列
跨越服務之間的交易
隔離
https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A7%84%E8%8C%83%E5%8C%96
C all nodes see the same data
at the same time
A Reads and writes
always succeed
P the system continues to operate
despite arbitrary message loss or
failure of part of the system
http://www.hollischuang.com/archives/666
垂直切割:
Event Driven
資料解耦
https://www.nginx.com/blog/event-driven-data-management-microservices/
1
2
3
4
5
6
7
8
9
進階技巧
藉由 local transaction,
來確保 “訂單的處理”
與 ”事件的發布” 之間的
一致性。
水平切割:
Data Shard
Scale-Out
https://docs.microsoft.com/en-us/azure/architecture/patterns/sharding
http://blog.christianposta.com/microservices/the-hardest-part-about-
microservices-data/
https://docs.mongodb.com/v3.0/tutorial/choose-a-shard-key
Easily Divisible
Randomness
https://docs.mongodb.com/v3.0/tutorial/choose-a-shard-key/
複寫
(實作讀寫分離)
Command
(write)
Query
(read)
小心“一窩蜂驅動開發”!!
https://blog.chunfuchao.com/?p=656&variant=zh-tw
!=
一窩蜂的例子:
一窩蜂是開發團隊自我毀滅的原因
問題在於一窩蜂會造成錯誤的決策。
架構設計錯誤與技術選用錯誤都會
困擾團隊數個月甚至數年之久。最
壞的情況會造成另一個很糟糕的行
為:砍掉重練,這樣做永遠不會有
好結果的。
一切的罪惡根源似乎是社群媒體,
太多的想法在實戰測試之前就傳出
去了,跑得比大家分析利弊得失的
速度還要快。
Q & A ?
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構

Weitere ähnliche Inhalte

Was ist angesagt?

微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue微服務基礎建設 - Message Queue
微服務基礎建設 - Message QueueAndrew Wu
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則Philip Zheng
 
微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?Kuo Lung Chu
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅Rick Hwang
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open CampAndrew Wu
 
アジャイル開発の始め方
アジャイル開発の始め方アジャイル開発の始め方
アジャイル開発の始め方ESM SEC
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖Philip Zheng
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
DevOps的神鬼奇航
DevOps的神鬼奇航DevOps的神鬼奇航
DevOps的神鬼奇航Edward Kuo
 
ソフトウェア構成管理入門
ソフトウェア構成管理入門ソフトウェア構成管理入門
ソフトウェア構成管理入門智治 長沢
 
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~Hitachi, Ltd. OSS Solution Center.
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事Poy Chang
 
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?IIJ
 
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発Yahoo!デベロッパーネットワーク
 
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法Kazuto Kusama
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)NTT DATA Technology & Innovation
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanItsuki Kuroda
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 

Was ist angesagt? (20)

微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則
 
微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?
 
91APP API Gateway 導入之旅
91APP API Gateway 導入之旅91APP API Gateway 導入之旅
91APP API Gateway 導入之旅
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
 
アジャイル開発の始め方
アジャイル開発の始め方アジャイル開発の始め方
アジャイル開発の始め方
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
DevOps的神鬼奇航
DevOps的神鬼奇航DevOps的神鬼奇航
DevOps的神鬼奇航
 
ソフトウェア構成管理入門
ソフトウェア構成管理入門ソフトウェア構成管理入門
ソフトウェア構成管理入門
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
 
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
 
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
 
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 

Ähnlich wie 與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構

深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabric深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabricJohn Chang
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructurekyhpudding
 
51 cto linuxops_issue2
51 cto linuxops_issue251 cto linuxops_issue2
51 cto linuxops_issue2Yiwei Ma
 
200701011
200701011200701011
2007010115045033
 
雲端運算期中分組報告
雲端運算期中分組報告雲端運算期中分組報告
雲端運算期中分組報告Yosheng Zhang
 
Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作liangxiao0315
 
賽門鐵克 VMware 完整解決方案
賽門鐵克 VMware 完整解決方案賽門鐵克 VMware 完整解決方案
賽門鐵克 VMware 完整解決方案Wales Chen
 
1.4亿在线背后的故事
1.4亿在线背后的故事1.4亿在线背后的故事
1.4亿在线背后的故事llkk0914
 
一個微信專案從0到000的效能調教
一個微信專案從0到000的效能調教一個微信專案從0到000的效能調教
一個微信專案從0到000的效能調教Bruce Chen
 
twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC
 
新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜Weibo Corporation
 
从网格计算到云计算
从网格计算到云计算从网格计算到云计算
从网格计算到云计算Riquelme624
 
微信201204
微信201204微信201204
微信201204drewz lin
 
微信之道201204
微信之道201204微信之道201204
微信之道201204shaomeng shi
 
众行业公司系统架构案例介绍
众行业公司系统架构案例介绍众行业公司系统架构案例介绍
众行业公司系统架构案例介绍mysqlops
 
海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)Zhaoyang Wang
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168vanadies10
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC
 

Ähnlich wie 與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構 (20)

深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabric深入研究雲端應用程式平台-AppFabric
深入研究雲端應用程式平台-AppFabric
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructure
 
51 cto linuxops_issue2
51 cto linuxops_issue251 cto linuxops_issue2
51 cto linuxops_issue2
 
200701011
200701011200701011
200701011
 
雲端運算期中分組報告
雲端運算期中分組報告雲端運算期中分組報告
雲端運算期中分組報告
 
Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作
 
13 11-08
13 11-0813 11-08
13 11-08
 
賽門鐵克 VMware 完整解決方案
賽門鐵克 VMware 完整解決方案賽門鐵克 VMware 完整解決方案
賽門鐵克 VMware 完整解決方案
 
1.4亿在线背后的故事
1.4亿在线背后的故事1.4亿在线背后的故事
1.4亿在线背后的故事
 
一個微信專案從0到000的效能調教
一個微信專案從0到000的效能調教一個微信專案從0到000的效能調教
一個微信專案從0到000的效能調教
 
twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢
 
新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜新浪微博大规模基于Docker的混合云应用实践 -王关胜
新浪微博大规模基于Docker的混合云应用实践 -王关胜
 
从网格计算到云计算
从网格计算到云计算从网格计算到云计算
从网格计算到云计算
 
微信201204
微信201204微信201204
微信201204
 
微信之道201204
微信之道201204微信之道201204
微信之道201204
 
SWsoft_Prim@Telecom
SWsoft_Prim@TelecomSWsoft_Prim@Telecom
SWsoft_Prim@Telecom
 
众行业公司系统架构案例介绍
众行业公司系统架构案例介绍众行业公司系统架构案例介绍
众行业公司系统架构案例介绍
 
海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)海通证券金融云思考与实践(数据技术嘉年华2017)
海通证券金融云思考与实践(数据技术嘉年华2017)
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
 

與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構

Hinweis der Redaktion

  1. Keyword: Microservices, .NET Core Microservices -> mass services to management and deployment .NET Core -> control binary compatibility (winodws, linux, macos), Container -> control environment compatability Windows Container -> hosting windows / linux app (container)s
  2. 漸進式的微服務化過程 資料庫如何“微”化? 垂直 / 水平切割資料庫的挑戰 資料儲存系統的選擇 (CAP, NOSQL) 其他必要的關鍵知識 (2PC)
  3. 舊的系統沒人敢動,能別改就別改 只靠新增額外的 CODE 跟 API,透過複製整套系統來達成切割與重構的目的 (IE: 每個 “服務” 都包含部分用不到的 CODE)
  4. 先做好 local refactory, 透過 interface 來存取 module z 之後就可以透過各種 RPC 機制來呼叫 module z
  5. 關聯式資料庫,透過高度的正規化,避免相同意義的資料以各種形式重複出現在資料庫內,並且透過關聯式的查詢 SQL 將資料重組為核心概念的設計。 高度精緻化的關聯式資料庫,產生的代價是資料之間關聯性強 (不然怎麼稱作 “關聯式” 資料庫?),難以切割。 這個特性也造成關聯式資料庫在微服務化的領域是非常難搭配的儲存技術的主因。
  6. CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 分布式系列文章——从ACID到CAP/BASE https://www.jianshu.com/p/68c7c16b3fbd BASE理论 BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方法来使系统达到最终一致性。接下来,我们着重对BASE中的三要素进行讲解。 作者:Jeffbond 链接:https://www.jianshu.com/p/68c7c16b3fbd 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  7. Separate domain
  8. JWT可以簡化跨服務的資訊驗證
  9. The Order Service creates an Order with status NEW and publishes an Order Created event. Init state Place order (建立訂單) Create record in ORDER table Send “Order created event” to message broker
  10. The Customer Service consumes the Order Created event, reserves credit for the order, and publishes a Credit Reserved event. 5. Customer service received “order created event” 6. Create “Reserved credit” record 7. Send credit reserved event
  11. The Order Service consumes the Credit Reserved event, and changes the status of the order to OPEN.
  12. You can also use events to maintain materialized views that pre‑join data owned by multiple microservices. The service that maintains the view subscribes to the relevant events and updates the view. For example, the Customer Order View Updater Service that maintains a Customer Orders view subscribes to the events published by the Customer Service and Order Service.
  13. Ship transaction logs
  14. Ship change sequencing
  15. Data scale-out (with separate read / write mechanism)