成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

6種常用的架構設計模式之一

開發 架構
許多現代應用都需要在企業級規模上進行構建,有時甚至需要在互聯網規模上進行構建。這些應用都需要滿足可擴展性、可用性、安全性、可靠性和彈性需求。

 [[347101]]

許多現代應用都需要在企業級規模上進行構建,有時甚至需要在互聯網規模上進行構建。這些應用都需要滿足可擴展性、可用性、安全性、可靠性和彈性需求。

在本文中,我將談論一些設計模式,這些模式可以幫助你輕松實現上述能力。我將討論每個模式,他們如何在云原生環境中使用,以及何時使用和何時不使用。

有些模式也并不是什么新發明,但它們在當前互聯網規模的云世界中非常有用。

以下是我將在本文中討論的模式列表。

  1. 熔斷器
  2. 命令和查詢責任分離(CQRS)
  3. 事件溯源(Event Sourcing)
  4. Sidecar
  5. 后端對前端
  6. Strangler

下面進入正文。

熔斷器

分布式系統在設計時應考慮到故障問題。目前微服務已經得到了廣泛應用,這些服務大多依賴于其他遠程服務。遠程服務可能會因為網絡、應用負載等各種原因而不能及時響應。在大多數情況下,通過重試應該可以解決這些問題。

但也有極端情況,比如服務降級或服務本身完全失效。在這種情況下,繼續重試是沒有意義的。因此熔斷器模式就可以派上用場了。

熔斷器

上圖展示了熔斷器模式的實現,當服務1了解到在調用服務2時有連續的故障/超時時,服務1不再重試,而是跳過調用服務2,并立即返回響應。

有一些流行的開源庫,比如 Netflix 的 Hystrix,可以用來非常容易地實現這種模式。

如果你使用的是 API 網關或像 Envoy 這樣的 sidecar 代理,那么可以在代理級別本身實現。

注意:非常重要的一點是,當熔斷器打開時,要有足夠的日志記錄和警報,以便跟蹤這段時間內收到的請求,并讓運維團隊了解到這些信息。

你也可以在半開的情況下實現熔斷器,以繼續為能容忍服務降級的客戶提供服務。

何時使用此模式

  • 當一個服務依賴另一個遠程服務,并且在某些情況下很可能失敗時;
  • 當一個服務有很強依賴性時(例如:主數據服務)。

何時不使用此模式

  • 當你在處理本地依賴關系時,熔斷器可能會產生開銷。

命令和查詢責任隔離(CQRS)

CQRS 對于現代使用數據存儲的應用來說是一個非常有用的模式。它的原理是將數據存儲中的讀(查詢)和寫/更新(命令)操作分開。

假設你正在構建一個應用程序,需要將數據存儲在 MySQL/PostgreSQL 數據庫中。大家都知道,當向數據存儲中寫入數據時,一個操作需要經過幾個步驟,比如驗證、模型和持久化,因此典型的寫/更新操作比簡單的讀操作需要更長的時間。

當使用單個數據存儲同時執行讀和寫操作,并且訪問量很大時,那么可能會開始遭遇性能問題。

在這種情況下,CQRS 模式可能很有用。CQRS 模式建議使用單獨的數據存儲來進行讀和寫操作。

CQRS

注:現在大多數 PaaS 數據庫都提供了創建數據存儲的讀復制(Google Cloud SQL、Azure SQL DB、Amazon RDS等)的能力,這有助于更容易實現CQRS。

如果你處理的是私有數據庫,很多企業數據庫也提供了這個功能。

注:如今有些人也喜歡為讀復制使用速度快、性能好的 NoSQL 數據庫,比如 MongoDB 和 Elasticsearch。

什么時候使用這種模式

  • 當你正在考慮擴展一個期望有大量讀和寫的應用程序時。
  • 當你想分別調整讀和寫操作的性能時
  • 當你的讀操作可以接受接近實時或最終一致性時

何時不使用此模式

  • 當你正在構建一個常規的 CRUD 應用程序,并不是每次都有大量的讀和寫的時候

事件溯源(Event Sourcing)

事件溯源是一種有意思的設計模式,在這種模式下,域事件的序列被存儲為日志,日志的聚合視圖給出了應用程序的當前狀態。

這種模式通常用于那些無法承受數據存儲鎖的系統,并且需要維護事件的審計和歷史記錄,例如,酒店/會議/座位預訂等應用。

事件溯源

比如一個酒店客房預訂系統,其中用戶需要預訂或取消預訂。在這里,你需要將預訂和取消預訂存儲為一系列事件。在每次預訂之前,通過查看事件日志,聚合視圖顯示可用房間。

注:大多數云服務提供商都支持消息服務,如 Google Pub/Sub、Azure Service Bus、AWS SQS 等。這些服務與強大的一致數據存儲相結合,可以用來實現這個模式。

何時使用此模式

  • 常規的 CRUD 操作不能很好的滿足需求時。
  • 通常適用于座位預定系統,如公交車、火車、會議、電影院等,或由購物車操作、支付等事件組成的電商系統。
  • 當需要強大的審計和事件回放來創建應用的當前和過去的狀態時。

何時不使用此模式

  • 常規的 CRUD 操作足以滿足用戶需求時。

(待續)

原文鏈接:

https://medium.com/better-programming/modern-day-architecture-design-patterns-for-software-professionals-9056ee1ed977

本文轉載自微信公眾號「高可用架構」,可以通過以下二維碼關注。轉載本文請聯系高可用架構公眾號。

 

責任編輯:武曉燕 來源: 高可用架構
相關推薦

2019-08-02 08:50:47

API架構微服務

2020-05-14 14:48:15

架構模式單庫

2019-11-07 11:49:14

架構運維技術

2015-08-18 13:58:07

2013-09-04 12:38:56

架構設計架構設計構思

2019-12-02 10:16:46

架構設計模式

2011-01-25 10:51:54

系統架構設計師

2017-07-05 14:09:04

系統設計與架構java云計算

2010-07-14 09:01:07

架構設計

2024-12-24 11:01:58

2021-09-14 11:26:22

微服務架構模式

2024-09-18 09:04:33

架構模式查詢

2020-09-11 10:36:24

設計模式代碼

2017-04-24 11:01:59

MySQL數據庫架構設計

2023-11-29 18:06:15

Python設計模式

2024-12-11 08:20:57

設計模式源碼

2017-03-21 17:04:05

Android客戶端架構設計

2019-08-19 14:56:07

設計模式javascript

2019-07-22 15:59:21

2012-10-29 11:16:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美日韩综合精品一区二区 | 2021天天干夜夜爽 | 国产精品区一区二区三 | 日韩精品在线播放 | 免费观看一级视频 | 日本欧美在线观看视频 | 日本二区在线观看 | 成人深夜小视频 | 91大神新作在线观看 | 亚洲精品一区二区三区在线观看 | 在线一区二区三区 | 国产精品人人做人人爽 | 一区二区三区福利视频 | 久草影视在线 | 久青草影院| 免费观看一级视频 | 色视频在线播放 | 国内在线视频 | 国产精品久久视频 | 午夜精品久久久久久 | 国产一极毛片 | 精品久久久网站 | 国产精品性做久久久久久 | 国产91黄色| 男女羞羞网站 | 丝袜久久| 欧美激情第一区 | 丝袜 亚洲 另类 欧美 综合 | 国产激情视频在线免费观看 | 久久69精品久久久久久久电影好 | 99久久久国产精品 | 国产99久久 | 少妇一级淫片aaaaaaaaa | 蜜桃视频在线观看免费视频网站www | 91精品国产欧美一区二区成人 | 91一区二区三区 | 国产不卡视频 | 欧美三级电影在线播放 | 91美女在线 | 成人免费观看男女羞羞视频 | 国产精品一区二区三级 |