主頁 > 軟體設計 > 架構基本概念和架構本質

架構基本概念和架構本質

2020-09-12 00:05:54 軟體設計

CSDN看到一篇介紹架構設計的博客,內容提綱挈領,內容豐富,依據原文整理,加上自己的理解和總結, 推薦給大家,點擊原文可以查看出處,

原文鏈接:https://blog.csdn.net/hguisu/article/details/78258430

什么是架構和架構本質

在軟體行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解,此君說的架構和彼君理解的架構未必是一回事,因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的基礎,并用來溝通的手段,如果對架構概念理解不一樣,那溝通起來自然不順暢,

Linux有架構,MySQL有架構,JVM也有架構,使用Java開發、MySQL存盤、跑在Linux上的業務系統也有架構,應該關注哪一個?

想要清楚以上問題需要梳理幾個有關系又相似的概念:系統與子系統、模塊與組建、框架與架構:

區分系統、模塊、組件、框架和架構

S君: 區分系統、模塊、組件、框架和架構

  • 系統(system)和子系統:有關聯的個體,根據某種規則運行,共同完成獨特的功能,子系統:系統的組成部分,

  • 模塊(module)和組件(component):模塊和組件都是系統的組成部分,只是從不同角度拆分系統而已, 從邏輯角度拆分得到的是模塊,從物理角度拆分得到的是組件, 模塊是為了實作職責分離, 組件是為了實作復用,

  • 框架:為了實作某個業界標準或完成特定基本任務的軟體組件規范,按照規范提供所要求基礎功能的軟體產品,

  • 架構:頂層設計

系統與子系統

系統:泛指由一群有關聯的個體組成,根據某種規則運作,能完成個別元件不能獨立完成的作業能力的群體,

子系統:也是由一群關聯的個體組成的系統,多半是在更大的系統中的一部分,

模塊與組件

都是系統的組成部分,從不同角度拆分系統而已,模塊是邏輯單元,組件是物理單元,

模塊就是從邏輯上將系統分解, 即分而治之, 將復雜問題簡單化,模塊的粒度可大可小, 可以是系統,幾個子系統、某個服務,函式, 類,方法、 功能塊等等,

組件可以包括應用服務、資料庫、網路、物理機、還可以包括MQ、容器、Nginx等技術組件,

框架與架構

框架是組件實作的規范,例如:MVC、MVP、MVVM等,是提供基礎功能的產品,例如開源框架:Ruby on Rails、Spring、Laravel、Django等,這是可以拿來直接使用或者在此基礎上二次開發,

框架是規范,架構是結構,

架構重新定義

S君:架構是什么?架構師解決什么問題?

  • 架構是經過系統性地思考1, 權衡利弊之后在現有資源約束下的最合理決策, 最終明確的系統骨架2,包括子系統, 模塊, 組件. 以及他們之間協作關系3, 約束規范, 指導原則4,并由它來指導團隊中的每個人思想層面上的一致,

  • 架構師能力要求:理解業務,全域把控,選擇合適技術,解決關鍵問題、指導研發落地實施,

我在這重新定義架構:軟體架構指軟體系統的頂層結構,

架構是經過系統性地思考, 權衡利弊之后在現有資源約束下的最合理決策, 最終明確的系統骨架,包括子系統, 模塊, 組件. 以及他們之間協作關系, 約束規范, 指導原則,并由它來指導團隊中的每個人思想層面上的一致,涉及四方面:

  • 系統性思考的合理決策:比如技術選型、解決方案等,

  • 明確的系統骨架:明確系統有哪些部分組成,

  • 系統協作關系:各個組成部分如何協作來實作業務請求,

  • 約束規范和指導原則:保證系統有序,高效、穩定運行,

因此架構師具備能力:理解業務,全域把控,選擇合適技術,解決關鍵問題、指導研發落地實施,

架構的本質就是對系統進行有序化地重構以致符合當前業務的發展,并可以快速擴展,

那什么樣的系統要考慮做架構設計 技術不會平白無故的出和自驅動發展起來,而架構的發展和需求是基于業務的驅動,

架構設計完全是為了業務:

  1. 需求相對復雜,
  2. 非功能性需求在整個系統占據重要位置,
  3. 系統生命周期長,有擴展性需求,
  4. 系統基于組件或者集成的需要,
  5. 業務流程再造的需要,

架構分層和分類

S君:

業務架構是戰略,應用架構是戰術,技術架構是裝備

  • 業務架構(俯視架構):包括業務規劃,業務模塊、業務流程,對整個系統的業務進行拆分,對領域模型進行設計,把現實的業務轉化成抽象物件,

  • 應用架構(剖面架構): 承接業務架構和技術架構,應用架構的本質是通過系統拆分,平衡業務和技術復雜性,保證系統形散神不散,
    應用作為獨立可部署的單元,為系統劃分了明確的邊界,深刻影響系統功能組織、代碼開發、部署和運維等各方面,應用架構定義系統有哪些應用、以及應用之間如何分工和合作,應用的分偏向于業務,反映業務架構,應用的合偏向于技術,影響技術架構,

  • 技術架構:確定組成應用系統的實際運行組件(技術選型),這些運行組件之間的關系,以及部署到硬體的策略,
    技術架構主要考慮系統的非功能性特征,對系統的高可用、高性能、擴展、安全、伸縮性、簡潔等做系統級的把握

  • 三者關系:
    業務架構是生產力,應用架構是生產關系,技術架構是生產工具,業務架構決定應用架構,應用架構需要適配業務架構,并隨著業務架構不斷進化,同時應用架構依托技術架構最終落地

補充材料:節選《軟體架構設計》 關注微信公眾號回復【架構設計】獲取相關書籍

  • 架構五視圖:

  • 邏輯架構:邏輯架構關注功能,不僅包括用戶可見的功能,還包括為實作用戶功能而必須提供的“輔助功能模塊”,

  • 開發架構:開發架構關注程式包,不僅包括要撰寫的源程式,還包括可以直接使用的第三方SDK 和現場框架、類別庫,以及開發的系統將運行于其上的系統軟體或中間件,關注編譯時刻的靜態依賴關系,

  • 運行架構:運行架構關注行程、執行緒、物件等運行時概念,以及相關的并發,同步,通信等問題,運行架構關注運行期間各個單元的互動,

  • 物理架構:物理架構關注“目標程式及其依賴的運行庫和系統軟體”最終如何安裝或部署到物理機器,以及如何部署機器和網路來配合軟體系統的可靠性,可伸縮性等要求,

  • 資料架構:資料架構關注持久化資料的存盤方案,不僅包括物體及物體關系的存盤格式、還包括資料傳遞,資料復制,資料同步等策略,

架構分類可細分為業務架構、應用架構、技術架構, 代碼架構, 部署架構、資料架構

image

業務架構是戰略,應用架構是戰術,技術架構是裝備,其中應用架構承上啟下,一方面承接業務架構的落地,另一方面影響技術選型,

熟悉業務,形成業務架構,根據業務架構,做出相應的應用架構,最后技術架構落地實施,

如何針對當前需求,選擇合適的應用架構,如何面向未來,保證架構平滑過渡,這個是軟體開發者,特別是架構師,都需要深入思考的問題,

業務架構(俯視架構):

包括業務規劃,業務模塊、業務流程,對整個系統的業務進行拆分,對領域模型進行設計,把現實的業務轉化成抽象物件,

沒有最優的架構,只有最合適的架構,一切系統設計原則都要以解決業務問題為最終目標,脫離實際業務的技術情懷架構往往會給系統帶入大坑,任何不基于業務做異想天開的架構都是耍流氓,

所有問題的前提要搞清楚我們今天面臨的業務量有多大,增長走勢是什么樣,而且解決高并發的程序,一定是一個循序漸進逐步的程序,合理的架構能夠提前預見業務發展1~2年為宜,這樣可以付出較為合理的代價換來真正達到技術引領業務成長的效果,

看看京東業務架構(網上分享圖):

image

應用架構(剖面架構,也叫邏輯架構圖):

硬體到應用的抽象,包括抽象層和編程介面,應用架構和業務架構是相輔相成的關系,業務架構的每一部分都有應用架構,

類似:

image

應用架構:應用作為獨立可部署的單元,為系統劃分了明確的邊界,深刻影響系統功能組織、代碼開發、部署和運維等各方面. 應用架構定義系統有哪些應用、以及應用之間如何分工和合作,這里所謂應用就是各個邏輯模塊或者子系統,

應用架構圖關鍵有2點:

①. 職責劃分: 明確應用(各個邏輯模塊或者子系統)邊界

  • 邏輯分層

  • 子系統、模塊定義

  • 關鍵類

②. 職責之間的協作:

  • 介面協議:應用對外輸出的介面,
  • 協作關系:應用之間的呼叫關系,

應用分層有兩種方式:

一種是水平分(橫向),按照功能處理順序劃分應用,比如把系統分為web前端/中間服務/后臺任務,這是面向業務深度的劃分,

另一種是垂直分(縱向),按照不同的業務型別劃分應用,比如進銷存系統可以劃分為三個獨立的應用,這是面向業務廣度的劃分,

應用的反映應用之間如何協作,共同完成復雜的業務case,主要體現在應用之間的通訊機制和資料格式,通訊機制可以是同步呼叫/異步訊息/共享DB訪問等,資料格式可以是文本/XML/JSON/二進制等,

應用的分偏向于業務,反映業務架構,應用的合偏向于技術,影響技術架構,分降低了業務復雜度,系統更有序,合增加了技術復雜度,系統更無序,

應用架構的本質是通過系統拆分,平衡業務和技術復雜性,保證系統形散神不散,

系統采用什么樣的應用架構,受業務復雜性影響,包括企業發展階段和業務特點;同時受技術復雜性影響,包括IT技術發展階段和內部技術人員水平,業務復雜性(包括業務量大)必然帶來技術復雜性,應用架構目標是解決業務復雜性的同時,避免技術太復雜,確保業務架構落地,

資料架構

資料架構指導資料庫的設計. 不僅僅要考慮開發中涉及到的資料庫,物體模型,也要考慮物理架構中資料存盤的設計,

image

代碼架構(也叫開發架構):

子系統代碼架構主要為開發人員提供切實可行的指導,如果代碼架構設計不足,就會造成影響全域的架構設計,比如公司內不同的開發團隊使用不同的技術堆疊或者組件,結果公司整體架構設計就會失控,

代碼架構主要定義:

①. 代碼單元:

  • 配置設計

  • 框架、類別庫,

②. 代碼單元組織:

  • 編碼規范,編碼的慣例,

  • 專案模塊劃分

  • 頂層檔案結構設計,比如mvc設計,

  • 依賴關系

image

技術架構

技術架構:確定組成應用系統的實際運行組件(lvs,nginx,tomcat,php-fpm等),這些運行組件之間的關系,以及部署到硬體的策略,

技術架構主要考慮系統的非功能性特征,對系統的高可用、高性能、擴展、安全、伸縮性、簡潔等做系統級的把握,

系統架構的設計要求架構師具備軟體和硬體的功能和性能的過硬知識,這也是架構設計作業中最為困難的作業,

部署拓撲架構圖(實際物理架構圖):

拓撲架構,包括架構部署了幾個節點,節點之間的關系,服務器的高可用,網路介面和協議等,決定了應用如何運行,運行的性能,可維護性,可擴展性,是所有架構的基礎,這個圖主要是運維工程師主要關注的物件,

image

物理架構主要考慮硬體選擇和拓撲結構,軟體到硬體的映射,軟硬體的相互影響,

image

架構級別

S君:

  • 戰略設計即業務架構設計
  • 戰術設計即應用架構設計
  • 戰術實施即技術架構實施

我們使用金字塔的架構級別來說明,上層級別包含下層:

image

  • 系統級:即整個系統內各部分的關系以及如何治理:分層
  • 應用級:即單個應用的整體架構,及其與系統內單個應用的關系等,
  • 模塊級:即應用內部的模塊架構,如代碼的模塊化、資料和狀態的管理等,
  • 代碼級:即從代碼級別保障架構實施,

戰略設計與戰術設計

基于架構金字塔,我們有了系統架構的戰略設計與戰術設計的完美結合:

  • 戰略設計:業務架構用于指導架構師如何進行系統架構設計,
  • 戰術設計:應用架構要根據業務架構來設計,
  • 戰術實施:應用架構確定以后,就是技術選型,

image

應用架構演進

S君

應用架構演化程序:單體應用-> 服務化 -> 微服務

業務架構是生產力,應用架構是生產關系,技術架構是生產工具,業務架構決定應用架構,應用架構需要適配業務架構,并隨著業務架構不斷進化,同時應用架構依托技術架構最終落地,

架構演進路程:單體應用→分布式應用服務化→微服務

單體應用

企業一開始業務比較簡單,只應用某個簡單場景,應用服務支持資料增刪改查和簡單的邏輯即可,單體應用可以滿足要求,

典型的三級架構,前端(Web/手機端)+中間業務邏輯層+資料庫層,這是一種典型的Java Spring MVC或者Python Django框架的應用,其架構圖如下所示:

image

針對單體應用,非功能性需求的做法:

  • 性能需求:使用快取改善性能

  • 并發需求:使用集群改善并發

  • 讀寫分離:資料庫地讀寫分離

  • 使用反向代理和cdn加速、

  • 使用分布式檔案和分布式資料庫

單體架構的應用比較容易部署、測驗, 在專案的初期,單體應用可以很好地運行,然而,隨著需求的不斷增加, 越來越多的人加入開發團隊,代碼庫也在飛速地膨脹,慢慢地,單體應用變得越來越臃腫,可維護性、靈活性逐漸降低,維護成本越來越高,下面是單體架構應用的一些缺點:

  • 復雜性高:以一個百萬行級別的單體應用為例,整個專案包含的模塊非常多、模塊的邊界模糊、 依賴關系不清晰、 代碼質量參差不齊、 混亂地堆砌在一起,可想而知整個專案非常復雜,每次修改代碼都心驚膽戰, 甚至添加一個簡單的功能, 或者修改一個Bug都會帶來隱含的缺陷,

  • 技術債務:隨著時間推移、需求變更和人員更迭,會逐漸形成應用程式的技術債務, 并且越積 越多,“ 不壞不修”, 這在軟體開發中非常常見, 在單體應用中這種思想更甚,已使用的系統設計或代碼難以被修改,因為應用程式中的其他模塊可能會以意料之外的方式使用它,

  • 部署頻率低:隨著代碼的增多,構建和部署的時間也會增加,而在單體應用中, 每次功能的變更或缺陷的修復都會導致需要重新部署整個應用,全量部署的方式耗時長、 影響范圍大、 風險高, 這使得單體應用專案上線部署的頻率較低,而部署頻率低又導致兩次發布之間會有大量的功能變更和缺陷修復,出錯率比較高,

  • 可靠性差:某個應用Bug,例如死回圈、記憶體溢位等, 可能會導致整個應用的崩潰,
    擴展能力受限:單體應用只能作為一個整體進行擴展,無法根據業務模塊的需要進行伸縮,例如,應用中有的模塊是計算密集型的,它需要強勁的CPU;有的模塊則是IO密集型的,需要更大的記憶體,由于這些模塊部署在一起,不得不在硬體的選擇上做出妥協,

  • 阻礙技術創新:單體應用往往使用統一的技術平臺或方案解決所有的問題, 團隊中的每個成員 都必須使用相同的開發語言和框架,要想引入新框架或新技術平臺會非常困難,

分布式

隨著業務深入,業務要求的產品功能越來越多,每個業務模塊邏輯也都變得更加復雜,業務的深度和廣度都增加,使得單體應用變得越來越臃腫,可維護性、靈活性逐漸降低,增加新功能開發周期越來越長,維護成本越來越高,

這時需要對系統按照業務功能模塊拆分,將各個模塊服務化,變成一個分布式系統,業務模塊分別部署在不同的服務器上,各個業務模塊之間通過介面進行資料互動,

該架構相對于單體架構來說,這種架構提供了負載均衡的能力,大大提高了系統負載能力,解決了網站高并發的需求,另外還有以下特點:

  • 降低了耦合度:把模塊拆分,使用介面通信,降低模塊之間的耦合度,
  • 責任清晰:把專案拆分成若干個子專案,不同的團隊負責不同的子專案,
  • 擴展方便:增加功能時只需要再增加一個子專案,呼叫其他系統的介面就可以,
  • 部署方便:可以靈活的進行分布式部署,
  • 提高代碼的復用性:比如Service層,如果不采用分布式rest服務方式架構就會在手機Wap商城,微信商城,PC,Android,iOS每個端都要寫一個Service層邏輯,開發量大,難以維護一起升級,這時候就可以采用分布式rest服務方式,公用一個service層,

缺點:系統之間的互動要使用遠程通信,介面開發增大作業量,但是利大于弊,

微服務

緊接著業務模式越來越復雜,訂單、商品、庫存、價格等各個模塊都很深入,比如價格區分會員等級,訪問渠道(app還是PC),銷售方式(團購還是普通)等,還有大量的價格促銷,這些規則很復雜,容易相互沖突,需要把分散到各個業務的價格邏輯進行統一管理,以基礎價格服務的方式透明地提供給上層應用,變成一個微內核的服務化架構,即微服務,

微服務的特點:

  • 易于開發和維護:一個微服務只會關注一個特定的業務功能,所以它業務清晰、代碼量較少,開發和維護單個微服務相對簡單,而整個應用是由若干個微服務構建而成的,所以整個應用也會被維持在一個可控狀態,

  • 單個微服務啟動較快:單個微服務代碼量較少, 所以啟動會比較快,

  • 區域修改容易部署:單體應用只要有修改,就得重新部署整個應用,微服務解決了這樣的問題,一般來說,對某個微服務進行修改,只需要重新部署這個服務即可,

  • 技術堆疊不受限:在微服務架構中,可以結合專案業務及團隊的特點,合理地選擇技術堆疊,例如某些服務可使用關系型資料庫MySQL;某些微服務有圖形計算的需求,可以使用Neo4j;甚至可根據需要,部分微服務使用Java開發,部分微服務使用Node.js開發,

微服務雖然有很多吸引人的地方,但它并不是免費的午餐,使用它是有代價的,使用微服務架構面臨的挑戰,

  • 運維要求較高:更多的服務意味著更多的運維投入,在單體架構中,只需要保證一個應用的正常運行,而在微服務中,需要保證幾十甚至幾百個服務服務的正常運行與協作,這給運維帶來了很大的挑戰,

  • 分布式固有的復雜性:使用微服務構建的是分布式系統,對于一個分布式系統,系統容錯、網路延遲、分布式事務等都會帶來巨大的挑戰,

  • 介面調整成本高:微服務之間通過介面進行通信,如果修改某一個微服務的API,可能所有使用了該介面的微服務都需要做調整,

  • 重復勞動:很多服務可能都會使用到相同的功能,而這個功能并沒有達到分解為一個微服務的程度,這個時候,可能各個服務都會開發這一功能,從而導致代碼重復,盡管可以使用共享庫來解決這個問題(例如可以將這個功能封裝成公共組件,需要該功能的微服務參考該組件),但共享庫在多語言環境下就不一定行得通了,

衡量架構的合理性

架構為業務服務,沒有最優的架構,只有最合適的架構,架構始終以高效,穩定,安全為目標來衡量其合理性,

合理的架構設計:

業務需求角度

  • 能解決當下業務需求和問題

  • 高效完成業務需求: 能以優雅且可復用的方式解決當下所有業務問題

  • 前瞻性設計: 能在未來一段時間都能以第2種方式滿足業務,從而不會每次當業務進行演變時,導致架構翻天覆地的變化,

非業務需求角度

①. 穩定性指標:

高可用:要盡可能的提高軟體的可用性,我想每個操作人都不愿意看到自己的作業無法正常進行,黑盒白盒測驗、單元測驗、自動化測驗、故障注入測驗、提高測驗覆寫率等方式來一步一步推進,

②. 高效指標:

檔案化:不管是整體還是部分的整個生命周期內都必須做好檔案化,變動的來源包括但不限于BUG,需求,

可擴展:軟體的設計秉承著低耦合的理念去做,注意在合理的地方抽象,方便功能更改、新增和運用技術的迭代,并且支持在適時對架構做出重構,

高復用:為了避免重復勞動,為了降低成本,我們希望能夠重用之前的代碼、之前的設計,這點對于架構環境的依賴是最大的,

③. 安全指標

安全:組織的運作程序中產生的資料都是具有商業價值的,保證資料的安全也是刻不容緩的一部分,以免出現XX門之類丑聞,加密、https等為普遍手段

常見架構誤區

S君:

架構設計需要考慮功能需求和非功能需求,要根據現狀又要有一定的前瞻性,也講究方法又要講究落地,要循序漸進,不斷演化

  • 低開高走落不到實處
  • 遺漏關鍵性約束與非功能需求
  • 為虛無的未來買單而過度設計
  • 過早做出關鍵性決策
  • 客戶說啥就是啥成為傳話筒
  • 埋頭干活兒缺乏前瞻性
  • 架構設計還要考慮系統可測性
  • 架構設計不要企圖一步到位

常見誤區:

  • 誤區1——架構專門由架構師來做,業務開發人員無需關注,架構的再好,最侄訓是需要代碼來落地,并且組織越大這個落地的難度越大,不單單是系統架構,每個解決方案每個專案也由自己的架構,如分層、設計模式等,如果每一塊磚瓦不夠堅固,那么整個系統還是會由崩塌的風險,所謂“千里之堤,潰于蟻穴”,

  • 誤區2——架構師確定了架構藍圖之后任務就結束了,架構不是“空中樓閣”,最侄訓是要落地的,但是架構師完全不去深入到第一線怎么知道“地”在哪?怎么才能落的穩穩當當,

  • 誤區3——不做出完美的架構設計不開工,世上沒有最好架構,只有最合適的架構,不要企圖一步到位,我們需要的不是一下子造出一輛汽車,而是從單輪車→自行車→摩托車,最后再到汽車,想象一下2年后才能造出的產品,當初市場還存在嗎?

  • 誤區4—— 為虛無的未來埋單而過度設計,在創業公司初期,業務場景和需求邊界很難把握,產品需要快速迭代和變現,需求頻繁更新,這個時候需要的是快速實作,不要過多考慮未來的擴展,說不定功能做完,效果不好就無用了,如果業務模式和應用場景邊界都已經比較清晰,是應該適當的考慮未來的擴展性設計,

  • 誤區5——一味追隨大公司的解決方案:由于大公司巨大成功的光環效應,再加上從大公司挖來的技術高手的影響,網站在討論架構決策時,最有說服力的一句話就成了“淘寶就是這么搞的”或者“騰訊 就是這么搞的”,大公司的經驗和成功模式固然重要,值得學習借鑒,但如果因此而變得盲從,就失去了堅持自我的勇氣,在架構演化的道路上遲早會迷路,

  • 誤區6——為了技術而技術:技術是為業務而存在的,除此毫無意義,在技術選型和架構設計中,脫離網站業務發展的實際,一味追求時髦的新技術,可能會將技術發展引入崎嶇小道,架構之路越走越難,考慮實作成本、時間、人員等各方面都要綜合考慮,理想與現實需要折中,

架構知識體系

架構演進

  • 初始階段:LAMP,部署在一臺服務器
  • 應用服務器和資料服務器分離
  • 使用快取改善性能
  • 使用集群改善并發
  • 資料庫地讀寫分離
  • 使用反向代理和cdn加速
  • 使用分布式檔案和分布式資料庫
  • 業務拆分
  • 分布式服務

架構模式

分層:橫向分層:應用層,服務層,資料層

分割:縱向分割:拆分功能和服務

分布式

  • 分布式應用和服務
  • 分布式靜態資源
  • 分布式資料和存盤
  • 分布式計算

集群:提高并發和可用性

快取:優化系統性能

  • cdn
  • 方向代理訪問資源
  • 本地快取
  • 分布式快取

異步:降低系統的耦合性

  • 提供系統的可用性
  • 加快回應速度

冗余:冷備和熱備,保證系統的可用性

自動化:發布,測驗,部署,監控,報警,失效轉移,故障恢復

安全:

架構核心要素

高性能:網站的靈魂

  • 性能測驗
  • 前端優化
  • 應用優化
  • 資料庫優化

可用性:保證服務器不宕機,一般通過冗余部署備份服務器來完成

  • 負載均衡
  • 資料備份
  • 自動發布
  • 灰度發布
  • 監控報警

伸縮性:建集群,是否快速應對大規模增長的流量,容易添加新的機器

  • 集群
  • 負載均衡
  • 快取負載均衡(冷熱)

可擴展性:主要關注功能需求,應對業務的擴展,快速回應業務的變化,是否做法開閉原則,系統耦合依賴

  • 分布式訊息
  • 服務化

安全性:網站的各種攻擊,各種漏洞是否堵住,架構是否可以做到限流作用,防止ddos攻擊,

  • xss攻擊
  • sql注入
  • csr攻擊
  • web防火墻漏洞
  • 安全漏洞
  • ssl

架構書籍推薦

  1. 《大型網站技術架構:核心原理與案例分析》

這是比較早,比較系統介紹大型網站技術架構的書,通俗易懂又充滿智慧,即便你之前完全沒接觸過網站開發,通讀前幾章,也能快速獲取到常見的網站技術架構及其應用場景,非常贊,

  1. 《億級流量網站架構核心技術》

相比《大型網站技術架構》的高屋建瓴,開濤的這本《億級流量網站架構核心技術》則落實到細節,網站架構中常見的各種技術,比如快取、佇列、執行緒池、代理……,統統都講到了,而且配有核心代碼,甚至連 Nginx 的配置都有!

如果你想在實作大流量網站時找參考技術和代碼,這本書最合適啦,

  1. 《架構即未來》

這是一本“神書”啦,超越具體技術層面,著重剖析架構問題的根源,幫助我們弄清楚應該以何種方式管理、領導、組織和配置團隊,

  1. 《分布式服務架構:原理、設計與實戰》

這本書全面介紹了分布式服務架構的原理與設計,并結合作者在實施微服務架構程序中的實踐經驗,總結了保障線上服務健康、可靠的最佳方案,是一本架構級、實戰型的重量級著作,

  1. 《聊聊架構》

這算是架構方面的一本神書了,從架構的原初談起,從業務的拆分談起,談到架構的目的,架構師的角色,架構師如何將架構落地……強烈推薦,

不過,對于沒有架構實踐經驗的小伙伴來講,可能會覺得這本書比較虛,概念多,實戰少,但如果你有過一兩個專案的架構經驗,就會深深認同書中追本溯源探討的架構理念,

  1. 《軟體架構師的12項修煉》

大多數時候所謂的“技術之玻璃天花板”其實只是缺乏軟技能而已,這些技能可以學到,缺乏的知識可以通過決定改變的努力來彌補,

參考:

  • 在首席架構師手里,應用架構如此設計

什么是架構設計?架構設計看這篇文章就夠了

Redis為什么這么快?

重磅:解讀2020年最新JVM生態報告

BIO,NIO,AIO 總結

JDK8的新特性,你知道多少?

回復“資料”,免費獲取 一份獨家嘔心整理的技術資料! image

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/8477.html

標籤:架構設計

上一篇:Spring Boot的面試題

下一篇:springboot windows10風格 activiti 整合專案框架原始碼 shiro 安全框架 druid 資料庫連接池

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more