從哪些方面擴充套件你的系統 系統效能擴充套件立方體

2022-05-06 11:24:08 字數 2624 閱讀 1185

在各種不同的領域中,深耕的組織和團隊都不約而同的嘗試、發現和總結軟體架構模式,最後都相似的得出共同的軟體架構特徵,大家都希望系統更健壯、具有適應能力、更好的滿足現代化的需求。

而這些特徵其實背後無疑都指向乙個共同的非常重要的實現原則,擴充套件性!

擴充套件性從不同的角度大致可以分為 功能擴充套件性 和 效能擴充套件性 ,

系統是否能方便靈活的增加新功能,或者新的實現,能讓你的系統更快的響應需求的變化,大神們在實踐中總結出來的各種設計模式基本上都是為了解決這個問題,響應變化;

功能之間松耦合,非強依賴,有一定的容錯和降級能力,元件相互隔離,失敗的擴散控制的元件內部,能夠獨立恢復,保證部分失敗,不會阻斷系統的可用性。

其實回頭想想,計算機,作業系統在這方面設計和抽象的非常有遠見,馮諾依曼對計算機抽象的5個部分,相對都能做到獨立工作、獨立擴充套件、獨立恢復,例如現代化的internet、usb、type-c等都是被相容的裝置,大家都屬於input/output,而在大部分情況下,一些擴充套件的裝置發生故障,整個計算機還是可以繼續工作。

馮諾依曼2023年的**《first draft of a report on the edvac》提出的計算機架構,能夠適應上百年甚至更久,不得不說這是一種偉大的設計!

假如你可能要問,如果cpu壞了呢,計算機還能工作嗎?

你可以試想一下,想象一台更大的計算機,某個cpu組成的計算機可能是整個大型計算機的乙個input或者output呢?

當今,流量紅利爆發,特別是to c的系統,上線後,效能往往會成為公司和開發團隊關注的焦點。

功能方面能不能方便擴充套件,追的上需求的發展,是工程團隊首要考慮的,而上線以後能不能扛得住流量的考驗則是老闆和投資人比較關注的,

那我們來討論一下如何提公升系統的吞吐量,保證sla。

在負載均衡下部署多個系統例項,執行多個程式副本,是擴充套件效能最直接的辦法,《the art of scalability》中文名《架構即未來》一書中談到擴充套件模型,包括x-axis、y-axis、z-axis三個緯度進行擴充套件,提公升系統的吞吐量,而多例項這個方法被稱為是橫向擴充套件,即:x-axis。

這個模型叫做擴充套件立方體(scale cube),比較符合微服務盛行的當下,讓擴充套件更具有針對性。

x-axis scaling

由多個程式副本同時執行,組成乙個集群,由負載均衡統一排程分配流量,例如,乙個系統由n個副本同時工作,那每個副本處理的流量為 1/n,在擴充套件性方面,這是乙個簡單,有效的方案,我們通常稱為橫向擴充套件,或者水平擴充套件。

簡單的辦法,往往會損失一些細節和靈活性,總結下來有三個缺點,

無法區域性擴充套件,每個系統副本有相同的要求,這就需要我們投入更多的資源,每個系統需要配比相同的配置,包括伺服器和資料庫等;

無法區域性恢復、問題修復代價比較大,需要更新所有系統副本,會造成一定機率的服務不可用;

系統的複雜性沒有解決,其實就是康威定律,隨著系統不斷的開發,系統的複雜性也會不斷的公升高,增加cicd的難度,和部署週期。

y-axis scaling

水平擴充套件是整個系統多副本執行,平分流量從而提公升整體效能,而y-axis擴充套件是對這個服務進行拆分,讓乙個大的系統裂變為多個小服務,獨立部署,讓擴充套件更具針對性。

拆分的指導思想是把職責相關的功能拆分為乙個服務,類似單一職責原則,一般有基於動詞和基於名詞倆種拆分方法,例如上傳檔案服務是基於動詞拆分出來的服務,使用者管理則是基於名詞的拆分。

這樣一來,水平擴充套件的幾個問題都被解決了,結合x-axis,可以區域性擴充套件,區域性更新。

其實,這就是微服務。

z-axis scaling

上面倆個都是基於服務級別的擴充套件,它們可能面臨同乙個問題,卻無法通過以上倆種擴充套件方案去解決,是服務所依賴的資料庫的效能問題。

所以,z-axis就派上用場了,資料分割槽。

如果說y-axis是對服務的職責單一化,那z-axis是對資料庫的職責單一化,部署多個資料庫服務,在業務層,也就是服務層,對這些資料庫進行邏輯分類使用,例如,vip使用者和普通使用者使用不同的資料庫,不同地區的使用者資料儲存在不同的資料庫等等,分散儲存,以減輕資料庫的壓力。

如果需要查詢或者排序的話,就需要訪問所有資料庫,得到聚合結果,然後在服務層做合併處理。

注意,資料拆分會增加系統的複雜度,事務和資料遷移或從新分配都是比較棘手的問題,當然,我們可以借助一些成熟的方案甚至資料庫系統來化解,但要求我們深諳資料拆分之道。

其實,這就是分庫分表,或者分布式資料庫的應用場景。

擴充套件立方體,給我們擴充套件系統提供了思路,需要我們根據自己系統的實際架構和壓力情況來衡量並制定合適的擴充套件方案,並不是x、y、z都要用上。

再者,這個模型也是巨集觀指導,影響乙個系統的效能包括cpu、記憶體、io(網路、磁碟)等諸多因素,需要我們像個老中醫一樣,通過望聞問切等多種手段,定位系統效能瓶頸,然後採取有效的擴充套件措施,例如,如果乙個系統是網路io密集型,瓶頸在於基礎設施網路,這種情況下,你如何擴充套件也起不到效果,可能需要

的是公升級硬體、提高網路利用率、壓縮input、output、採用非同步流傳輸、縮短呼叫鏈、改變互動方式(響應式、非同步、非阻塞)等措施,才能真正解決痛點。

但如果是乙個大型系統,面臨效能問題,按照scale cube模型,整體擴充套件思路總結一下大概是,先垂直拆分、後水平擴充套件,包括服務拆分,資料庫拆分,拆分原則是職責單一,用動詞或名詞拆分法,然後對服務和資料庫根據壓力情況,適當的水平擴充套件。

Linux效能優化可以從哪些方面入手?

linux效能優化一直都是老生常談的話題,相信大家對於優化的措施多多少少都有一定的了解。但是如何進行linux效能調優,又從哪些方面入手,這背後的深層原理是什麼,為什麼要這麼操作,卻很少有人講得清楚。下面本文詳細為大家分析一下影響linux效能的三大因素系統硬體 作業系統和作業系統,大家可以從這些思...

ERP系統應用效果表現在哪些方面

erp應用效果主要體現在以下幾個方面 1 系統執行整合化。這是erp應用在技術解決方案方面最基本的表現。erp系統是對企業物流 資金流 資訊流進行一體化管理的軟體系統,其核心管理思想就是實現對 鏈 supply chain 的管理。軟體的應用將跨越多個部門甚至多個企業,實現整合化應用,建立企業決策完...

CRM客戶管理系統的重要性體現在哪些方面?

選擇越來越多的企業都在選擇crm客戶管理系統,為的就是幫助企業解決一下客戶管理問題,但是對於不了解產品的人來說,客戶管理系統的很多重要性就不能完全的理解,今天,我們就來看看系統的重要性。1 增強移動性,管理首要客戶 2 整合營銷和銷售兩大體系 我們打造的crm解決方案能夠將銷售體系和營銷體系做到完美...