日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

https://ravindraelicherla.medium.com/10-design-patterns-every-software-architect-must-know-b33237bc01c2

存在任何解決實際人類問題的業務。它可能是提高速度,降低成本,提高便利性,增加生活樂趣或使知識觸手可及。通常用于解決這些業務問題的技術。但是,為什么設計模式很重要?IT系統的典型挑戰是可用性,可伸縮性,彈性,數據管理,性能和安全性。在進入設計模式之前,弄清楚這些詞很重要。

可用性: Availabilit Ÿ是一次系統的比例高達在定義的時間段。系統可能由于多種原因而停機,例如軟件錯誤,網絡問題,負載問題,DDoS(分布式拒絕服務)攻擊和基礎架構硬件問題。可用性按以下百分比表示。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

 

可擴展性:2014年,印度在線零售商Flipkart繼續向客戶道歉,因為十億美元的大額銷售由于可擴展性問題而無法滿足客戶的需求。可伸縮性是計算資源,數據存儲需求,消息傳遞基礎結構和成本的一個因素。有兩種方法可以解決可伸縮性問題。第一個是垂直擴展,您將繼續增加資源的容量,第二個是水平可擴展性,在此添加更多節點。這兩種方法都各有利弊。通常,垂直縮放速度更快,但是在一定的時間點之外仍具有局限性,水平縮放會花費更多時間,并且接近無窮大縮放。

可伸縮性是系統資源如何應對不可預測的客戶需求。

彈性:您繼續在電子商務網站上購買手表。您不喜歡該設計,并且想要尋找更多選擇。您選擇了幾個帶有設計,顏色,價格過濾器的下拉框,然后單擊搜索按鈕。現在您會期望看到手表的圖片,價格數據,一些規格,例如表帶材料類型,手表機芯,顏色,交貨日期。如果交貨時間微服務那段時間該怎么辦?您現在有多個選擇。完全不要顯示該字段,而是顯示一條靜態消息“我們正在計算準確的交貨日期,請耐心等待”,否則您將選擇一個日期范圍并顯示給客戶。

彈性是系統能夠妥善處理故障并盡快從故障中恢復的能力。

數據管理:數據管理在可伸縮性,可用性,安全性和彈性方面起著至關重要的作用。與數據管理相關的架構決策取決于您要構建的應用程序類型。它是繁重的(更多的用戶事務),繁重的(報告),旨在進行分析(預測,客戶細分),時間序列(日志處理)還是Datawarehouse(數據分析)。影響數據一致性,數據可用性,數據存儲和歸檔策略的其他因素很少。

性能:可伸縮性和性能是相互關聯的。如果與系統可以處理的用戶相比,有更多的用戶,則系統自然會遇到性能問題。怎么處理呢?您增加資源或減少用戶數量。當然,第二選擇不是理想的選擇,因為您最終將失去業務。實際上,當您解決可伸縮性問題時,我們將解決這些性能問題。我只想提醒您,可伸縮性不能解決所有性能問題,但可以解決一些問題。例如,如果性能問題是錯誤編寫的DB查詢的結果,那么在不對查詢進行微調的情況下擴展資源將被證明是災難性的決定。

安全性:建立安全的系統可確保用戶的數據安全無虞。數據完整性和數據持久性同樣重要。這與將錢存入銀行非常相似。如果您將一百萬美元存入銀行,您不想損失那筆錢(安全),您會希望銀行總是說您存了一百萬美元-這里沒有錯(誠信),即使十年后您也去了銀行,您仍然會有那一百萬美元的錢(耐用性)。

現在您已經掌握了正確的基礎知識,讓我們一一介紹重要的模式。沒有設計模式可以解決所有問題。需要根據用例進行選擇。

可擴展性和性能

  1. CQRS:Greg Young首先引入了命令查詢責任隔離。顧名思義,它是關于區分寫入和讀取職責。可以從單個數據庫或多個數據庫進行寫入和讀取。但是數據模型是不同的。CQRS輕松適合事件源架構。在事件發生時就將其消耗掉,并寫入“ Write DB”中。出于顯示或報告目的,請閱讀“讀取數據庫”。為了使這一過程更加令人興奮,您可以使用標準化的RDBMS進行寫入,而使用非標準化的NoSQL DB進行“讀取”。通常,命令會排隊等待異步過程,并且查詢永遠無法修改數據庫。一個非常好的好處是您可以獨立擴展數據庫
每個軟件架構師和軟件工程師都必須知道的10種設計模式

CQRS —命令查詢職責隔離

數據管理,安全性

2.反腐敗層模式:此模式最初由Eric Evans描述在域驅動設計(DDD)中。讓我用一個故事來介紹一下。Martin和Sheela在零售連鎖店工作。Martin在客戶訂單團隊中工作,Sheela在會員卡團隊中工作。從DDD的角度來看,Martin和Sheela屬于兩個不同的領域,通常它們不會相互影響。一天,Sheela希望對自己的系統進行更改。更改是要知道客戶的位置,以便她可以根據位置提供其他忠誠度積分。但是,她不認識馬丁。即使她知道,Martin也可能不同意她的更改,因為他必須更改其API。但是,她知道Srinivas是Martin的經理。她找斯里尼瓦斯做改變。在這種情況下,Srinivas是一個反腐敗層。當您擁有舊系統和現代應用程序并且正在遷移時,通常使用此模式。該層包含轉換現代系統的請求所需的所有邏輯。引入這一層的最大挑戰是,它將為用戶增加一跳并增加延遲。必須在速度與數據之間做出決定。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

反腐敗層

可靠性,容錯能力

3.斷路器模式:在飛行中旅行時,有一個氧氣面罩和一個向西的生活,除了熱情洋溢的空姐外,很少有人注意。原因很明顯。這些僅在發生故障時使用。您的基本假設是您的飛行不會失敗,不需要使用,因此您不會關注。但這對于IT系統而言并非如此。

“一切總是失敗” – AWS CTO Werner Vogels

我確定您聽說過許多著名網站由于各種原因而倒閉。在分布式環境中,任何時候都可能會失敗。

作為架構師,您無法避免失敗。您只能設計用來處理故障。

斷路器模式可防止應用程序執行幾乎肯定會失敗的操作。讓我解釋一下。您的系統突然遇到負載,并且API請求超出其處理能力。例如,服務的典型響應時間閾值為5秒,現在請求所花費的時間超過了該閾值,您的服務開始向后發送500個響應。除了給用戶帶來不好的體驗外,如果超出某個點的負載更多,您的系統可能會完全放棄。現在該停止更多請求了。

讓我們將其與斷路器的工作方式進行比較。你有沒有遇到過?您剛打開電源插頭,突然就沒電了。現在,您可能需要轉到地下室或大廳中的總機,然后關閉已關閉的交換機。這是現實世界中斷路器起作用的地方。這是在做什么 當負載很高時,將停止供電以防止進一步損壞。

現在讓我們回到我們的世界。斷路器模式具有三種狀態。封閉,開放和半開放。在關閉狀態下,一切正常,并且系統按預期工作。出現問題時,斷路器打開,數據流中斷。這意味著沒有向用戶提供預期的請求。Half Open在等待一段時間后嘗試測試水域,以查看問題是否仍然存在。如果成功,狀態將變為關閉,以便系統恢復正常。如果不成功,它將返回到打開狀態。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

斷路器-閉合狀態


每個軟件架構師和軟件工程師都必須知道的10種設計模式

斷路器-開路狀態

可擴展性,彈性和性能

4.事件源:隨著數據成為新石油,這種模式在最近幾天變得很流行。這種模式表明,不僅要存儲動作的狀態,還應存儲整個歷史記錄。假設您正在構建銀行應用程序。客戶在一段時間內將有多個借方和貸方。假設客戶的起價為$ 1000。第1天存入$ 50,第2天存入$ 100,第3天存入$ 150。在第3天結束時,她將獲得$ 1100。但是,在使用事件來源的情況下,您可以存儲所有事務而不會丟失任何操作。擁有此數據后,可以用于多種目的。通過運行中的快速計算,您絕對可以在任何時間分辨出她的銀行余額是多少,但您也可以了解她的銀行模式,否則這是不可能的。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

活動采購

讓我們再看一個例子。您正在構建電影票預訂系統。對于一部受歡迎的電影,觀眾會看到很多匆忙,這將導致可伸縮性問題。客戶可以預訂,取消或持有座位。假設劇院有200個座位。您需要不斷計算可用席位,以使下一個客戶可以看到該席位。在這里,事件采購將很方便。您不必經過所有活動,最后得出一個數字,而不用像CRUD操作那樣計算可用座位。

可伸縮性,彈性,容錯性和性能

5.發布者-訂閱者模式

這通常被稱為發布/訂閱模式。在基于云的系統中,一個系統的模塊需要與同一系統或另一系統的模塊異步通信。讓我舉個例子。您正在建立一個休假管理系統。每當員工申請請假時,您都需要同時通知時間表模塊,計劃模塊和薪資模塊。這可以通過異步調用來完成。這些模塊僅消耗數據。他們將不會驗證數據。但是,當員工申請請假時,余額驗證必須是同步調用(通常是REST Api調用),因為在沒有余額的情況下員工不得申請請假(當然,要遵循組織的人力資源政策)

這里還有一個例子。想象您是一家新聞采購公司,并且您通過各種輸入機制收集新聞。您的最終用戶是報紙和出版公司。然后,您可以捕獲新聞并發布給客戶。如果您的客戶是體育雜志,那么他們只會消費與體育相關的新聞;或者,如果您的客戶是財經網站,那么他們只會使用與數據相關的財經。您的責任是捕捉世界上正在發生的事情而不會丟失任何事件。由客戶決定他們要消費什么。您還可以創建實例化視圖以供進一步使用。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

 

如圖所示的消息代理最適合用于異步通信。每當需要彈性和容錯應用程序時,Pub-Sub模式就派上用場。消息代理,Apache Kafka,Apache Active MQ,AWS Kinesis和IBM MQ有很多選項。Apache Kafka最受歡迎,以高性能和零數據丟失而著稱。

可擴展性,數據管理和性能

6.分片模式:如果您投資股票市場,這是一種久經考驗的策略,即您不會將所有資金都投入到一只股票中。您將創建股票投資組合并進行投資。通過這種方法,如果一只股票價格下跌,您仍然會讓其他股票賺錢。

不要把所有的雞蛋放在一個籃子里。

分片采用類似的方法。在這種模式下,您將數據劃分為多個分區或碎片。這極大地提高了可伸縮性。這種模式屬于水平可伸縮性,而不是垂直可伸縮性。如果數據存儲在單個數據存儲中會發生什么?與上述示例中的單個股票相同。如果數據存儲出現故障,您的用戶將無法訪問數據,從而造成很多麻煩。超過某個點,您將遇到存儲問題,計算能力,網絡和帶寬問題。如果您要為不同位置的用戶提供服務,則只有一個數據存儲會增加延遲問題。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

 

分片可提高可伸縮性,性能和容錯能力。分片策略有多種方法。該策略與您的用例一起使用。

基于范圍的分片:假設您要存儲客戶數據,則可以考慮根據個人識別碼或郵政編碼范圍進行存儲。此模型的缺點是您的客戶數據可能分布不均

垂直分片:如果要構建電子商務應用程序,則可以將客戶人口統計詳細信息存儲在一個分片中,并將客戶購買交易存儲在另一個分片中。這為您提供了按需擴展的機會。

基于哈希的分片:這是一種廣泛使用的策略。如果您有5個分片來存儲客戶數據。您以客戶唯一ID為例,并應用模5。

現在為您提供一些有趣的數學。

如何計算任意數量的Modulo 5。很簡單。假設數字為23。將該數字除以5。您將得到4.6。現在取4乘以5。得到20。現在得到23–20,得到3。因此,答案為“什么是23 mod 5?” 是3

從長遠來看,基于哈希的分片將面臨挑戰。如果您希望在一年后再添加一個碎片,該怎么辦。您需要更改分片邏輯,并且數據存儲中的容量會亂扔。解決方案是一致的哈希。

數據管理

 

7. Strangler模式: Wikipedia的意思是Strangler是附生植物,其氣生根最終將其生長的樹木勒死。今天,幾乎每個組織都從單片服務過渡到微服務。無論如何,這一旅程都不容易。從舊系統遷移到新系統時,系統地將功能遷移到新系統,而不是大手大腳的方法。如果要將遺留的單片應用程序遷移到云微服務應用程序,此模式將很方便。最終,遷移結束后,用戶將直接與現代應用程序進行交互。在這種模式下,構建并遷移的小型功能(或微服務)最終會殺死主系統。從中查找有關此模式的更多詳細信息Martin Fowler的博客。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

 

數據管理,安全性

8. Saga模式:這是管理分布式系統中數據一致性的最佳模式。在使用Internet和WhatsApp之前,人們曾經親自去親戚和親戚家旅行并發出結婚邀請。這被視為令人敬重。無論如何,撇開這一點,如果婚姻突然取消怎么辦?您不希望那天的親戚和朋友來。最好的方法是您再次前往每個人的住所,告訴他們婚姻已經取消。(不是一個積極的例子。但這就是生活)。這正是Saga模式。關于Saga模式的第一篇論文發表于1987年。

有兩種方法可以實現Sagas模式。事件/編排設計和命令/編排排序邏輯。編排設計非常復雜。讓我們看一下命令/編排排序邏輯。我現在以機票預訂應用程序為例。這是您預訂航班的順序。

  1. 選擇座位(座位服務)
  2. 選擇膳食(膳食服務)
  3. 支付預訂費用(付款服務)
  4. 現在更新可用座位以減少一個座位(預訂服務)
每個軟件架構師和軟件工程師都必須知道的10種設計模式

 

讓我們看一下事件的順序:

  1. 預訂服務會為用戶保存一個可用座位,并要求Booking Saga Orchestrator(BSO)開始預訂座位。
  2. BSO發送一個“待辦事項付款”命令來支付服務,并將其與回復付款成功的消息
  3. BSO向座位服務發送確認座位命令,并以座位確認消息答復
  4. BSO膳食服務發送“預訂膳食”命令,并回復“膳食確認”消息。

假設付款服務失敗。您不想為客戶提供免費座位和免費餐點。現在,BSO發送命令回滾座位預訂和用餐預訂。可以在此處找到Saga模式的非常詳細的說明

可用性,彈性

9.節流模式:如果您在美好的一天去過任何著名的印度廟宇,將有5萬至10萬奉獻者。Darshan時間(在上帝面前的時間)僅持續幾秒鐘,但他們在隊列中花費4到8個小時之間的任何時間。寺廟管理通常通過將人群放在帶有一些座位設施的小隔間中來控制人群。Lets說,在“ darshan”之前有20個隔室和一個最后的隊列。一個隔間可容納約200人。隨著時間的流逝,人們從隔間1移到隔間2,依此類推,直到到達最后的隊列。這稱為節流。

對于IT應用程序,大部分時間都是可以預測的,除非出現一些黑天鵝事件。電子商務網站在節日期間或銷售時會增加負載。對于銀行系統,在計入工資期間可能會有更多的負擔。對于時間捕獲系統,在早上,下午和晚上時間將出現峰值負載。處理這些峰值負載的一種方法是自動擴展資源。第二種選擇是限制系統可以處理的事務數量,并開始限制剩余的事務。這樣,就可以滿足SLA,并且系統可以繼續按預期運行。

每個軟件架構師和軟件工程師都必須知道的10種設計模式

節流

可用性,性能

10.靜態內容托管模式:在典型的網站上,不變的內容稱為靜態內容。通常使用html,css和JAVAscript創建。JavaScript不是強制性的,也可以僅使用HTML和CSS(或Sass)。動態網站將具有在Web服務器上運行的邏輯,并且通常會對靜態網站無法提供的數據執行CRUD操作。動態網站取決于服務器端處理,包括服務器端腳本,例如php,JSP或ASP.NET或Node.js。例如,您想在購買前知道產品的價格,想支付電費,想在朋友的時間軸上發布生日快樂,或者甚至很復雜,您想實施一個選擇策略股票。所有這些都需要一個動態的網站。隨著AWS的出現,Azure和google云平臺的靜態托管不需要您自己的服務器即可運行。例如,您可以在Amazon S3上托管靜態網站(簡單存儲服務),而無需分拆新服務器。此外,您可以使用Cloudfront加快網站速度,該服務會將文件存儲在靠近用戶的邊緣位置。

分享到:
標簽:架構
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定