九 軟件架構設計7

這是我參與8月更文挑戰的第10天,活動詳情查看:8月更文挑戰java

七 軟件產品線

7.1 概念

軟件產品線是一個產品集合,這些產品共享一個公共的、可管理的特徵集,這個特徵集能知足特定領域的特定需求。軟件產品線是-個十分適合專業的開發組織的軟件開發方法,能有效的提升軟件生產率和質量,縮短開發時間,下降總開發成本。程序員

核心資源:包括全部產品所共用的軟件架構,通用的構件、文檔等。算法

產品集合:產品線中的各類產品。數據庫

軟件複用是將己有軟件的各類有關知識用於創建新的軟件,以縮減軟件開發和維護的花費。軟件 複用是提升軟件生產力和質量的- -種重要技術。早起的軟件複用主要是代碼級複用,被複用的知識專 指程序,後來擴大到包括領域知識、開發經驗、設計決定、體系結構、需求、設計、代碼和文檔等一 切有關方面。編程

7.2 過程模型

7.2.1 雙生命週期模型

領域工程:領域分析-一領域設計一 一領域實現 (相似於DSSA)。
應用工程:需求分析(劃分出領域公共的需求和獨特的需求)--系統設計--系統實現(用領 域可複用構件實現公共需求,用定製開發服務實現獨特需求)。瀏覽器

應用工程會將系統獨特的需求反饋給領域工程,由領域工程來肯定該需求是不是大部分產品共有 的需求,創建成可複用的構件,歸於核心資源中,領域工程和應用工程間是一個循環的過程,不分先 後。緩存

image.png

7.2.2 三生命週期模型

除了已有的領域工程、應用工程外,還添加了企業工程(針對企業資源的生命線)和資源管理(雙向交互,便於管理核心資源),另外,還對領域工程和應用工程的實現步驟都增長了第一步(與市場相關)。安全

image.png

7.3 創建方式

企業要創建軟件產品線,要創建兩個小組,第一-組是 核心資源小組,第二組是產品應用小組。建 立產品線有兩個依據,便是基於現有產品仍是全新產品( 企業進入到一個全新的領域),採用演化方 式仍是革命方式(按部就班仍是直接所有完成),能夠分爲四種創建方式:服務器

image.png
將現有產品演化爲產品線:慢慢演化,總週期和總投資大。
用軟件產品線替代現有產品集:基於現有產品,革命方式,即基於現有需求直接開發出軟件產品線,投資少,可是當需求發生變化時,會形成無用功。markdown

  全新軟件產品線的演化:企業進入到一個全新的領域,已有產品線資源會影響新需求,使投資增大。

  全新軟件產品線的開發:首先開發人員要獲得全部且準確的需求,才能所有開發完,一旦完成產品線的開發,新產品的開發就至關快,下降投資,缺點就是當新產品需求改變大時,核心資源庫不夠,就十分麻煩。

綜上:革命方式比演化方式更節省投資,更省時間,但只適用於需求明確且變更不大,否則風險 很大。

7.3.1 成功因素

下列四個方面決定企業創建產品線是否成功:
對該領域具有長期和深厚的經驗; -一個用於構件產品的好的核心資源庫;好的產品線架構;好的 管理(軟件資源、人員組織、過程)支持。

八 中間件技術

中間件是一種獨立的系統軟件或服務程序,能夠幫助分佈式應用軟件在不一樣的技術之間共享資源。

image.png

8.1 中間件特色

  • 負責客戶機與服務器之間的鏈接和通訊,以及客戶機與應用層之間的高效率通訊機制。
  • 提供應用層不一樣服務之間的互操做機制,以及應用層與數據庫之間的鏈接和控制機制。
  • 提供多層架構的應用開發和運行的平臺,以及應用開發框架,支持模塊化的應用開發。
  • 屏蔽硬件、操做系統、網絡和數據庫的差別。
  • 提供應用的負載均衡和高可用性、安全機制與管理功能,以及交易管理機制,保證交易的一-致性。
  • 提供--組通用的服務去執行不一樣的功能,避免重複的工做和使應用之間能夠協做。

8.2 中間件技術

8.2.1 主要的中間件有五類:

  • 遠程過程調用: RPC, 分佈式應用程序處理方法,客戶進程向服務器進程提出調用請求,客戶端和服務器都有存根,客戶端和服務器直接通訊,是同步的。

  • 對象請求代理: ORB, 兩個對象之間的通訊是經過代理總線來進行的,對象A先將消息發送到ORB,對象B再從ORB中取到數據,因此是個代理模式,是異步的,這種模式下客戶和服務器之間互不相關,都是經過ORB來通訊。

  • 遠程方法調用: RMI, 也有服務器和客戶端,服務器建立一系列遠程對象的方法,由客戶端來遠.程調用這些方法。

  • 面向消息的中間件: MON,利用消息通訊來完成與應用無關的操做,用於擴展通訊手段,消息傳遞與排隊算法。

  • 事務處理監控器:TPM,也稱爲交易中間件,應用普遍,能支持數以萬計的客戶端對服務器的訪問,高效率,高可靠性,支持負載均衡等;介於客戶端與服務器之間,處理失敗返回、負載均衡等中間操做的中間件。

8.2.2 CORBA (公共對象請求代理體系結構)

  OMG組織制訂了0MA(Object Management Architecture,對象管理體系結構)參考模型,該模型描述了OMG規範所遵循的概念化的基礎結構。OMA由對象請求代理ORB、對象服務、公共設施、域接 口和應用接口這幾個部分組成,其核心部分是對象請求代理ORB (Object Request Broker)。

  對象管理組織(OMG)基於CORBA基礎設施定義了四種構件標準。

  1. 實體(Entity) 構件須要長期持久化並主要用於事務性行爲,由容器管理其持久化。
  2. 加工(Process) 構件一樣須要容器管理其持久化,但沒有客戶端可訪問的鍵。
  3. 會話(Session)構件不須要容器管理其持久化,其狀態信息必須由構件自已管理。
  4. 服務(Service) 構件是無狀態的。

  CORBA對象可看做是一個具備對象標識、對象接口及對象實現的抽象實體。之因此稱爲抽象的,是由於並無硬性規定CORBA對象的實現機制一一個CORBA對象的引用又稱可互操做的對象引用(Interoperable Object Reference)。從客戶程序的角度看,IOR 中包含了對象的標識、接口類型及其餘.信息以查找對象實現。

  對象標識(ObjectID)是-一個用於在POA中標識一個CORBA對象的字符串。它既可由程序員指派,也可由對象適配器自動分配,這兩種方式都要求對象標識在建立它的對象適配器中必須具備惟一性。

  POA (便攜式對象適配器)是對象實現與ORB其它組件之間的中介,支持由Object ld標識的對象的名稱空間,它將客戶請求傳送到伺服對象,按需建立子POA,提供管理伺服對象的策略。

  伺服對象(servant) 是指具體程序設計語言的對象或實體,一般存在於- -個服務程序進程之中。客戶程序經過對象引用發出的請求通過ORB擔當中介角色,轉換爲對特定的伺服對象的調用。在一個CORBA對象的生命期中,它可能與多個伺服對象相關聯,於是對該對象的請求可能被髮送到不一樣的伺服對象。

8.3 典型的應用架構-J2EE

8.3.1 分佈式多層應用程序

  • 客戶層(客戶應用或WEB瀏覽器動態網頁)對應客戶機;

  • WEB層(可省略,是WEB瀏覽器)和業務層(業務處理邏輯,包括會話Bean,實體Bean和消息驅動Bean)對應J2EE服務器;

  • 企業信息系統層對應數據存儲服務器。

image.png

8.3.2 JAVA企業應用框架

  • Structs框架:是一個基於J2EE平臺的MVC (模型、視圖、控制器)框架,採用Servelet 和JSP技術實現。M由實現業務邏輯的javaBean構成,C由ActionServlet和Action來實現,V由一組JSP文件構成。

  • Spring框架:經過RMI或Web Servic遠程訪問業務邏輯,容許自由選擇和組裝各部分功能,還提供和其餘軟件集成的接口。Spring 自己是個容器,管理構件的生命週期、構件的組態、依賴注入等,並能夠控制構件在建立時是以原型或單例模式來建立。

  • Hibernate框架:是- - 個對象關係映射框架,提供了java 對象到數據庫表之間的直接映射,它對JDBC進行了很是輕量級的對象封裝,使得java 程序員可使用對象編程思惟來操做數據庫。在Hibernate中,ORM機制的核心是一個XML文件,該文件描述了數據庫模式是怎麼與一組java類綁定在一塊兒的。

image.png

表示層由Structs實現,管理用戶請求;業務層由Spring實現,處理業務邏輯中的業務處理狀況,提供一個控制器的代碼;數據庫層由Hibernate實現,經過面向對象的查詢語言HQL來實現數據的增刪改查。這樣組合能夠搭建一個輕量級的J2EE架構。

8.3.3 重量級與輕量級之爭

  重量級框架佔用資源過多,在開發的過程當中效率很低;大部分時間花在配置、運行的過程上,修改複雜;單元測試也比較麻煩。但在大量運行過程當中會表現出優異的效果,也即開發麻煩,運行性能高。

  輕量級框架提升了開發的速度;當即能夠看到結果;作單元測試很是簡單;大量線程可供參考的開源代碼。開發簡單,但運行性能低。

8.4 典型的應用架構-.NET

.NET框架處於操做系統和.NET應用語言之間,只適用於微軟系統,而J2EE支持跨平臺,任何安裝了JVM的平臺。

image.png

8.4.1 .NET和J2EE之爭

  JVM (將全部JAVA代碼都編譯爲字節碼,由JVM解釋執行)和CLR (.NET核心技術,相似於JVM,生成中間代碼CLR,編譯執行)。

  對多層分佈式應用的支持,兩者都支持多層分佈式應用程序的開發:在表示層的平臺支持上,J2EE客戶端支持多個平臺,.NET 只能在微軟系統上運行,也正是所以,.NET 會對微軟系統上的應用進行優化;在業務層,J2EE 佔優點,由於有許多開源的項目和代碼供參考,開發就變得簡單;在數據層,兩者都支持多種數據庫,都很是優秀。

  • 安全性,因爲JAVA在.NET以後出來,借鑑了.NET優勢,JAVA在運行時動態驗證,.NET 是靜態全面驗證,兩者都很是優秀,不分上下。

  • 應用程序的部署,J2EE的部署相對來講較複雜,針對不一樣的系統要特別佈置。

  • 可移植性,顯然J2EE佔優點,一次開發, 處處運行。

  • 外部支持: J2EE 佔優點,獲得了不少廠家的支持,.NET 只是微軟一家。

九 Web架構設計

9.1 Web技術與演變

9.1.1 Web應用技術分類

  • 從架構來看: MVC, MVP, MVVM, REST, Webservice,微服務。

  • 從緩存來看: MemCache, Redis, Squid.

  • 從併發分流來看:集羣(負載均衡)、CDN。

  • 從數據庫來看:主從庫(主從複製),內存數據庫,反規範化技術,NoSQL,分區(分表)技術,視圖與物化視圖。

  • 從持久化來看: Hibernate, Mybatis。

  • 從分佈存儲來看: Hadoop, FastDFS,區塊鏈。

  • 從數據編碼看: XML,JSON。

  • 從Web應用服務器來看: Apache, WebSphere, Weblogic, Tomcat, JBOSS, IIS。

  • 其它:靜態化,有狀態與無狀態,響應式Web設計。

9.1.2 單臺機器到數據庫與Web服務器分離

image.png

9.1.3 應用服務器集羣

系統演變到這裏,將會出現問題:
用戶的請求由誰來轉發到具體的應用服務器;
用戶若是每次訪問到的服務器不-同樣,那麼如何維護session的一致性。

9.2 負載均衡技術

相關文章
相關標籤/搜索